Files
callstack__agent-device/.fallowrc.json
T
2026-09-02 07:59:22 +02:00

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
}
}