project_apple_application_graph accepted only IPA inventories. It now also projects macOS .app directories and ZIP or DMG inventories that contain applications. It reports application roots, platforms, and every nested bundle with its path-convention role, layout, parent, Info.plist path, executable candidates, and signing paths: - roles: app extensions, XPC services (including inside frameworks), frameworks, login items, system and driver extensions, plug-ins, resource bundles, and helper or nested applications; - privileged helpers in Contents/Library/LaunchServices and launchd plists in Contents/Library/LaunchAgents or LaunchDaemons; - direct files of Contents/Helpers; - symlinks by path. Their targets are not inventoried, so versioned frameworks are described through their real Versions/<version>/ directories. AppleDouble sidecars (._* and __MACOSX/) are excluded from roles. A DMG whose contents could not be inventoried is reported as partial. Other inventory formats remain input errors. The projection still reads no plist or CMS semantics; it points callers at inspect_plist. The result schema is additive. projection_id now covers the new fields, so IPA projection IDs differ from earlier versions. verify:macos-bundle compiles a source-owned app with clang (CLT only). It packs it as a directory, a ditto ZIP, and an APFS DMG, and checks identical anatomy through the CLI with stdio MCP parity. It runs in the macOS CI job. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
253 lines
13 KiB
JSON
253 lines
13 KiB
JSON
{
|
|
"name": "rea-agents",
|
|
"mcpName": "io.github.morluto/rea",
|
|
"version": "4.1.0",
|
|
"description": "Reverse engineer anything from your terminal or agent with one CLI and MCP server.",
|
|
"license": "MIT",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/morluto/rea.git"
|
|
},
|
|
"homepage": "https://github.com/morluto/rea#readme",
|
|
"bugs": {
|
|
"url": "https://github.com/morluto/rea/issues"
|
|
},
|
|
"keywords": [
|
|
"reverse-engineering",
|
|
"binary-analysis",
|
|
"agents",
|
|
"agent-skills",
|
|
"cli",
|
|
"mcp-server",
|
|
"model-context-protocol",
|
|
"static-analysis",
|
|
"disassembler",
|
|
"decompiler",
|
|
"mcp",
|
|
"hopper"
|
|
],
|
|
"publishConfig": {
|
|
"access": "public"
|
|
},
|
|
"type": "module",
|
|
"bin": {
|
|
"rea": "scripts/rea.mjs",
|
|
"rea-agents": "scripts/rea.mjs"
|
|
},
|
|
"engines": {
|
|
"node": "^22.19.0 || ^24.11.0 || >=26.0.0"
|
|
},
|
|
"packageManager": "npm@11.16.0",
|
|
"files": [
|
|
"dist",
|
|
"install.sh",
|
|
"bridge/hopper_bridge.py",
|
|
"bridge/native/ReaNativeUI.swift",
|
|
"bridge/ghidra/ReaGhidraBridge.java",
|
|
"bridge/ghidra/ReaGhidraExtensions.java",
|
|
"bridge/ghidra/ReaGhidraPrepareCom.java",
|
|
"bridge/android/ReaJadxBridge.java",
|
|
"scripts/rea.mjs",
|
|
"scripts/electron-active-hook.cjs",
|
|
"scripts/electron-active-hook-boundaries.cjs",
|
|
"scripts/hopper-demo-x11.py",
|
|
"scripts/prepack.mjs",
|
|
"scripts/prepare.mjs",
|
|
"skills",
|
|
"README.md",
|
|
"LICENSE",
|
|
"native/windows/build/manifest.json",
|
|
"native/windows/build/rea-windows-x64.node",
|
|
"scripts/verify-windows-native-artifact.mjs"
|
|
],
|
|
"scripts": {
|
|
"deps:check": "node scripts/check-dependency-install.mjs",
|
|
"metadata:generate": "node scripts/generate-package-metadata.mjs",
|
|
"metadata:check": "node scripts/generate-package-metadata.mjs --check",
|
|
"mcp-registry:check": "node scripts/verify-mcp-registry-metadata.mjs",
|
|
"mcp-catalog:generate": "npm run build:cached && node scripts/generate-mcp-tool-catalog.mjs",
|
|
"mcp-catalog:check": "node scripts/generate-mcp-tool-catalog.mjs --check",
|
|
"prebuild": "npm run deps:check && npm run metadata:check",
|
|
"build": "node scripts/run-exclusive.mjs build npm run build:unlocked",
|
|
"build:unlocked": "node scripts/clean-build-output.mjs && tsc -p tsconfig.build.json",
|
|
"precheck": "npm run deps:check",
|
|
"check": "turbo run typecheck lint format:check knip metadata:check",
|
|
"precheck:fast": "npm run deps:check",
|
|
"check:fast": "turbo run typecheck lint --output-logs=errors-only",
|
|
"precheck:changed": "npm run deps:check",
|
|
"check:changed": "npm run check:fast && npm run test:changed",
|
|
"precheck:test": "npm run deps:check",
|
|
"check:test": "turbo run typecheck lint format:check knip metadata:check test:run",
|
|
"precheck:pr": "npm run deps:check",
|
|
"check:pr": "turbo run typecheck lint format:check knip metadata:check test:run && npm run docs:check && npm run jscpd && npm run scan:todos",
|
|
"precheck:ci": "npm run deps:check",
|
|
"check:ci": "turbo run typecheck lint format:check knip metadata:check jscpd scan:todos",
|
|
"build:cached": "turbo run build",
|
|
"format": "oxfmt .",
|
|
"format:check": "oxfmt --check .",
|
|
"lint": "oxlint && npm run verify:module-boundaries",
|
|
"lint:fix": "oxlint --fix && npm run verify:module-boundaries",
|
|
"knip": "knip",
|
|
"jscpd": "jscpd src/ tests/",
|
|
"scan:todos": "node scripts/scan-todos.mjs",
|
|
"start": "node scripts/rea.mjs mcp",
|
|
"test": "npm run test:with-build",
|
|
"test:with-build": "npm run build:cached && vitest run",
|
|
"test:run": "vitest run",
|
|
"test:local": "node scripts/run-development-tests.mjs local",
|
|
"test:fast": "vitest run --project domain --project services --project adapters --project composition --project conformance --project evaluation",
|
|
"pretest:boundary": "npm run build:cached",
|
|
"test:boundary": "vitest run --project boundary --project process-boundary --project mcp-boundary --project process-global",
|
|
"pretest:mcp": "npm run build:cached",
|
|
"test:mcp": "vitest run --project mcp-boundary",
|
|
"pretest:acceptance": "npm run build:cached",
|
|
"test:acceptance": "vitest run --project acceptance",
|
|
"test:changed": "node scripts/run-development-tests.mjs changed",
|
|
"pretest:integration": "npm run build:cached",
|
|
"test:integration": "vitest run --project boundary --project process-boundary --project mcp-boundary --project process-global --project acceptance",
|
|
"pretest:coverage": "npm run build:cached",
|
|
"test:coverage": "vitest run --coverage.enabled --coverage.provider=v8",
|
|
"test:ci": "npm run test:coverage -- --reporter=default --reporter=junit --outputFile.junit=test-results.xml",
|
|
"pretest:ci:shard": "npm run build:cached",
|
|
"test:ci:shard": "npm run test:ci:shard:run",
|
|
"test:ci:shard:run": "vitest run --coverage.enabled --coverage.provider=v8 --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.branches=0 --coverage.thresholds.statements=0 --reporter=default --reporter=blob",
|
|
"test:ci:merge": "vitest --merge-reports --coverage.enabled --coverage.provider=v8",
|
|
"pretest:verbose": "npm run build:cached",
|
|
"test:verbose": "vitest run --reporter=verbose",
|
|
"test:watch": "vitest --project domain --project services --project adapters --project composition --project conformance --project evaluation --changed",
|
|
"pretest:watch:all": "npm run build:cached",
|
|
"test:watch:all": "vitest --changed",
|
|
"typecheck": "tsc --noEmit",
|
|
"verify:test-temp-hygiene": "npm run build:cached && node scripts/verify-test-temp-hygiene.mjs",
|
|
"verify:hopper": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper.mjs",
|
|
"verify:apple-dispatch": "npm run build:cached && node scripts/verify-apple-dispatch.mjs",
|
|
"verify:native-ui": "npm run build:cached && node scripts/verify-native-ui.mjs",
|
|
"verify:keyed-archive": "npm run build:cached && node scripts/verify-keyed-archive.mjs",
|
|
"verify:macos-bundle": "npm run build:cached && node scripts/verify-macos-bundle.mjs",
|
|
"verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
|
|
"verify:ida": "npm run build:cached && node scripts/verify-real-ida.mjs",
|
|
"verify:ghidra:switch": "npm run build:cached && node scripts/verify-real-ghidra-switch.mjs",
|
|
"verify:ghidra:dos": "npm run build:cached && node scripts/verify-real-ghidra-dos.mjs",
|
|
"verify:ghidra:com": "npm run build:cached && node scripts/verify-real-ghidra-com.mjs",
|
|
"verify:ghidra:aarch64-jump-table": "npm run build:cached && node scripts/verify-real-ghidra.mjs --aarch64-jump-table",
|
|
"verify:interface-builder": "npm run build:cached && node scripts/verify-interface-builder.mjs",
|
|
"verify:ghidra:cross-format": "npm run build:cached && node scripts/verify-real-ghidra.mjs --cross-format",
|
|
"verify:ghidra:windows": "npm run build:cached && npm run build:ghidra-windows-fixture && node scripts/verify-real-ghidra-windows.mjs",
|
|
"verify:browser": "npm run build:cached && node scripts/verify-real-browser.mjs",
|
|
"verify:browser:dom": "node scripts/verify-browser-dom-destinations.mjs",
|
|
"verify:browser:network": "npm run build:cached && node scripts/verify-browser-network.mjs",
|
|
"verify:electron": "npm run build:cached && node scripts/verify-real-electron.mjs",
|
|
"verify:inspector": "npm run build:cached && node scripts/verify/inspector/runtime-observation.mjs",
|
|
"verify:javascript-runtime": "npm run build:cached && node scripts/verify/javascript/runtime-observation.mjs",
|
|
"verify:javascript:digests": "npm run build:cached && node scripts/verify/javascript/digests.mjs",
|
|
"verify:application-workflows": "npm run build:cached && node scripts/verify/javascript/application-workflows.mjs",
|
|
"verify:managed": "npm run build:cached && node scripts/verify-managed-conformance.mjs",
|
|
"verify:firmware": "npm run build:cached && node scripts/verify/firmware/analysis.mjs",
|
|
"fixtures:firmware": "node scripts/fixtures/firmware/generate.mjs",
|
|
"verify:android": "npm run build:cached && node scripts/verify/android/analysis.mjs",
|
|
"fixtures:android": "node scripts/fixtures/android/fetch.mjs",
|
|
"verify:agent": "npm run build:cached && node scripts/verify-agent-experience.mjs",
|
|
"verify:hopper:linux": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper-linux.mjs",
|
|
"verify:setup:linux": "npm run build:cached && node scripts/verify-linux-setup-e2e.mjs",
|
|
"build:fixtures": "node scripts/build-conformance-fixtures.mjs",
|
|
"build:ghidra-windows-fixture": "node scripts/create-ghidra-windows-fixture.mjs",
|
|
"verify:fixtures": "npm run build:fixtures && node scripts/verify-conformance-fixtures.mjs",
|
|
"verify:readiness": "npm run build:cached && npm run verify:fixtures && node scripts/verify-reconstruction-readiness.mjs",
|
|
"verify:package": "npm run build:cached && node scripts/verify-package.mjs",
|
|
"verify:package:windows": "npm run build:cached && node scripts/verify-windows-package.mjs",
|
|
"probe:windows-capabilities": "npm run build:cached && node scripts/windows-capabilities.mjs",
|
|
"verify:published": "node scripts/verify-published-package.mjs",
|
|
"config:print": "node scripts/print-mcp-config.mjs",
|
|
"evidence:generate": "npm run build:cached && node scripts/generate-completion-ledger.mjs",
|
|
"evidence:check": "npm run build:cached && node scripts/generate-completion-ledger.mjs --check",
|
|
"docs:dev": "vitepress dev docs",
|
|
"docs:build": "vitepress build docs",
|
|
"docs:preview": "vitepress preview docs",
|
|
"docs:generate": "node scripts/run-exclusive.mjs docs npm run docs:generate:unlocked",
|
|
"docs:generate:unlocked": "npm run metadata:generate && npm run build:cached && node scripts/generate-mcp-tool-catalog.mjs && node scripts/generate-skill-metadata.mjs && node scripts/generate-product-catalog.mjs && node scripts/generate-completion-ledger.mjs && node scripts/generate-error-schema.mjs",
|
|
"docs:check": "node scripts/run-exclusive.mjs docs turbo run docs:check:built",
|
|
"docs:check:built": "node scripts/generate-package-metadata.mjs --check && node scripts/generate-mcp-tool-catalog.mjs --check && node scripts/generate-skill-metadata.mjs --check && node scripts/generate-product-catalog.mjs --check && node scripts/generate-completion-ledger.mjs --check && node scripts/check-doc-facts.mjs && node scripts/generate-error-schema.mjs --check",
|
|
"docs:error-schema": "npm run build:cached && node scripts/generate-error-schema.mjs",
|
|
"prepack": "node scripts/prepack.mjs",
|
|
"prepare": "node scripts/prepare.mjs",
|
|
"verify:asset-catalog": "npm run build:cached && node scripts/verify-asset-catalog.mjs",
|
|
"verify:native-ui:permissions": "npm run build:cached && node scripts/verify-native-ui.mjs --allow-permission-denial",
|
|
"test:focused": "node scripts/run-development-tests.mjs focused",
|
|
"build:windows-native": "node scripts/build-windows-native.mjs",
|
|
"verify:windows-native:artifact": "node scripts/verify-windows-native-artifact.mjs",
|
|
"prepublishOnly": "npm run verify:windows-native:artifact",
|
|
"verify:windows-native": "node scripts/verify-windows-native.mjs",
|
|
"verify:ghidra:windows:package": "node scripts/verify-packaged-ghidra-windows.mjs",
|
|
"build:ghidra:nativeaot": "node scripts/build-ghidra-nativeaot.mjs",
|
|
"build:fixtures:nativeaot": "node scripts/generate-nativeaot-fixtures.mjs",
|
|
"verify:ghidra:nativeaot": "npm run build:cached && node scripts/verify-real-ghidra-nativeaot.mjs",
|
|
"verify:browser:scripts": "npm run build:cached && node scripts/verify-browser-scripts.mjs",
|
|
"verify:browser:modules": "npm run build:cached && node scripts/verify-browser-modules.mjs",
|
|
"verify:test-discovery": "node scripts/verify-test-discovery.mjs",
|
|
"verify:javascript:recovery": "node scripts/verify/javascript/recovery.mjs",
|
|
"verify:module-boundaries": "node scripts/verify-module-boundaries.mjs",
|
|
"verify:browser:source-maps": "npm run build:cached && node scripts/verify-browser-source-maps.mjs"
|
|
},
|
|
"lint-staged": {
|
|
"*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}": [
|
|
"oxfmt",
|
|
"oxlint --fix"
|
|
],
|
|
"*.{json,md,yml,yaml}": "oxfmt"
|
|
},
|
|
"dependencies": {
|
|
"@babel/parser": "8.0.4",
|
|
"@babel/types": "8.0.4",
|
|
"@clack/prompts": "1.7.0",
|
|
"@electron/asar": "4.2.0",
|
|
"@jridgewell/trace-mapping": "0.3.31",
|
|
"@lydell/node-pty": "1.1.0",
|
|
"@modelcontextprotocol/client": "2.3.1",
|
|
"@modelcontextprotocol/server": "2.3.1",
|
|
"@xterm/addon-serialize": "0.14.0",
|
|
"@xterm/headless": "6.0.0",
|
|
"@zip.js/zip.js": "2.8.26",
|
|
"canonicalize": "3.0.0",
|
|
"cross-spawn": "7.0.6",
|
|
"diff": "9.0.0",
|
|
"ignore": "7.0.6",
|
|
"incur": "0.6.1",
|
|
"isomorphic-git": "1.38.7",
|
|
"jsonc-parser": "3.3.1",
|
|
"pino": "10.4.0",
|
|
"playwright-core": "1.58.2",
|
|
"plist": "5.0.0",
|
|
"semver": "7.8.5",
|
|
"smol-toml": "1.9.0",
|
|
"write-file-atomic": "7.0.0",
|
|
"ws": "8.21.0",
|
|
"zod": "4.4.3"
|
|
},
|
|
"overrides": {
|
|
"vitepress": {
|
|
"vite": "6.4.4"
|
|
}
|
|
},
|
|
"devDependencies": {
|
|
"@fast-check/vitest": "0.5.0",
|
|
"@types/cross-spawn": "6.0.6",
|
|
"@types/node": "26.6.4",
|
|
"@types/semver": "7.7.1",
|
|
"@types/write-file-atomic": "4.0.3",
|
|
"@types/ws": "8.18.1",
|
|
"@vitest/coverage-v8": "5.0.3",
|
|
"ajv": "8.20.0",
|
|
"husky": "9.1.7",
|
|
"jscpd": "5.0.12",
|
|
"knip": "6.39.0",
|
|
"lint-staged": "16.4.0",
|
|
"oxfmt": "0.72.0",
|
|
"oxlint": "1.87.0",
|
|
"turbo": "2.11.7",
|
|
"typescript": "7.0.2",
|
|
"vitepress": "1.6.4",
|
|
"vitest": "5.0.3",
|
|
"yaml": "2.9.0"
|
|
}
|
|
}
|