deepadb 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +763 -721
- package/build/middleware/chipset.d.ts.map +1 -1
- package/build/middleware/chipset.js +1 -0
- package/build/middleware/chipset.js.map +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +10 -2
- package/build/server.js.map +1 -1
- package/build/tools/app-network.d.ts +16 -0
- package/build/tools/app-network.d.ts.map +1 -0
- package/build/tools/app-network.js +144 -0
- package/build/tools/app-network.js.map +1 -0
- package/build/tools/at-commands.d.ts +11 -0
- package/build/tools/at-commands.d.ts.map +1 -1
- package/build/tools/at-commands.js +135 -15
- package/build/tools/at-commands.js.map +1 -1
- package/build/tools/database-inspector.d.ts +22 -0
- package/build/tools/database-inspector.d.ts.map +1 -0
- package/build/tools/database-inspector.js +402 -0
- package/build/tools/database-inspector.js.map +1 -0
- package/build/tools/device-profiles.js +7 -7
- package/build/tools/device-profiles.js.map +1 -1
- package/build/tools/runtime-audit.d.ts +6 -0
- package/build/tools/runtime-audit.d.ts.map +1 -0
- package/build/tools/runtime-audit.js +107 -0
- package/build/tools/runtime-audit.js.map +1 -0
- package/build/tools/wear.d.ts +5 -0
- package/build/tools/wear.d.ts.map +1 -0
- package/build/tools/wear.js +112 -0
- package/build/tools/wear.js.map +1 -0
- package/package.json +50 -50
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chipset.d.ts","sourceRoot":"","sources":["../../src/middleware/chipset.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"chipset.d.ts","sourceRoot":"","sources":["../../src/middleware/chipset.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAyDhD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAuDzE;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAOxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chipset.js","sourceRoot":"","sources":["../../src/middleware/chipset.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chipset.js","sourceRoot":"","sources":["../../src/middleware/chipset.ts"],"names":[],"mappings":"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"}
|
package/build/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA6DhD,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,CAoHhE"}
|
package/build/server.js
CHANGED
|
@@ -25,6 +25,7 @@ import { registerDiagnosticTools } from "./tools/diagnostics.js";
|
|
|
25
25
|
import { registerUiTools } from "./tools/ui.js";
|
|
26
26
|
import { registerBuildTools } from "./tools/build.js";
|
|
27
27
|
import { registerHealthTools } from "./tools/health.js";
|
|
28
|
+
import { registerRuntimeAuditTools } from "./tools/runtime-audit.js";
|
|
28
29
|
import { registerWirelessTools } from "./tools/wireless.js";
|
|
29
30
|
import { registerControlTools } from "./tools/control.js";
|
|
30
31
|
import { registerLogcatWatchTools } from "./tools/logcat-watch.js";
|
|
@@ -57,6 +58,9 @@ import { registerWorkflowMarketTools } from "./tools/workflow-market.js";
|
|
|
57
58
|
import { registerSelinuxAuditTools } from "./tools/selinux-audit.js";
|
|
58
59
|
import { registerThermalPowerTools } from "./tools/thermal-power.js";
|
|
59
60
|
import { registerNetworkDiscoveryTools } from "./tools/network-discovery.js";
|
|
61
|
+
import { registerAppNetworkTools } from "./tools/app-network.js";
|
|
62
|
+
import { registerDatabaseInspectorTools } from "./tools/database-inspector.js";
|
|
63
|
+
import { registerWearTools } from "./tools/wear.js";
|
|
60
64
|
import { registerSensorTools } from "./tools/sensors.js";
|
|
61
65
|
import { registerWirelessFirmwareTools } from "./tools/wireless-firmware.js";
|
|
62
66
|
import { registerInputGestureTools } from "./tools/input-gestures.js";
|
|
@@ -105,7 +109,7 @@ export async function createServer() {
|
|
|
105
109
|
});
|
|
106
110
|
// Build unified tool context
|
|
107
111
|
const ctx = { server, bridge, deviceManager, logger, security, config };
|
|
108
|
-
// Register all tool modules (
|
|
112
|
+
// Register all tool modules (49 modules)
|
|
109
113
|
registerDeviceTools(ctx);
|
|
110
114
|
registerShellTools(ctx);
|
|
111
115
|
registerPackageTools(ctx);
|
|
@@ -115,6 +119,7 @@ export async function createServer() {
|
|
|
115
119
|
registerUiTools(ctx);
|
|
116
120
|
registerBuildTools(ctx);
|
|
117
121
|
registerHealthTools(ctx);
|
|
122
|
+
registerRuntimeAuditTools(ctx);
|
|
118
123
|
registerWirelessTools(ctx);
|
|
119
124
|
registerControlTools(ctx);
|
|
120
125
|
registerLogcatWatchTools(ctx);
|
|
@@ -147,6 +152,9 @@ export async function createServer() {
|
|
|
147
152
|
registerSelinuxAuditTools(ctx);
|
|
148
153
|
registerThermalPowerTools(ctx);
|
|
149
154
|
registerNetworkDiscoveryTools(ctx);
|
|
155
|
+
registerAppNetworkTools(ctx);
|
|
156
|
+
registerDatabaseInspectorTools(ctx);
|
|
157
|
+
registerWearTools(ctx);
|
|
150
158
|
registerSensorTools(ctx);
|
|
151
159
|
registerWirelessFirmwareTools(ctx);
|
|
152
160
|
registerInputGestureTools(ctx);
|
|
@@ -162,7 +170,7 @@ export async function createServer() {
|
|
|
162
170
|
if (sweepResult.evicted > 0 || sweepResult.kept > 0) {
|
|
163
171
|
logger.info(`Result-handle store: ${sweepResult.kept} active, ${sweepResult.evicted} evicted at startup.`);
|
|
164
172
|
}
|
|
165
|
-
logger.info("DeepADB MCP server initialized —
|
|
173
|
+
logger.info("DeepADB MCP server initialized — 49 tool modules, 5 resources, 4 prompts. Ready.");
|
|
166
174
|
return { server, logger, bridge, deviceManager };
|
|
167
175
|
}
|
|
168
176
|
//# sourceMappingURL=server.js.map
|
package/build/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,sCAAsC;AACtC;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,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,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGjF,4BAA4B;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,YAAY,IAAI,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzF,oCAAoC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AASrD,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;IAErE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,IAAI,QAAQ,GAAa,MAAM,CAAC;IAChC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAK,gBAAsC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,QAAQ,GAAG,QAAoB,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,kCAAkC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;gBAC9D,iBAAiB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEpC,oCAAoC;IACpC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,yEAAyE;IACzE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9E,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IACxF,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,6BAA6B;IAC7B,MAAM,GAAG,GAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAErF,yCAAyC;IACzC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,eAAe,CAAC,GAAG,CAAC,CAAC;IACrB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAC9B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAC9B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjC,eAAe,CAAC,GAAG,CAAC,CAAC;IACrB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAChC,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAChC,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACnC,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjC,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACnC,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC7B,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACpC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACnC,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAE/B,qCAAqC;IACrC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,eAAe,CAAC,GAAG,CAAC,CAAC;IAErB,yDAAyD;IACzD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IAEvB,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,WAAW,GAAG,wBAAwB,EAAE,CAAC;IAC/C,IAAI,WAAW,CAAC,OAAO,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,wBAAwB,WAAW,CAAC,IAAI,YAAY,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAEhG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-app network route context.
|
|
3
|
+
*
|
|
4
|
+
* Android routes traffic by UID through ip rules and network-policy state.
|
|
5
|
+
* This module resolves an installed package to its UID, then correlates that
|
|
6
|
+
* UID with the device's routing tables without changing any network state.
|
|
7
|
+
*/
|
|
8
|
+
import { ToolContext } from "../tool-context.js";
|
|
9
|
+
/** Resolve an Android package UID from dumpsys/cmd package output. */
|
|
10
|
+
export declare function parsePackageUid(output: string, packageName?: string): number | null;
|
|
11
|
+
/** Return true when an ip-rule line contains a uidrange covering the UID. */
|
|
12
|
+
export declare function uidMatchesRule(line: string, uid: number): boolean;
|
|
13
|
+
/** Extract safe, deduplicated route-table names from matched ip rules. */
|
|
14
|
+
export declare function extractRouteTables(lines: string[]): string[];
|
|
15
|
+
export declare function registerAppNetworkTools(ctx: ToolContext): void;
|
|
16
|
+
//# sourceMappingURL=app-network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-network.d.ts","sourceRoot":"","sources":["../../src/tools/app-network.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOjD,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUnF;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAOjE;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAO5D;AAkBD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAuF9D"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// Copyright 2026 Jason <fullread@github>
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Per-app network route context.
|
|
5
|
+
*
|
|
6
|
+
* Android routes traffic by UID through ip rules and network-policy state.
|
|
7
|
+
* This module resolves an installed package to its UID, then correlates that
|
|
8
|
+
* UID with the device's routing tables without changing any network state.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { OutputProcessor } from "../middleware/output-processor.js";
|
|
12
|
+
import { shellQuote } from "../middleware/sanitize.js";
|
|
13
|
+
const PACKAGE_NAME_PATTERN = /^[A-Za-z][A-Za-z0-9_]*(?:\.[A-Za-z0-9_]+)+$/;
|
|
14
|
+
const ROUTE_TABLE_PATTERN = /^[A-Za-z0-9_.-]{1,32}$/;
|
|
15
|
+
/** Resolve an Android package UID from dumpsys/cmd package output. */
|
|
16
|
+
export function parsePackageUid(output, packageName) {
|
|
17
|
+
const direct = output.match(/\b(?:userId|uid)=(\d+)\b/);
|
|
18
|
+
if (direct)
|
|
19
|
+
return Number.parseInt(direct[1], 10);
|
|
20
|
+
for (const line of output.split(/\r?\n/)) {
|
|
21
|
+
if (packageName && !line.includes(`package:${packageName}`))
|
|
22
|
+
continue;
|
|
23
|
+
const listed = line.match(/\buid:(\d+)\b/);
|
|
24
|
+
if (listed)
|
|
25
|
+
return Number.parseInt(listed[1], 10);
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
/** Return true when an ip-rule line contains a uidrange covering the UID. */
|
|
30
|
+
export function uidMatchesRule(line, uid) {
|
|
31
|
+
for (const match of line.matchAll(/\buidrange\s+(\d+)-(\d+)\b/g)) {
|
|
32
|
+
const start = Number.parseInt(match[1], 10);
|
|
33
|
+
const end = Number.parseInt(match[2], 10);
|
|
34
|
+
if (uid >= start && uid <= end)
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
/** Extract safe, deduplicated route-table names from matched ip rules. */
|
|
40
|
+
export function extractRouteTables(lines) {
|
|
41
|
+
const tables = new Set();
|
|
42
|
+
for (const line of lines) {
|
|
43
|
+
const match = line.match(/\b(?:lookup|table)\s+([^\s]+)/);
|
|
44
|
+
if (match && ROUTE_TABLE_PATTERN.test(match[1]))
|
|
45
|
+
tables.add(match[1]);
|
|
46
|
+
}
|
|
47
|
+
return [...tables];
|
|
48
|
+
}
|
|
49
|
+
function policyLinesForUid(output, uid) {
|
|
50
|
+
const uidToken = new RegExp(`(^|\\D)${uid}(\\D|$)`);
|
|
51
|
+
return output.split(/\r?\n/).map((line) => line.trim()).filter((line) => uidToken.test(line));
|
|
52
|
+
}
|
|
53
|
+
function summarizeConnectivity(output) {
|
|
54
|
+
const summary = [];
|
|
55
|
+
const defaultNetwork = output.match(/defaultNetwork\s*[=:]\s*(\d+)/i)
|
|
56
|
+
?? output.match(/NetworkAgentInfo\{[^}]*\[?([0-9]+)\]?[^}]*VALIDATED/i);
|
|
57
|
+
summary.push(`Default network: ${defaultNetwork?.[1] ?? "not identified"}`);
|
|
58
|
+
summary.push(`VPN present: ${/\bVPN\b|TRANSPORT_VPN/i.test(output) ? "yes" : "no"}`);
|
|
59
|
+
summary.push(`Validated network present: ${/\bVALIDATED\b/.test(output) ? "yes" : "no"}`);
|
|
60
|
+
summary.push(`Private DNS active: ${/privateDns.*(?:active|validated|true)/i.test(output) ? "yes" : "not reported"}`);
|
|
61
|
+
return summary;
|
|
62
|
+
}
|
|
63
|
+
export function registerAppNetworkTools(ctx) {
|
|
64
|
+
ctx.server.tool("adb_app_route_context", "Show the effective Android routing context for one installed app by correlating its UID with ip rules, route tables, network policy, VPN, and default-network state. Read-only; does not alter routes or app policy.", {
|
|
65
|
+
packageName: z.string().regex(PACKAGE_NAME_PATTERN).describe("Installed Android package to inspect"),
|
|
66
|
+
includeConnectivitySummary: z.boolean().optional().default(true)
|
|
67
|
+
.describe("Include a privacy-conscious connectivity/VPN/default-network summary"),
|
|
68
|
+
device: z.string().optional().describe("Device serial"),
|
|
69
|
+
}, async ({ packageName, includeConnectivitySummary, device }) => {
|
|
70
|
+
try {
|
|
71
|
+
const resolved = await ctx.deviceManager.resolveDevice(device);
|
|
72
|
+
const serial = resolved.serial;
|
|
73
|
+
const packageDump = await ctx.bridge.shell(`dumpsys package ${shellQuote(packageName)}`, {
|
|
74
|
+
device: serial,
|
|
75
|
+
timeout: 15000,
|
|
76
|
+
ignoreExitCode: true,
|
|
77
|
+
});
|
|
78
|
+
let uid = parsePackageUid(packageDump.stdout, packageName);
|
|
79
|
+
if (uid === null) {
|
|
80
|
+
const listed = await ctx.bridge.shell(`cmd package list packages -U ${shellQuote(packageName)}`, {
|
|
81
|
+
device: serial,
|
|
82
|
+
timeout: 10000,
|
|
83
|
+
ignoreExitCode: true,
|
|
84
|
+
});
|
|
85
|
+
uid = parsePackageUid(listed.stdout, packageName);
|
|
86
|
+
}
|
|
87
|
+
if (uid === null) {
|
|
88
|
+
return { content: [{ type: "text", text: `Package is not installed or its UID could not be resolved: ${packageName}` }], isError: true };
|
|
89
|
+
}
|
|
90
|
+
const [rules, routes4, routes6, policy, connectivity] = await Promise.all([
|
|
91
|
+
ctx.bridge.shell("ip rule show", { device: serial, timeout: 10000, ignoreExitCode: true }),
|
|
92
|
+
ctx.bridge.shell("ip route show", { device: serial, timeout: 10000, ignoreExitCode: true }),
|
|
93
|
+
ctx.bridge.shell("ip -6 route show", { device: serial, timeout: 10000, ignoreExitCode: true }),
|
|
94
|
+
ctx.bridge.shell("cmd netpolicy list uid-policy", { device: serial, timeout: 10000, ignoreExitCode: true }),
|
|
95
|
+
includeConnectivitySummary
|
|
96
|
+
? ctx.bridge.shell("dumpsys connectivity", { device: serial, timeout: 20000, ignoreExitCode: true })
|
|
97
|
+
: Promise.resolve({ stdout: "", stderr: "", exitCode: 0, timedOut: false, bufferExceeded: false }),
|
|
98
|
+
]);
|
|
99
|
+
const matchedRules = rules.stdout.split(/\r?\n/).map((line) => line.trim())
|
|
100
|
+
.filter((line) => uidMatchesRule(line, uid));
|
|
101
|
+
const tableNames = extractRouteTables(matchedRules);
|
|
102
|
+
const tableResults = await Promise.all(tableNames.map(async (table) => {
|
|
103
|
+
// table came from device output, so re-validate before shell reuse.
|
|
104
|
+
if (!ROUTE_TABLE_PATTERN.test(table))
|
|
105
|
+
return `${table}: rejected unsafe table name`;
|
|
106
|
+
const result = await ctx.bridge.shell(`ip route show table ${shellQuote(table)}`, {
|
|
107
|
+
device: serial,
|
|
108
|
+
timeout: 10000,
|
|
109
|
+
ignoreExitCode: true,
|
|
110
|
+
});
|
|
111
|
+
return `${table}:\n${result.stdout.trim() || " (empty or unavailable)"}`;
|
|
112
|
+
}));
|
|
113
|
+
const sections = [
|
|
114
|
+
"=== Per-App Route Context ===",
|
|
115
|
+
`Package: ${packageName}`,
|
|
116
|
+
`UID: ${uid}`,
|
|
117
|
+
`INTERNET permission: ${/android\.permission\.INTERNET/.test(packageDump.stdout) ? "declared/granted" : "not reported"}`,
|
|
118
|
+
"",
|
|
119
|
+
"── Matching UID rules ──",
|
|
120
|
+
matchedRules.length ? matchedRules.join("\n") : "(no explicit uidrange rule; system defaults may apply)",
|
|
121
|
+
"",
|
|
122
|
+
"── Referenced route tables ──",
|
|
123
|
+
tableResults.length ? tableResults.join("\n\n") : "(none referenced by matching UID rules)",
|
|
124
|
+
"",
|
|
125
|
+
"── Default IPv4 routes ──",
|
|
126
|
+
routes4.stdout.split(/\r?\n/).filter((line) => /^default\b/.test(line.trim())).join("\n") || "(none reported)",
|
|
127
|
+
"",
|
|
128
|
+
"── Default IPv6 routes ──",
|
|
129
|
+
routes6.stdout.split(/\r?\n/).filter((line) => /^default\b/.test(line.trim())).join("\n") || "(none reported)",
|
|
130
|
+
"",
|
|
131
|
+
"── UID network policy ──",
|
|
132
|
+
policyLinesForUid(policy.stdout, uid).join("\n") || "(no explicit UID policy)",
|
|
133
|
+
];
|
|
134
|
+
if (includeConnectivitySummary) {
|
|
135
|
+
sections.push("", "── Connectivity summary ──", ...summarizeConnectivity(connectivity.stdout));
|
|
136
|
+
}
|
|
137
|
+
return { content: [{ type: "text", text: OutputProcessor.process(sections.join("\n"), 40000) }] };
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=app-network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-network.js","sourceRoot":"","sources":["../../src/tools/app-network.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,5 +16,16 @@
|
|
|
16
16
|
* of the most dangerous commands. Use `force: true` to bypass.
|
|
17
17
|
*/
|
|
18
18
|
import { ToolContext } from "../tool-context.js";
|
|
19
|
+
/**
|
|
20
|
+
* Build the guarded device-side AT exchange.
|
|
21
|
+
*
|
|
22
|
+
* CPIF/SIPC nodes return an empty read after roughly 100ms when their RX queue
|
|
23
|
+
* is empty. A one-shot `cat` therefore exits before a slightly delayed modem
|
|
24
|
+
* response. Re-arm bounded reads until a terminal result arrives, and start the
|
|
25
|
+
* writer after the first read is waiting. `dd conv=nocreat` is deliberate: a
|
|
26
|
+
* shell redirection would create a regular file under /dev when a candidate
|
|
27
|
+
* node is absent and the caller has root.
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildAtShellCommand(deviceNode: string, command: string, timeoutMs: number): string;
|
|
19
30
|
export declare function registerAtCommandTools(ctx: ToolContext): void;
|
|
20
31
|
//# sourceMappingURL=at-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"at-commands.d.ts","sourceRoot":"","sources":["../../src/tools/at-commands.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"at-commands.d.ts","sourceRoot":"","sources":["../../src/tools/at-commands.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA6EjD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAmBR;AAuED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAukB7D"}
|
|
@@ -89,8 +89,37 @@ function validateAtCommand(cmd) {
|
|
|
89
89
|
return null;
|
|
90
90
|
}
|
|
91
91
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
92
|
+
* Build the guarded device-side AT exchange.
|
|
93
|
+
*
|
|
94
|
+
* CPIF/SIPC nodes return an empty read after roughly 100ms when their RX queue
|
|
95
|
+
* is empty. A one-shot `cat` therefore exits before a slightly delayed modem
|
|
96
|
+
* response. Re-arm bounded reads until a terminal result arrives, and start the
|
|
97
|
+
* writer after the first read is waiting. `dd conv=nocreat` is deliberate: a
|
|
98
|
+
* shell redirection would create a regular file under /dev when a candidate
|
|
99
|
+
* node is absent and the caller has root.
|
|
100
|
+
*/
|
|
101
|
+
export function buildAtShellCommand(deviceNode, command, timeoutMs) {
|
|
102
|
+
const portErr = validateDeviceNode(deviceNode);
|
|
103
|
+
if (portErr)
|
|
104
|
+
throw new Error(portErr);
|
|
105
|
+
const cmdErr = validateAtCommand(command);
|
|
106
|
+
if (cmdErr)
|
|
107
|
+
throw new Error(cmdErr);
|
|
108
|
+
const cmd = command.trimEnd();
|
|
109
|
+
const node = shellQuote(deviceNode);
|
|
110
|
+
const payload = shellQuote(cmd);
|
|
111
|
+
const maxReads = Math.max(1, Math.ceil(timeoutMs / 100));
|
|
112
|
+
const terminator = (MODEM_PATHS.shannon ?? []).includes(deviceNode) ? "%s\\r\\n" : "%s\\r";
|
|
113
|
+
return [
|
|
114
|
+
`test -c ${node} || { printf '%s\\n' 'DeepADB: target is not a character device' >&2; exit 1; }`,
|
|
115
|
+
`(sleep 0.1; printf '${terminator}' ${payload} | dd of=${node} conv=nocreat,notrunc status=none) & writer_pid=$!`,
|
|
116
|
+
"i=0",
|
|
117
|
+
`while [ "$i" -lt ${maxReads} ]; do chunk=$(dd if=${node} bs=4096 count=1 status=none 2>/dev/null); if [ -n "$chunk" ]; then printf '%s\\n' "$chunk"; if printf '%s\\n' "$chunk" | tr -d '\\r' | grep -Eq '^(OK|ERROR|\\+CME ERROR:|\\+CMS ERROR:)'; then break; fi; fi; i=$((i + 1)); done`,
|
|
118
|
+
'wait "$writer_pid"',
|
|
119
|
+
].join("; ");
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Send an AT command to a character-device modem node and capture its response.
|
|
94
123
|
* Both the command and device node are validated before interpolation.
|
|
95
124
|
*/
|
|
96
125
|
async function sendAtCommand(ctx, serial, deviceNode, command, timeoutMs) {
|
|
@@ -102,14 +131,7 @@ async function sendAtCommand(ctx, serial, deviceNode, command, timeoutMs) {
|
|
|
102
131
|
const cmdErr = validateAtCommand(command);
|
|
103
132
|
if (cmdErr)
|
|
104
133
|
return { response: "", error: cmdErr };
|
|
105
|
-
const
|
|
106
|
-
// Send the command and read response with a timeout.
|
|
107
|
-
// Both cmd and deviceNode are validated above — no shell metacharacters.
|
|
108
|
-
// Use printf with '%s\r' format to separate format string from data —
|
|
109
|
-
// AT commands may contain % (e.g., AT%RESTART) which printf would
|
|
110
|
-
// misinterpret as format specifiers if cmd were in the format position.
|
|
111
|
-
const timeoutSec = Math.max(1, Math.ceil(timeoutMs / 1000));
|
|
112
|
-
const shellCmd = `printf '%s\\r' '${cmd}' > '${deviceNode}' && timeout ${timeoutSec} cat '${deviceNode}' 2>&1 || true`;
|
|
134
|
+
const shellCmd = buildAtShellCommand(deviceNode, command, timeoutMs);
|
|
113
135
|
try {
|
|
114
136
|
const result = await ctx.bridge.rootShell(shellCmd, {
|
|
115
137
|
device: serial,
|
|
@@ -128,7 +150,8 @@ async function sendAtCommand(ctx, serial, deviceNode, command, timeoutMs) {
|
|
|
128
150
|
}
|
|
129
151
|
/**
|
|
130
152
|
* Auto-detect the first existing modem device node for the given chipset family.
|
|
131
|
-
* Probes MODEM_PATHS entries via `test -
|
|
153
|
+
* Probes MODEM_PATHS entries via `test -c` through root shell so regular files,
|
|
154
|
+
* block devices, and stale filesystem artifacts can never be selected.
|
|
132
155
|
* Returns the first existing node path, or null if none found.
|
|
133
156
|
*/
|
|
134
157
|
async function autoDetectAtPort(ctx, serial, family) {
|
|
@@ -142,7 +165,7 @@ async function autoDetectAtPort(ctx, serial, family) {
|
|
|
142
165
|
// or metacharacters), so this is safe by construction today. Wrapping
|
|
143
166
|
// ensures a future contributor adding a path with whitespace doesn't
|
|
144
167
|
// accidentally word-split here.
|
|
145
|
-
const existCmd = paths.map((p) => `test -
|
|
168
|
+
const existCmd = paths.map((p) => `test -c ${shellQuote(p)} && echo "EXISTS:${p}"`).join("; ");
|
|
146
169
|
const existResult = await ctx.bridge.rootShell(existCmd, {
|
|
147
170
|
device: serial, timeout: 5000, ignoreExitCode: true,
|
|
148
171
|
});
|
|
@@ -152,6 +175,103 @@ async function autoDetectAtPort(ctx, serial, family) {
|
|
|
152
175
|
return existing.length > 0 ? existing[0] : null;
|
|
153
176
|
}
|
|
154
177
|
export function registerAtCommandTools(ctx) {
|
|
178
|
+
ctx.server.tool("adb_shannon_session", "Preflight a Samsung Shannon/Exynos modem session by checking the chipset, root access, known AT ports, and a benign AT handshake together. Optionally sends ATI for identification after a successful handshake. Makes no modem configuration changes.", {
|
|
179
|
+
port: z.string().optional().describe("Optional Shannon device node override (for example /dev/umts_router)"),
|
|
180
|
+
timeout: z.number().int().min(1000).max(10000).optional().default(3000)
|
|
181
|
+
.describe("Handshake timeout per port in milliseconds (1000-10000, default 3000)"),
|
|
182
|
+
includeIdentity: z.boolean().optional().default(false)
|
|
183
|
+
.describe("After a successful AT handshake, also send the read-only ATI identity query"),
|
|
184
|
+
device: z.string().optional().describe("Device serial"),
|
|
185
|
+
}, async ({ port, timeout, includeIdentity, device }) => {
|
|
186
|
+
try {
|
|
187
|
+
if (port) {
|
|
188
|
+
const portError = validateDeviceNode(port);
|
|
189
|
+
if (portError) {
|
|
190
|
+
return { content: [{ type: "text", text: portError }], isError: true };
|
|
191
|
+
}
|
|
192
|
+
if (!(MODEM_PATHS.shannon ?? []).includes(port)) {
|
|
193
|
+
return {
|
|
194
|
+
content: [{ type: "text", text: `Shannon session port must be one of the known Shannon AT nodes: ${(MODEM_PATHS.shannon ?? []).join(", ")}` }],
|
|
195
|
+
isError: true,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const resolved = await ctx.deviceManager.resolveDevice(device);
|
|
200
|
+
const serial = resolved.serial;
|
|
201
|
+
const props = await ctx.deviceManager.getDeviceProps(serial);
|
|
202
|
+
const family = detectChipsetFamily(props);
|
|
203
|
+
const sections = [
|
|
204
|
+
"=== Shannon Session Preflight ===",
|
|
205
|
+
`Device: ${props["ro.product.model"] ?? "unknown"}`,
|
|
206
|
+
`Chipset family: ${family}`,
|
|
207
|
+
];
|
|
208
|
+
if (family !== "shannon") {
|
|
209
|
+
sections.push("Result: this device does not identify as Shannon/Exynos. Use adb_at_detect for generic modem discovery.");
|
|
210
|
+
return { content: [{ type: "text", text: sections.join("\n") }], isError: true };
|
|
211
|
+
}
|
|
212
|
+
const rootProbe = await ctx.bridge.shell("su -c id", {
|
|
213
|
+
device: serial, timeout: 5000, ignoreExitCode: true,
|
|
214
|
+
});
|
|
215
|
+
if (!/uid=0\b/.test(rootProbe.stdout)) {
|
|
216
|
+
sections.push("Root: unavailable", "Result: Shannon device nodes require root access.");
|
|
217
|
+
return { content: [{ type: "text", text: sections.join("\n") }], isError: true };
|
|
218
|
+
}
|
|
219
|
+
sections.push("Root: available");
|
|
220
|
+
const candidates = port ? [port] : (MODEM_PATHS.shannon ?? []);
|
|
221
|
+
const existenceProbe = candidates
|
|
222
|
+
.map((candidate) => `test -c ${shellQuote(candidate)} && echo ${shellQuote(`EXISTS:${candidate}`)}`)
|
|
223
|
+
.join("; ");
|
|
224
|
+
const existence = await ctx.bridge.rootShell(existenceProbe, {
|
|
225
|
+
device: serial, timeout: 10000, ignoreExitCode: true,
|
|
226
|
+
});
|
|
227
|
+
const existing = existence.stdout.split(/\r?\n/)
|
|
228
|
+
.filter((line) => line.startsWith("EXISTS:"))
|
|
229
|
+
.map((line) => line.slice("EXISTS:".length).trim())
|
|
230
|
+
.filter((candidate) => candidates.includes(candidate));
|
|
231
|
+
sections.push(`Ports checked: ${candidates.length}`, `Ports present: ${existing.length ? existing.join(", ") : "none"}`);
|
|
232
|
+
if (existing.length === 0) {
|
|
233
|
+
sections.push("Result: no Shannon AT device node is currently visible.");
|
|
234
|
+
return { content: [{ type: "text", text: sections.join("\n") }] };
|
|
235
|
+
}
|
|
236
|
+
let selected = null;
|
|
237
|
+
let identity = "";
|
|
238
|
+
sections.push("", "── Handshakes ──");
|
|
239
|
+
for (const candidate of existing) {
|
|
240
|
+
const handshake = await sendAtCommand(ctx, serial, candidate, "AT", timeout);
|
|
241
|
+
const ok = /(^|\r?\n)\s*OK\s*($|\r?\n)/i.test(handshake.response) || handshake.response.trim() === "OK";
|
|
242
|
+
if (handshake.error) {
|
|
243
|
+
sections.push(`○ ${candidate}: ${handshake.error}`);
|
|
244
|
+
}
|
|
245
|
+
else if (ok) {
|
|
246
|
+
sections.push(`✓ ${candidate}: AT / OK handshake complete`);
|
|
247
|
+
selected = candidate;
|
|
248
|
+
if (includeIdentity) {
|
|
249
|
+
const identityResult = await sendAtCommand(ctx, serial, candidate, "ATI", timeout);
|
|
250
|
+
identity = identityResult.error
|
|
251
|
+
? `Identity query error: ${identityResult.error}`
|
|
252
|
+
: (identityResult.response.trim() || "Identity query returned no text");
|
|
253
|
+
}
|
|
254
|
+
break;
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
sections.push(`○ ${candidate}: ${handshake.response.trim() ? "response received without OK" : "no response before timeout"}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if (selected) {
|
|
261
|
+
sections.push("", "=== SHANNON SESSION READY ===", `Selected port: ${selected}`);
|
|
262
|
+
if (includeIdentity)
|
|
263
|
+
sections.push("", "── ATI identity ──", identity);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
sections.push("", "=== SHANNON SESSION NOT READY ===", "Device nodes are present, but no AT / OK handshake completed.");
|
|
267
|
+
}
|
|
268
|
+
sections.push("Only AT and, when requested, ATI were sent; no modem configuration was changed.");
|
|
269
|
+
return { content: [{ type: "text", text: OutputProcessor.process(sections.join("\n"), 20000) }] };
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
return { content: [{ type: "text", text: OutputProcessor.formatError(error) }], isError: true };
|
|
273
|
+
}
|
|
274
|
+
});
|
|
155
275
|
ctx.server.tool("adb_at_detect", "Auto-detect the modem AT command device node. Identifies the chipset family (Shannon, Qualcomm, MediaTek, Unisoc) and probes known device node paths. Requires root. Returns the first responding node.", {
|
|
156
276
|
device: z.string().optional().describe("Device serial"),
|
|
157
277
|
}, async ({ device }) => {
|
|
@@ -175,7 +295,7 @@ export function registerAtCommandTools(ctx) {
|
|
|
175
295
|
sections.push(`\nProbing ${allPaths.length} device nodes...`);
|
|
176
296
|
// Check which device nodes exist
|
|
177
297
|
// T5 fix (same rationale as autoDetectAtPort)
|
|
178
|
-
const existCmd = allPaths.map((p) => `test -
|
|
298
|
+
const existCmd = allPaths.map((p) => `test -c ${shellQuote(p)} && echo "EXISTS:${p}"`).join("; ");
|
|
179
299
|
const existResult = await ctx.bridge.rootShell(existCmd, {
|
|
180
300
|
device: serial, timeout: 10000, ignoreExitCode: true,
|
|
181
301
|
});
|
|
@@ -225,7 +345,7 @@ export function registerAtCommandTools(ctx) {
|
|
|
225
345
|
});
|
|
226
346
|
ctx.server.tool("adb_at_send", "Send a single AT command to the modem and capture the response. Requires root. Use adb_at_detect to find the correct port, or specify it manually.", {
|
|
227
347
|
command: z.string().describe("AT command to send (e.g., 'AT+CSQ', 'ATI', 'AT+COPS?')"),
|
|
228
|
-
port: z.string().optional().describe("Modem device node (e.g., '/dev/
|
|
348
|
+
port: z.string().optional().describe("Modem device node (e.g., '/dev/umts_router'). If omitted, auto-detects."),
|
|
229
349
|
timeout: z.number().min(1000).max(30000).optional().default(5000).describe("Response timeout in ms (1000-30000, default 5000)"),
|
|
230
350
|
force: z.boolean().optional().default(false).describe("Bypass dangerous command safety check"),
|
|
231
351
|
device: z.string().optional().describe("Device serial"),
|
|
@@ -442,7 +562,7 @@ export function registerAtCommandTools(ctx) {
|
|
|
442
562
|
sections.push("\n── AT Command Responses ──");
|
|
443
563
|
sections.push("No modem device node found — AT port auto-detection requires root and direct modem node access.");
|
|
444
564
|
sections.push("This is expected in ADB mode. Use on-device mode (Termux) for full AT cross-validation.");
|
|
445
|
-
sections.push("Alternatively, specify 'port' manually (e.g., '/dev/
|
|
565
|
+
sections.push("Alternatively, specify 'port' manually (e.g., '/dev/umts_router' for Google Tensor/Shannon).");
|
|
446
566
|
sections.push("\nFalling back to property-only analysis...");
|
|
447
567
|
}
|
|
448
568
|
// ── Gather property-based firmware info ──
|