lim 0.47.1 → 0.48.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/JSON_OUTPUT.md CHANGED
@@ -73,22 +73,22 @@ Direct WebSocket connections and background session connections have the same co
73
73
 
74
74
  ## Builds, execution, sync, and logs
75
75
 
76
- | Commands | JSON result |
77
- | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
78
- | Foreground `xcode build`, `gradle build` | NDJSON `{type:"stdout",line}` and `{type:"stderr",line}` events, followed by `{type:"result",instanceId,...SDK execution result}`. The result retains `execId`, `status`, `exitCode`, artifact/store fields, `timedOut`, and `incomplete`. |
79
- | `xcode build --detach`, `gradle build --detach` | Existing `instanceId`, `execId`, `consoleUrl`, `logsCommand`, and optional `webhookUrl`. Acceptance does not mean completion. |
80
- | Xcode/Gradle `run`, `tools`, `tools install`, mise `use` | SDK execution result plus captured `stdout` and `stderr` strings. Mixed `xcode use xcode@... node@...` adds the Xcode selection under `xcode`. Xcode-only selection keeps its existing selection response. |
81
- | iOS `simctl`, `xcrun`, `xcodebuild`, `defaults`, `notify`; Android `adb-shell` | Existing tool execution response, with stdout, stderr, and the tool's `code` or `exitCode`. |
82
- | `ios maestro` | `{"exitCode":0}`; Maestro output goes to stderr. |
83
- | iOS/Android/Xcode/Gradle `sync` | SDK sync result, such as `bytesSent`, and optional installed app fields. No watcher function is serialized. |
84
- | `sync --watch` | One SDK sync event per line, including `bytesSent`, `durationMs`, and optional installed app fields, for the initial sync and each update. |
85
- | Android `app-log` without `--follow` | Shell result containing `stdout`, `stderr`, and `exitCode`. |
86
- | iOS `app-log` without `--follow` | `{"stdout":"..."}`. |
87
- | Android `app-log --follow` | One API app-log capture record per line. |
88
- | iOS `app-log --follow`, Android `logcat`, iOS `syslog` | One `{"line":"..."}` record per line. |
89
- | Foreground iOS/Android `launch-app` | The detached launch fields with `type:"launched"` instead of `ok`; iOS log events use `{type:"log",line}`. Exit events use `type:"exit"` and the SDK app-exit fields; Android includes its log tail in `logs`. |
90
- | `xcode test` | Existing XCTest event records followed by the existing terminal `{exitCode, timedOut?, incomplete?}` record. |
91
- | Xcode/Gradle `logs` | Existing collected execution-log response. |
76
+ | Commands | JSON result |
77
+ | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
78
+ | Foreground `xcode build`, `gradle build` | NDJSON `{type:"stdout",line}` and `{type:"stderr",line}` events, followed by `{type:"result",instanceId,...SDK execution result}`. The result retains `execId`, `status`, `exitCode`, artifact/store fields, `timedOut`, and `incomplete`. |
79
+ | `xcode build --detach`, `gradle build --detach` | Existing `instanceId`, `execId`, `consoleUrl`, `logsCommand`, and optional `webhookUrl`. Acceptance does not mean completion. |
80
+ | Xcode/Gradle `run`, `tools`, `tools install`, mise `use` | SDK execution result plus captured `stdout` and `stderr` strings. Mixed `xcode use xcode@... node@...` adds the Xcode selection under `xcode`. Xcode-only selection keeps its existing selection response. |
81
+ | iOS `simctl`, `xcrun`, `xcodebuild`, `defaults`, `notify`; Android `adb-shell` | Existing tool execution response, with stdout, stderr, and the tool's `code` or `exitCode`. |
82
+ | `ios maestro` | `{"exitCode":0}`; Maestro output goes to stderr. |
83
+ | iOS/Android/Xcode/Gradle `sync` | SDK sync result, such as `bytesSent`, and optional installed app fields. No watcher function is serialized. |
84
+ | `sync --watch` | One SDK sync event per line, including `bytesSent`, `durationMs`, and optional installed app fields, for the initial sync and each update. |
85
+ | Android `app-log` without `--follow` | Shell result containing `stdout`, `stderr`, and `exitCode`. |
86
+ | iOS `app-log` without `--follow` | `{"stdout":"..."}`. |
87
+ | Android `app-log --follow` | One API app-log capture record per line. |
88
+ | iOS `app-log --follow`, Android `logcat`, iOS `syslog` | One `{"line":"..."}` record per line. |
89
+ | Foreground iOS/Android `launch-app` | The detached launch fields with `type:"launched"` instead of `ok`; iOS log events use `{type:"log",line}`, and each iOS main-thread hang sample and hang end uses `type:"hang"` and the SDK app-hang fields. Exit events use `type:"exit"` and the SDK app-exit fields; Android includes its log tail in `logs`. |
90
+ | `xcode test` | Existing XCTest event records followed by the existing terminal `{exitCode, timedOut?, incomplete?}` record. |
91
+ | Xcode/Gradle `logs` | Existing collected execution-log response. |
92
92
 
