@tapflowio/ios-agent 0.16.0 → 0.18.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.
@@ -1 +1 @@
1
- {"version":3,"file":"simctl.d.ts","sourceRoot":"","sources":["../src/simctl.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACxC,UAAU,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC/C;AAaD,eAAO,MAAM,aAAa,EAAE,YAiC3B,CAAA"}
1
+ {"version":3,"file":"simctl.d.ts","sourceRoot":"","sources":["../src/simctl.ts"],"names":[],"mappings":"AAwBA,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;kDAC8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;2EAE2E;AAC3E,qBAAa,mBAAoB,SAAQ,KAAK;CAAG;AAEjD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACxC,UAAU,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9C;uFACmF;IACnF,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACvE;AA+ED,eAAO,MAAM,aAAa,EAAE,YA6D3B,CAAA"}
package/dist/simctl.js CHANGED
@@ -1,8 +1,10 @@
1
- import { execFile } from 'child_process';
1
+ import { execFile, spawn } from 'child_process';
2
2
  import { promisify } from 'util';
3
3
  import { createLogger } from '@tapflowio/agent-core';
4
4
  const logger = createLogger('ios-agent:simctl');
5
5
  const execFileAsync = promisify(execFile);
6
+ // stderr is only ever read to build an error message, so a runaway one is pure waste.
7
+ const MAX_STDERR_BYTES = 64 * 1024;
6
8
  function isCoreSimulatorVersionMismatch(err) {
7
9
  const msg = err.stderr
8
10
  ?? err.message ?? '';
@@ -14,6 +16,11 @@ async function restartCoreSimulatorService() {
14
16
  await execFileAsync('killall', ['-9', 'com.apple.CoreSimulator.CoreSimulatorService']).catch(() => { });
15
17
  await new Promise((r) => setTimeout(r, 3000));
16
18
  }
19
+ /** Thrown when a call blows its `maxBuffer`. Distinguishable on purpose: for the clipboard, an
20
+ * over-sized read means the app DID copy and the text simply cannot be carried, whereas a
21
+ * timeout means nothing is known — and the two need opposite recovery. */
22
+ export class OutputTooLargeError extends Error {
23
+ }
17
24
  const CORE_SIM_DOCS_URL = 'https://tapflow.dev/guide/troubleshooting#ios-simulator-service-version-mismatch';
18
25
  function coreSimServiceError() {
19
26
  return new Error('CoreSimulatorService version mismatch — the service could not be recovered automatically.\n' +
@@ -21,6 +28,73 @@ function coreSimServiceError() {
21
28
  ' killall -9 com.apple.CoreSimulator.CoreSimulatorService\n\n' +
22
29
  `See ${CORE_SIM_DOCS_URL}`);
23
30
  }
31
+ // `input` rules out execFile (it has no stdin channel), so this spawns and pumps stdin itself.
32
+ // Everything else — timeout, stdout ceiling, exit-code handling — is reproduced here rather
33
+ // than inherited, which is the price of `pbcopy` not being expressible as arguments.
34
+ function runWithOpts(opts, args) {
35
+ return new Promise((resolve, reject) => {
36
+ const proc = spawn('xcrun', ['simctl', ...args]);
37
+ // Accumulate BYTES and decode once at the end. Decoding each chunk as it arrives splits
38
+ // multi-byte characters at pipe boundaries and turns them into U+FFFD — execFile avoided
39
+ // that by running stdout through a StringDecoder, and this path has to reproduce it.
40
+ // Keeping bytes also makes the maxBuffer accounting exact instead of measuring a string
41
+ // that may already contain replacement characters.
42
+ const chunks = [];
43
+ let bytes = 0;
44
+ const stderrChunks = [];
45
+ let stderrBytes = 0;
46
+ let over = false;
47
+ let settled = false;
48
+ let timer;
49
+ const finish = (err, out) => {
50
+ if (settled)
51
+ return;
52
+ settled = true;
53
+ clearTimeout(timer);
54
+ if (err)
55
+ reject(err);
56
+ else
57
+ resolve(out ?? '');
58
+ };
59
+ proc.stdout?.on('data', (d) => {
60
+ chunks.push(d);
61
+ bytes += d.length;
62
+ if (opts.maxBuffer && bytes > opts.maxBuffer) {
63
+ over = true;
64
+ proc.kill('SIGKILL');
65
+ finish(new OutputTooLargeError('stdout maxBuffer length exceeded'));
66
+ }
67
+ });
68
+ // Same treatment as stdout: keep bytes, decode once. Bounded like execFile bounded it.
69
+ proc.stderr?.on('data', (d) => {
70
+ if (stderrBytes >= MAX_STDERR_BYTES)
71
+ return;
72
+ // Slice to the remaining budget: testing before pushing the WHOLE chunk let a single
73
+ // `data` event carry the total past the ceiling the constant names.
74
+ const room = MAX_STDERR_BYTES - stderrBytes;
75
+ const slice = d.length > room ? d.subarray(0, room) : d;
76
+ stderrChunks.push(slice);
77
+ stderrBytes += slice.length;
78
+ });
79
+ proc.on('error', (e) => finish(e));
80
+ proc.on('close', (code) => {
81
+ if (over)
82
+ return;
83
+ const stdout = Buffer.concat(chunks).toString('utf8');
84
+ const stderr = Buffer.concat(stderrChunks).toString('utf8');
85
+ finish(code === 0 ? undefined : new Error(stderr.trim() || `simctl ${args[0]} exited ${code}`), stdout);
86
+ });
87
+ if (opts.timeoutMs) {
88
+ timer = setTimeout(() => { proc.kill('SIGKILL'); finish(new Error(`simctl ${args[0]} timed out`)); }, opts.timeoutMs);
89
+ }
90
+ if (opts.input !== undefined) {
91
+ // An unhandled stream 'error' would take the process down, so route it to the promise.
92
+ proc.stdin.on('error', (e) => finish(e));
93
+ proc.stdin.write(opts.input);
94
+ proc.stdin.end();
95
+ }
96
+ });
97
+ }
24
98
  export const defaultRunner = {
25
99
  async exec(...args) {
26
100
  try {
@@ -36,8 +110,35 @@ export const defaultRunner = {
36
110
  const { stdout } = await execFileAsync('xcrun', ['simctl', ...args]);
37
111
  return stdout;
38
112
  }
39
- catch {
40
- throw coreSimServiceError();
113
+ catch (retryErr) {
114
+ // Only claim the version mismatch if that is still what failed. Reporting it for an
115
+ // unrelated failure hides the real cause — and erases `OutputTooLargeError`, which
116
+ // `getPasteboard` needs to distinguish "the app copied something too big to carry"
117
+ // from "the read failed", the two having opposite recovery.
118
+ throw isCoreSimulatorVersionMismatch(retryErr) ? coreSimServiceError() : retryErr;
119
+ }
120
+ }
121
+ },
122
+ async execWithOpts(opts, ...args) {
123
+ try {
124
+ return await runWithOpts(opts, args);
125
+ }
126
+ catch (err) {
127
+ // Same self-healing every other simctl call gets. Before this existed the clipboard was
128
+ // the one path that could not recover from a service version mismatch.
129
+ if (!isCoreSimulatorVersionMismatch(err))
130
+ throw err;
131
+ logger.warn('CoreSimulatorService version mismatch — restarting service and retrying');
132
+ await restartCoreSimulatorService();
133
+ try {
134
+ return await runWithOpts(opts, args);
135
+ }
136
+ catch (retryErr) {
137
+ // Only claim the version mismatch if that is still what failed. Reporting it for an
138
+ // unrelated failure hides the real cause — and erases `OutputTooLargeError`, which
139
+ // `getPasteboard` needs to distinguish "the app copied something too big to carry"
140
+ // from "the read failed", the two having opposite recovery.
141
+ throw isCoreSimulatorVersionMismatch(retryErr) ? coreSimServiceError() : retryErr;
41
142
  }
42
143
  }
43
144
  },
@@ -55,8 +156,12 @@ export const defaultRunner = {
55
156
  const { stdout } = await execFileAsync('xcrun', ['simctl', ...args], { encoding: 'buffer' });
56
157
  return stdout;
57
158
  }
58
- catch {
59
- throw coreSimServiceError();
159
+ catch (retryErr) {
160
+ // Only claim the version mismatch if that is still what failed. Reporting it for an
161
+ // unrelated failure hides the real cause — and erases `OutputTooLargeError`, which
162
+ // `getPasteboard` needs to distinguish "the app copied something too big to carry"
163
+ // from "the read failed", the two having opposite recovery.
164
+ throw isCoreSimulatorVersionMismatch(retryErr) ? coreSimServiceError() : retryErr;
60
165
  }
61
166
  }
62
167
  },
@@ -1 +1 @@
1
- {"version":3,"file":"simctl.js","sourceRoot":"","sources":["../src/simctl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simctl.js","sourceRoot":"","sources":["../src/simctl.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tapflowio/ios-agent",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "iOS simulator agent for tapflow — xcrun simctl control and screen streaming",
5
5
  "keywords": [
6
6
  "tapflow",
@@ -53,15 +53,16 @@
53
53
  },
54
54
  "dependencies": {
55
55
  "ws": "^8.21.1",
56
- "@tapflowio/agent-core": "0.16.0",
57
- "@tapflowio/audiotap-helper": "0.2.6"
56
+ "@tapflowio/agent-core": "0.18.0",
57
+ "@tapflowio/audiotap-helper": "0.2.8"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@types/node": "^20.19.43",
61
61
  "@types/ws": "^8.0.0",
62
62
  "typescript": "^5.0.0",
63
63
  "vitest": "^4.1.10",
64
- "@tapflowio/relay": "0.16.0"
64
+ "@tapflowio/relay": "0.18.0",
65
+ "@tapflowio/test-utils": "0.0.0"
65
66
  },
66
67
  "scripts": {
67
68
  "postinstall": "node -e \"if (process.platform === 'darwin') { require('fs').readdirSync('bin').forEach(f => require('fs').chmodSync('bin/' + f, 0o755)) }\"",