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,165 @@
|
|
|
1
|
+
// generate + ad-hoc sign the RNX Daemon.app wrapper that the launchd
|
|
2
|
+
// agent points its ProgramArguments at.
|
|
3
|
+
//
|
|
4
|
+
// why this exists: macOS Background Task Management (the "X wants to run in
|
|
5
|
+
// the background" prompt + the Login Items entry) reads the *signer* of
|
|
6
|
+
// ProgramArguments[0] to decide what name to display. when launchd is
|
|
7
|
+
// pointed at bun directly the entry shows "software from Jarred Sumner"
|
|
8
|
+
// because that's bun's code-signing identity. wrapping the real invocation
|
|
9
|
+
// in an ad-hoc-signed `.app` lets BTM read CFBundleDisplayName from the
|
|
10
|
+
// bundle Info.plist instead, so the entry reads "RNX Daemon".
|
|
11
|
+
//
|
|
12
|
+
// the bundle is regenerated every time `daemonInstall` runs — it's tiny
|
|
13
|
+
// (a plist + a shell launcher) and the launcher embeds a snapshot of the
|
|
14
|
+
// invocation, so `rnx upgrade` followed by `rnx daemon install --force` is
|
|
15
|
+
// the documented upgrade path. there's no notarization
|
|
16
|
+
// or Developer ID signing here yet; ad-hoc + hardened runtime is enough to
|
|
17
|
+
// fix the attribution, and a real signed bundle (shipped via the runtime
|
|
18
|
+
// CDN) is a follow-up.
|
|
19
|
+
|
|
20
|
+
import { execFileSync } from 'child_process'
|
|
21
|
+
import { chmodSync, mkdirSync, rmSync, writeFileSync } from 'fs'
|
|
22
|
+
import { dirname } from 'path'
|
|
23
|
+
import {
|
|
24
|
+
daemonAppBundlePath,
|
|
25
|
+
daemonAppDir,
|
|
26
|
+
daemonAppLauncherPath,
|
|
27
|
+
} from '../../src/home-paths'
|
|
28
|
+
import type { RnxSelfInvocation } from '../self-invocation'
|
|
29
|
+
|
|
30
|
+
const BUNDLE_IDENTIFIER = 'dev.sootsim.daemon'
|
|
31
|
+
const BUNDLE_DISPLAY_NAME = 'RNX Daemon'
|
|
32
|
+
// kept in sync with package.json on release. exact value doesn't matter for
|
|
33
|
+
// BTM display — macOS only reads it for "About this app" surfaces — so we
|
|
34
|
+
// hardcode it rather than reach back into the package.json from a runtime
|
|
35
|
+
// path that varies between npm-global, bun-compiled standalone, and dev
|
|
36
|
+
// checkouts.
|
|
37
|
+
const BUNDLE_VERSION = '0.1.36'
|
|
38
|
+
|
|
39
|
+
export interface DaemonAppPaths {
|
|
40
|
+
/** the rebuilt .app bundle. */
|
|
41
|
+
bundlePath: string
|
|
42
|
+
/** the Mach-O / shell launcher inside the bundle. launchd points here. */
|
|
43
|
+
launcherPath: string
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** rebuild ~/.rnx/daemon-app/RNX Daemon.app/ for the given invocation
|
|
47
|
+
* and re-sign it ad-hoc. safe to call repeatedly; the directory is wiped
|
|
48
|
+
* before write so stale state from earlier installs can't leak through. */
|
|
49
|
+
export function ensureDaemonApp(
|
|
50
|
+
invocation: RnxSelfInvocation,
|
|
51
|
+
port: number,
|
|
52
|
+
logDir: { stdout: string; stderr: string },
|
|
53
|
+
): DaemonAppPaths {
|
|
54
|
+
const bundlePath = daemonAppBundlePath()
|
|
55
|
+
const launcherPath = daemonAppLauncherPath()
|
|
56
|
+
const contentsDir = dirname(dirname(launcherPath))
|
|
57
|
+
const macOSDir = dirname(launcherPath)
|
|
58
|
+
const resourcesDir = `${contentsDir}/Resources`
|
|
59
|
+
|
|
60
|
+
rmSync(bundlePath, { recursive: true, force: true })
|
|
61
|
+
mkdirSync(daemonAppDir(), { recursive: true })
|
|
62
|
+
mkdirSync(macOSDir, { recursive: true })
|
|
63
|
+
mkdirSync(resourcesDir, { recursive: true })
|
|
64
|
+
|
|
65
|
+
writeFileSync(`${contentsDir}/Info.plist`, renderInfoPlist())
|
|
66
|
+
writeFileSync(`${contentsDir}/PkgInfo`, 'APPL????')
|
|
67
|
+
writeFileSync(launcherPath, renderLauncherScript(invocation, port, logDir))
|
|
68
|
+
chmodSync(launcherPath, 0o755)
|
|
69
|
+
|
|
70
|
+
// ad-hoc sign the bundle so macOS treats it as a real .app and BTM reads
|
|
71
|
+
// its Info.plist. `--deep` covers the inner launcher script + future
|
|
72
|
+
// resources without us having to enumerate them. signing is best-effort —
|
|
73
|
+
// an unsigned bundle still works for launchd, it just falls back to the
|
|
74
|
+
// worse BTM display, which is no worse than the status quo.
|
|
75
|
+
try {
|
|
76
|
+
execFileSync('codesign', ['--force', '--sign', '-', '--deep', bundlePath], {
|
|
77
|
+
stdio: 'pipe',
|
|
78
|
+
})
|
|
79
|
+
} catch (err) {
|
|
80
|
+
const msg = err instanceof Error ? err.message : String(err)
|
|
81
|
+
console.warn(
|
|
82
|
+
` warning: ad-hoc codesign of ${bundlePath} failed: ${msg}\n` +
|
|
83
|
+
` the daemon will still run, but Login Items may show a generic name.`,
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return { bundlePath, launcherPath }
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function renderInfoPlist(): string {
|
|
91
|
+
// LSUIElement + LSBackgroundOnly together hide the app from the Dock and
|
|
92
|
+
// the Cmd-Tab switcher. CFBundleDisplayName is what Login Items shows.
|
|
93
|
+
// NSHumanReadableCopyright is what "About" surfaces show.
|
|
94
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
95
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
96
|
+
<plist version="1.0">
|
|
97
|
+
<dict>
|
|
98
|
+
<key>CFBundleDevelopmentRegion</key><string>en</string>
|
|
99
|
+
<key>CFBundleDisplayName</key><string>${BUNDLE_DISPLAY_NAME}</string>
|
|
100
|
+
<key>CFBundleExecutable</key><string>rnx-daemon</string>
|
|
101
|
+
<key>CFBundleIdentifier</key><string>${BUNDLE_IDENTIFIER}</string>
|
|
102
|
+
<key>CFBundleInfoDictionaryVersion</key><string>6.0</string>
|
|
103
|
+
<key>CFBundleName</key><string>${BUNDLE_DISPLAY_NAME}</string>
|
|
104
|
+
<key>CFBundlePackageType</key><string>APPL</string>
|
|
105
|
+
<key>CFBundleShortVersionString</key><string>${BUNDLE_VERSION}</string>
|
|
106
|
+
<key>CFBundleSignature</key><string>????</string>
|
|
107
|
+
<key>CFBundleVersion</key><string>${BUNDLE_VERSION}</string>
|
|
108
|
+
<key>LSBackgroundOnly</key><true/>
|
|
109
|
+
<key>LSUIElement</key><true/>
|
|
110
|
+
<key>LSMinimumSystemVersion</key><string>13.0</string>
|
|
111
|
+
<key>NSHumanReadableCopyright</key><string>Tamagui LLC</string>
|
|
112
|
+
</dict>
|
|
113
|
+
</plist>
|
|
114
|
+
`
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function renderLauncherScript(
|
|
118
|
+
invocation: RnxSelfInvocation,
|
|
119
|
+
port: number,
|
|
120
|
+
logDir: { stdout: string; stderr: string },
|
|
121
|
+
): string {
|
|
122
|
+
// `exec` replaces the shell process with bun/node, so launchd's PID
|
|
123
|
+
// tracking + KeepAlive both follow the real daemon process. stdout/stderr
|
|
124
|
+
// are already redirected by the launchd plist's StandardOutPath /
|
|
125
|
+
// StandardErrorPath, so we don't redirect again here — doing so would
|
|
126
|
+
// hide log output from `launchctl print`.
|
|
127
|
+
const parts = [
|
|
128
|
+
invocation.executable,
|
|
129
|
+
...invocation.prefixArgs,
|
|
130
|
+
'serve',
|
|
131
|
+
'--quiet',
|
|
132
|
+
'--port',
|
|
133
|
+
String(port),
|
|
134
|
+
]
|
|
135
|
+
const quoted = parts.map(shellSingleQuote).join(' ')
|
|
136
|
+
const stdout = shellSingleQuote(logDir.stdout)
|
|
137
|
+
const stderr = shellSingleQuote(logDir.stderr)
|
|
138
|
+
const rnxHome = process.env.RNX_HOME
|
|
139
|
+
const environment = rnxHome ? `export RNX_HOME=${shellSingleQuote(rnxHome)}\n` : ''
|
|
140
|
+
return `#!/bin/sh
|
|
141
|
+
# rnx daemon launcher generated by 'rnx daemon install'.
|
|
142
|
+
# launchd spawns this; we exec the real rnx invocation in place so
|
|
143
|
+
# launchd tracks the daemon process, not the shell wrapper.
|
|
144
|
+
#
|
|
145
|
+
# stdout: ${logDir.stdout}
|
|
146
|
+
# stderr: ${logDir.stderr}
|
|
147
|
+
# a missing or broken executable can make launchd retry forever. truncate a
|
|
148
|
+
# retry log before it passes 10 MiB so that failure stays bounded on disk.
|
|
149
|
+
for log_path in ${stdout} ${stderr}; do
|
|
150
|
+
if [ -f "$log_path" ]; then
|
|
151
|
+
log_bytes=$(wc -c < "$log_path" 2>/dev/null || echo 0)
|
|
152
|
+
if [ "$log_bytes" -gt 10485760 ]; then
|
|
153
|
+
: > "$log_path"
|
|
154
|
+
fi
|
|
155
|
+
fi
|
|
156
|
+
done
|
|
157
|
+
${environment}exec ${quoted}
|
|
158
|
+
`
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function shellSingleQuote(value: string): string {
|
|
162
|
+
// single-quote everything and escape embedded single quotes the POSIX way.
|
|
163
|
+
// safe for paths containing spaces, $, backticks, etc.
|
|
164
|
+
return `'${value.replace(/'/g, `'\\''`)}'`
|
|
165
|
+
}
|