@tapflowio/ios-agent 0.18.0 → 0.20.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.
Files changed (42) hide show
  1. package/README.md +1 -1
  2. package/bin/TapflowNetFilter.app/Contents/CodeResources +0 -0
  3. package/bin/TapflowNetFilter.app/Contents/Info.plist +48 -0
  4. package/bin/TapflowNetFilter.app/Contents/Library/SystemExtensions/dev.tapflow.netfilter.ext.systemextension/Contents/Info.plist +58 -0
  5. package/bin/TapflowNetFilter.app/Contents/Library/SystemExtensions/dev.tapflow.netfilter.ext.systemextension/Contents/MacOS/dev.tapflow.netfilter.ext +0 -0
  6. package/bin/TapflowNetFilter.app/Contents/Library/SystemExtensions/dev.tapflow.netfilter.ext.systemextension/Contents/_CodeSignature/CodeResources +123 -0
  7. package/bin/TapflowNetFilter.app/Contents/Library/SystemExtensions/dev.tapflow.netfilter.ext.systemextension/Contents/embedded.provisionprofile +0 -0
  8. package/bin/TapflowNetFilter.app/Contents/MacOS/TapflowNetFilter +0 -0
  9. package/bin/TapflowNetFilter.app/Contents/PkgInfo +1 -0
  10. package/bin/TapflowNetFilter.app/Contents/_CodeSignature/CodeResources +151 -0
  11. package/bin/TapflowNetFilter.app/Contents/embedded.provisionprofile +0 -0
  12. package/bin/libtapflow-nethook.dylib +0 -0
  13. package/dist/DeviceChromeLoader.d.ts +2 -45
  14. package/dist/DeviceChromeLoader.d.ts.map +1 -1
  15. package/dist/DeviceChromeLoader.js.map +1 -1
  16. package/dist/IOSAgent.d.ts +196 -3
  17. package/dist/IOSAgent.d.ts.map +1 -1
  18. package/dist/IOSAgent.js +782 -128
  19. package/dist/IOSAgent.js.map +1 -1
  20. package/dist/KeyboardHelperDaemon.d.ts.map +1 -1
  21. package/dist/KeyboardHelperDaemon.js +2 -1
  22. package/dist/KeyboardHelperDaemon.js.map +1 -1
  23. package/dist/MjpegStreamer.d.ts.map +1 -1
  24. package/dist/MjpegStreamer.js +9 -1
  25. package/dist/MjpegStreamer.js.map +1 -1
  26. package/dist/SimctlWrapper.d.ts +70 -1
  27. package/dist/SimctlWrapper.d.ts.map +1 -1
  28. package/dist/SimctlWrapper.js +118 -3
  29. package/dist/SimctlWrapper.js.map +1 -1
  30. package/dist/SimulatorNetwork.d.ts +369 -0
  31. package/dist/SimulatorNetwork.d.ts.map +1 -0
  32. package/dist/SimulatorNetwork.js +899 -0
  33. package/dist/SimulatorNetwork.js.map +1 -0
  34. package/dist/TouchHelper.d.ts +53 -14
  35. package/dist/TouchHelper.d.ts.map +1 -1
  36. package/dist/TouchHelper.js +237 -59
  37. package/dist/TouchHelper.js.map +1 -1
  38. package/dist/childProcessKill.d.ts +3 -0
  39. package/dist/childProcessKill.d.ts.map +1 -0
  40. package/dist/childProcessKill.js +19 -0
  41. package/dist/childProcessKill.js.map +1 -0
  42. package/package.json +13 -10
@@ -1,7 +1,8 @@
1
- import type { Device, DeviceAgent, UIElement } from '@tapflowio/agent-core';
1
+ import type { Device, DeviceAgent, NetworkControlCapability, NetworkStatePayload, UIElement } from '@tapflowio/agent-core';
2
2
  export declare const IOS_BUTTON_ALIASES: Record<string, string>;
