rnxsim 0.1.427 → 0.1.428
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/cli/commands/control.ts +17 -1
- package/cli/commands/flow.ts +5 -9
- package/cli/commands/inspect/core.ts +1 -0
- package/cli/outbound-endpoints.ts +5 -2
- package/cli/self-invocation.ts +24 -0
- package/detox/index.ts +10 -36
- package/dist-lib/agent-daemon-client.cjs +48 -24
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +100 -76
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +2 -25
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +324 -218
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +162 -78
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +43 -24
- package/dist-lib/metro-production-bundle.mjs +43 -24
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +452 -336
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/src/host/websocket-proxy.ts +197 -92
- package/src/metro-production-bundle.ts +55 -30
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -48,10 +48,15 @@ __export(agent_sessions_exports, {
|
|
|
48
48
|
module.exports = __toCommonJS(agent_sessions_exports);
|
|
49
49
|
var import_node_child_process = require("node:child_process");
|
|
50
50
|
var import_node_crypto2 = require("node:crypto");
|
|
51
|
-
var
|
|
52
|
-
var
|
|
51
|
+
var import_node_fs3 = __toESM(require("node:fs"), 1);
|
|
52
|
+
var import_node_path4 = __toESM(require("node:path"), 1);
|
|
53
53
|
var import_node_readline = __toESM(require("node:readline"), 1);
|
|
54
54
|
|
|
55
|
+
// cli/self-invocation.ts
|
|
56
|
+
var import_node_fs = require("node:fs");
|
|
57
|
+
var import_node_path = require("node:path");
|
|
58
|
+
var import_node_url = require("node:url");
|
|
59
|
+
|
|
55
60
|
// src/public-brand.ts
|
|
56
61
|
var name = "rnx";
|
|
57
62
|
var rnxPublicBrand = Object.freeze({
|
|
@@ -66,9 +71,28 @@ var rnxPublicBrand = Object.freeze({
|
|
|
66
71
|
var IS_STANDALONE = typeof __SOOTSIM_STANDALONE__ !== "undefined" && __SOOTSIM_STANDALONE__;
|
|
67
72
|
|
|
68
73
|
// cli/self-invocation.ts
|
|
74
|
+
function sourceEntryPath() {
|
|
75
|
+
try {
|
|
76
|
+
const candidate = (0, import_node_path.join)((0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__sootsim_import_meta_url)), "bin.ts");
|
|
77
|
+
return (0, import_node_fs.existsSync)(candidate) ? candidate : null;
|
|
78
|
+
} catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function isCliEntry(path4) {
|
|
83
|
+
const name2 = (0, import_node_path.basename)(path4);
|
|
84
|
+
return name2 === "bin.ts" || name2 === "bin.js";
|
|
85
|
+
}
|
|
69
86
|
function rnxSelfInvocation() {
|
|
70
87
|
if (IS_STANDALONE) return { executable: process.execPath, prefixArgs: [] };
|
|
71
88
|
const entry = process.argv[1];
|
|
89
|
+
if (entry && isCliEntry(entry)) {
|
|
90
|
+
return { executable: process.execPath, prefixArgs: [entry] };
|
|
91
|
+
}
|
|
92
|
+
const sourceEntry = sourceEntryPath();
|
|
93
|
+
if (sourceEntry) {
|
|
94
|
+
return { executable: process.execPath, prefixArgs: [sourceEntry] };
|
|
95
|
+
}
|
|
72
96
|
if (!entry) {
|
|
73
97
|
throw new Error(`could not locate the ${rnxPublicBrand.commandName} entry script`);
|
|
74
98
|
}
|
|
@@ -116,23 +140,23 @@ function encodeAgentPromptEnvelope(input) {
|
|
|
116
140
|
|
|
117
141
|
// src/attached-projects.ts
|
|
118
142
|
var import_node_crypto = require("node:crypto");
|
|
119
|
-
var
|
|
120
|
-
var
|
|
143
|
+
var import_node_fs2 = __toESM(require("node:fs"), 1);
|
|
144
|
+
var import_node_path3 = __toESM(require("node:path"), 1);
|
|
121
145
|
|
|
122
146
|
// src/home-paths.ts
|
|
123
147
|
var import_node_os = require("node:os");
|
|
124
|
-
var
|
|
148
|
+
var import_node_path2 = __toESM(require("node:path"), 1);
|
|
125
149
|
var RNX_HOME_ENV = "RNX_HOME";
|
|
126
150
|
function rnxHomeDir() {
|
|
127
151
|
const override = process.env[RNX_HOME_ENV];
|
|
128
|
-
if (override && override.length > 0) return
|
|
129
|
-
return
|
|
152
|
+
if (override && override.length > 0) return import_node_path2.default.resolve(override);
|
|
153
|
+
return import_node_path2.default.join((0, import_node_os.homedir)(), ".rnx");
|
|
130
154
|
}
|
|
131
155
|
function electronDir() {
|
|
132
|
-
return
|
|
156
|
+
return import_node_path2.default.join(rnxHomeDir(), "electron");
|
|
133
157
|
}
|
|
134
158
|
function electronUserDataDir() {
|
|
135
|
-
return
|
|
159
|
+
return import_node_path2.default.join(electronDir(), "userData");
|
|
136
160
|
}
|
|
137
161
|
var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
|
|
138
162
|
|
|
@@ -148,7 +172,7 @@ function getUserDataDir() {
|
|
|
148
172
|
return userDataDir();
|
|
149
173
|
}
|
|
150
174
|
function storeFile() {
|
|
151
|
-
return
|
|
175
|
+
return import_node_path3.default.join(userDataDir(), "attached-projects.json");
|
|
152
176
|
}
|
|
153
177
|
function cloneEmpty() {
|
|
154
178
|
return {
|
|
@@ -162,7 +186,7 @@ function loadStore() {
|
|
|
162
186
|
const file = storeFile();
|
|
163
187
|
let raw;
|
|
164
188
|
try {
|
|
165
|
-
raw =
|
|
189
|
+
raw = import_node_fs2.default.readFileSync(file, "utf8");
|
|
166
190
|
} catch (err) {
|
|
167
191
|
if (err.code === "ENOENT") return cloneEmpty();
|
|
168
192
|
throw err;
|
|
@@ -179,7 +203,7 @@ function loadStore() {
|
|
|
179
203
|
} catch (err) {
|
|
180
204
|
const quarantine = `${file}.corrupt-${Date.now()}`;
|
|
181
205
|
try {
|
|
182
|
-
|
|
206
|
+
import_node_fs2.default.renameSync(file, quarantine);
|
|
183
207
|
console.warn(
|
|
184
208
|
`[sootsim] attached-projects.json was unparseable; quarantined to ${quarantine}. original error: ${err.message}`
|
|
185
209
|
);
|
|
@@ -190,16 +214,16 @@ function loadStore() {
|
|
|
190
214
|
}
|
|
191
215
|
function writeStore(store) {
|
|
192
216
|
const file = storeFile();
|
|
193
|
-
|
|
217
|
+
import_node_fs2.default.mkdirSync(import_node_path3.default.dirname(file), { recursive: true });
|
|
194
218
|
const tmp = `${file}.tmp-${process.pid}-${Date.now()}`;
|
|
195
|
-
const fd =
|
|
219
|
+
const fd = import_node_fs2.default.openSync(tmp, "w", 384);
|
|
196
220
|
try {
|
|
197
|
-
|
|
198
|
-
|
|
221
|
+
import_node_fs2.default.writeFileSync(fd, JSON.stringify(store, null, 2));
|
|
222
|
+
import_node_fs2.default.fsyncSync(fd);
|
|
199
223
|
} finally {
|
|
200
|
-
|
|
224
|
+
import_node_fs2.default.closeSync(fd);
|
|
201
225
|
}
|
|
202
|
-
|
|
226
|
+
import_node_fs2.default.renameSync(tmp, file);
|
|
203
227
|
}
|
|
204
228
|
function mutateStore(fn) {
|
|
205
229
|
const store = loadStore();
|
|
@@ -300,16 +324,16 @@ function updateSessionStatus(id, patch) {
|
|
|
300
324
|
|
|
301
325
|
// src/agent-sessions.ts
|
|
302
326
|
function sessionDir(sessionId) {
|
|
303
|
-
return
|
|
327
|
+
return import_node_path4.default.join(getUserDataDir(), "sessions", sessionId);
|
|
304
328
|
}
|
|
305
329
|
function promptFifoPath(sessionId) {
|
|
306
|
-
return
|
|
330
|
+
return import_node_path4.default.join(sessionDir(sessionId), "prompt.in");
|
|
307
331
|
}
|
|
308
332
|
function eventsFifoPath(sessionId) {
|
|
309
|
-
return
|
|
333
|
+
return import_node_path4.default.join(sessionDir(sessionId), "events.out");
|
|
310
334
|
}
|
|
311
335
|
function transcriptPath(sessionId) {
|
|
312
|
-
return
|
|
336
|
+
return import_node_path4.default.join(getUserDataDir(), "transcripts", `${sessionId}.log`);
|
|
313
337
|
}
|
|
314
338
|
function pidIsAlive(pid, sessionId) {
|
|
315
339
|
if (!pid) return false;
|
|
@@ -319,7 +343,7 @@ function pidIsAlive(pid, sessionId) {
|
|
|
319
343
|
return false;
|
|
320
344
|
}
|
|
321
345
|
if (sessionId) {
|
|
322
|
-
if (!
|
|
346
|
+
if (!import_node_fs3.default.existsSync(sessionDir(sessionId))) return false;
|
|
323
347
|
}
|
|
324
348
|
return true;
|
|
325
349
|
}
|
|
@@ -332,11 +356,11 @@ function resolveSootsimInvocation() {
|
|
|
332
356
|
const resourcesPath = process.resourcesPath;
|
|
333
357
|
if (resourcesPath) {
|
|
334
358
|
const candidates = [
|
|
335
|
-
|
|
336
|
-
|
|
359
|
+
import_node_path4.default.join(resourcesPath, "bin", "sootsim"),
|
|
360
|
+
import_node_path4.default.join(resourcesPath, "bin", `sootsim-${process.platform}-${process.arch}`)
|
|
337
361
|
];
|
|
338
362
|
for (const c of candidates) {
|
|
339
|
-
if (
|
|
363
|
+
if (import_node_fs3.default.existsSync(c)) return { executable: c, prefixArgs: [] };
|
|
340
364
|
}
|
|
341
365
|
}
|
|
342
366
|
}
|
|
@@ -355,15 +379,15 @@ function tryWorkspaceSootsim() {
|
|
|
355
379
|
const sootsimDir = resolveSootsimPackageDir();
|
|
356
380
|
if (!sootsimDir) return null;
|
|
357
381
|
const binaryName = `rnx-${process.platform === "win32" ? "windows" : process.platform}-${process.arch}${process.platform === "win32" ? ".exe" : ""}`;
|
|
358
|
-
const distBinary =
|
|
359
|
-
if (
|
|
360
|
-
const distBin =
|
|
361
|
-
if (
|
|
382
|
+
const distBinary = import_node_path4.default.join(sootsimDir, "dist-bin", binaryName);
|
|
383
|
+
if (import_node_fs3.default.existsSync(distBinary)) return { executable: distBinary, prefixArgs: [] };
|
|
384
|
+
const distBin = import_node_path4.default.join(sootsimDir, "dist-cli", "bin.js");
|
|
385
|
+
if (import_node_fs3.default.existsSync(distBin)) {
|
|
362
386
|
try {
|
|
363
|
-
const src =
|
|
364
|
-
if (
|
|
365
|
-
const srcMtime =
|
|
366
|
-
const buildMtime =
|
|
387
|
+
const src = import_node_path4.default.join(sootsimDir, "cli", "commands", "agent-wrapper.ts");
|
|
388
|
+
if (import_node_fs3.default.existsSync(src)) {
|
|
389
|
+
const srcMtime = import_node_fs3.default.statSync(src).mtimeMs;
|
|
390
|
+
const buildMtime = import_node_fs3.default.statSync(distBin).mtimeMs;
|
|
367
391
|
if (buildMtime < srcMtime) {
|
|
368
392
|
console.warn(
|
|
369
393
|
`[rnx] dist-cli/bin.js is older than agent-wrapper.ts \u2014 rebuild with \`bun run --cwd packages/sootsim build:cli\`.`
|
|
@@ -382,22 +406,22 @@ function tryWorkspaceSootsim() {
|
|
|
382
406
|
function resolveSootsimPackageDir() {
|
|
383
407
|
try {
|
|
384
408
|
const resolved = require.resolve(`${rnxPublicBrand.packageName}/package.json`);
|
|
385
|
-
return
|
|
409
|
+
return import_node_path4.default.dirname(resolved);
|
|
386
410
|
} catch {
|
|
387
411
|
}
|
|
388
412
|
const here = fileFromImportMeta();
|
|
389
413
|
if (!here) return null;
|
|
390
|
-
let cur =
|
|
414
|
+
let cur = import_node_path4.default.dirname(here);
|
|
391
415
|
for (let i = 0; i < 8; i++) {
|
|
392
|
-
const pkg =
|
|
416
|
+
const pkg = import_node_path4.default.join(cur, "package.json");
|
|
393
417
|
try {
|
|
394
|
-
if (
|
|
395
|
-
const parsed = JSON.parse(
|
|
418
|
+
if (import_node_fs3.default.existsSync(pkg)) {
|
|
419
|
+
const parsed = JSON.parse(import_node_fs3.default.readFileSync(pkg, "utf8"));
|
|
396
420
|
if (parsed.name === rnxPublicBrand.packageName) return cur;
|
|
397
421
|
}
|
|
398
422
|
} catch {
|
|
399
423
|
}
|
|
400
|
-
const parent =
|
|
424
|
+
const parent = import_node_path4.default.dirname(cur);
|
|
401
425
|
if (parent === cur) break;
|
|
402
426
|
cur = parent;
|
|
403
427
|
}
|
|
@@ -413,28 +437,28 @@ function fileFromImportMeta() {
|
|
|
413
437
|
}
|
|
414
438
|
}
|
|
415
439
|
async function withStartLock(projectId, provider, fn) {
|
|
416
|
-
const lockDir =
|
|
417
|
-
|
|
440
|
+
const lockDir = import_node_path4.default.join(getUserDataDir(), "locks");
|
|
441
|
+
import_node_fs3.default.mkdirSync(lockDir, { recursive: true });
|
|
418
442
|
try {
|
|
419
|
-
|
|
443
|
+
import_node_fs3.default.chmodSync(lockDir, 448);
|
|
420
444
|
} catch {
|
|
421
445
|
}
|
|
422
|
-
const lockPath =
|
|
446
|
+
const lockPath = import_node_path4.default.join(lockDir, `start-${projectId}-${provider}.lock`);
|
|
423
447
|
const deadline = Date.now() + 4e3;
|
|
424
448
|
let fd = null;
|
|
425
449
|
while (fd === null) {
|
|
426
450
|
try {
|
|
427
|
-
fd =
|
|
451
|
+
fd = import_node_fs3.default.openSync(
|
|
428
452
|
lockPath,
|
|
429
|
-
|
|
453
|
+
import_node_fs3.constants.O_WRONLY | import_node_fs3.constants.O_CREAT | import_node_fs3.constants.O_EXCL,
|
|
430
454
|
384
|
|
431
455
|
);
|
|
432
456
|
} catch (err) {
|
|
433
457
|
if (err.code !== "EEXIST") throw err;
|
|
434
458
|
try {
|
|
435
|
-
const stale = Number(
|
|
459
|
+
const stale = Number(import_node_fs3.default.readFileSync(lockPath, "utf8").trim());
|
|
436
460
|
if (stale && !isProcessAlive(stale)) {
|
|
437
|
-
|
|
461
|
+
import_node_fs3.default.unlinkSync(lockPath);
|
|
438
462
|
continue;
|
|
439
463
|
}
|
|
440
464
|
} catch {
|
|
@@ -448,15 +472,15 @@ async function withStartLock(projectId, provider, fn) {
|
|
|
448
472
|
}
|
|
449
473
|
}
|
|
450
474
|
try {
|
|
451
|
-
|
|
475
|
+
import_node_fs3.default.writeFileSync(fd, String(process.pid));
|
|
452
476
|
return await fn();
|
|
453
477
|
} finally {
|
|
454
478
|
try {
|
|
455
|
-
|
|
479
|
+
import_node_fs3.default.closeSync(fd);
|
|
456
480
|
} catch {
|
|
457
481
|
}
|
|
458
482
|
try {
|
|
459
|
-
|
|
483
|
+
import_node_fs3.default.unlinkSync(lockPath);
|
|
460
484
|
} catch {
|
|
461
485
|
}
|
|
462
486
|
}
|
|
@@ -470,25 +494,25 @@ function isProcessAlive(pid) {
|
|
|
470
494
|
}
|
|
471
495
|
}
|
|
472
496
|
function mkfifoSync(p) {
|
|
473
|
-
const parent =
|
|
474
|
-
|
|
497
|
+
const parent = import_node_path4.default.dirname(p);
|
|
498
|
+
import_node_fs3.default.mkdirSync(parent, { recursive: true });
|
|
475
499
|
try {
|
|
476
|
-
|
|
500
|
+
import_node_fs3.default.chmodSync(parent, 448);
|
|
477
501
|
} catch {
|
|
478
502
|
}
|
|
479
|
-
if (
|
|
503
|
+
if (import_node_fs3.default.existsSync(p)) {
|
|
480
504
|
try {
|
|
481
|
-
const stat =
|
|
505
|
+
const stat = import_node_fs3.default.statSync(p);
|
|
482
506
|
if (stat.isFIFO()) {
|
|
483
507
|
try {
|
|
484
|
-
|
|
508
|
+
import_node_fs3.default.chmodSync(p, 384);
|
|
485
509
|
} catch {
|
|
486
510
|
}
|
|
487
511
|
return;
|
|
488
512
|
}
|
|
489
|
-
|
|
513
|
+
import_node_fs3.default.unlinkSync(p);
|
|
490
514
|
} catch {
|
|
491
|
-
|
|
515
|
+
import_node_fs3.default.unlinkSync(p);
|
|
492
516
|
}
|
|
493
517
|
}
|
|
494
518
|
const result = (0, import_node_child_process.spawnSync)("mkfifo", ["-m", "600", p]);
|
|
@@ -535,10 +559,10 @@ async function startSession(opts) {
|
|
|
535
559
|
const transcript = transcriptPath(session.id);
|
|
536
560
|
mkfifoSync(promptIn);
|
|
537
561
|
mkfifoSync(eventsOut);
|
|
538
|
-
const transcriptDir =
|
|
539
|
-
|
|
562
|
+
const transcriptDir = import_node_path4.default.dirname(transcript);
|
|
563
|
+
import_node_fs3.default.mkdirSync(transcriptDir, { recursive: true });
|
|
540
564
|
try {
|
|
541
|
-
|
|
565
|
+
import_node_fs3.default.chmodSync(transcriptDir, 448);
|
|
542
566
|
} catch {
|
|
543
567
|
}
|
|
544
568
|
const { executable, prefixArgs } = resolveSootsimInvocation();
|
|
@@ -589,7 +613,7 @@ async function startSession(opts) {
|
|
|
589
613
|
}
|
|
590
614
|
}
|
|
591
615
|
try {
|
|
592
|
-
|
|
616
|
+
import_node_fs3.default.rmSync(sessionDir(session.id), { recursive: true, force: true });
|
|
593
617
|
} catch {
|
|
594
618
|
}
|
|
595
619
|
updateSessionStatus(session.id, { status: "ended" });
|
|
@@ -617,18 +641,18 @@ async function sendPrompt(sessionId, prompt) {
|
|
|
617
641
|
);
|
|
618
642
|
}
|
|
619
643
|
const fifo = promptFifoPath(sessionId);
|
|
620
|
-
if (!
|
|
644
|
+
if (!import_node_fs3.default.existsSync(fifo)) {
|
|
621
645
|
throw new AgentSessionError("NO_FIFO", `prompt FIFO missing: ${fifo}`);
|
|
622
646
|
}
|
|
623
|
-
const fd =
|
|
647
|
+
const fd = import_node_fs3.default.openSync(fifo, import_node_fs3.constants.O_WRONLY);
|
|
624
648
|
try {
|
|
625
649
|
const wireText = encodeAgentPromptEnvelope(prompt);
|
|
626
650
|
if (!wireText) {
|
|
627
651
|
throw new AgentSessionError("EMPTY_PROMPT", "prompt text is empty");
|
|
628
652
|
}
|
|
629
|
-
|
|
653
|
+
import_node_fs3.default.writeSync(fd, wireText + "\n");
|
|
630
654
|
} finally {
|
|
631
|
-
|
|
655
|
+
import_node_fs3.default.closeSync(fd);
|
|
632
656
|
}
|
|
633
657
|
updateSessionStatus(sessionId, {
|
|
634
658
|
lastPrompt: prompt.displayText ?? prompt.text,
|
|
@@ -650,7 +674,7 @@ async function endSession(sessionId) {
|
|
|
650
674
|
const base = getUserDataDir();
|
|
651
675
|
if (dir.startsWith(base)) {
|
|
652
676
|
try {
|
|
653
|
-
|
|
677
|
+
import_node_fs3.default.rmSync(dir, { recursive: true, force: true });
|
|
654
678
|
} catch {
|
|
655
679
|
}
|
|
656
680
|
}
|
|
@@ -658,11 +682,11 @@ async function endSession(sessionId) {
|
|
|
658
682
|
}
|
|
659
683
|
function subscribeEvents(sessionId, onEvent) {
|
|
660
684
|
const fifo = eventsFifoPath(sessionId);
|
|
661
|
-
if (!
|
|
685
|
+
if (!import_node_fs3.default.existsSync(fifo)) {
|
|
662
686
|
throw new AgentSessionError("NO_FIFO", `events FIFO missing: ${fifo}`);
|
|
663
687
|
}
|
|
664
|
-
const fd =
|
|
665
|
-
const stream =
|
|
688
|
+
const fd = import_node_fs3.default.openSync(fifo, import_node_fs3.constants.O_RDWR);
|
|
689
|
+
const stream = import_node_fs3.default.createReadStream("", { fd, autoClose: true });
|
|
666
690
|
const rl = import_node_readline.default.createInterface({ input: stream, crlfDelay: Infinity });
|
|
667
691
|
rl.on("line", (line) => {
|
|
668
692
|
const event = parseAgentEventLine(line);
|
|
@@ -673,7 +697,7 @@ function subscribeEvents(sessionId, onEvent) {
|
|
|
673
697
|
if (closed) return;
|
|
674
698
|
closed = true;
|
|
675
699
|
try {
|
|
676
|
-
|
|
700
|
+
import_node_fs3.default.writeSync(fd, "\n");
|
|
677
701
|
} catch {
|
|
678
702
|
}
|
|
679
703
|
try {
|
|
@@ -687,7 +711,7 @@ function subscribeEvents(sessionId, onEvent) {
|
|
|
687
711
|
};
|
|
688
712
|
}
|
|
689
713
|
async function waitForFirstEvent(fifo, predicate, timeoutMs) {
|
|
690
|
-
const fd =
|
|
714
|
+
const fd = import_node_fs3.default.openSync(fifo, import_node_fs3.constants.O_RDWR | import_node_fs3.constants.O_NONBLOCK);
|
|
691
715
|
const buf = Buffer.alloc(8192);
|
|
692
716
|
let leftover = "";
|
|
693
717
|
const deadline = Date.now() + timeoutMs;
|
|
@@ -695,7 +719,7 @@ async function waitForFirstEvent(fifo, predicate, timeoutMs) {
|
|
|
695
719
|
while (Date.now() < deadline) {
|
|
696
720
|
let n = 0;
|
|
697
721
|
try {
|
|
698
|
-
n =
|
|
722
|
+
n = import_node_fs3.default.readSync(fd, buf, 0, buf.length, null);
|
|
699
723
|
} catch (err) {
|
|
700
724
|
if (err.code !== "EAGAIN") throw err;
|
|
701
725
|
n = 0;
|
|
@@ -715,7 +739,7 @@ async function waitForFirstEvent(fifo, predicate, timeoutMs) {
|
|
|
715
739
|
}
|
|
716
740
|
return null;
|
|
717
741
|
} finally {
|
|
718
|
-
|
|
742
|
+
import_node_fs3.default.closeSync(fd);
|
|
719
743
|
}
|
|
720
744
|
}
|
|
721
745
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/cloud.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/cloud.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -2232,15 +2232,6 @@ async function dispatchStatusBarOverride(config) {
|
|
|
2232
2232
|
);
|
|
2233
2233
|
await page.waitForTimeout(50);
|
|
2234
2234
|
}
|
|
2235
|
-
async function dispatchSootsimEventInPage(type, detail) {
|
|
2236
|
-
const page = getPage();
|
|
2237
|
-
await page.evaluate(
|
|
2238
|
-
({ detail: detail2, type: type2 }) => {
|
|
2239
|
-
window.dispatchEvent(new CustomEvent(type2, { detail: detail2 }));
|
|
2240
|
-
},
|
|
2241
|
-
{ detail, type }
|
|
2242
|
-
);
|
|
2243
|
-
}
|
|
2244
2235
|
function createSootSimElement(matcher) {
|
|
2245
2236
|
const el = {
|
|
2246
2237
|
_matcher: matcher,
|
|
@@ -2806,18 +2797,6 @@ var device = {
|
|
|
2806
2797
|
return outPath;
|
|
2807
2798
|
},
|
|
2808
2799
|
_lastRecordingPath: "",
|
|
2809
|
-
// set the engine's ContextMenu animation-progress override. visual-proof
|
|
2810
|
-
// harnesses use this to drive each capture stage to a known animProgress
|
|
2811
|
-
// (matched against the iOS oracle's curve) instead of fighting capture
|
|
2812
|
-
// latency vs. sub-second spring timing. pass null to clear.
|
|
2813
|
-
//
|
|
2814
|
-
// dispatches a host CustomEvent that the engine forwards to the tenant
|
|
2815
|
-
// worker (see shell-event-registry.ts + input-bridge.ts handleShellEvent).
|
|
2816
|
-
// the worker writes globalThis.__sootsimMenuAnimOverride which the engine
|
|
2817
|
-
// ContextMenu reads each rAF tick.
|
|
2818
|
-
async setMenuAnimOverride(progress) {
|
|
2819
|
-
await dispatchSootsimEventInPage("sootsim:menuAnimOverride", { value: progress });
|
|
2820
|
-
},
|
|
2821
2800
|
// park every render clock before the interaction, detect the first changed
|
|
2822
2801
|
// stepped frame inside the named component, then advance exact 60fps frames
|
|
2823
2802
|
// to each requested offset. native extraction also chooses the first frame
|
|
@@ -2941,9 +2920,7 @@ var device = {
|
|
|
2941
2920
|
if (input.hold && interact) {
|
|
2942
2921
|
const hit = await interact.touchDown(input.hold.x, input.hold.y);
|
|
2943
2922
|
if (!hit) {
|
|
2944
|
-
throw new Error(
|
|
2945
|
-
`rnx motion hold missed at ${input.hold.x},${input.hold.y}`
|
|
2946
|
-
);
|
|
2923
|
+
throw new Error(`rnx motion hold missed at ${input.hold.x},${input.hold.y}`);
|
|
2947
2924
|
}
|
|
2948
2925
|
} else {
|
|
2949
2926
|
while (!state.triggerCompleted) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.428 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|