peachsim 0.1.527
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/LICENSE +22 -0
- package/README.md +640 -0
- package/cli/app-config.ts +82 -0
- package/cli/app-fonts.ts +388 -0
- package/cli/app-project.ts +59 -0
- package/cli/app-splash.ts +171 -0
- package/cli/app-state-reset.ts +26 -0
- package/cli/auth.ts +184 -0
- package/cli/bin.ts +59 -0
- package/cli/bridge-diagnostics.ts +226 -0
- package/cli/bridge-flow-runner.ts +2806 -0
- package/cli/browser-backend.ts +44 -0
- package/cli/browser-evals.ts +96 -0
- package/cli/cli-update.ts +261 -0
- package/cli/cloud-client.ts +1530 -0
- package/cli/cloud-dispatch.ts +206 -0
- package/cli/cloud-session.ts +227 -0
- package/cli/command-contract.ts +221 -0
- package/cli/command-registry.ts +304 -0
- package/cli/commands/agent-wrapper.ts +1048 -0
- package/cli/commands/agent.ts +439 -0
- package/cli/commands/app-fonts.ts +99 -0
- package/cli/commands/assert.ts +542 -0
- package/cli/commands/auth.ts +71 -0
- package/cli/commands/box/bundle-plane.ts +71 -0
- package/cli/commands/box/checkout-plane.ts +256 -0
- package/cli/commands/box/plane-share.ts +208 -0
- package/cli/commands/box/rnx-command.ts +60 -0
- package/cli/commands/box/search-command.ts +157 -0
- package/cli/commands/box.ts +925 -0
- package/cli/commands/camera.ts +266 -0
- package/cli/commands/cleanup.ts +169 -0
- package/cli/commands/compat.ts +176 -0
- package/cli/commands/config.ts +34 -0
- package/cli/commands/control.ts +2154 -0
- package/cli/commands/cpu-profile.ts +941 -0
- package/cli/commands/daemon-mac-app.ts +165 -0
- package/cli/commands/daemon.ts +800 -0
- package/cli/commands/debug.ts +751 -0
- package/cli/commands/desktop.ts +39 -0
- package/cli/commands/detect.ts +201 -0
- package/cli/commands/detox.ts +481 -0
- package/cli/commands/device.ts +134 -0
- package/cli/commands/diagnose.ts +589 -0
- package/cli/commands/do-chain.ts +408 -0
- package/cli/commands/electron.ts +94 -0
- package/cli/commands/film.ts +379 -0
- package/cli/commands/flow.ts +1240 -0
- package/cli/commands/inspect/actions.ts +516 -0
- package/cli/commands/inspect/core.ts +2086 -0
- package/cli/commands/inspect/count.ts +17 -0
- package/cli/commands/inspect/describe.ts +119 -0
- package/cli/commands/inspect/env.ts +25 -0
- package/cli/commands/inspect/find.ts +169 -0
- package/cli/commands/inspect/get-layout.ts +53 -0
- package/cli/commands/inspect/keyboard.ts +54 -0
- package/cli/commands/inspect/list.ts +175 -0
- package/cli/commands/inspect/memory.ts +215 -0
- package/cli/commands/inspect/redaction.ts +39 -0
- package/cli/commands/inspect/resolve-target.ts +77 -0
- package/cli/commands/inspect/screens.ts +78 -0
- package/cli/commands/inspect/settle.ts +32 -0
- package/cli/commands/inspect/settling.ts +197 -0
- package/cli/commands/inspect/shared.ts +259 -0
- package/cli/commands/inspect/sleep.ts +15 -0
- package/cli/commands/inspect/tree.ts +23 -0
- package/cli/commands/inspect/url.ts +17 -0
- package/cli/commands/inspect/wait-event.ts +211 -0
- package/cli/commands/inspect/wait-idle.ts +25 -0
- package/cli/commands/inspect/wait-ready.ts +87 -0
- package/cli/commands/inspect/wait-selector.ts +59 -0
- package/cli/commands/inspect/wait.ts +32 -0
- package/cli/commands/inspect.ts +4738 -0
- package/cli/commands/install-cli.ts +275 -0
- package/cli/commands/install-desktop.ts +385 -0
- package/cli/commands/login.ts +357 -0
- package/cli/commands/logout.ts +24 -0
- package/cli/commands/maestro-generate.ts +375 -0
- package/cli/commands/maestro.ts +536 -0
- package/cli/commands/mode.ts +58 -0
- package/cli/commands/no-bridge-hint.ts +80 -0
- package/cli/commands/perf.ts +67 -0
- package/cli/commands/permissions.ts +203 -0
- package/cli/commands/platform.ts +410 -0
- package/cli/commands/preview.ts +103 -0
- package/cli/commands/profile.ts +106 -0
- package/cli/commands/react.ts +353 -0
- package/cli/commands/record.ts +1435 -0
- package/cli/commands/report-issue.ts +305 -0
- package/cli/commands/reset.ts +89 -0
- package/cli/commands/runtime.ts +348 -0
- package/cli/commands/screenshot-command.ts +106 -0
- package/cli/commands/screenshot-layers.ts +144 -0
- package/cli/commands/screenshot-mode.ts +38 -0
- package/cli/commands/screenshot.ts +492 -0
- package/cli/commands/screenshots-capture.ts +608 -0
- package/cli/commands/screenshots.ts +127 -0
- package/cli/commands/serve.ts +139 -0
- package/cli/commands/setup.ts +416 -0
- package/cli/commands/shell-boolean-mode.ts +82 -0
- package/cli/commands/skills.ts +468 -0
- package/cli/commands/slides.ts +357 -0
- package/cli/commands/state.ts +94 -0
- package/cli/commands/storage.ts +58 -0
- package/cli/commands/telemetry.ts +55 -0
- package/cli/commands/test.ts +535 -0
- package/cli/commands/three-mode.ts +771 -0
- package/cli/commands/timeline.ts +121 -0
- package/cli/commands/upgrade.ts +167 -0
- package/cli/commands/upload.ts +1203 -0
- package/cli/commands/version.ts +63 -0
- package/cli/commands/welcome.ts +17 -0
- package/cli/commands/what-happened.ts +328 -0
- package/cli/current-sim.ts +217 -0
- package/cli/desktop-companion.ts +315 -0
- package/cli/drivers/electron.ts +70 -0
- package/cli/drivers/index.ts +20 -0
- package/cli/drivers/playwright-provisioning.ts +184 -0
- package/cli/drivers/playwright-sim-host.ts +537 -0
- package/cli/drivers/playwright.ts +209 -0
- package/cli/drivers/registry.ts +65 -0
- package/cli/drivers/types.ts +102 -0
- package/cli/flow-export.ts +55 -0
- package/cli/flow-file.ts +142 -0
- package/cli/flow-live-status.ts +126 -0
- package/cli/flow-session.ts +140 -0
- package/cli/help-core.ts +143 -0
- package/cli/help.ts +44 -0
- package/cli/hidden-runtime-alias.ts +19 -0
- package/cli/hints.ts +214 -0
- package/cli/inspect-notice-state.ts +114 -0
- package/cli/internal-child.ts +176 -0
- package/cli/maestro-js.ts +323 -0
- package/cli/main.ts +704 -0
- package/cli/open-url.ts +8 -0
- package/cli/outbound-endpoints.ts +830 -0
- package/cli/parent-pid.ts +204 -0
- package/cli/parse-args.ts +189 -0
- package/cli/privacy.ts +53 -0
- package/cli/prompt.ts +56 -0
- package/cli/recording-access.ts +108 -0
- package/cli/registry.ts +2 -0
- package/cli/resolve-assets.ts +63 -0
- package/cli/rnx-in-process.ts +98 -0
- package/cli/run-registry.ts +226 -0
- package/cli/run-rnx-core.ts +148 -0
- package/cli/run-rnx.ts +137 -0
- package/cli/runtime-notes.ts +66 -0
- package/cli/runtime-summary.ts +25 -0
- package/cli/secure-file.ts +31 -0
- package/cli/self-invocation.ts +58 -0
- package/cli/send-to-box.ts +109 -0
- package/cli/setup-repository.ts +191 -0
- package/cli/shell-init.ts +98 -0
- package/cli/standalone.ts +4 -0
- package/cli/telemetry.ts +84 -0
- package/cli/ui.ts +68 -0
- package/cli/ws-bridge.ts +1020 -0
- package/detox/attempt-events.cjs +23 -0
- package/detox/colors.ts +54 -0
- package/detox/config-loader.ts +135 -0
- package/detox/element-types.ts +48 -0
- package/detox/expectations.ts +534 -0
- package/detox/gestures.ts +501 -0
- package/detox/index.ts +2694 -0
- package/detox/jest-preset.cjs +29 -0
- package/detox/jest-setup-after-env.cjs +22 -0
- package/detox/matchers.ts +30 -0
- package/detox/motion-change.cjs +109 -0
- package/detox/motion-change.d.cts +35 -0
- package/detox/navigation-lifecycle.ts +290 -0
- package/detox/navigation.ts +43 -0
- package/detox/proof-frame.cjs +114 -0
- package/detox/record-block-execution.cjs +78 -0
- package/detox/screenshots/animated-color-test-rest-norngh.png +0 -0
- package/detox/screenshots/color-test-after-drag-norngh.png +0 -0
- package/detox/screenshots/color-test-rest-norngh.png +0 -0
- package/detox/screenshots/theme-blue-toggle.png +0 -0
- package/detox/screenshots/theme-blue.png +0 -0
- package/detox/screenshots/theme-red-toggle.png +0 -0
- package/detox/screenshots/theme-red.png +0 -0
- package/dist-lib/agent-daemon-client.cjs +502 -0
- package/dist-lib/agent-events.cjs +48 -0
- package/dist-lib/agent-identity.cjs +53 -0
- package/dist-lib/agent-sessions.cjs +759 -0
- package/dist-lib/attached-projects.cjs +526 -0
- package/dist-lib/auth/shared-session.cjs +208 -0
- package/dist-lib/backend-origin.cjs +88 -0
- package/dist-lib/beta.cjs +41 -0
- package/dist-lib/beta.mjs +13 -0
- package/dist-lib/bridge-constants.cjs +161 -0
- package/dist-lib/bridge-contract-input.cjs +451 -0
- package/dist-lib/bridge-contract-input.mjs +414 -0
- package/dist-lib/bridge-contract.cjs +130 -0
- package/dist-lib/bridge-contract.mjs +94 -0
- package/dist-lib/capture-contract.cjs +220 -0
- package/dist-lib/capture-contract.mjs +190 -0
- package/dist-lib/cli-constants.cjs +32 -0
- package/dist-lib/cloud-contract.cjs +194 -0
- package/dist-lib/cloud-contract.mjs +145 -0
- package/dist-lib/cloud.cjs +670 -0
- package/dist-lib/cloud.mjs +639 -0
- package/dist-lib/config.cjs +96 -0
- package/dist-lib/detox/index.cjs +3789 -0
- package/dist-lib/detox/jest-preset.cjs +29 -0
- package/dist-lib/dev-bundle-resolution.cjs +290 -0
- package/dist-lib/home-paths.cjs +638 -0
- package/dist-lib/host/bridge-host.cjs +10903 -0
- package/dist-lib/host/fetch-proxy-handler.cjs +421 -0
- package/dist-lib/host/fetch-proxy-overrides.cjs +63 -0
- package/dist-lib/host/fetch-proxy-overrides.mjs +37 -0
- package/dist-lib/host/replacement-module-handler.cjs +469 -0
- package/dist-lib/host/websocket-proxy.cjs +298 -0
- package/dist-lib/index.cjs +4268 -0
- package/dist-lib/jump-to-source-babel.cjs +93 -0
- package/dist-lib/jump-to-source-native.cjs +112 -0
- package/dist-lib/menu.cjs +646 -0
- package/dist-lib/menu.mjs +604 -0
- package/dist-lib/metro-fingerprint-registry.cjs +186 -0
- package/dist-lib/metro-fingerprint-registry.mjs +156 -0
- package/dist-lib/metro-production-bundle.cjs +329 -0
- package/dist-lib/metro-production-bundle.mjs +295 -0
- package/dist-lib/metro.cjs +904 -0
- package/dist-lib/profiles.cjs +246 -0
- package/dist-lib/public-brand.cjs +39 -0
- package/dist-lib/react-native-host-modules.cjs +51 -0
- package/dist-lib/react-native-host-modules.mjs +25 -0
- package/dist-lib/render-mode.cjs +54 -0
- package/dist-lib/scripts/dev-server-scanner.cjs +1232 -0
- package/dist-lib/sdk.cjs +2433 -0
- package/dist-lib/sdk.mjs +2336 -0
- package/dist-lib/skills.cjs +39132 -0
- package/dist-lib/swift-submit.cjs +92 -0
- package/dist-lib/swift-submit.mjs +65 -0
- package/dist-lib/swift.cjs +1646 -0
- package/dist-lib/vite.cjs +1591 -0
- package/package.json +290 -0
- package/scripts/dev-server-scanner.ts +1291 -0
- package/scripts/optional-demo-registry.ts +113 -0
- package/skills/contrast/SKILL.md +165 -0
- package/skills/rnx-debug/SKILL.md +433 -0
- package/skills/rnx-perf/SKILL.md +399 -0
- package/skills/rnx-setup/SKILL.md +172 -0
- package/skills/rnx-test/SKILL.md +321 -0
- package/skills/rnx-visual/SKILL.md +126 -0
- package/src/agent-daemon-client.ts +410 -0
- package/src/agent-events.ts +71 -0
- package/src/agent-identity.ts +23 -0
- package/src/agent-prompt.ts +71 -0
- package/src/agent-sessions.ts +580 -0
- package/src/app-url.ts +39 -0
- package/src/attached-projects.ts +539 -0
- package/src/auth/shared-session.ts +235 -0
- package/src/backend-origin.ts +70 -0
- package/src/beta.ts +19 -0
- package/src/bridge-constants.ts +175 -0
- package/src/bridge-contract-input.ts +502 -0
- package/src/bridge-contract.ts +558 -0
- package/src/browser-cache.ts +16 -0
- package/src/capture-contract.ts +587 -0
- package/src/cli-constants.ts +1 -0
- package/src/cli-version.ts +40 -0
- package/src/cloud-contract.ts +274 -0
- package/src/cloud.ts +762 -0
- package/src/codex-client.ts +234 -0
- package/src/config.ts +132 -0
- package/src/connect.ts +101 -0
- package/src/dev-bundle-resolution.ts +346 -0
- package/src/dev-server-open.ts +198 -0
- package/src/disk-cleanup.ts +540 -0
- package/src/flow-timeout-scale.ts +15 -0
- package/src/home-paths.ts +806 -0
- package/src/host/agent-host.ts +666 -0
- package/src/host/bridge-host.ts +2788 -0
- package/src/host/fetch-proxy-handler.ts +449 -0
- package/src/host/fetch-proxy-overrides.ts +51 -0
- package/src/host/open-url.ts +89 -0
- package/src/host/plane-host.ts +203 -0
- package/src/host/replacement-module-handler.ts +158 -0
- package/src/host/websocket-proxy.ts +315 -0
- package/src/index.ts +71 -0
- package/src/jump-to-source-babel.ts +135 -0
- package/src/jump-to-source-native.ts +102 -0
- package/src/menu.ts +777 -0
- package/src/metro-fingerprint-registry.ts +302 -0
- package/src/metro-plugin.ts +341 -0
- package/src/metro-production-bundle.ts +471 -0
- package/src/native-dev-bundle-url.ts +118 -0
- package/src/native-seam-manifest.ts +341 -0
- package/src/playwright-host-log.ts +16 -0
- package/src/plist.ts +27 -0
- package/src/poll-until.ts +123 -0
- package/src/profiles.ts +179 -0
- package/src/public-brand.ts +9 -0
- package/src/react-native-host-modules.ts +26 -0
- package/src/render-mode.ts +27 -0
- package/src/rolldown-plugin-swift.ts +240 -0
- package/src/runtime-assets.ts +233 -0
- package/src/runtime-delivery.ts +54 -0
- package/src/screenshots/compose.ts +422 -0
- package/src/screenshots/frame-compose.ts +514 -0
- package/src/screenshots/orchestrate.ts +256 -0
- package/src/screenshots/org-deck.ts +91 -0
- package/src/screenshots/registry.ts +58 -0
- package/src/screenshots/schema.ts +364 -0
- package/src/sdk.ts +15 -0
- package/src/settings-bundle.ts +418 -0
- package/src/shell-bridge-identity.ts +15 -0
- package/src/sim-client.ts +697 -0
- package/src/skills/builtin/a11y-review.ts +132 -0
- package/src/skills/builtin/compat-check.ts +71 -0
- package/src/skills/builtin/maestro-test.ts +121 -0
- package/src/skills/builtin/perf-profile.ts +90 -0
- package/src/skills/builtin/screenshot-all.ts +52 -0
- package/src/skills/builtin/visual-diff.ts +100 -0
- package/src/skills/registry.ts +107 -0
- package/src/skills/types.ts +41 -0
- package/src/swift-submit.ts +185 -0
- package/src/swift.ts +7 -0
- package/src/team-machine-prompt.ts +73 -0
- package/src/vite-plugin-one.ts +264 -0
- package/src/vite-plugin-swift.ts +620 -0
- package/src/vite-plugin.ts +1946 -0
- package/src/worklets-babel.ts +250 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// producer half of the paired test-block execution contract. jest's own JSON
|
|
2
|
+
// reporter cannot say whether a failed block failed in its body or never got
|
|
3
|
+
// there: a `beforeAll`/`beforeEach` throw and a failed `expect` inside the body
|
|
4
|
+
// produce assertion results identical in status, duration, invocations,
|
|
5
|
+
// numPassingAsserts and retryReasons. only the failure message text differs, and
|
|
6
|
+
// attributing behavior on message text is the fuzzy join this whole bridge
|
|
7
|
+
// exists to remove.
|
|
8
|
+
//
|
|
9
|
+
// so the suite records it directly. this module wraps the globals the
|
|
10
|
+
// conformance catalogs register their blocks with, and appends one line per
|
|
11
|
+
// block whose body actually started, naming how that body finished. a block
|
|
12
|
+
// whose hooks failed produces no line at all, which is what makes a setup loss
|
|
13
|
+
// distinguishable from a behavior failure downstream.
|
|
14
|
+
//
|
|
15
|
+
// the rnx suites get it through `jest-setup-after-env.cjs`, which this preset
|
|
16
|
+
// already loads; the native detox suites name it in `setupFilesAfterEnv`
|
|
17
|
+
// directly. either way it does nothing until CONFORMANCE_BLOCK_EXECUTION_FILE
|
|
18
|
+
// is set, so an unwired run behaves exactly as before.
|
|
19
|
+
//
|
|
20
|
+
// `scripts/lib/paired-conformance-test-outcomes.ts` reads what this writes.
|
|
21
|
+
|
|
22
|
+
const { appendFileSync } = require('node:fs')
|
|
23
|
+
// the global `expect` is not jest's here: detox's core listener overwrites it
|
|
24
|
+
// with its own element matcher on the circus `setup` event, which fires before
|
|
25
|
+
// setup files are required. `@jest/globals` is served by the jest runtime
|
|
26
|
+
// itself and always hands back the same jest expect the runner set `testPath`
|
|
27
|
+
// on, whatever a runner did to the globals.
|
|
28
|
+
const { expect: jestExpect } = require('@jest/globals')
|
|
29
|
+
|
|
30
|
+
const outputFile = process.env.CONFORMANCE_BLOCK_EXECUTION_FILE
|
|
31
|
+
|
|
32
|
+
if (outputFile) {
|
|
33
|
+
const testFile = jestExpect.getState().testPath
|
|
34
|
+
|
|
35
|
+
// a retried block runs its body more than once. numbering the invocations
|
|
36
|
+
// makes the retry explicit, so a reader can take the last attempt instead of
|
|
37
|
+
// guessing which of two identical lines was terminal.
|
|
38
|
+
const attempts = new Map()
|
|
39
|
+
|
|
40
|
+
const record = (title, bodyOutcome) => {
|
|
41
|
+
const attempt = (attempts.get(title) ?? 0) + 1
|
|
42
|
+
attempts.set(title, attempt)
|
|
43
|
+
appendFileSync(
|
|
44
|
+
outputFile,
|
|
45
|
+
`${JSON.stringify({ attempt, bodyOutcome, testFile, title })}\n`,
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// jest workers each append to the same file. these lines are far below the
|
|
50
|
+
// atomic-append size, so interleaving splits between lines, never inside one.
|
|
51
|
+
const wrap = (raw) => {
|
|
52
|
+
const wrapped = function wrapped(title, body, timeout) {
|
|
53
|
+
if (typeof body !== 'function') return raw(title, body, timeout)
|
|
54
|
+
return raw(
|
|
55
|
+
title,
|
|
56
|
+
async function recordedBody(...args) {
|
|
57
|
+
let bodyOutcome = 'failed'
|
|
58
|
+
try {
|
|
59
|
+
const value = await body.apply(this, args)
|
|
60
|
+
bodyOutcome = 'passed'
|
|
61
|
+
return value
|
|
62
|
+
} finally {
|
|
63
|
+
record(title, bodyOutcome)
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
timeout,
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
// carries over each/skip/todo/failing/concurrent; `only` is wrapped too so a
|
|
70
|
+
// focused run still records its bodies.
|
|
71
|
+
Object.assign(wrapped, raw)
|
|
72
|
+
if (typeof raw.only === 'function') wrapped.only = wrap(raw.only)
|
|
73
|
+
return wrapped
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
globalThis.it = wrap(globalThis.it)
|
|
77
|
+
globalThis.test = wrap(globalThis.test)
|
|
78
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
/*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
|
+
"use strict";
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name2 in all)
|
|
12
|
+
__defProp(target, name2, { get: all[name2], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
+
mod
|
|
29
|
+
));
|
|
30
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
|
+
|
|
32
|
+
// src/agent-daemon-client.ts
|
|
33
|
+
var agent_daemon_client_exports = {};
|
|
34
|
+
__export(agent_daemon_client_exports, {
|
|
35
|
+
AgentDaemonClient: () => AgentDaemonClient,
|
|
36
|
+
AgentDaemonError: () => AgentDaemonError,
|
|
37
|
+
connectToDaemon: () => connectToDaemon,
|
|
38
|
+
ensureDaemonRunning: () => ensureDaemonRunning,
|
|
39
|
+
isBridgeUp: () => isBridgeUp
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(agent_daemon_client_exports);
|
|
42
|
+
var import_node_child_process = require("node:child_process");
|
|
43
|
+
var import_node_net = __toESM(require("node:net"), 1);
|
|
44
|
+
var import_ws = require("ws");
|
|
45
|
+
|
|
46
|
+
// src/agent-sessions.ts
|
|
47
|
+
var import_node_fs3 = __toESM(require("node:fs"), 1);
|
|
48
|
+
var import_node_path3 = __toESM(require("node:path"), 1);
|
|
49
|
+
|
|
50
|
+
// cli/self-invocation.ts
|
|
51
|
+
var import_node_fs = require("node:fs");
|
|
52
|
+
var import_node_path = require("node:path");
|
|
53
|
+
var import_node_url = require("node:url");
|
|
54
|
+
|
|
55
|
+
// src/public-brand.ts
|
|
56
|
+
var name = "rnx";
|
|
57
|
+
var rnxPublicBrand = Object.freeze({
|
|
58
|
+
name,
|
|
59
|
+
packageName: "rnxsim",
|
|
60
|
+
commandName: "rnx",
|
|
61
|
+
domain: "rnxsim.com",
|
|
62
|
+
origin: "https://rnxsim.com"
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// cli/standalone.ts
|
|
66
|
+
var IS_STANDALONE = typeof __SOOTSIM_STANDALONE__ !== "undefined" && __SOOTSIM_STANDALONE__;
|
|
67
|
+
|
|
68
|
+
// cli/self-invocation.ts
|
|
69
|
+
function sourceEntryPath() {
|
|
70
|
+
try {
|
|
71
|
+
const candidate = (0, import_node_path.join)((0, import_node_path.dirname)((0, import_node_url.fileURLToPath)(__sootsim_import_meta_url)), "bin.ts");
|
|
72
|
+
return (0, import_node_fs.existsSync)(candidate) ? candidate : null;
|
|
73
|
+
} catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function isCliEntry(path3) {
|
|
78
|
+
const name2 = (0, import_node_path.basename)(path3);
|
|
79
|
+
return name2 === "bin.ts" || name2 === "bin.js";
|
|
80
|
+
}
|
|
81
|
+
function rnxSelfInvocation() {
|
|
82
|
+
if (IS_STANDALONE) return { executable: process.execPath, prefixArgs: [] };
|
|
83
|
+
const entry = process.argv[1];
|
|
84
|
+
if (entry && isCliEntry(entry)) {
|
|
85
|
+
return { executable: process.execPath, prefixArgs: [entry] };
|
|
86
|
+
}
|
|
87
|
+
const sourceEntry = sourceEntryPath();
|
|
88
|
+
if (sourceEntry) {
|
|
89
|
+
return { executable: process.execPath, prefixArgs: [sourceEntry] };
|
|
90
|
+
}
|
|
91
|
+
if (!entry) {
|
|
92
|
+
throw new Error(`could not locate the ${rnxPublicBrand.commandName} entry script`);
|
|
93
|
+
}
|
|
94
|
+
return { executable: process.execPath, prefixArgs: [entry] };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// src/home-paths.ts
|
|
98
|
+
var import_node_fs2 = __toESM(require("node:fs"), 1);
|
|
99
|
+
var import_node_path2 = __toESM(require("node:path"), 1);
|
|
100
|
+
function isSootsimDevCheckout() {
|
|
101
|
+
if (process.env.SOOTSIM_FORCE_DAEMON_INSTALL === "1") return false;
|
|
102
|
+
const env = process.env.SOOTSIM_DEV;
|
|
103
|
+
if (env === "1" || env === "true") return true;
|
|
104
|
+
if (env === "0" || env === "false") return false;
|
|
105
|
+
const argv1 = process.argv[1];
|
|
106
|
+
if (!argv1) return false;
|
|
107
|
+
try {
|
|
108
|
+
const real = import_node_fs2.default.realpathSync(argv1);
|
|
109
|
+
return real.includes(`${import_node_path2.default.sep}packages${import_node_path2.default.sep}sootsim${import_node_path2.default.sep}`);
|
|
110
|
+
} catch {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function isDevWorkstation() {
|
|
115
|
+
if (process.env.SOOTSIM_FORCE_DAEMON_INSTALL === "1") return false;
|
|
116
|
+
return process.env.IS_TAMAGUI_DEV === "1";
|
|
117
|
+
}
|
|
118
|
+
function shouldSkipPersistentDaemon() {
|
|
119
|
+
return isSootsimDevCheckout() || isDevWorkstation();
|
|
120
|
+
}
|
|
121
|
+
var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
|
|
122
|
+
|
|
123
|
+
// src/attached-projects.ts
|
|
124
|
+
var COST_HISTORY_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1e3;
|
|
125
|
+
|
|
126
|
+
// src/agent-sessions.ts
|
|
127
|
+
function resolveSootsimInvocation() {
|
|
128
|
+
if (process.env.RNX_BIN) {
|
|
129
|
+
return { executable: process.env.RNX_BIN, prefixArgs: [] };
|
|
130
|
+
}
|
|
131
|
+
if (IS_STANDALONE) return rnxSelfInvocation();
|
|
132
|
+
if (process.versions.electron) {
|
|
133
|
+
const resourcesPath = process.resourcesPath;
|
|
134
|
+
if (resourcesPath) {
|
|
135
|
+
const candidates = [
|
|
136
|
+
import_node_path3.default.join(resourcesPath, "bin", "sootsim"),
|
|
137
|
+
import_node_path3.default.join(resourcesPath, "bin", `sootsim-${process.platform}-${process.arch}`)
|
|
138
|
+
];
|
|
139
|
+
for (const c of candidates) {
|
|
140
|
+
if (import_node_fs3.default.existsSync(c)) return { executable: c, prefixArgs: [] };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const workspace = tryWorkspaceSootsim();
|
|
145
|
+
if (workspace) return workspace;
|
|
146
|
+
const argv1 = process.argv[1];
|
|
147
|
+
if (argv1 && /\.(ts|tsx|mjs|cjs|js)$/.test(argv1)) {
|
|
148
|
+
return { executable: process.argv[0], prefixArgs: [argv1] };
|
|
149
|
+
}
|
|
150
|
+
throw new Error(
|
|
151
|
+
"rnx CLI not found. set RNX_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`."
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
function tryWorkspaceSootsim() {
|
|
155
|
+
try {
|
|
156
|
+
const sootsimDir = resolveSootsimPackageDir();
|
|
157
|
+
if (!sootsimDir) return null;
|
|
158
|
+
const binaryName = `rnx-${process.platform === "win32" ? "windows" : process.platform}-${process.arch}${process.platform === "win32" ? ".exe" : ""}`;
|
|
159
|
+
const distBinary = import_node_path3.default.join(sootsimDir, "dist-bin", binaryName);
|
|
160
|
+
if (import_node_fs3.default.existsSync(distBinary)) return { executable: distBinary, prefixArgs: [] };
|
|
161
|
+
const distBin = import_node_path3.default.join(sootsimDir, "dist-cli", "bin.js");
|
|
162
|
+
if (import_node_fs3.default.existsSync(distBin)) {
|
|
163
|
+
try {
|
|
164
|
+
const src = import_node_path3.default.join(sootsimDir, "cli", "commands", "agent-wrapper.ts");
|
|
165
|
+
if (import_node_fs3.default.existsSync(src)) {
|
|
166
|
+
const srcMtime = import_node_fs3.default.statSync(src).mtimeMs;
|
|
167
|
+
const buildMtime = import_node_fs3.default.statSync(distBin).mtimeMs;
|
|
168
|
+
if (buildMtime < srcMtime) {
|
|
169
|
+
console.warn(
|
|
170
|
+
`[rnx] dist-cli/bin.js is older than agent-wrapper.ts \u2014 rebuild with \`bun run --cwd packages/sootsim build:cli\`.`
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
} catch {
|
|
175
|
+
}
|
|
176
|
+
return { executable: process.execPath, prefixArgs: [distBin] };
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
} catch {
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function resolveSootsimPackageDir() {
|
|
184
|
+
try {
|
|
185
|
+
const resolved = require.resolve(`${rnxPublicBrand.packageName}/package.json`);
|
|
186
|
+
return import_node_path3.default.dirname(resolved);
|
|
187
|
+
} catch {
|
|
188
|
+
}
|
|
189
|
+
const here = fileFromImportMeta();
|
|
190
|
+
if (!here) return null;
|
|
191
|
+
let cur = import_node_path3.default.dirname(here);
|
|
192
|
+
for (let i = 0; i < 8; i++) {
|
|
193
|
+
const pkg = import_node_path3.default.join(cur, "package.json");
|
|
194
|
+
try {
|
|
195
|
+
if (import_node_fs3.default.existsSync(pkg)) {
|
|
196
|
+
const parsed = JSON.parse(import_node_fs3.default.readFileSync(pkg, "utf8"));
|
|
197
|
+
if (parsed.name === rnxPublicBrand.packageName) return cur;
|
|
198
|
+
}
|
|
199
|
+
} catch {
|
|
200
|
+
}
|
|
201
|
+
const parent = import_node_path3.default.dirname(cur);
|
|
202
|
+
if (parent === cur) break;
|
|
203
|
+
cur = parent;
|
|
204
|
+
}
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
function fileFromImportMeta() {
|
|
208
|
+
try {
|
|
209
|
+
const url = __sootsim_import_meta_url;
|
|
210
|
+
if (!url || !url.startsWith("file://")) return null;
|
|
211
|
+
return decodeURIComponent(url.slice("file://".length));
|
|
212
|
+
} catch {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// src/bridge-constants.ts
|
|
218
|
+
var DEFAULT_SOOTSIM_BRIDGE_PORT = 7668;
|
|
219
|
+
var DEFAULT_SOOTSIM_BRIDGE_URL = `http://localhost:${DEFAULT_SOOTSIM_BRIDGE_PORT}/`;
|
|
220
|
+
|
|
221
|
+
// src/agent-daemon-client.ts
|
|
222
|
+
var AgentDaemonError = class extends Error {
|
|
223
|
+
code;
|
|
224
|
+
constructor(message, code) {
|
|
225
|
+
super(message);
|
|
226
|
+
this.name = "AgentDaemonError";
|
|
227
|
+
this.code = code;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
var AgentDaemonClient = class {
|
|
231
|
+
ws;
|
|
232
|
+
port;
|
|
233
|
+
commandTimeoutMs;
|
|
234
|
+
ready;
|
|
235
|
+
closed = false;
|
|
236
|
+
nextId = 1;
|
|
237
|
+
pending = /* @__PURE__ */ new Map();
|
|
238
|
+
eventListeners = /* @__PURE__ */ new Set();
|
|
239
|
+
statusListeners = /* @__PURE__ */ new Set();
|
|
240
|
+
disconnectListeners = /* @__PURE__ */ new Set();
|
|
241
|
+
constructor(opts = {}) {
|
|
242
|
+
this.port = opts.port ?? DEFAULT_SOOTSIM_BRIDGE_PORT;
|
|
243
|
+
this.commandTimeoutMs = opts.commandTimeoutMs ?? 15e3;
|
|
244
|
+
this.ws = new import_ws.WebSocket(`ws://127.0.0.1:${this.port}`);
|
|
245
|
+
this.ready = new Promise((resolve, reject) => {
|
|
246
|
+
const onOpen = () => {
|
|
247
|
+
this.ws.off("error", onError);
|
|
248
|
+
resolve();
|
|
249
|
+
};
|
|
250
|
+
const onError = (err) => {
|
|
251
|
+
this.ws.off("open", onOpen);
|
|
252
|
+
reject(
|
|
253
|
+
new AgentDaemonError(
|
|
254
|
+
`could not connect to rnx daemon on port ${this.port}: ${err.message}`,
|
|
255
|
+
"NO_DAEMON"
|
|
256
|
+
)
|
|
257
|
+
);
|
|
258
|
+
};
|
|
259
|
+
this.ws.once("open", onOpen);
|
|
260
|
+
this.ws.once("error", onError);
|
|
261
|
+
});
|
|
262
|
+
this.ws.on("message", (data) => this.handleMessage(data));
|
|
263
|
+
this.ws.on("close", () => this.handleClose());
|
|
264
|
+
this.ws.on("error", () => {
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
async waitReady() {
|
|
268
|
+
return this.ready;
|
|
269
|
+
}
|
|
270
|
+
// --- public api ---
|
|
271
|
+
async listProjects() {
|
|
272
|
+
return this.send("agent:list-projects");
|
|
273
|
+
}
|
|
274
|
+
async upsertProject(input) {
|
|
275
|
+
return this.send("agent:upsert-project", { input });
|
|
276
|
+
}
|
|
277
|
+
async deleteProject(projectId) {
|
|
278
|
+
return this.send("agent:delete-project", { projectId });
|
|
279
|
+
}
|
|
280
|
+
async autoAttachForUrl(input) {
|
|
281
|
+
return this.send("agent:auto-attach-for-url", {
|
|
282
|
+
input
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
async listSessions(projectId) {
|
|
286
|
+
return this.send("agent:list-sessions", { projectId });
|
|
287
|
+
}
|
|
288
|
+
async startSession(input) {
|
|
289
|
+
return this.send("agent:start-session", { input });
|
|
290
|
+
}
|
|
291
|
+
async sendPrompt(sessionId, prompt) {
|
|
292
|
+
return this.send("agent:send-prompt", {
|
|
293
|
+
sessionId,
|
|
294
|
+
prompt
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
async sendClaimedPrompt(simId, prompt) {
|
|
298
|
+
return this.send(
|
|
299
|
+
"agent:send-claimed-prompt",
|
|
300
|
+
{
|
|
301
|
+
simId,
|
|
302
|
+
prompt
|
|
303
|
+
}
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
async endSession(sessionId) {
|
|
307
|
+
return this.send("agent:end-session", { sessionId });
|
|
308
|
+
}
|
|
309
|
+
async getTranscript(sessionId) {
|
|
310
|
+
return this.send("agent:get-transcript", {
|
|
311
|
+
sessionId
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
async getPaths() {
|
|
315
|
+
return this.send("agent:get-paths");
|
|
316
|
+
}
|
|
317
|
+
async subscribeEvents(sessionId) {
|
|
318
|
+
return this.send("agent:subscribe-events", {
|
|
319
|
+
sessionId
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
async unsubscribeEvents(sessionId) {
|
|
323
|
+
return this.send("agent:unsubscribe-events", {
|
|
324
|
+
sessionId
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
onAgentEvent(cb) {
|
|
328
|
+
this.eventListeners.add(cb);
|
|
329
|
+
return () => this.eventListeners.delete(cb);
|
|
330
|
+
}
|
|
331
|
+
onSessionStatusChange(cb) {
|
|
332
|
+
this.statusListeners.add(cb);
|
|
333
|
+
return () => this.statusListeners.delete(cb);
|
|
334
|
+
}
|
|
335
|
+
onDisconnect(cb) {
|
|
336
|
+
this.disconnectListeners.add(cb);
|
|
337
|
+
return () => this.disconnectListeners.delete(cb);
|
|
338
|
+
}
|
|
339
|
+
close() {
|
|
340
|
+
if (this.closed) return;
|
|
341
|
+
this.closed = true;
|
|
342
|
+
try {
|
|
343
|
+
this.ws.close();
|
|
344
|
+
} catch {
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// --- internals ---
|
|
348
|
+
async send(type, payload = {}) {
|
|
349
|
+
await this.ready;
|
|
350
|
+
if (this.closed || this.ws.readyState !== import_ws.WebSocket.OPEN) {
|
|
351
|
+
throw new AgentDaemonError("daemon connection is closed", "NO_DAEMON");
|
|
352
|
+
}
|
|
353
|
+
const id = this.nextId++;
|
|
354
|
+
return new Promise((resolve, reject) => {
|
|
355
|
+
const timer = setTimeout(() => {
|
|
356
|
+
this.pending.delete(id);
|
|
357
|
+
reject(
|
|
358
|
+
new AgentDaemonError(
|
|
359
|
+
`${type} timed out after ${Math.round(this.commandTimeoutMs / 1e3)}s`,
|
|
360
|
+
"TIMEOUT"
|
|
361
|
+
)
|
|
362
|
+
);
|
|
363
|
+
}, this.commandTimeoutMs);
|
|
364
|
+
this.pending.set(id, {
|
|
365
|
+
resolve,
|
|
366
|
+
reject,
|
|
367
|
+
timer
|
|
368
|
+
});
|
|
369
|
+
try {
|
|
370
|
+
this.ws.send(JSON.stringify({ id, type, ...payload }));
|
|
371
|
+
} catch (err) {
|
|
372
|
+
clearTimeout(timer);
|
|
373
|
+
this.pending.delete(id);
|
|
374
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
handleMessage(data) {
|
|
379
|
+
let msg;
|
|
380
|
+
try {
|
|
381
|
+
msg = JSON.parse(String(data));
|
|
382
|
+
} catch {
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
if (!msg || typeof msg !== "object") return;
|
|
386
|
+
if (msg.type === "agent:event") {
|
|
387
|
+
for (const cb of this.eventListeners) {
|
|
388
|
+
try {
|
|
389
|
+
cb({ sessionId: msg.sessionId, event: msg.event });
|
|
390
|
+
} catch {
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
if (msg.type === "agent:session-status") {
|
|
396
|
+
for (const cb of this.statusListeners) {
|
|
397
|
+
try {
|
|
398
|
+
cb(msg.session);
|
|
399
|
+
} catch {
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
if (typeof msg.id !== "number") return;
|
|
405
|
+
const entry = this.pending.get(msg.id);
|
|
406
|
+
if (!entry) return;
|
|
407
|
+
this.pending.delete(msg.id);
|
|
408
|
+
clearTimeout(entry.timer);
|
|
409
|
+
if (msg.error) {
|
|
410
|
+
entry.reject(new AgentDaemonError(msg.error, msg.code));
|
|
411
|
+
} else {
|
|
412
|
+
entry.resolve(msg.result);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
handleClose() {
|
|
416
|
+
if (this.closed) return;
|
|
417
|
+
this.closed = true;
|
|
418
|
+
for (const [, entry] of this.pending) {
|
|
419
|
+
clearTimeout(entry.timer);
|
|
420
|
+
entry.reject(new AgentDaemonError("daemon disconnected", "DISCONNECT"));
|
|
421
|
+
}
|
|
422
|
+
this.pending.clear();
|
|
423
|
+
for (const cb of this.disconnectListeners) {
|
|
424
|
+
try {
|
|
425
|
+
cb();
|
|
426
|
+
} catch {
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
};
|
|
431
|
+
function isBridgeUp(port = DEFAULT_SOOTSIM_BRIDGE_PORT, timeoutMs = 400) {
|
|
432
|
+
return new Promise((resolve) => {
|
|
433
|
+
const socket = new import_node_net.default.Socket();
|
|
434
|
+
let settled = false;
|
|
435
|
+
const done = (ok) => {
|
|
436
|
+
if (settled) return;
|
|
437
|
+
settled = true;
|
|
438
|
+
socket.destroy();
|
|
439
|
+
resolve(ok);
|
|
440
|
+
};
|
|
441
|
+
socket.setTimeout(timeoutMs);
|
|
442
|
+
socket.once("connect", () => done(true));
|
|
443
|
+
socket.once("timeout", () => done(false));
|
|
444
|
+
socket.once("error", () => done(false));
|
|
445
|
+
socket.connect(port, "127.0.0.1");
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
async function ensureDaemonRunning(opts = {}) {
|
|
449
|
+
const port = opts.port ?? DEFAULT_SOOTSIM_BRIDGE_PORT;
|
|
450
|
+
if (await isBridgeUp(port)) {
|
|
451
|
+
return { alreadyRunning: true };
|
|
452
|
+
}
|
|
453
|
+
if (shouldSkipPersistentDaemon()) {
|
|
454
|
+
throw new AgentDaemonError(
|
|
455
|
+
`no rnx bridge on port ${port}. run \`rnx daemon install\` to enable the faster background service, or \`rnx serve\` in another shell.`,
|
|
456
|
+
"DEV_HOST_REFUSED"
|
|
457
|
+
);
|
|
458
|
+
}
|
|
459
|
+
const { executable, prefixArgs } = resolveSootsimInvocation();
|
|
460
|
+
const args = [...prefixArgs, "serve", "--quiet"];
|
|
461
|
+
if (port !== DEFAULT_SOOTSIM_BRIDGE_PORT) {
|
|
462
|
+
args.push("--port", String(port));
|
|
463
|
+
}
|
|
464
|
+
const child = (0, import_node_child_process.spawn)(executable, args, {
|
|
465
|
+
detached: true,
|
|
466
|
+
stdio: "ignore",
|
|
467
|
+
env: process.env,
|
|
468
|
+
cwd: process.cwd()
|
|
469
|
+
});
|
|
470
|
+
child.unref();
|
|
471
|
+
const deadline = Date.now() + (opts.startupTimeoutMs ?? 5e3);
|
|
472
|
+
while (Date.now() < deadline) {
|
|
473
|
+
if (await isBridgeUp(port)) return { alreadyRunning: false, pid: child.pid };
|
|
474
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
475
|
+
}
|
|
476
|
+
throw new AgentDaemonError(
|
|
477
|
+
`spawned rnx daemon on port ${port} but it did not come up in time. run \`rnx serve\` manually to diagnose.`,
|
|
478
|
+
"SPAWN_TIMEOUT"
|
|
479
|
+
);
|
|
480
|
+
}
|
|
481
|
+
async function connectToDaemon(opts = {}) {
|
|
482
|
+
await ensureDaemonRunning({
|
|
483
|
+
port: opts.port,
|
|
484
|
+
startupTimeoutMs: opts.startupTimeoutMs
|
|
485
|
+
});
|
|
486
|
+
const client = new AgentDaemonClient(opts);
|
|
487
|
+
try {
|
|
488
|
+
await client.waitReady();
|
|
489
|
+
} catch (err) {
|
|
490
|
+
client.close();
|
|
491
|
+
throw err;
|
|
492
|
+
}
|
|
493
|
+
return client;
|
|
494
|
+
}
|
|
495
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
496
|
+
0 && (module.exports = {
|
|
497
|
+
AgentDaemonClient,
|
|
498
|
+
AgentDaemonError,
|
|
499
|
+
connectToDaemon,
|
|
500
|
+
ensureDaemonRunning,
|
|
501
|
+
isBridgeUp
|
|
502
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/agent-events.ts
|
|
23
|
+
var agent_events_exports = {};
|
|
24
|
+
__export(agent_events_exports, {
|
|
25
|
+
isAgentEvent: () => isAgentEvent,
|
|
26
|
+
parseAgentEventLine: () => parseAgentEventLine
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(agent_events_exports);
|
|
29
|
+
function isAgentEvent(value) {
|
|
30
|
+
if (!value || typeof value !== "object") return false;
|
|
31
|
+
const v = value;
|
|
32
|
+
return typeof v.type === "string" && typeof v.ts === "number";
|
|
33
|
+
}
|
|
34
|
+
function parseAgentEventLine(line) {
|
|
35
|
+
const trimmed = line.trim();
|
|
36
|
+
if (!trimmed) return null;
|
|
37
|
+
try {
|
|
38
|
+
const parsed = JSON.parse(trimmed);
|
|
39
|
+
return isAgentEvent(parsed) ? parsed : null;
|
|
40
|
+
} catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
45
|
+
0 && (module.exports = {
|
|
46
|
+
isAgentEvent,
|
|
47
|
+
parseAgentEventLine
|
|
48
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*! rnx v0.1.527 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/agent-identity.ts
|
|
23
|
+
var agent_identity_exports = {};
|
|
24
|
+
__export(agent_identity_exports, {
|
|
25
|
+
agentSessionIdFromCliIdentity: () => agentSessionIdFromCliIdentity,
|
|
26
|
+
isValidTeamMachineSessionId: () => isValidTeamMachineSessionId,
|
|
27
|
+
teamMachineSessionIdFromCliIdentity: () => teamMachineSessionIdFromCliIdentity
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(agent_identity_exports);
|
|
30
|
+
var TEAM_MACHINE_SESSION_RE = /^[A-Za-z0-9._:-]{1,160}$/;
|
|
31
|
+
function agentSessionIdFromCliIdentity(identity) {
|
|
32
|
+
if (!identity) return null;
|
|
33
|
+
const colon = identity.indexOf(":");
|
|
34
|
+
if (colon < 0) return identity.trim() || null;
|
|
35
|
+
const source = identity.slice(0, colon);
|
|
36
|
+
const value = identity.slice(colon + 1).trim();
|
|
37
|
+
return source === "RNX_CLI_IDENTITY" && value ? value : null;
|
|
38
|
+
}
|
|
39
|
+
function teamMachineSessionIdFromCliIdentity(identity) {
|
|
40
|
+
if (!identity?.startsWith("TM_SESSION:")) return null;
|
|
41
|
+
const sessionId = identity.slice("TM_SESSION:".length).trim();
|
|
42
|
+
if (!TEAM_MACHINE_SESSION_RE.test(sessionId)) return null;
|
|
43
|
+
return sessionId;
|
|
44
|
+
}
|
|
45
|
+
function isValidTeamMachineSessionId(sessionId) {
|
|
46
|
+
return TEAM_MACHINE_SESSION_RE.test(sessionId);
|
|
47
|
+
}
|
|
48
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
49
|
+
0 && (module.exports = {
|
|
50
|
+
agentSessionIdFromCliIdentity,
|
|
51
|
+
isValidTeamMachineSessionId,
|
|
52
|
+
teamMachineSessionIdFromCliIdentity
|
|
53
|
+
});
|