3
3
  import { type SleepBlocker } from '@tapflowio/agent-core/utils';
4
4
  import { SimctlWrapper } from './SimctlWrapper.js';
5
+ import { SimulatorNetwork } from './SimulatorNetwork.js';
5
6
  export interface IOSAgentOptions {
6
7
  fps?: number;
7
8
  intervalMs?: number;
@@ -14,9 +15,13 @@ export interface IOSAgentOptions {
14
15
  token?: string;
15
16
  /** Handshake(연결~agent:registered) 타임아웃 ms. 기본 10초, 테스트용 주입 가능. */
16
17
  handshakeTimeoutMs?: number;
18
+ /** The three-layer network control (#607). Injectable so a test can point it somewhere harmless;
19
+ * defaults to one wired to this agent's simctl (and, under vitest, to nothing real). */
20
+ network?: SimulatorNetwork;
17
21
  }
18
- export declare class IOSAgent implements DeviceAgent {
22
+ export declare class IOSAgent implements DeviceAgent, NetworkControlCapability {
19
23
  private readonly simctl;
24
+ private readonly network;
20
25
  private readonly fps;
21
26
  private readonly intervalMs;
22
27
  private readonly reconnectDelays;
@@ -25,7 +30,49 @@ export declare class IOSAgent implements DeviceAgent {
25
30
  private readonly token?;
26
31
  private readonly handshakeTimeoutMs;
27
32
  private ws;
33
+ /** Send on the control socket, if there is one. The `?.` is the point: 66 call sites relied on a send
34
+ * being a no-op between reconnects, and this preserves that exactly.
35
+ *
36
+ * Typed with `AgentControlOutbound`, which is why this exists — an agent's literal used to reach `ws.send`
37
+ * with nothing checking it, and #489/#490 are what that cost. *
38
+ * **The guard is not defensive tidying.** `ws.send` on anything other than OPEN takes the `sendAfterClose`
39
+ * path, which adds the payload to a buffer nobody will flush and neither throws nor emits — so a reply
40
+ * sent to a closing socket is indistinguishable from a delivered one at the call site. `reportResources`
41
+ * has always checked; this did not, and the boot answers this file now owes a caller are exactly the
42
+ * messages whose purpose is to end someone's wait.
43
+ *
44
+ * The body is held character for character by `scripts/__tests__/agentSendTyped.test.mjs`, so the comment
45
+ * lives out here: that check strips comments and matches the body exactly, having watched three earlier
46
+ * drafts get bypassed by a renamed socket. */
47
+ private sendMsg;
48
+ /** Send on a socket the caller has already established. Takes the socket **as an argument** rather than
49
+ * reading `this.ws`, and that is deliberate: the call sites that use it sit behind an entry guard
50
+ * (`if (!this.ws) return`), and today deleting one of those guards is a compile error. Reading
51
+ * `this.ws` here — or asserting it with `!` — would make the guard optional to the compiler and turn
52
+ * its removal into a runtime `TypeError` instead. It also serves the `agent:register` send, which runs
53
+ * inside `onopen` on a local socket. */
54
+ private sendOn;
28
55
  private deviceStates;
56
+ /**
57
+ * Devices **this agent booted**, by device id.
58
+ *
59
+ * Separate from `DeviceState.booted` because the two answer different questions and have different
60
+ * lifetimes. `booted` is liveness and is a cache: `initDeviceStates` rebuilds the whole map on
61
+ * every `agent:registered`, so it does not survive a reconnect. This does — the agent process is
62
+ * the same one across a reconnect — and it is what says *which* device is tapflow's when a
63
+ * developer has a second simulator of their own open.
64
+ *
65
+ * Without it, a reconnect on a two-simulator desk left the capability entry points asking simctl,
66
+ * getting two live devices, and refusing both. Written only where a boot succeeds; never by
67
+ * `ackInput`, which verifies liveness and proves nothing about ownership.
68
+ *
69
+ * **The `DeviceAgent.boot`/`shutdown` delegates do not touch this**, and that is deliberate: they
70
+ * hand a device id straight to simctl without opening a session, so a device they start is not one
71
+ * this agent is driving. Nothing in the repo calls either — the same position `stream()` is in — so
72
+ * wiring ownership through them would be a mechanism built for a caller that does not exist. A
73
+ * future caller that wants both should go through the boot handler rather than around it.
74
+ */
75
+ private readonly ownedDevices;
29
76
  private lastBundleIds;
30
77
  private readonly uiTreeReader;
31
78
  private readonly sleepBlocker;
@@ -47,6 +94,21 @@ export declare class IOSAgent implements DeviceAgent {
47
94
  private startBinaryStream;
48
95
  private wsClientOptions;
49
96
  private openStreamWs;
97
+ /** Retire the boot that holds the current seq, recording what retired it, and return the new seq.
98
+ *
99
+ * **Three callers, and the third is why this is a method.** A new boot supersedes the one in flight, a
100
+ * shutdown abandons it, and losing the relay invalidates it — that last one lives in the reconnect path
101
+ * (`cleanupDeviceState`'s callers) and is easy to miss when reading `handleDeviceBoot` alone. Spreading
102
+ * the reason across three `state.bootSeq++` lines makes forgetting one silent; here it is a parameter. */
103
+ private bumpBootSeq;
104
+ /** Answer a boot this agent has stopped running. Called at every point that abandons one.
105
+ *
106
+ * **Only when a correlator exists**, which is the same rule the input path settled on (#489): a reply
107
+ * nobody is waiting for is not an answer, and the dashboard reports every *uncorrelated*
108
+ * `device:boot-error` as a failure — deliberately, since Android's dead-stream report has no id it could
109
+ * carry (#426). So sending one for a boot with no correlator would put an error toast on a tester's
110
+ * screen for a device that is booting normally. */
111
+ private abandonBoot;
50
112
  private handleDeviceBoot;
51
113
  private bootWithZombieRecovery;
52
114
  private handleDeviceShutdown;
@@ -55,6 +117,34 @@ export declare class IOSAgent implements DeviceAgent {
55
117
  private readonly parkedSentinels;
56
118
  private markSentinel;
57
119
  private sentinelParked;
120
+ /** The correlator on an input an ack answers, or `null` if the frame cannot be attributed.
121
+ *
122
+ * A local capture rather than a guard at the top of the dispatcher, and that is the point: a guard there
123
+ * would not narrow `msg.requestId` inside the case, so the shortest way to satisfy the reply's required
124
+ * field would be `msg.requestId!` — the assertion removed from `open-url` and then from clipboard. This
125
+ * hands back a `string` the case can close over.
126
+ *
127
+ * It is unvalidated JSON, so the check is real work rather than ceremony: the declaration is required and
128
+ * every in-repo sender is typed against it, and #444 made the relay refuse an empty one — but this agent may
129
+ * be talking to a relay older than that, and `mcp-server`'s tool
130
+ * schemas are bare `z.string()` so a model can produce `''`. */
131
+ private correlatorOf;
132
+ private ackNoSession;
133
+ /**
134
+ * Why a write was refused. The helper's boolean says only "no".
135
+ *
136
+ * `kind` matters because the two questions were decided at different times. Readiness is about now;
137
+ * a continuation frame's fate was decided when the gesture opened. A gesture whose opening frame
138
+ * was refused inside the start-up window owns nothing, so its terminal frame can never land no
139
+ * matter how ready the helper has since become — and reading readiness first answered `malformed`
140
+ * ("never retry") for precisely the case `channel-starting` exists to serve. Ownership is therefore
141
+ * checked first for continuations, which is also the right answer when the helper died mid-gesture
142
+ * and its replacement is still starting: waiting would not help either.
143
+ *
144
+ * Safe to read at the ack site rather than inside the write, because iOS writes are synchronous —
145
+ * but only for the question readiness answers. That is why ownership is asked separately.
146
+ */
147
+ private refusalReason;
58
148
  private ackInput;
59
149
  private isBooted;
60
150
  private handleRelayMessage;
@@ -74,13 +164,116 @@ export declare class IOSAgent implements DeviceAgent {
74
164
  * (`AndroidAgent.ts:1429`); these do the same. Throwing beats falling back to simctl's `booted`
75
165
  * alias, which would quietly act on whichever simulator happened to be up. */
76
166
  installApp(appPath: string): Promise<void>;
167
+ /** The device a session is driving, or undefined when nothing is booted. */
168
+ /**
169
+ * The session's device, **only while it is up**.
170
+ *
171
+ * `deviceStates` holds one entry per *registered* simulator, not per running one, so this used to
172
+ * answer for a device that was shut down — or never booted. The network path is where that costs
173
+ * something: a toggle after a shutdown writes the kernel rule for a dead udid, and `arm()` is the
174
+ * only thing that clears it, which now happens on the *next* boot of that device. Until then the
175
+ * host is dropping flows for nothing, and a simulator that reuses the udid comes up offline.
176
+ *
177
+ * **`booted` alone is not the check, and reading it as one is a regression this shipped once.**
178
+ * The flag is a cache, not the truth: `initDeviceStates` runs on `agent:registered`, which is every
179
+ * *reconnect* and not only the first connection, so it is `false` for a simulator that has been up
180
+ * the whole time. Gated on the flag alone, a relay restart left the toggle answering
181
+ * `No booted device` for a running device and left `network:request-state` — the message a viewer's
182
+ * re-join sends, which exists precisely for this moment — silently unanswered, so the control never
183
+ * left `waiting`.
184
+ *
185
+ * So it falls back to asking simctl and caches the answer, which is what `ackInput` already does
186
+ * with the same flag and for the same reason. That is also why this is async.
187
+ */
188
+ private deviceFor;
189
+ /**
190
+ * Send the current state to a session.
191
+ *
192
+ * Uncorrelated on purpose: this answers `device:ready` and a viewer's re-join, neither of which is a
193
+ * request anyone is waiting on. Silent with no device, for the same reason `network:error` would be
194
+ * addressed to nobody.
195
+ */
196
+ private reportNetworkState;
197
+ /**
198
+ * A device that was offline stopped being enforced — tell whoever is watching it.
199
+ *
200
+ * **Uncorrelated, and it has to be**: nobody asked. `network:error` is the wrong carrier for the
201
+ * same reason — that type is *"a `network:set` that could not be dispatched"*, and this is not a
202
+ * request failing. `network:state` already supports an unsolicited frame; the viewer re-join path
203
+ * has been sending one since #614.
204
+ *
205
+ * **Every session holding the device, not one.** A device can sit behind two sessions, and the one
206
+ * that happened to make the last request is not necessarily the one whose tester is looking at it.
207
+ *
208
+ * Synchronous on purpose: `deviceFor` asks simctl before believing a device is up, and this runs
209
+ * from a timer while something has just gone wrong with that device. The state being reported is
210
+ * about the filter, not about whether the simulator is still booted.
211
+ */
212
+ private reportEnforcementLost;
213
+ private handleNetworkSet;
214
+ /**
215
+ * The two capability entry points, which resolve their device the way every other one on this class
216
+ * does — **`soleDeviceState`, not the first key in the map.**
217
+ *
218
+ * `deviceStates` holds one entry per *registered* simulator and this Mac reports dozens, so
219
+ * `keys().next()` is whichever simctl listed first, almost always a shut-down one. That was wrong
220
+ * before the liveness check and became a hard failure after it: `deviceFor` answers `undefined` for
221
+ * a shut-down device, so both of these threw `No booted device` while a booted device sat right
222
+ * there. `soleDeviceState` filters on `booted` and refuses to guess between two, which is the
223
+ * policy this class already settled and wrote down — these were simply not using it.
224
+ *
225
+ * `deviceFor` stays for the wire path, where the caller names a session and the only open question
226
+ * is whether that device is up.
227
+ */
228
+ setNetworkOffline(offline: boolean): Promise<NetworkStatePayload>;
229
+ networkState(): Promise<NetworkStatePayload>;
77
230
  launchApp(bundleId: string): Promise<void>;
78
231
  /** The one booted session, or undefined when there is no unambiguous answer. Callers that can
79
232
  * reasonably do nothing (input) use this; callers that owe the user a result use
80
233
  * `soleDeviceState`, which throws instead. */
81
234
  private liveDeviceState;
235
+ /** The one device out of `live`, or the refusal. Factored so the async resolver below answers
236
+ * ambiguity with the same words rather than its own. */
237
+ private soleOf;
238
+ /**
239
+ * **The synchronous resolver, and `stream()` is the only caller left.**
240
+ *
241
+ * Everything else that resolves a device for a capability call awaits `soleLiveDeviceState`,
242
+ * which asks simctl rather than trusting `booted` — a flag `initDeviceStates` clears on every
243
+ * reconnect. `stream()` returns a `ReadableStream` and is part of `DeviceAgent`, so it cannot
244
+ * await without changing that interface across both agents.
245
+ *
246
+ * **It is deliberately left with the stale flag, and nothing was added to paper over that.** A
247
+ * refresh that marked every simulator simctl reports as booted was written and removed: it also
248
+ * marked the ones a developer had open in Simulator.app, which destroys the very thing `booted`
249
+ * disambiguates by — *the device this agent booted* — and made all the callers above refuse with
250
+ * "2 booted devices" on the common two-simulator desk. Fire-and-forget, it could also resurrect a
251
+ * flag a `device:shutdown` had just cleared, with no path back.
252
+ *
253
+ * That was a mechanism for a method **nothing in this repo calls**. A future caller needs the
254
+ * interface decision, not a guess: make `stream()` async across `DeviceAgent`, or give it an
255
+ * explicit device argument.
256
+ */
82
257
  private soleDeviceState;
83
- private soleDeviceId;
258
+ /**
259
+ * `soleDeviceState`, but **it asks simctl before believing that nothing is booted**.
260
+ *
261
+ * `booted` is a cache and `initDeviceStates` clears it on `agent:registered` — every reconnect,
262
+ * not only the first connection. So after a relay restart every flag reads false while the
263
+ * simulators are still running, and a resolver that trusts the cache refuses a live device until
264
+ * something else happens to refresh it. On the wire path that is `deviceFor`; these two entry
265
+ * points have no session id to work from, so without this they stay broken.
266
+ *
267
+ * Only the empty case pays for the `listDevices` call: a cache that already names a booted device
268
+ * is not wrong, just possibly incomplete, and the ambiguity refusal is stricter for having fewer
269
+ * candidates rather than looser.
270
+ *
271
+ * **Every entry point that can await now comes through here** — the network pair, `installApp`,
272
+ * `launchApp`, `queryUITree`, `screenshot`, `openUrl`. `stream()` cannot, and `soleDeviceState`
273
+ * above says what that costs and why nothing was bolted on to hide it.
274
+ */
275
+ private soleLiveDeviceState;
276
+ private soleLiveDeviceId;
84
277
  queryUITree(): Promise<UIElement[]>;
85
278
  private audioEnabled;
86
279
  private startAudioCapture;
@@ -1 +1 @@
1
- {"version":3,"file":"IOSAgent.d.ts","sourceRoot":"","sources":["../src/IOSAgent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IOSAgent.d.ts","sourceRoot":"","sources":["../src/IOSAgent.ts"],"names":[],"mappings":"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"}