mirror of
https://github.com/callstack/agent-device.git
synced 2026-09-14 20:06:34 +08:00
528 lines
28 KiB
JSON
528 lines
28 KiB
JSON
{
|
|
"$schema": "https://raw.githubusercontent.com/fallow-rs/fallow/main/schema.json",
|
|
"entry": [
|
|
"tsdown.config.ts",
|
|
"vitest.mutation.config.ts",
|
|
"src/sdk/index.ts",
|
|
"src/sdk/io.ts",
|
|
"src/sdk/artifacts.ts",
|
|
"src/sdk/metro.ts",
|
|
"src/sdk/remote-config.ts",
|
|
"src/sdk/install-source.ts",
|
|
"src/sdk/android-adb.ts",
|
|
"src/sdk/contracts.ts",
|
|
"src/sdk/selectors.ts",
|
|
"src/sdk/finders.ts",
|
|
"src/ai-sdk/index.ts",
|
|
"src/bin.ts",
|
|
"src/client/companion-tunnel.ts",
|
|
"src/daemon.ts",
|
|
"packages/capture-kit/src/png-worker.ts",
|
|
"scripts/patch-xcuitest-runner-icon.ts",
|
|
"scripts/runner-request-count/run.ts",
|
|
"packages/capture-kit/src/ios-snapshot-engine/replay.ts",
|
|
// #1596 regression fixture: runs as a real `node --experimental-strip-types`
|
|
// subprocess (test/integration/daemon-replace-exit-flush.test.ts), so
|
|
// dependency analysis cannot follow the runCmdSync string path to it.
|
|
"test/integration/support/exit-after-flush.ts",
|
|
"src/cli/update-check-entry.ts",
|
|
"examples/sdk/client-session.ts",
|
|
"examples/sdk/metro-runtime.ts",
|
|
"examples/sdk/contracts-result.ts",
|
|
"examples/sdk/batch-orchestration.ts",
|
|
"examples/sdk/ai-sdk-tools.ts",
|
|
"test/scripts/metro-prepare-packaged-smoke.mjs",
|
|
"test/integration/*.test.ts",
|
|
"website/docs/404.mdx",
|
|
"website/rspress.config.ts"
|
|
],
|
|
"ignorePatterns": [
|
|
"examples/test-app/**",
|
|
"scripts/perf/**",
|
|
"scripts/layering/**",
|
|
"scripts/di-seams/**",
|
|
"scripts/maestro-conformance/corpus/**",
|
|
"apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests.xctestplan",
|
|
"scripts/write-xcuitest-cache-metadata.mjs",
|
|
"scripts/help-conformance-sample-outputs.d.mts",
|
|
"scripts/help-conformance-runner-output.d.mts"
|
|
],
|
|
"dynamicallyLoaded": ["src/daemon/interaction/index.ts"],
|
|
"ignoreDependencies": [
|
|
"@theme",
|
|
// @agent-device/maestro owns the source import, while the published root
|
|
// build externalizes yaml and retains runtime imports in packed chunks.
|
|
"yaml",
|
|
// @agent-device/provider-limrun owns the source import, while the published
|
|
// root build externalizes @limrun/api and retains runtime imports in packed chunks.
|
|
"@limrun/api",
|
|
// Oxlint resolves the shared config's JS plugins dynamically from their package names.
|
|
"@nkzw/eslint-plugin",
|
|
"eslint-plugin-no-only-tests",
|
|
"eslint-plugin-perfectionist",
|
|
// Packaging linters with no importable API surface here: scripts/check-package.ts runs their
|
|
// `node_modules/.bin` shims as subprocesses, which dependency analysis cannot follow to an import.
|
|
"publint",
|
|
"@arethetypeswrong/cli"
|
|
],
|
|
"ignoreExports": [
|
|
{
|
|
"comment": "Android perf mechanics are selected through the lazy platform host so importing agent-device does not eagerly load adb mechanics. Fallow cannot follow the dynamic property read in src/platform-runtime-perf-host.ts.",
|
|
"file": "packages/platform-android/src/perf.ts",
|
|
"exports": ["sampleAndroidMemoryPerf"]
|
|
},
|
|
{
|
|
"comment": "Apple perf sampling metadata is selected through the same lazy platform host; Fallow cannot follow the dynamic property read in src/platform-runtime-perf-host.ts.",
|
|
"file": "packages/platform-apple/src/core/perf.ts",
|
|
"exports": ["buildAppleFrameSamplingMetadata", "buildAppleMemorySamplingMetadata"]
|
|
},
|
|
{
|
|
"comment": "These host-process helpers are consumed only by integration leak-oracle support and host-process unit tests; Fallow's production graph intentionally excludes both consumers.",
|
|
"file": "packages/host-kit/src/process.ts",
|
|
"exports": ["uniquePositivePids", "readOwnedProcessRecordFile"]
|
|
},
|
|
{
|
|
"comment": "Apple app-resolution helpers are reached through the named lazy façade in packages/platform-apple/src/app-resolution-facade.ts. Fallow cannot connect dynamic import member reads to these source exports; keep this list limited to the facade's re-exports.",
|
|
"file": "packages/platform-apple/src/core/app-resolution.ts",
|
|
"exports": ["buildAppNotInstalledError", "resolveIosAppAlias"]
|
|
},
|
|
{
|
|
"comment": "The app-resolution package facade is consumed through workspace package exports. Fallow does not follow that package boundary, so keep only its externally consumed helper that has no visible production edge here.",
|
|
"file": "packages/platform-apple/src/app-resolution-facade.ts",
|
|
"exports": ["buildAppNotInstalledError"]
|
|
},
|
|
{
|
|
"comment": "Apple install mechanics are reached through the named install-artifact façade. Fallow cannot connect workspace package exports to these source exports; keep this list limited to the actual facade re-exports.",
|
|
"file": "packages/platform-apple/src/core/install-artifact.ts",
|
|
"exports": ["prepareIosInstallArtifact", "readIosBundleInfo"]
|
|
},
|
|
{
|
|
"comment": "Apple perf mechanics are reached through the named lazy perf façade. Fallow cannot connect dynamic import member reads to these source exports; keep this list limited to the facade's re-exports.",
|
|
"file": "packages/platform-apple/src/perf-facade.ts",
|
|
"exports": [
|
|
"buildAppleFrameSamplingMetadata",
|
|
"buildAppleMemorySamplingMetadata",
|
|
"buildAppleMemorySnapshotSupport",
|
|
"isRetryableIosDeviceTraceRecordFailure",
|
|
"resolveIosDevicePerfHint",
|
|
"captureAppleMemorySnapshot",
|
|
"readAppleProcessSamples",
|
|
"resolveAppleExecutable",
|
|
"resolveIosDevicePerfTarget",
|
|
"sampleAppleFramePerf",
|
|
"sampleAppleMemoryPerf",
|
|
"cleanupAppleXctracePerfCapture",
|
|
"startAppleXctracePerfCapture",
|
|
"stopAppleXctracePerfCapture",
|
|
"writeAppleXctracePerfReport",
|
|
"AppleXctraceCpuProfileReport",
|
|
"AppleXctracePerfMode",
|
|
"AppleXctracePerfResult"
|
|
]
|
|
},
|
|
{
|
|
"comment": "Apple tool-provider mechanics are reached through the named lazy tool-provider façade. Fallow cannot connect dynamic import member reads to these source exports; keep this list limited to the facade's re-exports.",
|
|
"file": "packages/platform-apple/src/tool-provider-facade.ts",
|
|
"exports": [
|
|
"hasScopedAppleToolProvider",
|
|
"resolveAppleToolProvider",
|
|
"createLocalAppleToolProvider",
|
|
"readApplePlistJson",
|
|
"runAppleToolCommand",
|
|
"runXcrun"
|
|
]
|
|
},
|
|
{
|
|
"comment": "The device-aware simctl argument builder is reached through the named lazy simctl façade. Fallow cannot connect the dynamic member read to this source export; keep the suppression limited to that re-export.",
|
|
"file": "packages/platform-apple/src/core/simctl.ts",
|
|
"exports": ["buildSimctlArgsForDevice"]
|
|
},
|
|
{
|
|
"comment": "The device-aware simctl argument builder is a named package entrypoint reached through dynamic platform-runtime imports. Fallow cannot connect those member reads to the re-export; keep the suppression limited to this one facade symbol.",
|
|
"file": "packages/platform-apple/src/simctl-facade.ts",
|
|
"exports": ["buildSimctlArgsForDevice"]
|
|
},
|
|
{
|
|
"comment": "Apple runner mechanics are reached through the named runner operations façade. Fallow cannot connect workspace package exports to these source exports; keep this list limited to the façade and its cleanup composition.",
|
|
"file": "packages/platform-apple/src/core/runner-client.ts",
|
|
"exports": [
|
|
"notifyIosRunnerAppRelaunched",
|
|
"prewarmIosRunnerSession",
|
|
"prepareIosRunner",
|
|
"resolveRunnerAppBundleId",
|
|
"detachIosSimulatorRunnerSessionsForShutdown",
|
|
"getRunnerSessionSnapshot",
|
|
"scheduleIosRunnerIdleStop",
|
|
"stopIosRunnerSession",
|
|
"stopAllIosRunnerSessions",
|
|
"readStaleRunnerLease",
|
|
"verifyLeaseRunnerPidIdentity",
|
|
"applyXctestRunnerAppIconFromDerivedPath"
|
|
]
|
|
},
|
|
{
|
|
"comment": "The named runner-owner façade owns this mutator; Fallow cannot connect the workspace package export to the moved source export.",
|
|
"file": "packages/platform-apple/src/core/runner-owner-state.ts",
|
|
"exports": ["setRunnerLeaseOwnerStateDir"]
|
|
},
|
|
{
|
|
"comment": "Apple diagnostics are reached through the named doctor façade. Fallow cannot connect workspace package exports to these source exports.",
|
|
"file": "packages/platform-apple/src/doctor.ts",
|
|
"exports": ["appleToolchainCheck", "appleRunnerWarmupCheck"]
|
|
},
|
|
{
|
|
"comment": "macOS helper mechanics are reached through the named macOS façade. Fallow cannot connect workspace package exports to these source exports.",
|
|
"file": "packages/platform-apple/src/os/macos/helper.ts",
|
|
"exports": ["startMacOsAudioProbeProcess", "resolveFrontmostMacOsApp"]
|
|
},
|
|
{
|
|
"comment": "The legacy Maestro fallback wording remains contracts vocabulary for wire/fixture compatibility, but has no in-repo production consumer. The Apple migration changes this file's documentation path, so keep the existing declaration explicit without treating it as a new W4 export leak.",
|
|
"file": "packages/contracts/src/interactor-types.ts",
|
|
"exports": ["MAESTRO_NON_HITTABLE_FALLBACK_MESSAGE"]
|
|
},
|
|
{
|
|
"comment": "Daemon route handlers are reached only through the dynamic `import()` table in request-handler-chain.ts, which --production analysis cannot follow to a consumer.",
|
|
"file": "src/daemon/handlers/{human-control,lease,session,snapshot,react-native,record-trace}.ts",
|
|
"exports": [
|
|
"handleHumanControlCommand",
|
|
"handleLeaseCommands",
|
|
"handleSessionCommands",
|
|
"handleSnapshotCommands",
|
|
"handleReactNativeCommands",
|
|
"handleRecordTraceCommands"
|
|
]
|
|
},
|
|
{
|
|
"comment": "The interaction facade exposes #2178's named route inputs and deferred handlers, plus the existing ref mutation response consumed by help conformance. Fallow's production graph cannot follow the request-handler-chain dynamic imports, so this exact list is the facade contract.",
|
|
"file": "src/daemon/interaction/index.ts",
|
|
"exports": [
|
|
"FindRouteInput",
|
|
"refMutationAdmissionResponse",
|
|
"handleFindCommands",
|
|
"handleInteractionCommands"
|
|
]
|
|
},
|
|
{
|
|
"comment": "The #2178 route implementations are reached only through the interaction facade's deferred delegates; Fallow's production graph cannot follow those dynamic imports. Keep this exemption limited to the two route entrypoints.",
|
|
"file": "src/daemon/interaction/internal/{find,interaction}.ts",
|
|
"exports": ["handleFindCommands", "handleInteractionCommands"]
|
|
},
|
|
{
|
|
"comment": "Dedicated CLI command handlers are reached only through the dynamic `import()` table `dedicatedCliCommandHandlerLoaders` in src/cli/commands/router.ts, which --production analysis cannot follow to a consumer. Same shape as the daemon route-handler entry above; that table is what enumerates this list, so add/remove here whenever a loader is added/removed.",
|
|
"file": "src/cli/commands/{auth,connection,daemon,device,proxy,replay,screenshot,takeover}.ts",
|
|
"exports": [
|
|
"authCommand",
|
|
"connectCommand",
|
|
"disconnectCommand",
|
|
"connectionCommand",
|
|
"daemonCommand",
|
|
"deviceCommand",
|
|
"proxyCommand",
|
|
"replayCommand",
|
|
"screenshotCommand",
|
|
"diffCommand",
|
|
"takeoverCommand"
|
|
]
|
|
},
|
|
{
|
|
"comment": "Test fixtures: every *.fixtures.ts builds doubles for co-located *.test.ts files (several import `vi` directly) and none is imported by production source, so --production analysis sees no consumer for any of them. Scoped to unused-exports rather than ignorePatterns so fixtures stay inside every other Fallow rule (health, dead-code, cycles); `*` rather than today's three symbols because the property being asserted is per-file, not per-symbol.",
|
|
"file": "**/*.fixtures.ts",
|
|
"exports": ["*"]
|
|
},
|
|
{
|
|
"comment": "Published package surface (see package.json#exports); consumed by SDK users, not internally.",
|
|
"file": "{src/sdk/*.ts,src/ai-sdk/index.ts}",
|
|
"exports": ["*"]
|
|
},
|
|
{
|
|
"comment": "#1642: its three consumers (src/__tests__/cli-device-status.test.ts, src/daemon/__tests__/device-claims.test.ts, src/daemon/__tests__/device-claim-prune.test.ts) all reach it the only way a Vitest module mock can — `vi.mock(path, async (importOriginal) => (await import('...host-process-mock.ts')).pinOwnProcessStartTime(importOriginal))`. Dependency analysis cannot follow that dynamic import to a consumer, the same limitation the daemon route-handler entry above records.",
|
|
"file": "src/__tests__/test-utils/host-process-mock.ts",
|
|
"exports": ["pinOwnProcessStartTime"]
|
|
},
|
|
{
|
|
"comment": "Tool config default exports, loaded by the tool rather than imported.",
|
|
"file": "{oxlint.config.ts,tsdown.config.ts,vitest.mutation.config.ts,website/rspress.config.ts}",
|
|
"exports": ["default"]
|
|
},
|
|
{
|
|
"comment": "Type-level `AssertTrue<...>` registry-totality guards. Exported only so `noUnusedLocals` keeps them alive; a consumer would defeat the point.",
|
|
"file": "{src/core/command-descriptor/registry.ts,src/core/interactors/register-builtins.ts,src/core/platform-descriptor/registry.ts,src/daemon/request-platform-providers.ts}",
|
|
"exports": [
|
|
"CommandOwnerFileClaimsAreComplete",
|
|
"BuiltinPluginsCoverAllPlatforms",
|
|
"PlatformDescriptorsAreTotal",
|
|
"GatedKeysAreResolverKeys"
|
|
]
|
|
},
|
|
{
|
|
"comment": "resolveVitestMaxWorkers is consumed by vitest.config.ts \u2014 a tool config outside --production analysis.",
|
|
"file": "scripts/lib/vitest-concurrency.ts",
|
|
"exports": ["resolveVitestMaxWorkers"]
|
|
},
|
|
{
|
|
"comment": "Mutation-lane seam: readTestScope is consumed by vitest.mutation.config.ts, a tool config outside --production analysis.",
|
|
"file": "scripts/mutation/test-scope.ts",
|
|
"exports": ["readTestScope"]
|
|
},
|
|
{
|
|
"comment": "Mutation-lane completeness gate: ownedTestFiles enumerates the whole derived ownership map, which only the assertion in ownership.test.ts consumes — a production consumer would defeat the point.",
|
|
"file": "scripts/mutation/ownership.ts",
|
|
"exports": ["ownedTestFiles"]
|
|
},
|
|
{
|
|
"comment": "ADR 0010 shared-hint pin: the facade re-export's only consumer is src/__tests__/is-argument-surface-parity.test.ts, which asserts the daemon and CLI `is` surfaces raise the SAME hint text. The constant is live inside the package (predicates.ts raises it); a production consumer of the re-export would defeat the point, since it exists so neither surface copies the string.",
|
|
"file": "packages/selectors/src/index.ts",
|
|
"exports": ["IS_PREDICATE_USAGE_HINT"]
|
|
},
|
|
{
|
|
"comment": "Help-benchmark conformance seams: helpTopicIds feeds the topic-coverage gate, and the *_SAMPLE constants feed the bench sample producers (scripts/__tests__/help-conformance-sample-producers.ts); every consumer is a test-tree file outside --production analysis.",
|
|
"file": "{src/cli/parser/cli-help.ts,scripts/help-conformance-sample-outputs.mjs}",
|
|
"exports": ["helpTopicIds", "PRIVATE_AX_RECOVERY_SAMPLE", "DEVICE_CLAIM_IN_USE_SAMPLE"]
|
|
},
|
|
{
|
|
"comment": "#1458: getSessionCommandKind's former production consumer (the session.ts if-chain) was replaced by SESSION_COMMAND_HANDLER_IMPLS, which encodes command-kind groupings directly via shared handler references instead of a kind lookup. The accessor and its SessionCommandKind classification remain covered by daemon-command-registry.test.ts, a test-tree file outside --production analysis.",
|
|
"file": "src/daemon/daemon-command-registry.ts",
|
|
"exports": ["getSessionCommandKind"]
|
|
},
|
|
{
|
|
"comment": "Workspace-package symbols whose only consumers are test-tree files, which --production analysis does not see. Each import is the package specifier, so the façade entry is load-bearing: parseTargetAnnotationV1Payload/TARGET_ANNOTATION_MAX_FIELD_BYTES from src/daemon/__tests__/session-target-evidence.test.ts, MAESTRO_COMPAT_* from src/cli/parser/__tests__/maestro-support-matrix.test.ts, createAppLogLiveHandle from src/__tests__/test-utils/app-log-live-handle.ts (its production sibling createAppLogLiveHandleFromFinish wraps it, and scripts/layering/platform-package-policy.test.ts pins the specifier form).",
|
|
"file": "packages/{ad-script,maestro,capture-kit}/src/index.ts",
|
|
"exports": [
|
|
"parseTargetAnnotationV1Payload",
|
|
"TARGET_ANNOTATION_MAX_FIELD_BYTES",
|
|
"MAESTRO_COMPAT_LIMITATIONS",
|
|
"MAESTRO_COMPAT_SUPPORTED_CAPABILITIES",
|
|
"createAppLogLiveHandle"
|
|
]
|
|
},
|
|
{
|
|
"comment": "Android mechanics facet: the package exports the complete named implementation seam for root/core/SDK consumers and package-owned tests; Fallow's production graph does not follow workspace subpath imports through the package exports map.",
|
|
"file": "packages/platform-android/src/mechanics.ts",
|
|
"exports": ["*"]
|
|
},
|
|
{
|
|
"comment": "Deliberately kept off the @agent-device/maestro façade (index.test.ts asserts its absence) and consumed only by the conformance harness under packages/maestro/test/.",
|
|
"file": "packages/maestro/src/internal/program-ir-command-parser.ts",
|
|
"exports": ["SUPPORTED_MAESTRO_COMMAND_NAMES"]
|
|
},
|
|
{
|
|
"comment": "Published type surface: re-exported by src/sdk/limrun.ts to agent-device/limrun, where test/integration/limrun-public-types.test.ts pins that consumers can import it. Its only importer compiles in a temp checkout, so no static in-repo edge reaches it — the same reason src/sdk/*.ts is exempt above.",
|
|
"file": "packages/provider-limrun/src/index.ts",
|
|
"exports": ["LimrunIosCommandExecution"]
|
|
},
|
|
{
|
|
"comment": "Converting the contracts façades from `export *` to explicit named re-exports (the pin-table retirement) made these individually visible to --production analysis for the first time; a bare star previously hid them from this exact check. isRecord/IOS_SAFARI_BUNDLE_ID/REPLAY_DIVERGENCE_* have no production consumer. Kept rather than narrowed here so the façade's re-export surface stays byte-identical to the symbol set the retired pin table asserted — narrowing the surface is a follow-up with its own review, not a side effect of this mechanical conversion.",
|
|
"file": "packages/contracts/src/facades/{client,command,divergence,recording}.ts",
|
|
"exports": [
|
|
"isRecord",
|
|
"IOS_SAFARI_BUNDLE_ID",
|
|
"REPLAY_DIVERGENCE_DEFAULT_REF_LIMIT",
|
|
"REPLAY_DIVERGENCE_DIGEST_REF_LIMIT",
|
|
"REPLAY_DIVERGENCE_LEVEL_BYTE_LIMITS",
|
|
"applyReplayDivergenceLevelCaps",
|
|
"measureReplayDivergenceBytes",
|
|
"sanitizeReplayDivergenceField",
|
|
"truncateUtf8Field",
|
|
"isRecordingExportQuality"
|
|
]
|
|
},
|
|
{
|
|
"comment": "HarmonyOS package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, so keep the façade and its selected host route explicit here.",
|
|
"file": "packages/platform-harmonyos/src/hdc.ts",
|
|
"exports": ["ensureHarmonyToolchainPathConfigured"]
|
|
},
|
|
{
|
|
"comment": "HarmonyOS package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, so keep the façade and its selected lifecycle route explicit here.",
|
|
"file": "packages/platform-harmonyos/src/app-lifecycle.ts",
|
|
"exports": ["listHarmonyApps", "openHarmonyApp", "closeHarmonyApp"]
|
|
},
|
|
{
|
|
"comment": "HarmonyOS archive metadata parsing is exercised by package-owned tests but has no production caller; keep the direct test seam explicit while the implementation remains colocated with app lifecycle mechanics.",
|
|
"file": "packages/platform-harmonyos/src/app-lifecycle.ts",
|
|
"exports": ["resolveHarmonyArchiveBundleName"]
|
|
},
|
|
{
|
|
"comment": "HarmonyOS package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, so keep the façade and its selected diagnostics route explicit here.",
|
|
"file": "packages/platform-harmonyos/src/doctor.ts",
|
|
"exports": ["harmonyToolchainCheck"]
|
|
},
|
|
{
|
|
"comment": "HarmonyOS package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, so keep the façade and its selected interaction route explicit here.",
|
|
"file": "packages/platform-harmonyos/src/input-actions.ts",
|
|
"exports": [
|
|
"pressHarmony",
|
|
"doubleClickHarmony",
|
|
"longPressHarmony",
|
|
"typeHarmony",
|
|
"fillHarmony",
|
|
"scrollHarmony",
|
|
"performHarmonyGesture",
|
|
"homeHarmony",
|
|
"appSwitcherHarmony",
|
|
"pressHarmonyKeyboardKey",
|
|
"setHarmonyOrientation"
|
|
]
|
|
},
|
|
{
|
|
"comment": "HarmonyOS package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-harmonyos/src/perf.ts",
|
|
"exports": ["sampleHarmonyMemoryPerf"]
|
|
},
|
|
{
|
|
"comment": "HarmonyOS package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-harmonyos/src/screenshot.ts",
|
|
"exports": ["screenshotHarmony"]
|
|
},
|
|
{
|
|
"comment": "HarmonyOS package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-harmonyos/src/settings.ts",
|
|
"exports": ["setHarmonySetting"]
|
|
},
|
|
{
|
|
"comment": "HarmonyOS package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, so keep the façade and its selected host route explicit here.",
|
|
"file": "packages/platform-harmonyos/src/index.ts",
|
|
"exports": ["sampleHarmonyMemoryPerf"]
|
|
},
|
|
{
|
|
"comment": "Linux package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, so keep the façade and its selected interactor/snapshot routes explicit here.",
|
|
"file": "packages/platform-linux/src/app-lifecycle.ts",
|
|
"exports": ["openLinuxApp", "closeLinuxApp", "backLinux", "homeLinux"]
|
|
},
|
|
{
|
|
"comment": "Linux package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, so keep the façade and its selected interactor route explicit here.",
|
|
"file": "packages/platform-linux/src/input-actions.ts",
|
|
"exports": [
|
|
"rightClickLinux",
|
|
"middleClickLinux",
|
|
"doubleClickLinux",
|
|
"longPressLinux",
|
|
"focusLinux",
|
|
"swipeLinux"
|
|
]
|
|
},
|
|
{
|
|
"comment": "Linux package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-linux/src/screenshot.ts",
|
|
"exports": ["screenshotLinux"]
|
|
},
|
|
{
|
|
"comment": "Linux package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-linux/src/snapshot.ts",
|
|
"exports": ["readLinuxTextAtPoint"]
|
|
},
|
|
{
|
|
"comment": "Linux package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis.",
|
|
"file": "packages/platform-linux/src/clipboard.ts",
|
|
"exports": ["readLinuxClipboard", "writeLinuxClipboard"]
|
|
},
|
|
{
|
|
"comment": "Linux package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis.",
|
|
"file": "packages/platform-linux/src/input-actions.ts",
|
|
"exports": ["scrollLinux", "fillLinux"]
|
|
},
|
|
{
|
|
"comment": "Linux package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-linux/src/surface-snapshot.ts",
|
|
"exports": ["captureLinuxSurfaceSnapshot"]
|
|
},
|
|
{
|
|
"comment": "Linux package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-linux/src/index.ts",
|
|
"exports": ["createLocalLinuxToolProvider"]
|
|
},
|
|
{
|
|
"comment": "Vega package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-vega/src/doctor.ts",
|
|
"exports": ["vegaToolchainCheck"]
|
|
},
|
|
{
|
|
"comment": "Web package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, so keep the façade and its managed-backend/provider routes explicit here.",
|
|
"file": "packages/platform-web/src/agent-browser-tool.ts",
|
|
"exports": ["doctorManagedAgentBrowser"]
|
|
},
|
|
{
|
|
"comment": "Web package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-web/src/agent-browser-tool.ts",
|
|
"exports": ["setupManagedAgentBrowser"]
|
|
},
|
|
{
|
|
"comment": "Web package façade loader is a named external seam. Its dynamic property read is not visible to --production analysis.",
|
|
"file": "packages/platform-web/src/doctor.ts",
|
|
"exports": ["webBrowserLifecycleCheck"]
|
|
},
|
|
{
|
|
"comment": "Web package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, so keep the façade and its request-scoped provider routes explicit here.",
|
|
"file": "packages/platform-web/src/provider.ts",
|
|
"exports": ["resolveWebProvider", "hasScopedWebProvider"]
|
|
},
|
|
{
|
|
"comment": "Web package façade loaders are named external seams. Their dynamic property reads are not visible to --production analysis, and the timeout is pinned by the daemon teardown test.",
|
|
"file": "packages/platform-web/src/index.ts",
|
|
"exports": [
|
|
"AGENT_BROWSER_TIMEOUT_MS",
|
|
"inspectManagedAgentBrowserProcesses",
|
|
"summarizeAgentBrowserProcesses"
|
|
]
|
|
},
|
|
{
|
|
"comment": "Web process matching helpers are retained for package-owned lifecycle tests; production export analysis does not traverse those test consumers.",
|
|
"file": "packages/platform-web/src/agent-browser-lifecycle.ts",
|
|
"exports": [
|
|
"agentBrowserChromeLaunchMarker",
|
|
"matchAgentBrowserChromeProcess",
|
|
"summarizeAgentBrowserProcesses",
|
|
"summarizeManagedAgentBrowserProcesses"
|
|
]
|
|
}
|
|
],
|
|
"usedClassMembers": [
|
|
"name",
|
|
"listActiveLeases",
|
|
"delete",
|
|
"values",
|
|
"elapsedMs",
|
|
"isExpired",
|
|
"findByDevice"
|
|
],
|
|
"rules": {
|
|
"unused-types": "error",
|
|
"duplicate-exports": "off"
|
|
},
|
|
"overrides": [
|
|
{
|
|
"comment": "unused-types counts importers, not signature reachability. A façade names every type its re-exported functions/values put in a public signature, and callers use those types structurally without ever importing the name — the same false-positive shape already fixed for other workspace-package façades. unused-exports (a VALUE check) stays on for this glob; that is what would catch a real leak.",
|
|
"files": ["packages/contracts/src/facades/*.ts"],
|
|
"rules": {
|
|
"unused-types": "off"
|
|
}
|
|
},
|
|
{
|
|
"comment": "Host-kit seam façades: same false-positive shape as the contracts façades above — each seam names every type its re-exported functions put in a public signature, and callers use those types structurally without importing the name. unused-exports (the VALUE check) stays on.",
|
|
"files": ["packages/host-kit/src/*.ts"],
|
|
"rules": {
|
|
"unused-types": "off"
|
|
}
|
|
},
|
|
{
|
|
"comment": "Android mechanics facet types are named explicitly for the same package-subpath public seam; unused-exports remains governed by the facet entry above.",
|
|
"files": ["packages/platform-android/src/mechanics.ts"],
|
|
"rules": {
|
|
"unused-types": "off"
|
|
}
|
|
}
|
|
],
|
|
"production": {
|
|
"dupes": true
|
|
},
|
|
"publicPackages": ["agent-device"],
|
|
"audit": {
|
|
"deadCodeBaseline": "fallow-baselines/dead-code.json",
|
|
"healthBaseline": "fallow-baselines/health.json"
|
|
},
|
|
"includeEntryExports": true,
|
|
"ignoreExportsUsedInFile": {
|
|
"type": true,
|
|
"interface": true
|
|
}
|
|
}
|