Files
callstack__agent-device/package.json
Michał Pierzchała 5a362ec752 build: drop tsc entirely and fix sandbox-hostile tests (#1100)
Follow-ups from the bundler/CI speed work, re-validated against latest
main. The typescript package is gone from the toolchain:

- pnpm typecheck stays on tsgo; the typecheck:tsc escape hatch is
  removed along with the typescript devDependency.
- args.test.ts extracted cli.ts dispatch literals through the
  TypeScript compiler API - the only remaining consumer. It now walks
  the same AST via oxc-parser (matching the OXC lint/format/build
  stack); both implementations extract an identical 14-literal set
  from cli.ts, verified side by side before the swap. The
  substitution-free template case ts.isStringLiteralLike covered is
  preserved.
- dts bundling is unaffected: the tsdown build uses the tsgo backend
  and builds green with no typescript package installed.

Test fixes for containerized agent environments:

- The missing-binary doctor-guidance web provider test pins Node 24
  via the file's existing withNodeRuntimeVersion helper, so it asserts
  the setup hint instead of inheriting the host Node and failing on
  Node 22 (the supported engines floor).
- The clean-xcuitest cleanup-failure smoke test skips as root: chmod
  0o500 cannot force a removal failure when the process bypasses
  directory permissions.

AGENTS.md toolchain notes updated to match.


Claude-Session: https://claude.ai/code/session_01FqeW8sA2ZnvnftdvpCqFMS

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-04 21:02:36 +02:00

234 lines
11 KiB
JSON

{
"name": "agent-device",
"version": "0.18.3",
"description": "Agent-native CLI for AI app automation across iOS, Android, tvOS, Android TV, macOS, Linux, and web.",
"mcpName": "io.github.callstackincubator/agent-device",
"license": "MIT",
"author": "Callstack",
"homepage": "https://agent-device.dev/",
"repository": {
"type": "git",
"url": "git+https://github.com/callstack/agent-device.git"
},
"bugs": {
"url": "https://github.com/callstack/agent-device/issues"
},
"type": "module",
"packageManager": "pnpm@11.1.2",
"main": "dist/src/index.js",
"types": "dist/src/index.d.ts",
"exports": {
".": {
"import": "./dist/src/index.js",
"types": "./dist/src/index.d.ts"
},
"./io": {
"import": "./dist/src/io.js",
"types": "./dist/src/io.d.ts"
},
"./artifacts": {
"import": "./dist/src/artifacts.js",
"types": "./dist/src/artifacts.d.ts"
},
"./metro": {
"import": "./dist/src/metro.js",
"types": "./dist/src/metro.d.ts"
},
"./batch": {
"import": "./dist/src/batch.js",
"types": "./dist/src/batch.d.ts"
},
"./remote-config": {
"import": "./dist/src/remote-config.js",
"types": "./dist/src/remote-config.d.ts"
},
"./install-source": {
"import": "./dist/src/install-source.js",
"types": "./dist/src/install-source.d.ts"
},
"./android-adb": {
"import": "./dist/src/android-adb.js",
"types": "./dist/src/android-adb.d.ts"
},
"./contracts": {
"import": "./dist/src/contracts.js",
"types": "./dist/src/contracts.d.ts"
},
"./selectors": {
"import": "./dist/src/selectors.js",
"types": "./dist/src/selectors.d.ts"
},
"./finders": {
"import": "./dist/src/finders.js",
"types": "./dist/src/finders.d.ts"
}
},
"engines": {
"node": ">=22.19"
},
"bin": {
"agent-device": "bin/agent-device.mjs"
},
"scripts": {
"build": "tsdown",
"clean:daemon": "node --experimental-strip-types scripts/clean-daemon.ts",
"daemon:state-dir": "node --experimental-strip-types scripts/print-daemon-state-dir.ts",
"clean:xcuitest": "node scripts/clean-xcuitest-derived.mjs",
"clean:xcuitest:ios": "node scripts/clean-xcuitest-derived.mjs ios",
"clean:xcuitest:macos": "node scripts/clean-xcuitest-derived.mjs macos",
"clean:xcuitest:tvos": "node scripts/clean-xcuitest-derived.mjs tvos",
"clean:xcuitest:visionos": "node scripts/clean-xcuitest-derived.mjs visionos",
"build:node": "pnpm build && pnpm clean:daemon",
"build:xcuitest": "pnpm build:xcuitest:ios && pnpm build:xcuitest:macos",
"build:xcuitest:ios": "AGENT_DEVICE_XCUITEST_PLATFORM=ios sh ./scripts/build-xcuitest-apple.sh",
"build:xcuitest:ios:clean": "pnpm clean:xcuitest:ios && pnpm build:xcuitest:ios",
"build:xcuitest:macos": "AGENT_DEVICE_XCUITEST_PLATFORM=macos sh ./scripts/build-xcuitest-apple.sh",
"build:xcuitest:tvos": "AGENT_DEVICE_XCUITEST_PLATFORM=tvos sh ./scripts/build-xcuitest-apple.sh",
"build:xcuitest:tvos:clean": "pnpm clean:xcuitest:tvos && pnpm build:xcuitest:tvos",
"build:xcuitest:visionos": "AGENT_DEVICE_XCUITEST_PLATFORM=visionos sh ./scripts/build-xcuitest-apple.sh",
"build:xcuitest:visionos:clean": "pnpm clean:xcuitest:visionos && pnpm build:xcuitest:visionos",
"build:android-snapshot-helper": "sh ./scripts/build-android-snapshot-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-snapshot-helper",
"package:android-snapshot-helper": "sh ./scripts/package-android-snapshot-helper.sh $(node -p \"require('./package.json').version\") v$(node -p \"require('./package.json').version\") .tmp/android-snapshot-helper",
"package:android-snapshot-helper:npm": "rm -rf android-snapshot-helper/dist && sh ./scripts/package-android-snapshot-helper.sh $(node -p \"require('./package.json').version\") v$(node -p \"require('./package.json').version\") android-snapshot-helper/dist",
"build:android-multitouch-helper": "sh ./scripts/build-android-multitouch-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-multitouch-helper",
"package:android-multitouch-helper": "sh ./scripts/package-android-multitouch-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-multitouch-helper",
"package:android-multitouch-helper:npm": "rm -rf android-multitouch-helper/dist && sh ./scripts/package-android-multitouch-helper.sh $(node -p \"require('./package.json').version\") android-multitouch-helper/dist",
"build:macos-helper": "swift build -c release --package-path macos-helper",
"build:all": "pnpm build:node && pnpm build:xcuitest",
"ad": "node bin/agent-device.mjs",
"size": "node scripts/size-report.mjs",
"size:markdown": "node scripts/size-report.mjs --json .tmp/size-report.json --markdown .tmp/size-report.md",
"perf": "node --experimental-strip-types scripts/perf/run.ts",
"perf:ios": "node --experimental-strip-types scripts/perf/run.ts --platform ios",
"perf:android": "node --experimental-strip-types scripts/perf/run.ts --platform android",
"lint": "oxlint . --deny-warnings",
"format": "node ./node_modules/oxfmt/bin/oxfmt --write src test skills package.json tsconfig.json tsconfig.lib.json tsdown.config.ts vitest.config.ts .github/actions/setup-node-pnpm/action.yml .oxlintrc.json .oxfmtrc.json '!test/skillgym/.skillgym-results/**'",
"format:check": "node ./node_modules/oxfmt/bin/oxfmt --check src test skills package.json tsconfig.json tsconfig.lib.json tsdown.config.ts vitest.config.ts .github/actions/setup-node-pnpm/action.yml .oxlintrc.json .oxfmtrc.json '!test/skillgym/.skillgym-results/**'",
"fallow": "fallow audit --base origin/main",
"fallow:all": "fallow --summary",
"fallow:baseline": "(fallow dead-code --save-baseline fallow-baselines/dead-code.json --summary || true) && (fallow health --save-baseline fallow-baselines/health.json --summary || true)",
"check:fallow": "fallow audit",
"check:layering": "node --experimental-strip-types scripts/layering/check.ts",
"check:quick": "pnpm lint && pnpm typecheck",
"sync:mcp-metadata": "node scripts/sync-mcp-metadata.mjs",
"check:mcp-metadata": "node scripts/sync-mcp-metadata.mjs --check",
"version": "node scripts/sync-mcp-metadata.mjs && git add server.json",
"check:tooling": "pnpm lint && pnpm typecheck && pnpm check:layering && pnpm check:mcp-metadata && pnpm build",
"check:unit": "pnpm test:unit && pnpm test:smoke",
"check": "pnpm check:tooling && pnpm check:fallow && pnpm check:unit",
"prepack": "pnpm check:mcp-metadata && pnpm build:all && pnpm package:android-snapshot-helper:npm && pnpm package:android-multitouch-helper:npm",
"typecheck": "tsgo -p tsconfig.json",
"test-app:install": "pnpm install --dir examples/test-app --ignore-workspace",
"test-app:start": "pnpm --dir examples/test-app start",
"test-app:ios": "pnpm --dir examples/test-app ios",
"test-app:android": "pnpm --dir examples/test-app android",
"test-app:typecheck": "pnpm --dir examples/test-app typecheck",
"test-app:replay:ios": "pnpm ad test examples/test-app/replays --platform ios --artifacts-dir .tmp/test-app-replay/ios",
"test-app:replay:android": "pnpm ad test examples/test-app/replays --platform android --artifacts-dir .tmp/test-app-replay/android",
"test-app:maestro": "node scripts/run-test-app-maestro-suite.mjs",
"test-app:maestro:ios": "node scripts/run-test-app-maestro-suite.mjs --platform ios",
"test-app:maestro:android": "node scripts/run-test-app-maestro-suite.mjs --platform android",
"test": "vitest run --project unit",
"test:unit": "vitest run --project unit",
"test:coverage": "vitest run --coverage",
"test:integration:provider": "vitest run --project provider-integration",
"test:integration:progress": "node --experimental-strip-types scripts/integration-progress.ts",
"test:integration:progress:check": "node --experimental-strip-types scripts/integration-progress.ts --check",
"test:smoke:web": "pnpm build && node --test test/integration/smoke-web-platform.test.ts",
"test:skillgym": "node test/skillgym/runner-environment.ts && pnpm build && skillgym run ./test/skillgym/suites/agent-device-smoke-suite.ts --config ./test/skillgym/skillgym.config.ts",
"test:skillgym:case": "node test/skillgym/runner-environment.ts && pnpm build && skillgym run ./test/skillgym/suites/agent-device-smoke-suite.ts --config ./test/skillgym/skillgym.config.ts --case",
"test:smoke": "node --test test/integration/smoke-*.test.ts",
"test:integration:node": "node --test test/integration/*.test.ts",
"test:integration": "pnpm test:integration:node && pnpm test:integration:provider",
"test:replay:ios": "node --experimental-strip-types src/bin.ts test test/integration/replays/ios/simulator",
"test:replay:ios-device": "node --experimental-strip-types src/bin.ts test test/integration/replays/ios/device",
"test:replay:android": "node --experimental-strip-types src/bin.ts test test/integration/replays/android",
"test:replay:macos": "node --experimental-strip-types src/bin.ts test test/integration/replays/macos",
"test:replay:linux": "node --experimental-strip-types src/bin.ts test test/integration/replays/linux"
},
"files": [
"bin",
"dist",
"apple-runner",
"!apple-runner/**/.build",
"!apple-runner/**/.swiftpm",
"!apple-runner/**/xcuserdata",
"!apple-runner/**/*.xcuserstate",
"!apple-runner/README.md",
"!apple-runner/RUNNER_PROTOCOL.md",
"macos-helper",
"!macos-helper/**/.build",
"android-snapshot-helper/dist",
"!android-snapshot-helper/dist/*.idsig",
"!android-snapshot-helper/README.md",
"android-multitouch-helper/dist",
"!android-multitouch-helper/dist/*.idsig",
"!android-multitouch-helper/README.md",
"src/platforms/linux/atspi-dump.py",
"skills",
"server.json",
"smithery.yaml",
"README.md",
"LICENSE"
],
"keywords": [
"agent",
"device",
"cli",
"automation",
"adb",
"simctl",
"devicectl",
"ios",
"android",
"tvos",
"macos",
"web",
"browser",
"react-native",
"observability",
"diagnostics",
"network",
"profiling",
"performance",
"mcp",
"model-context-protocol",
"mcp-server",
"ai-agent",
"mobile-automation",
"ios-simulator",
"android-emulator",
"xcuitest",
"e2e-testing",
"cursor",
"claude-code",
"expo",
"mobile-testing",
"qa-automation",
"ai-testing",
"ios-automation",
"android-automation",
"simulator",
"emulator",
"appium",
"maestro",
"detox"
],
"dependencies": {
"yaml": "^2.9.0"
},
"devDependencies": {
"@types/node": "^22.19.21",
"@typescript/native-preview": "7.0.0-dev.20260613.1",
"@vitest/coverage-v8": "4.1.8",
"fallow": "^2.95.0",
"oxc-parser": "^0.138.0",
"oxfmt": "^0.42.0",
"oxlint": "^1.69.0",
"skillgym": "^0.9.1",
"tsdown": "^0.22.3",
"vite": "^8.0.16",
"vitest": "^4.1.8"
}
}