@mmerterden/multi-agent-toolkit-mcp 3.7.0 → 3.7.1

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/CHANGELOG.md CHANGED
@@ -15,6 +15,30 @@ Releases before this file exists are recorded in the git tags and commit history
15
15
 
16
16
  ---
17
17
 
18
+ ## 3.7.1
19
+
20
+ ### Fixed
21
+
22
+ - **`android_meminfo` never read the swap total on a real device.** The parser
23
+ was written from the documented output, which spells the line
24
+ `TOTAL SWAP (KB):`. An Android 35 Pixel emulator prints `TOTAL SWAP PSS:`, so
25
+ the regex matched nothing and `total_swap_kb` came back null on every real
26
+ run. Both spellings are accepted now, and the fixture is the emulator's own
27
+ output rather than a reconstruction.
28
+
29
+ This is the defect the 3.3.0 note predicted: that parser shipped marked "not
30
+ verified on a device", and the first real device broke it. Worth recording
31
+ plainly, because the note was right and the only thing that found the bug was
32
+ running it.
33
+
34
+ ### Note
35
+
36
+ The Android checks are no longer unverified. `android_accessibility_audit` and
37
+ `android_meminfo` were both run against a booted Android 35 emulator: the audit
38
+ read 14 clickable elements off a real launcher, reported the reading order as
39
+ correct with no false positive on the grid, and produced one critical and seven
40
+ warnings; meminfo read the App Summary and, after the fix above, the swap total.
41
+
18
42
  ## 3.7.0
19
43
 
20
44
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmerterden/multi-agent-toolkit-mcp",
3
- "version": "3.7.0",
3
+ "version": "3.7.1",
4
4
  "description": "MCP server for iOS Simulator, Android Emulator and headless web control. 87 tools: device automation (tap/swipe/type), accessibility audits, visual diff, crash logs, App Store / Play Store pre-submission compliance. Runs standalone over stdio with any MCP client.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -85,11 +85,12 @@ const MEMINFO_ROWS = [
85
85
  * snapshots of the same flow is the shape a leak takes, where a single
86
86
  * absolute number says almost nothing.
87
87
  *
88
- * NOT VERIFIED ON A DEVICE. Written against the documented output shape on a
89
- * machine with adb installed but no device or emulator to run it against,
90
- * unlike the leaks parser above, which was
91
- * checked against live output. The tests below pin the shape this expects; the
92
- * first real run is the measurement.
88
+ * Verified against a real device: an Android 35 Pixel emulator, after the parser
89
+ * had first been written from documentation alone. That first version returned
90
+ * null for the swap total on every real device, because the documented shape
91
+ * says "TOTAL SWAP (KB):" and the device prints "TOTAL SWAP PSS:". Both are
92
+ * accepted now. It is the clearest argument in this file for running a parser
93
+ * against the thing it parses.
93
94
  *
94
95
  * @param {string} raw
95
96
  * @returns {{measurable: boolean, reason: string|null, pss: object, totalPssKb: number|null,
@@ -118,7 +119,11 @@ export function parseMeminfoOutput(raw) {
118
119
  };
119
120
  const totalPssKb = num(/TOTAL PSS:\s*(\d+)/i);
120
121
  const totalRssKb = num(/TOTAL RSS:\s*(\d+)/i);
121
- const totalSwapKb = num(/TOTAL SWAP \(KB\):\s*(\d+)/i);
122
+ // Two spellings in the wild: "TOTAL SWAP (KB):" in the documented shape and
123
+ // "TOTAL SWAP PSS:" on a real Android 35 device, which is what a Pixel
124
+ // emulator actually printed. The first regex, written from documentation,
125
+ // returned null against every real device.
126
+ const totalSwapKb = num(/TOTAL SWAP(?: \(KB\)| PSS)?:\s*(\d+)/i);
122
127
 
123
128
  if (found === 0 && totalPssKb === null) {
124
129
  return { measurable: false, reason: "no App Summary block in the dumpsys output", pss: {}, totalPssKb: null, totalRssKb: null, totalSwapKb: null };