mirror of
https://github.com/callstack/agent-device.git
synced 2026-09-14 20:06:34 +08:00
a8ee397168
* test(ios): add snapshot engine conformance gates * test(ios): align differential acquisition inputs * fix(ios): gate Swift differential on macOS * test(ios): keep differential coverage host-aware * test(ios): own snapshot differential on macOS
325 lines
19 KiB
JSON
325 lines
19 KiB
JSON
{
|
|
"name": "agent-device",
|
|
"version": "0.20.11-dev",
|
|
"description": "Mobile app automation and verification for AI coding agents. CLI, MCP server, and typed Node.js API for iOS, Android, HarmonyOS, TV, web, macOS, and Linux.",
|
|
"mcpName": "io.github.callstack/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.17.0",
|
|
"main": "dist/src/index.js",
|
|
"types": "dist/src/index.d.ts",
|
|
"exports": {
|
|
".": {
|
|
"types": "./dist/src/index.d.ts",
|
|
"import": "./dist/src/index.js"
|
|
},
|
|
"./io": {
|
|
"types": "./dist/src/io.d.ts",
|
|
"import": "./dist/src/io.js"
|
|
},
|
|
"./artifacts": {
|
|
"types": "./dist/src/artifacts.d.ts",
|
|
"import": "./dist/src/artifacts.js"
|
|
},
|
|
"./metro": {
|
|
"types": "./dist/src/metro.d.ts",
|
|
"import": "./dist/src/metro.js"
|
|
},
|
|
"./batch": {
|
|
"types": "./dist/src/batch.d.ts",
|
|
"import": "./dist/src/batch.js"
|
|
},
|
|
"./remote-config": {
|
|
"types": "./dist/src/remote-config.d.ts",
|
|
"import": "./dist/src/remote-config.js"
|
|
},
|
|
"./install-source": {
|
|
"types": "./dist/src/install-source.d.ts",
|
|
"import": "./dist/src/install-source.js"
|
|
},
|
|
"./android-adb": {
|
|
"types": "./dist/src/android-adb.d.ts",
|
|
"import": "./dist/src/android-adb.js"
|
|
},
|
|
"./limrun": {
|
|
"types": "./dist/src/limrun.d.ts",
|
|
"import": "./dist/src/limrun.js"
|
|
},
|
|
"./contracts": {
|
|
"types": "./dist/src/contracts.d.ts",
|
|
"import": "./dist/src/contracts.js"
|
|
},
|
|
"./selectors": {
|
|
"types": "./dist/src/selectors.d.ts",
|
|
"import": "./dist/src/selectors.js"
|
|
},
|
|
"./finders": {
|
|
"types": "./dist/src/finders.d.ts",
|
|
"import": "./dist/src/finders.js"
|
|
},
|
|
"./ai-sdk": {
|
|
"types": "./dist/src/ai-sdk.d.ts",
|
|
"import": "./dist/src/ai-sdk.js"
|
|
}
|
|
},
|
|
"engines": {
|
|
"node": ">=22.12"
|
|
},
|
|
"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",
|
|
"explain:command": "node --experimental-strip-types scripts/explain-command.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",
|
|
"rebuild:cli": "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:macos:clean": "pnpm clean:xcuitest:macos && pnpm build:xcuitest:macos",
|
|
"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": "AGENT_DEVICE_ANDROID_HELPER=snapshot sh ./scripts/build-android-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-snapshot-helper",
|
|
"package:android-snapshot-helper": "AGENT_DEVICE_ANDROID_HELPER=snapshot sh ./scripts/package-android-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 && AGENT_DEVICE_ANDROID_HELPER=snapshot sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") v$(node -p \"require('./package.json').version\") android/snapshot-helper/dist",
|
|
"package:apple-runner:npm": "node scripts/package-apple-runner-source.mjs",
|
|
"build:android": "pnpm package:android-snapshot-helper:npm && pnpm package:android-ime-helper:npm",
|
|
"build:android-ime-helper": "AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/build-android-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-ime-helper",
|
|
"package:android-ime-helper": "AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") .tmp/android-ime-helper",
|
|
"package:android-ime-helper:npm": "rm -rf android/ime-helper/dist && AGENT_DEVICE_ANDROID_HELPER=ime sh ./scripts/package-android-helper.sh $(node -p \"require('./package.json').version\") android/ime-helper/dist",
|
|
"build:macos-helper": "node --experimental-strip-types scripts/swift-toolchain-tmpdir.ts swift build -c release --package-path apple/macos-helper",
|
|
"build:macos-helper:clean": "node --experimental-strip-types scripts/swift-toolchain-tmpdir.ts swift package --package-path apple/macos-helper clean && pnpm build:macos-helper",
|
|
"build:package": "pnpm build && pnpm build:xcuitest:ios && pnpm build:xcuitest:macos && pnpm build:xcuitest:tvos && pnpm build:xcuitest:visionos && pnpm build:macos-helper:clean && pnpm package:apple-runner:npm && pnpm build:android",
|
|
"package:npm": "pnpm build:package && pnpm check:package",
|
|
"release:prepare": "node scripts/release-mark-dev.mjs --check-release-version && rm -rf .tmp/release && pnpm check:mcp-metadata && pnpm build:package && pnpm check:package -- --pack-destination .tmp/release",
|
|
"release:publish": "pnpm release:prepare && npm publish --ignore-scripts .tmp/release/*.tgz && pnpm release:mark-dev",
|
|
"release:mark-dev": "node scripts/release-mark-dev.mjs",
|
|
"ad": "node bin/agent-device.mjs",
|
|
"bench:help-conformance": "node scripts/help-conformance-bench.mjs",
|
|
"maestro:conformance": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/maestro-conformance/format-generated-json.test.mjs packages/maestro/test/conformance/verify.test.ts packages/maestro/test/conformance/differential/engine-process.test.ts packages/maestro/test/conformance/differential/report-output.test.ts packages/maestro/test/conformance/differential/run.test.ts packages/maestro/test/conformance/differential/invariants.test.ts",
|
|
"maestro:conformance:regenerate": "node --experimental-strip-types scripts/maestro-conformance/regenerate.mjs",
|
|
"maestro:conformance:differential": "node --experimental-strip-types packages/maestro/test/conformance/differential/run.ts",
|
|
"test:ios-snapshot-differential": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/ios-snapshot-differential.test.ts",
|
|
"size": "node scripts/size-report.mjs",
|
|
"perf": "node --experimental-strip-types scripts/perf/run.ts",
|
|
"mutation:run": "node --experimental-strip-types scripts/mutation/run.ts",
|
|
"mutation:check": "node --experimental-strip-types scripts/mutation/run.ts --no-run",
|
|
"mutation:affected": "node --experimental-strip-types scripts/mutation/run.ts --affected",
|
|
"mutation:test": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/mutation/*.test.ts",
|
|
"lint": "oxlint . --deny-warnings",
|
|
"format": "node ./node_modules/oxfmt/bin/oxfmt --write",
|
|
"format:check": "node ./node_modules/oxfmt/bin/oxfmt --check",
|
|
"fuzz:parsers": "node --experimental-strip-types scripts/fuzz/run.ts",
|
|
"fallow:all": "fallow --summary",
|
|
"fallow:baseline": "fallow dead-code --save-baseline fallow-baselines/dead-code.json --summary && fallow health --report-only --save-baseline fallow-baselines/health.json --summary",
|
|
"check:fallow": "fallow audit",
|
|
"check:affected": "node --experimental-strip-types scripts/check-affected/run.ts",
|
|
"check:affected:test": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/check-affected/model.test.ts scripts/check-affected/platform-packages.test.ts scripts/check-affected/device-lanes.test.ts scripts/check-affected/lockfile-install-sync.test.ts scripts/check-affected/run.test.ts",
|
|
"gate": "node --experimental-strip-types scripts/gate/run.ts",
|
|
"check:gate-manifest": "node --experimental-strip-types scripts/gate/check.ts",
|
|
"check:gate-manifest:test": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/gate/*.test.ts",
|
|
"check:coverage-changed": "node --experimental-strip-types scripts/coverage-changed/run.ts",
|
|
"check:coverage-changed:test": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/coverage-changed/model.test.ts scripts/coverage-changed/run.test.ts",
|
|
"check:layering": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/layering/*.test.ts && node --experimental-strip-types scripts/layering/check.ts",
|
|
"check:di-seams": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/di-seams/*.test.ts && node --experimental-strip-types scripts/di-seams/check.ts",
|
|
"depgraph": "node --experimental-strip-types scripts/depgraph/build.ts",
|
|
"depgraph:test": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/depgraph/model.test.ts scripts/depgraph/affected.test.ts",
|
|
"check:production-exports": "fallow dead-code --config fallow-production-exports.json --production --unused-exports --fail-on-issues",
|
|
"check:bundle-owner-files": "node --experimental-strip-types scripts/check-bundle-owner-files.ts",
|
|
"check:package": "node --experimental-strip-types scripts/check-package.ts",
|
|
"check:command-docs": "vitest run --project unit-core src/__tests__/command-doc-coverage.test.ts",
|
|
"check:agent-guidance": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/__tests__/agent-guidance-contract.test.ts",
|
|
"check:replay-compat": "node --experimental-strip-types scripts/check-replay-compat-provenance.ts",
|
|
"check:daemon-wire-compat": "node --experimental-strip-types scripts/wire-compat/run.ts",
|
|
"check:daemon-wire-compat:test": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/wire-compat/model.test.ts",
|
|
"check:xctest-selection": "node --experimental-strip-types scripts/check-xctest-selection.ts",
|
|
"check:tmpdir-leaks": "node --experimental-strip-types scripts/check-tmpdir-leaks.ts",
|
|
"check:tmpdir-leaks:test": "node --experimental-strip-types scripts/node-test-tmpdir.ts --experimental-strip-types --test scripts/check-tmpdir-leaks-model.test.ts scripts/vitest-tmpdir-global-setup.test.ts scripts/node-test-tmpdir.test.ts scripts/swift-toolchain-tmpdir.test.ts",
|
|
"check:freerange": "fr",
|
|
"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": "pnpm sync:mcp-metadata && git add server.json",
|
|
"check:tooling": "pnpm format:check && pnpm lint && pnpm typecheck && pnpm check:layering && pnpm depgraph:test && pnpm check:gate-manifest:test && pnpm check:gate-manifest && pnpm check:production-exports && pnpm check:tmpdir-leaks:test && pnpm check:xctest-selection && pnpm check:mcp-metadata && pnpm build && pnpm check:bundle-owner-files && pnpm check:package",
|
|
"check:unit": "pnpm test:unit && pnpm check:tmpdir-leaks && pnpm test:smoke",
|
|
"check": "pnpm check:tooling && pnpm check:fallow && pnpm check:unit",
|
|
"prepack": "pnpm check:mcp-metadata && pnpm package:npm",
|
|
"typecheck": "tsc -b packages/xml packages/kernel packages/contracts packages/host-kit packages/capture-kit packages/provision-kit packages/platform-apple packages/platform-android packages/platform-harmonyos packages/platform-vega packages/platform-linux packages/platform-web packages/ad-script packages/selectors packages/ad-replay packages/maestro packages/replay-test packages/provider-webdriver packages/provider-limrun && tsc -p tsconfig.json && tsc -p examples/sdk/tsconfig.json",
|
|
"test-app:install": "pnpm install --dir examples/test-app",
|
|
"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": "pnpm test-app:maestro --platform ios",
|
|
"test-app:maestro:android": "pnpm test-app:maestro --platform android",
|
|
"test": "pnpm test:unit",
|
|
"test:unit": "vitest run --project unit-core --project fuzz-worker",
|
|
"test:maestro-compat": "vitest run --project unit-core packages/maestro src/daemon/adapters/maestro src/compat/__tests__/replay-input.test.ts",
|
|
"test:coverage": "vitest run --coverage --project=!fuzz-worker && pnpm test:fuzz-worker",
|
|
"test:coverage:ci": "vitest run --coverage --project=!fuzz-worker && pnpm test:fuzz-worker",
|
|
"test:fuzz-worker": "vitest run --project fuzz-worker",
|
|
"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:fixture-cache": "node --experimental-strip-types scripts/node-test-tmpdir.ts --test test/ci/trusted-fixture-artifact.test.mjs",
|
|
"test:fixture-fallback": "sh ./test/scripts/setup-fixture-app-fallback-smoke.sh",
|
|
"test:output-economy": "vitest run --project output-economy",
|
|
"test:smoke:web": "pnpm build && node --experimental-strip-types scripts/node-test-tmpdir.ts --test test/integration/smoke-web-platform.test.ts",
|
|
"test:smoke": "node --experimental-strip-types scripts/node-test-tmpdir.ts --test test/integration/smoke-*.test.ts",
|
|
"test:integration:node": "node --experimental-strip-types scripts/node-test-tmpdir.ts --test --experimental-test-isolation=none test/integration/*.test.ts",
|
|
"test:integration:macos-coverage": "node --experimental-strip-types scripts/node-test-tmpdir.ts --test test/integration/smoke-macos-coverage.test.ts",
|
|
"test:integration": "pnpm test:integration:node && pnpm test:integration:provider",
|
|
"test:concurrency-torture": "node --experimental-strip-types scripts/node-test-tmpdir.ts --test test/integration/nightly/concurrency-torture.test.ts",
|
|
"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/emulator",
|
|
"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",
|
|
"test:linux:command-evidence": "node --experimental-strip-types test/integration/linux-e2e/live-runner.ts"
|
|
},
|
|
"files": [
|
|
"bin",
|
|
"dist",
|
|
"apple/macos-helper",
|
|
"!apple/macos-helper/**/.build",
|
|
"android/snapshot-helper/dist",
|
|
"!android/snapshot-helper/dist/*.idsig",
|
|
"!android/snapshot-helper/README.md",
|
|
"android/ime-helper/dist",
|
|
"!android/ime-helper/dist/*.idsig",
|
|
"!android/ime-helper/README.md",
|
|
"linux/atspi-dump.py",
|
|
"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": {
|
|
"@limrun/api": "^0.24.5",
|
|
"ipaddr.js": "^2.5.0",
|
|
"tar-stream": "^3.2.0",
|
|
"undici": "7.29.0",
|
|
"yaml": "^2.9.0",
|
|
"yauzl": "^3.4.0"
|
|
},
|
|
"peerDependencies": {
|
|
"ai": "^6.0.0 || ^7.0.0"
|
|
},
|
|
"peerDependenciesMeta": {
|
|
"ai": {
|
|
"optional": true
|
|
}
|
|
},
|
|
"devDependencies": {
|
|
"@agent-device/ad-replay": "workspace:*",
|
|
"@agent-device/ad-script": "workspace:*",
|
|
"@agent-device/capture-kit": "workspace:*",
|
|
"@agent-device/contracts": "workspace:*",
|
|
"@agent-device/host-kit": "workspace:*",
|
|
"@agent-device/kernel": "workspace:*",
|
|
"@agent-device/maestro": "workspace:*",
|
|
"@agent-device/platform-android": "workspace:*",
|
|
"@agent-device/platform-apple": "workspace:*",
|
|
"@agent-device/platform-harmonyos": "workspace:*",
|
|
"@agent-device/platform-linux": "workspace:*",
|
|
"@agent-device/platform-vega": "workspace:*",
|
|
"@agent-device/platform-web": "workspace:*",
|
|
"@agent-device/provider-limrun": "workspace:*",
|
|
"@agent-device/provider-webdriver": "workspace:*",
|
|
"@agent-device/provision-kit": "workspace:*",
|
|
"@agent-device/replay-test": "workspace:*",
|
|
"@agent-device/selectors": "workspace:*",
|
|
"@agent-device/xml": "workspace:*",
|
|
"@arethetypeswrong/cli": "^0.18.5",
|
|
"@chenglou/freerange": "^0.0.4",
|
|
"@nkzw/eslint-plugin": "^2.0.0",
|
|
"@nkzw/oxlint-config": "^1.3.0",
|
|
"@stryker-mutator/core": "10.0.0",
|
|
"@stryker-mutator/vitest-runner": "10.0.0",
|
|
"@types/json-schema": "^7.0.15",
|
|
"@types/node": "^22.20.1",
|
|
"@types/pngjs": "^6.0.5",
|
|
"@types/tar-stream": "^3.1.4",
|
|
"@types/yauzl": "^3.4.0",
|
|
"@vitest/coverage-v8": "4.1.11",
|
|
"ai": "^7.0.68",
|
|
"eslint-plugin-no-only-tests": "^3.4.0",
|
|
"eslint-plugin-perfectionist": "^5.10.1",
|
|
"fallow": "^2.104.0",
|
|
"fast-check": "^4.9.0",
|
|
"oxc-parser": "^0.146.0",
|
|
"oxfmt": "^0.64.0",
|
|
"oxlint": "^1.79.0",
|
|
"pngjs": "^7.0.0",
|
|
"publint": "^0.3.24",
|
|
"tsdown": "^0.22.14",
|
|
"typescript": "^7.0.2",
|
|
"vite": "^8.2.1",
|
|
"vitest": "^4.1.11"
|
|
}
|
|
}
|