peachsim 0.1.570 → 0.1.572
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 +1 -1
- package/README.md +108 -108
- package/cli/app-config.ts +1 -1
- package/cli/app-fonts.ts +4 -4
- package/cli/auth.ts +11 -11
- package/cli/bin.ts +4 -4
- package/cli/bridge-flow-runner.ts +28 -20
- package/cli/browser-evals.ts +2 -2
- package/cli/cli-update.ts +6 -6
- package/cli/cloud-client.ts +16 -16
- package/cli/cloud-dispatch.ts +3 -2
- package/cli/cloud-session.ts +12 -12
- package/cli/cloud-test-result-files.ts +97 -0
- package/cli/cloud-test-tunnel.ts +4 -4
- package/cli/command-registry.ts +7 -7
- package/cli/commands/agent-wrapper.ts +7 -7
- package/cli/commands/agent.ts +16 -16
- package/cli/commands/app-fonts.ts +3 -3
- package/cli/commands/assert.ts +10 -10
- package/cli/commands/auth.ts +5 -5
- package/cli/commands/box/checkout-plane.ts +1 -1
- package/cli/commands/box/plane-share.ts +2 -2
- package/cli/commands/box/rnx-command.ts +5 -5
- package/cli/commands/box.ts +38 -38
- package/cli/commands/camera.ts +13 -13
- package/cli/commands/cleanup.ts +13 -13
- package/cli/commands/compat.ts +7 -7
- package/cli/commands/config.ts +5 -5
- package/cli/commands/control.ts +63 -63
- package/cli/commands/cpu-profile.ts +11 -11
- package/cli/commands/daemon-mac-app.ts +10 -10
- package/cli/commands/daemon.ts +29 -27
- package/cli/commands/debug.ts +35 -35
- package/cli/commands/desktop.ts +3 -3
- package/cli/commands/detox.ts +33 -33
- package/cli/commands/device.ts +9 -9
- package/cli/commands/diagnose.ts +17 -17
- package/cli/commands/do-chain.ts +4 -4
- package/cli/commands/electron.ts +9 -9
- package/cli/commands/film.ts +9 -9
- package/cli/commands/flow.ts +49 -49
- package/cli/commands/inspect/core.ts +12 -12
- package/cli/commands/inspect/count.ts +1 -1
- package/cli/commands/inspect/describe.ts +1 -1
- package/cli/commands/inspect/env.ts +2 -2
- package/cli/commands/inspect/find.ts +2 -2
- package/cli/commands/inspect/get-layout.ts +2 -2
- package/cli/commands/inspect/keyboard.ts +1 -1
- package/cli/commands/inspect/list.ts +4 -4
- package/cli/commands/inspect/memory.ts +1 -1
- package/cli/commands/inspect/resolve-target.ts +1 -1
- package/cli/commands/inspect/screens.ts +1 -1
- package/cli/commands/inspect/shared.ts +1 -1
- package/cli/commands/inspect/tree.ts +1 -1
- package/cli/commands/inspect/url.ts +1 -1
- package/cli/commands/inspect/wait-event.ts +5 -5
- package/cli/commands/inspect.ts +82 -82
- package/cli/commands/install-cli.ts +16 -16
- package/cli/commands/install-desktop.ts +26 -26
- package/cli/commands/login.ts +11 -11
- package/cli/commands/maestro-generate.ts +10 -10
- package/cli/commands/maestro.ts +173 -71
- package/cli/commands/mode.ts +4 -4
- package/cli/commands/no-bridge-hint.ts +12 -12
- package/cli/commands/perf.ts +11 -11
- package/cli/commands/permissions.ts +5 -5
- package/cli/commands/platform.ts +21 -21
- package/cli/commands/preview.ts +5 -5
- package/cli/commands/profile.ts +12 -12
- package/cli/commands/react.ts +15 -15
- package/cli/commands/record.ts +31 -31
- package/cli/commands/report-issue.ts +4 -4
- package/cli/commands/reset.ts +2 -2
- package/cli/commands/runtime.ts +23 -23
- package/cli/commands/screenshot-command.ts +2 -2
- package/cli/commands/screenshot-layers.ts +5 -5
- package/cli/commands/screenshot-mode.ts +7 -7
- package/cli/commands/screenshot.ts +24 -24
- package/cli/commands/screenshots-capture.ts +13 -13
- package/cli/commands/screenshots.ts +6 -6
- package/cli/commands/serve.ts +12 -12
- package/cli/commands/setup.ts +25 -25
- package/cli/commands/skills.ts +30 -23
- package/cli/commands/slides.ts +20 -20
- package/cli/commands/state.ts +2 -2
- package/cli/commands/storage.ts +3 -3
- package/cli/commands/telemetry.ts +2 -2
- package/cli/commands/test.ts +176 -18
- package/cli/commands/three-mode.ts +17 -17
- package/cli/commands/timeline.ts +12 -12
- package/cli/commands/upgrade.ts +11 -11
- package/cli/commands/upload.ts +26 -26
- package/cli/commands/version.ts +7 -7
- package/cli/commands/what-happened.ts +20 -20
- package/cli/current-sim.ts +3 -3
- package/cli/desktop-companion.ts +16 -16
- package/cli/drivers/electron.ts +4 -4
- package/cli/drivers/playwright-sim-host.ts +7 -7
- package/cli/drivers/playwright.ts +4 -4
- package/cli/drivers/registry.ts +1 -1
- package/cli/drivers/types.ts +5 -5
- package/cli/flow-export.ts +1 -1
- package/cli/flow-file.ts +5 -5
- package/cli/flow-session.ts +1 -1
- package/cli/help-core.ts +13 -13
- package/cli/hints.ts +14 -14
- package/cli/inspect-notice-state.ts +1 -1
- package/cli/internal-child.ts +2 -2
- package/cli/maestro-js.ts +4 -4
- package/cli/maestro-report.ts +4 -2
- package/cli/main.ts +14 -14
- package/cli/outbound-endpoints.ts +32 -30
- package/cli/parse-args.ts +7 -7
- package/cli/privacy.ts +1 -1
- package/cli/recording-access.ts +10 -10
- package/cli/resolve-assets.ts +2 -2
- package/cli/rnx-in-process.ts +5 -5
- package/cli/run-registry.ts +3 -2
- package/cli/run-rnx-core.ts +3 -3
- package/cli/run-rnx.ts +1 -1
- package/cli/runtime-notes.ts +1 -1
- package/cli/self-invocation.ts +1 -1
- package/cli/send-to-box.ts +1 -1
- package/cli/shell-init.ts +40 -40
- package/cli/ui.ts +1 -1
- package/cli/ws-bridge.ts +22 -22
- package/detox/config-loader.ts +1 -1
- package/detox/index.ts +28 -28
- package/detox/jest-preset.cjs +2 -2
- package/detox/navigation.ts +2 -2
- package/dist-lib/agent-daemon-client.cjs +12 -12
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +2 -2
- package/dist-lib/agent-sessions.cjs +12 -12
- package/dist-lib/attached-projects.cjs +4 -4
- package/dist-lib/auth/shared-session.cjs +4 -4
- 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 +4 -4
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +2 -2
- package/dist-lib/bridge-contract.mjs +2 -2
- 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-test-args.cjs +116 -0
- package/dist-lib/cloud-test-args.mjs +86 -0
- package/dist-lib/cloud.cjs +42 -42
- package/dist-lib/cloud.mjs +42 -42
- package/dist-lib/config.cjs +2 -2
- package/dist-lib/detox/index.cjs +29 -29
- package/dist-lib/detox/jest-preset.cjs +2 -2
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +12 -12
- package/dist-lib/host/bridge-host.cjs +87 -77
- 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 +6 -6
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +63 -73
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/menu.cjs +5 -5
- package/dist-lib/menu.mjs +5 -5
- 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 +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +15 -15
- package/dist-lib/profiles.cjs +4 -4
- package/dist-lib/public-brand.cjs +3 -3
- 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 +2 -1
- package/dist-lib/sdk.cjs +9 -9
- package/dist-lib/sdk.mjs +9 -9
- package/dist-lib/skills.cjs +534 -520
- package/dist-lib/swift-compile.cjs +372 -0
- package/dist-lib/swift-compile.mjs +339 -0
- package/dist-lib/swift-package.cjs +78 -0
- package/dist-lib/swift-package.mjs +52 -0
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite.cjs +479 -161
- package/package.json +22 -1
- package/scripts/dev-server-scanner.ts +4 -3
- package/skills/contrast/SKILL.md +75 -75
- package/skills/{rnx-debug → peach-debug}/SKILL.md +90 -90
- package/skills/{rnx-perf → peach-perf}/SKILL.md +13 -13
- package/skills/{rnx-setup → peach-setup}/SKILL.md +60 -60
- package/skills/{rnx-test → peach-test}/SKILL.md +47 -47
- package/skills/{rnx-visual → peach-visual}/SKILL.md +26 -26
- package/src/agent-daemon-client.ts +5 -5
- package/src/agent-events.ts +1 -1
- package/src/agent-identity.ts +1 -1
- package/src/agent-sessions.ts +13 -13
- package/src/attached-projects.ts +1 -1
- package/src/auth/shared-session.ts +1 -1
- package/src/bridge-constants.ts +3 -3
- package/src/bridge-contract-input.ts +1 -1
- package/src/bridge-contract.ts +3 -3
- package/src/cli-version.ts +6 -6
- package/src/cloud-test-args.ts +100 -0
- package/src/cloud.ts +40 -40
- package/src/config.ts +1 -1
- package/src/connect.ts +6 -6
- package/src/dev-server-open.ts +8 -8
- package/src/disk-cleanup.ts +3 -3
- package/src/home-paths.ts +26 -26
- package/src/host/agent-host.ts +3 -3
- package/src/host/bridge-host.ts +33 -33
- package/src/host/fetch-proxy-handler.ts +1 -1
- package/src/host/plane-host.ts +2 -2
- package/src/host/replacement-module-handler.ts +2 -2
- package/src/menu.ts +2 -2
- package/src/metro-plugin.ts +7 -7
- package/src/metro-production-bundle.ts +2 -2
- package/src/native-dev-bundle-url.ts +2 -2
- package/src/playwright-host-log.ts +1 -1
- package/src/public-brand.ts +2 -2
- package/src/react-native-host-modules.ts +1 -1
- package/src/rolldown-plugin-swift.ts +11 -10
- package/src/runtime-assets.ts +11 -11
- package/src/runtime-delivery.ts +6 -6
- package/src/screenshots/orchestrate.ts +1 -1
- package/src/screenshots/org-deck.ts +1 -1
- package/src/screenshots/schema.ts +2 -2
- package/src/sim-client.ts +1 -1
- package/src/skills/builtin/compat-check.ts +2 -2
- package/src/swift-compile.ts +359 -0
- package/src/swift-package.ts +69 -0
- package/src/swift-submit.ts +3 -2
- package/src/vite-plugin-one.ts +8 -8
- package/src/vite-plugin-swift.ts +106 -110
- package/src/vite-plugin.ts +6 -19
package/cli/commands/setup.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// peach setup owns the optional machine and repository choices. peach itself
|
|
2
2
|
// works without project setup; bare first-run onboarding launches ConnectRN
|
|
3
3
|
// during this flow and leaves the repository choice until the end.
|
|
4
4
|
|
|
@@ -91,7 +91,7 @@ export async function runSetup(
|
|
|
91
91
|
console.log(` ${muted('Would enable')} ${accent('the background service')}`)
|
|
92
92
|
}
|
|
93
93
|
if (!service && !serviceStatus.installed && !options.json) {
|
|
94
|
-
console.log(` ${muted('Enable it later with')} ${accent('
|
|
94
|
+
console.log(` ${muted('Enable it later with')} ${accent('peach daemon install')}`)
|
|
95
95
|
}
|
|
96
96
|
const simulatorDriver = await decideSimulatorDriver(options)
|
|
97
97
|
if (options.dryRun && !options.json) {
|
|
@@ -102,13 +102,13 @@ export async function runSetup(
|
|
|
102
102
|
|
|
103
103
|
const manifest = options.json
|
|
104
104
|
? await rnxRuntime.fetchManifest()
|
|
105
|
-
: await withSpinner('Checking the
|
|
105
|
+
: await withSpinner('Checking the peach runtime', () => rnxRuntime.fetchManifest())
|
|
106
106
|
const runtimeVersion = rnxRuntime.resolveVersion(manifest, {
|
|
107
107
|
channel: 'stable',
|
|
108
108
|
}).version
|
|
109
109
|
const cliVersion = getCliVersion()
|
|
110
110
|
if (cliVersion === '0.0.0') {
|
|
111
|
-
throw new Error('could not resolve the installed
|
|
111
|
+
throw new Error('could not resolve the installed peach CLI version')
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
let runtimeInstalled = false
|
|
@@ -204,7 +204,7 @@ export async function runSetup(
|
|
|
204
204
|
console.log(
|
|
205
205
|
options.dryRun
|
|
206
206
|
? `\n ${success('✓')} Dry run complete.`
|
|
207
|
-
: `\n ${success('✓')} ${launchConnectRN ? 'ConnectRN is open. ' : ''}
|
|
207
|
+
: `\n ${success('✓')} ${launchConnectRN ? 'ConnectRN is open. ' : ''}peach is ready.`,
|
|
208
208
|
)
|
|
209
209
|
}
|
|
210
210
|
|
|
@@ -280,7 +280,7 @@ async function decideService(
|
|
|
280
280
|
if (!options.json) {
|
|
281
281
|
printPromptBlock('Background service', [
|
|
282
282
|
'The persistent service is currently available on macOS and Linux.',
|
|
283
|
-
'
|
|
283
|
+
'peach will start the bridge when needed on this platform.',
|
|
284
284
|
])
|
|
285
285
|
}
|
|
286
286
|
return false
|
|
@@ -309,22 +309,22 @@ async function decideSimulatorDriver(
|
|
|
309
309
|
requireInteractive(options, '--desktop or --browser')
|
|
310
310
|
const desktopDescription =
|
|
311
311
|
process.platform === 'darwin'
|
|
312
|
-
? 'Desktop downloads a DMG and installs
|
|
312
|
+
? 'Desktop downloads a DMG and installs peach.app.'
|
|
313
313
|
: process.platform === 'win32'
|
|
314
|
-
? 'Desktop downloads and runs the
|
|
315
|
-
: 'Desktop downloads the matching
|
|
314
|
+
? 'Desktop downloads and runs the peach installer.'
|
|
315
|
+
: 'Desktop downloads the matching peach AppImage.'
|
|
316
316
|
const desktopChoice =
|
|
317
317
|
process.platform === 'darwin'
|
|
318
|
-
? 'Desktop app Installs
|
|
318
|
+
? 'Desktop app Installs peach.app from a DMG'
|
|
319
319
|
: process.platform === 'win32'
|
|
320
|
-
? 'Desktop app Runs the
|
|
320
|
+
? 'Desktop app Runs the peach installer'
|
|
321
321
|
: 'Desktop app Installs the matching AppImage'
|
|
322
322
|
printPromptBlock('Simulator window', [
|
|
323
323
|
'Browser opens immediately in an isolated Chrome window.',
|
|
324
324
|
desktopDescription,
|
|
325
325
|
'The Desktop app opens in a dedicated native window.',
|
|
326
326
|
])
|
|
327
|
-
const choice = await select('Where should
|
|
327
|
+
const choice = await select('Where should peach open??', [
|
|
328
328
|
'Browser (recommended) No additional download',
|
|
329
329
|
desktopChoice,
|
|
330
330
|
])
|
|
@@ -343,7 +343,7 @@ async function decidePrivacy(
|
|
|
343
343
|
'Reports can contain package compatibility or an error class.',
|
|
344
344
|
'They never contain your code or app data.',
|
|
345
345
|
])
|
|
346
|
-
return confirm('Share bounded diagnostics to improve
|
|
346
|
+
return confirm('Share bounded diagnostics to improve peach??', false)
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
async function decideRepository(
|
|
@@ -359,11 +359,11 @@ async function decideRepository(
|
|
|
359
359
|
if (plan.operations.length === 0) return true
|
|
360
360
|
if (options.repository !== undefined) return options.repository
|
|
361
361
|
if (options.yes || options.ci || !process.stdin.isTTY) return false
|
|
362
|
-
printPromptBlock('Share
|
|
363
|
-
'
|
|
364
|
-
'This only adds an exact peachsim dev dependency and
|
|
362
|
+
printPromptBlock('Share peach with your team', [
|
|
363
|
+
'peach already works here with no project setup.',
|
|
364
|
+
'This only adds an exact peachsim dev dependency and a peach script for teammates.',
|
|
365
365
|
])
|
|
366
|
-
return confirm(`Add
|
|
366
|
+
return confirm(`Add peach to ${path.basename(plan.appDir)}?`, false)
|
|
367
367
|
}
|
|
368
368
|
|
|
369
369
|
function requireInteractive(options: SetupOptions, flags: string): void {
|
|
@@ -376,7 +376,7 @@ function runtimeCacheMetadata(runtimeVersion: string) {
|
|
|
376
376
|
const arch = os.arch()
|
|
377
377
|
return {
|
|
378
378
|
path: runtimeDir(runtimeVersion),
|
|
379
|
-
key: `
|
|
379
|
+
key: `peach-runtime-${platform}-${arch}-${runtimeVersion}`,
|
|
380
380
|
inputs: { platform, arch, runtimeVersion },
|
|
381
381
|
}
|
|
382
382
|
}
|
|
@@ -388,17 +388,17 @@ function printIntro(options: SetupOptions): void {
|
|
|
388
388
|
|
|
389
389
|
function printHelp(): void {
|
|
390
390
|
console.log(`
|
|
391
|
-
|
|
391
|
+
peach setup - configure optional local conveniences
|
|
392
392
|
|
|
393
|
-
|
|
393
|
+
peach works without project setup. This command can enable the faster background
|
|
394
394
|
service, choose Browser or Desktop, configure private diagnostics, and optionally
|
|
395
|
-
add an exact peachsim dependency plus
|
|
395
|
+
add an exact peachsim dependency plus a peach script for teammates.
|
|
396
396
|
|
|
397
397
|
usage:
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
398
|
+
peach setup
|
|
399
|
+
peach setup --yes
|
|
400
|
+
peach setup --ci --yes --json
|
|
401
|
+
peach setup --dry-run
|
|
402
402
|
|
|
403
403
|
choices:
|
|
404
404
|
--service | --no-service
|
package/cli/commands/skills.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
//
|
|
1
|
+
// peach skill - install and inspect agent skill files
|
|
2
2
|
//
|
|
3
3
|
// usage:
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
4
|
+
// peach skill install install all skills to supported agents
|
|
5
|
+
// peach skill install codex debug install specific skills to Codex only
|
|
6
|
+
// peach skill show [name] list skills or print one skill
|
|
7
7
|
|
|
8
8
|
import * as fs from 'fs'
|
|
9
9
|
import * as os from 'os'
|
|
@@ -38,14 +38,14 @@ interface InstallTarget {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
function printSkillHelp() {
|
|
41
|
-
console.log(`
|
|
41
|
+
console.log(`peach skill
|
|
42
42
|
|
|
43
|
-
install and inspect bundled
|
|
43
|
+
install and inspect bundled peach agent skills.
|
|
44
44
|
|
|
45
45
|
usage:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
peach skill install [all|codex|claude] [skill-name...]
|
|
47
|
+
peach skill install --target <dir> [skill-name...]
|
|
48
|
+
peach skill show [skill-name]
|
|
49
49
|
|
|
50
50
|
commands:
|
|
51
51
|
install install skills; no target means all supported local agents
|
|
@@ -59,25 +59,25 @@ targets:
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
function printInstallHelp() {
|
|
62
|
-
console.log(`
|
|
62
|
+
console.log(`peach skill install
|
|
63
63
|
|
|
64
|
-
install bundled
|
|
64
|
+
install bundled peach skills in the agent skill layout: <skill>/SKILL.md.
|
|
65
65
|
each skill directory is symlinked back to its source, so edits stay live
|
|
66
66
|
without a re-install. an existing install from an older CLI is upgraded in
|
|
67
67
|
place; an unrelated skill directory is left alone unless --force is passed.
|
|
68
68
|
|
|
69
69
|
usage:
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
peach skill install [all|codex|claude] [skill-name...]
|
|
71
|
+
peach skill install --target <dir> [skill-name...]
|
|
72
72
|
|
|
73
73
|
options:
|
|
74
74
|
--force, -f replace a conflicting existing skill with the symlink
|
|
75
75
|
|
|
76
76
|
examples:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
peach skill install
|
|
78
|
+
peach skill install codex
|
|
79
|
+
peach skill install codex peach-debug
|
|
80
|
+
peach skill install --force peach-debug
|
|
81
81
|
`)
|
|
82
82
|
}
|
|
83
83
|
|
|
@@ -174,9 +174,11 @@ function matchSkills(skills: SkillInfo[], filters: string[]): SkillInfo[] {
|
|
|
174
174
|
if (filters.length === 0) return skills
|
|
175
175
|
const matched = skills.filter((skill) =>
|
|
176
176
|
filters.some((filter) => {
|
|
177
|
-
|
|
177
|
+
// accept the pre-rename rnx- prefix on filter input so installed docs
|
|
178
|
+
// and muscle memory keep resolving; installed names are peach- only.
|
|
179
|
+
const needle = filter.replace(/^(peach|rnx)-/, '')
|
|
178
180
|
return (
|
|
179
|
-
skill.name.includes(filter) || skill.name.replace(/^
|
|
181
|
+
skill.name.includes(filter) || skill.name.replace(/^peach-/, '').includes(needle)
|
|
180
182
|
)
|
|
181
183
|
}),
|
|
182
184
|
)
|
|
@@ -216,7 +218,7 @@ function symlinkPointsTo(dest: string, src: string): boolean {
|
|
|
216
218
|
}
|
|
217
219
|
|
|
218
220
|
// a store entry left by an older CLI is safe to upgrade: either a real dir
|
|
219
|
-
// whose only content is a SKILL.md symlink into
|
|
221
|
+
// whose only content is a SKILL.md symlink into a peach skills source (the
|
|
220
222
|
// pre-dir-layout install — possibly broken after the source moved), or a dir
|
|
221
223
|
// holding a byte-identical copy of the skill. only our installer creates
|
|
222
224
|
// those shapes, so replacing them can't lose user work.
|
|
@@ -305,6 +307,11 @@ const LEGACY_BUNDLED_SKILL_DIRS = [
|
|
|
305
307
|
'sootsim-perf',
|
|
306
308
|
'sootsim-test',
|
|
307
309
|
'sootsim-visual',
|
|
310
|
+
'rnx-setup',
|
|
311
|
+
'rnx-debug',
|
|
312
|
+
'rnx-perf',
|
|
313
|
+
'rnx-test',
|
|
314
|
+
'rnx-visual',
|
|
308
315
|
]
|
|
309
316
|
|
|
310
317
|
function removeLegacyBundledSkills(targetDir: string) {
|
|
@@ -331,8 +338,8 @@ function printSkillList(skills: SkillInfo[]) {
|
|
|
331
338
|
console.log(` ${skill.name}`)
|
|
332
339
|
console.log(` ${skill.description}\n`)
|
|
333
340
|
}
|
|
334
|
-
console.log(' usage:
|
|
335
|
-
console.log(' usage:
|
|
341
|
+
console.log(' usage: peach skill install [all|codex|claude] [skill-name...]')
|
|
342
|
+
console.log(' usage: peach skill show [skill-name]\n')
|
|
336
343
|
}
|
|
337
344
|
|
|
338
345
|
function parseInstallArgs(args: string[]): {
|
|
@@ -386,7 +393,7 @@ function parseInstallArgs(args: string[]): {
|
|
|
386
393
|
async function runInstall(args: string[]) {
|
|
387
394
|
const skills = listSkills()
|
|
388
395
|
if (skills.length === 0) {
|
|
389
|
-
console.error(' no skills found in
|
|
396
|
+
console.error(' no skills found in peach package')
|
|
390
397
|
rnxExit(1)
|
|
391
398
|
}
|
|
392
399
|
|
package/cli/commands/slides.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// peach screenshot slides — drive the live screenshot-mode composition from the
|
|
2
2
|
// terminal. same pipeline as the in-shell UI (rail/strip): every mutation
|
|
3
3
|
// goes through the shell's screenshotControl bridge so the browser UI
|
|
4
4
|
// reflects each step live, captures auto-upload, and exports are the
|
|
@@ -16,18 +16,18 @@ import {
|
|
|
16
16
|
} from '../ws-bridge'
|
|
17
17
|
|
|
18
18
|
const HELP = `
|
|
19
|
-
|
|
19
|
+
peach screenshot slides — compose App Store screenshots in the live sim
|
|
20
20
|
|
|
21
21
|
usage:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
peach screenshot slides list slides (alias: slides list)
|
|
23
|
+
peach screenshot slides set <n> [fields] patch a slide's copy/colors
|
|
24
|
+
peach screenshot slides add append a blank slide (focuses it)
|
|
25
|
+
peach screenshot slides remove <n> delete a slide
|
|
26
|
+
peach screenshot slides move <n> <position> reorder a slide
|
|
27
|
+
peach screenshot slides focus <n> open a slide (device flips into it)
|
|
28
|
+
peach screenshot slides overview back to the gallery
|
|
29
|
+
peach screenshot slides capture [<n>] capture the live frame into a slide
|
|
30
|
+
peach screenshot slides export [<n>] [--out <dir>]
|
|
31
31
|
write composed App-Store PNG(s)
|
|
32
32
|
|
|
33
33
|
set fields:
|
|
@@ -43,12 +43,12 @@ set fields:
|
|
|
43
43
|
notes:
|
|
44
44
|
slides are addressed by 1-based index. screenshot mode is auto-enabled.
|
|
45
45
|
capture shoots whatever the sim currently shows — navigate the app first
|
|
46
|
-
(
|
|
46
|
+
(peach do tap-id …), then capture.
|
|
47
47
|
|
|
48
48
|
examples:
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
peach screenshot slides set 1 --title "The ultimate MMA community." --bg-top cyan --bg-bottom black
|
|
50
|
+
peach screenshot slides capture 1
|
|
51
|
+
peach screenshot slides export --out ./exports
|
|
52
52
|
`
|
|
53
53
|
|
|
54
54
|
interface SlideRow {
|
|
@@ -220,7 +220,7 @@ export async function runSlides(
|
|
|
220
220
|
}
|
|
221
221
|
case 'set': {
|
|
222
222
|
if (refArg == null)
|
|
223
|
-
throw new Error('usage:
|
|
223
|
+
throw new Error('usage: peach screenshot slides set <n> --title … (see --help)')
|
|
224
224
|
const patch: Record<string, string> = {}
|
|
225
225
|
for (const key of [
|
|
226
226
|
'title',
|
|
@@ -257,7 +257,7 @@ export async function runSlides(
|
|
|
257
257
|
break
|
|
258
258
|
}
|
|
259
259
|
case 'remove': {
|
|
260
|
-
if (refArg == null) throw new Error('usage:
|
|
260
|
+
if (refArg == null) throw new Error('usage: peach screenshot slides remove <n>')
|
|
261
261
|
emit(
|
|
262
262
|
await callInBridgeWrite<ControlState>(
|
|
263
263
|
bridge,
|
|
@@ -269,7 +269,7 @@ export async function runSlides(
|
|
|
269
269
|
}
|
|
270
270
|
case 'move': {
|
|
271
271
|
if (refArg == null || !Number.isInteger(positionArg) || positionArg < 1) {
|
|
272
|
-
throw new Error('usage:
|
|
272
|
+
throw new Error('usage: peach screenshot slides move <n> <position>')
|
|
273
273
|
}
|
|
274
274
|
emit(
|
|
275
275
|
await callInBridgeWrite<ControlState>(
|
|
@@ -282,7 +282,7 @@ export async function runSlides(
|
|
|
282
282
|
break
|
|
283
283
|
}
|
|
284
284
|
case 'focus': {
|
|
285
|
-
if (refArg == null) throw new Error('usage:
|
|
285
|
+
if (refArg == null) throw new Error('usage: peach screenshot slides focus <n>')
|
|
286
286
|
emit(
|
|
287
287
|
await callInBridgeWrite<ControlState>(
|
|
288
288
|
bridge,
|
|
@@ -349,7 +349,7 @@ export async function runSlides(
|
|
|
349
349
|
break
|
|
350
350
|
}
|
|
351
351
|
default:
|
|
352
|
-
throw new Error(`unknown subcommand "${sub}" — see
|
|
352
|
+
throw new Error(`unknown subcommand "${sub}" — see peach screenshot slides --help`)
|
|
353
353
|
}
|
|
354
354
|
} finally {
|
|
355
355
|
bridge.close()
|
package/cli/commands/state.ts
CHANGED
|
@@ -19,10 +19,10 @@ function isSimStateResult(value: unknown): value is SimStateResult {
|
|
|
19
19
|
|
|
20
20
|
function printHelp(): void {
|
|
21
21
|
console.log(`
|
|
22
|
-
|
|
22
|
+
peach state - capture the current app state in one call
|
|
23
23
|
|
|
24
24
|
usage:
|
|
25
|
-
|
|
25
|
+
peach state [--json] [--sim <id>]
|
|
26
26
|
|
|
27
27
|
options:
|
|
28
28
|
--json print the complete structured result, including the screenshot
|
package/cli/commands/storage.ts
CHANGED
|
@@ -23,11 +23,11 @@ function findSubcommand(args: string[]): { name: string; index: number } | null
|
|
|
23
23
|
|
|
24
24
|
function printHelp(): void {
|
|
25
25
|
console.log(`
|
|
26
|
-
|
|
26
|
+
peach storage — manage sim and app storage
|
|
27
27
|
|
|
28
28
|
usage:
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
peach storage profile <subcommand>
|
|
30
|
+
peach storage clear [--full] [--sim <id>] [--json]
|
|
31
31
|
|
|
32
32
|
subcommands:
|
|
33
33
|
profile list
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// `
|
|
1
|
+
// `peach config telemetry on|off` — retained as the command spelling for the
|
|
2
2
|
// product analytics preference shown by guided setup and Settings.
|
|
3
3
|
//
|
|
4
4
|
// this is the process-wide preference; `DO_NOT_TRACK=1` still forces opt-out
|
|
@@ -49,7 +49,7 @@ export async function runTelemetry(args: string[]): Promise<void> {
|
|
|
49
49
|
|
|
50
50
|
default:
|
|
51
51
|
console.error(` unknown telemetry action: ${sub}`)
|
|
52
|
-
console.error(' usage:
|
|
52
|
+
console.error(' usage: peach config telemetry [on|off|status]')
|
|
53
53
|
rnxExit(1)
|
|
54
54
|
}
|
|
55
55
|
}
|