93
93
  Foreground builds also emit `{type:"command",line}` for each executed command received from the SDK. The `line` contains the command without the `$ ` prefix used in human output.
94
94
 
@@ -1 +1 @@
1
- {"version":3,"file":"launch-app.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/launch-app.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA2BjD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAC,OAAO,SAA6C;IAC3D,MAAM,CAAC,WAAW,SACoX;IACtY,MAAM,CAAC,QAAQ,WAMb;IAEF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;MAoCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgG3B"}
1
+ {"version":3,"file":"launch-app.d.ts","sourceRoot":"","sources":["../../../src/commands/ios/launch-app.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA4BjD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAC,OAAO,SAA6C;IAC3D,MAAM,CAAC,WAAW,SACoX;IACtY,MAAM,CAAC,QAAQ,WAMb;IAEF,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;MAoCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoG3B"}
@@ -5,6 +5,7 @@ const base_command_1 = require("../../base-command");
5
5
  const instance_client_factory_1 = require("../../lib/instance-client-factory");
6
6
  const launch_app_runtime_1 = require("../../lib/launch-app-runtime");
7
7
  const format_app_exit_1 = require("../../lib/format-app-exit");
8
+ const format_app_hang_1 = require("../../lib/format-app-hang");
8
9
  async function launchAppWithArgument(client, bundleId, launchArgument) {
9
10
  if (typeof launchArgument === 'string') {
10
11
  await client.launchApp(bundleId, launchArgument);
@@ -71,6 +72,12 @@ class IosLaunchApp extends base_command_1.BaseCommand {
71
72
  onExit: (_logs, info) => {
72
73
  notifyAppExited(info);
73
74
  },
75
+ onHang: (hang) => {
76
+ if (flags.json)
77
+ this.outputEvent({ type: 'hang', ...hang });
78
+ else
79
+ this.logToStderr((0, format_app_hang_1.formatAppHang)(args.bundleId, hang));
80
+ },
74
81
  };
75
82
  try {
76
83
  await client.launchApp(args.bundleId, launchOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"launch-app.js","sourceRoot":"","sources":["../../../src/commands/ios/launch-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launch-app.js","sourceRoot":"","sources":["../../../src/commands/ios/launch-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Ios } from '@limrun/api';
2
+ /**
3
+ * Renders an iOS hang report as human-readable text. A sample gives one line on how long the main
4
+ * thread has been stuck and what it was doing, then the top of its stack; a hang's end gives one
5
+ * line with its length.
6
+ */
7
+ export declare function formatAppHang(appId: string, hang: Ios.AppHangInfo, frames?: number): string;
8
+ //# sourceMappingURL=format-app-hang.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-app-hang.d.ts","sourceRoot":"","sources":["../../src/lib/format-app-hang.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,SAAI,GAAG,MAAM,CAqBtF"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatAppHang = formatAppHang;
4
+ /**
5
+ * Renders an iOS hang report as human-readable text. A sample gives one line on how long the main
6
+ * thread has been stuck and what it was doing, then the top of its stack; a hang's end gives one
7
+ * line with its length.
8
+ */
9
+ function formatAppHang(appId, hang, frames = 8) {
10
+ const which = `hang ${hang.hangId}, pid ${hang.pid}`;
11
+ if (hang.ended)
12
+ return `${appId} main thread hang ended after ${hang.durationMs} ms (${which})`;
13
+ const usage = [which];
14
+ if (hang.mainThreadState)
15
+ usage.push(hang.mainThreadState);
16
+ if (hang.mainThreadCpuMs !== undefined) {
17
+ const kernel = hang.mainThreadKernelMs !== undefined ? ` (${hang.mainThreadKernelMs} ms in kernel)` : '';
18
+ usage.push(`main thread cpu ${hang.mainThreadCpuMs} ms${kernel}`);
19
+ }
20
+ if (hang.appCpuMs !== undefined)
21
+ usage.push(`app cpu ${hang.appCpuMs} ms`);
22
+ if (hang.pageIns !== undefined)
23
+ usage.push(`page-ins ${hang.pageIns}`);
24
+ if (hang.footprintBytes !== undefined)
25
+ usage.push(`footprint ${Math.round(hang.footprintBytes / 2 ** 20)} MB`);
26
+ const lines = [`${appId} main thread unresponsive for ${hang.durationMs} ms (${usage.join(', ')})`];
27
+ // The stack opens with a "Main Thread:" title and ends its frames at a blank line before the images.
28
+ const stack = (hang.stackTrace ?? '').split('\n').slice(1);
29
+ const end = stack.indexOf('');
30
+ lines.push(...stack.slice(0, Math.min(frames, end < 0 ? stack.length : end)).map((frame) => ` ${frame}`));
31
+ return lines.join('\n');
32
+ }
33
+ //# sourceMappingURL=format-app-hang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-app-hang.js","sourceRoot":"","sources":["../../src/lib/format-app-hang.ts"],"names":[],"mappings":";;AAOA,sCAqBC;AA1BD;;;;GAIG;AACH,SAAgB,aAAa,CAAC,KAAa,EAAE,IAAqB,EAAE,MAAM,GAAG,CAAC;IAC5E,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,MAAM,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC;IACrD,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,KAAK,iCAAiC,IAAI,CAAC,UAAU,QAAQ,KAAK,GAAG,CAAC;IAEhG,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,IAAI,CAAC,eAAe;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3D,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,eAAe,MAAM,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;QACnC,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,iCAAiC,IAAI,CAAC,UAAU,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpG,qGAAqG;IACrG,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=format-app-hang.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-app-hang.test.d.ts","sourceRoot":"","sources":["../../src/lib/format-app-hang.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const format_app_hang_1 = require("./format-app-hang");
4
+ const stackTrace = [
5
+ 'Main Thread:',
6
+ '0 libsystem_kernel.dylib 0x0000000000020020 __semwait_signal + 8',
7
+ '1 App 0x0000000000001010 App.Feed.load() + 52',
8
+ '2 UIKitCore 0x0000000000009010 UIKitCore + 16',
9
+ '',
10
+ 'Binary Images:',
11
+ '0x1000 App arm64 <A> /x/App.app/App',
12
+ ].join('\n');
13
+ describe('formatAppHang', () => {
14
+ it('formats a sample with what the main thread did and the top of its stack', () => {
15
+ const out = (0, format_app_hang_1.formatAppHang)('com.example.app', {
16
+ bundleId: 'com.example.app',
17
+ pid: 42,
18
+ hangId: 3,
19
+ ended: false,
20
+ durationMs: 1200,
21
+ mainThreadState: 'waiting',
22
+ mainThreadCpuMs: 4,
23
+ mainThreadKernelMs: 1,
24
+ appCpuMs: 30,
25
+ pageIns: 0,
26
+ footprintBytes: 412 * 2 ** 20,
27
+ stackTrace,
28
+ }, 2);
29
+ expect(out).toBe([
30
+ 'com.example.app main thread unresponsive for 1200 ms (hang 3, pid 42, waiting, main thread cpu 4 ms (1 ms in kernel), app cpu 30 ms, page-ins 0, footprint 412 MB)',
31
+ ' 0 libsystem_kernel.dylib 0x0000000000020020 __semwait_signal + 8',
32
+ ' 1 App 0x0000000000001010 App.Feed.load() + 52',
33
+ ].join('\n'));
34
+ });
35
+ it('leaves out what the app could not read and stops before the binary images', () => {
36
+ const out = (0, format_app_hang_1.formatAppHang)('com.example.app', {
37
+ bundleId: 'com.example.app',
38
+ pid: 42,
39
+ hangId: 3,
40
+ ended: false,
41
+ durationMs: 1200,
42
+ stackTrace,
43
+ });
44
+ expect(out.split('\n')[0]).toBe('com.example.app main thread unresponsive for 1200 ms (hang 3, pid 42)');
45
+ expect(out).not.toContain('Binary Images');
46
+ expect(out.split('\n')).toHaveLength(4);
47
+ });
48
+ it('formats a hang end on one line', () => {
49
+ const out = (0, format_app_hang_1.formatAppHang)('com.example.app', {
50
+ bundleId: 'com.example.app',
51
+ pid: 42,
52
+ hangId: 3,
53
+ ended: true,
54
+ durationMs: 4500,
55
+ });
56
+ expect(out).toBe('com.example.app main thread hang ended after 4500 ms (hang 3, pid 42)');
57
+ });
58
+ });
59
+ //# sourceMappingURL=format-app-hang.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-app-hang.test.js","sourceRoot":"","sources":["../../src/lib/format-app-hang.test.ts"],"names":[],"mappings":";;AAAA,uDAAkD;AAElD,MAAM,UAAU,GAAG;IACjB,cAAc;IACd,sEAAsE;IACtE,mDAAmD;IACnD,mDAAmD;IACnD,EAAE;IACF,gBAAgB;IAChB,qCAAqC;CACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,GAAG,GAAG,IAAA,+BAAa,EACvB,iBAAiB,EACjB;YACE,QAAQ,EAAE,iBAAiB;YAC3B,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,SAAS;YAC1B,eAAe,EAAE,CAAC;YAClB,kBAAkB,EAAE,CAAC;YACrB,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,CAAC;YACV,cAAc,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE;YAC7B,UAAU;SACX,EACD,CAAC,CACF,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CACd;YACE,oKAAoK;YACpK,wEAAwE;YACxE,qDAAqD;SACtD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,GAAG,GAAG,IAAA,+BAAa,EAAC,iBAAiB,EAAE;YAC3C,QAAQ,EAAE,iBAAiB;YAC3B,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,IAAI;YAChB,UAAU;SACX,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACzG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,IAAA,+BAAa,EAAC,iBAAiB,EAAE;YAC3C,QAAQ,EAAE,iBAAiB;YAC3B,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lim",
3
- "version": "0.47.1",
3
+ "version": "0.48.0",
4
4
  "description": "Use remote XCode, Gradle, iOS Simulator, Android Emulator and more to build and test apps from Linux, Windows or macOS.",
5
5
  "bin": {
6
6
  "lim": "./bin/run.js",
@@ -26,7 +26,7 @@
26
26
  "test": "jest"
27
27
  },
28
28
  "dependencies": {
29
- "@limrun/api": "0.65.1",
29
+ "@limrun/api": "0.66.0",
30
30
  "@oclif/core": "^4",
31
31
  "cli-progress": "^3.12.0",
32
32
  "cli-table3": "^0.6.5",