refactor(provider-limrun): ship Limrun as the `@agent-device/limrun` plugin

Offen
#3,311 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
35/100
Issue-Typ
Refactoring
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
android, ios, node.js, typescript

Rechercherichtung

Start with #2112 and its Doublespeed plugin route, then read packages/provider-limrun, src/sdk/limrun-runtime-dependencies.ts, src/provider-limrun-credentials.ts, and scripts/check-provider-plugin.mjs. Decide how per-backend credential fingerprinting survives the plugin boundary and record the choice in plugins.md. Completion includes the specified daemon and provider-scenario tests passing against the plugin factory, a reduced default-install size report, and live iOS and Android sessions with the packed plugin.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

backlog refactor

Purpose and evidence

0.22 stops bundling hosted device providers with the default installation. Limrun is the largest bundled provider and the only one with a public SDK surface: packages/provider-limrun (about 9 kLOC with tests), @limrun/api dev-bundled through tsdown.config.ts (with the @limrun/xdelta3-wasm omission alias), the agent-device/limrun export (src/sdk/limrun.ts, LimrunRuntime, session types documented in client-api.md), the LIMRUN_*/LIM_*_INSTANCE_* credential reader in src/provider-limrun-credentials.ts, the Android ADB and Apple host adapters in src/sdk/limrun-runtime-dependencies.ts, and connect limrun in src/cli/connection/limrun-profile.ts. Doublespeed (#2112) is the template for a direct instance provider as a plugin: it returns { runtime, platformModule, connection } and receives Apple helpers through host.apple.

Required behavior and boundary

  • New publishable package @agent-device/limrun (rename packages/provider-limrun), ESM with @limrun/api as a regular dependencies entry, not bundled: users then get Limrun and undici security fixes on reinstall or through their own overrides, without an agent-device release. Remove the @limrun/api alwaysBundle/neverBundle entries and the @limrun/xdelta3-wasm omission alias from tsdown.config.ts; the plugin's install size (about 4.1 MB for @limrun/api plus undici and ws) is accepted. Manifest declares provider: "limrun", the connection capabilities core hardcodes today (supportsDeferredAppSelection, supportsDirectPortReverse), and credentialVariables covering the account and instance variables. Core's per-platform fingerprint narrowing (readLimrunCredentialValues by lease backend) must survive: either the manifest grows a per-backend credential declaration or the plugin keeps a fingerprint hook; decide in the PR and record it in plugins.md.
  • ProviderPluginHost gains what Limrun needs beyond Doublespeed's host.apple: the Android ADB adapters (createInteractor, port reverse, app listing, logcat, keyboard state) and downloadFile/archiveDirectory. Keep the SDK declaration small; prefer one host.android facet mirroring src/sdk/limrun-runtime-dependencies.ts.
  • connect limrun moves into the plugin's connection.resolve/verify, including the instance-variable validation and the --device refusal. Core deletes limrun-profile.ts, provider-limrun-credentials.ts, provider-limrun-runtime.ts, the limrun branches in provider-policy.ts, provider-credential-fingerprint.ts, provider-device-runtimes.ts, and the provider_runtime_skipped partial-instance handling, or moves them behind the plugin seam.
  • Public API: agent-device/limrun is removed from the core exports (breaking, called out in the 0.22 release notes) or re-pointed at the plugin package; client-api.md, limrun.md, device-clouds.md, plugins.md, help topics, and the README follow.
agent-device plugins add @agent-device/limrun
export LIMRUN_API_KEY=...
agent-device connect limrun --platform android

Completion and validation

  • node scripts/check-provider-plugin.mjs packages/provider-limrun passes.
  • src/__tests__/limrun-runtime.test.ts, the Limrun daemon tests (http-server-limrun-uploaded-apps, provider-credentials, lease-expiry) and the provider-scenario suites run against the plugin factory.
  • Size report shows the default install dropping the Limrun runtime and @limrun/api.
  • Core keeps undici bundled for its own callers (Maestro runScript HTTP, provision-kit install downloads), so core stays free of runtime dependencies. After the move, pnpm why -r undici shows @limrun/api resolving undici only inside the plugin's dependency tree, and core's bundled copy is pinned only by the root, maestro, and provision-kit manifests (no undici@7 override, as since #3363).
  • One live Limrun iOS and one Android session with the packed plugin, recorded in the PR.

Dependencies and readiness

Blocked by: #2112 landing (shapes host.apple and the direct-provider plugin route) and the BrowserStack/AWS extractions in this milestone. After both Limrun and Doublespeed are plugins, #2616/#2624 (shared app-log poller) and the other mirrored modules (facts runtime, interaction operations, deployment runtime) can be extracted into a shared instance-provider kit without touching core.

Effort: L. Risk: high (public SDK surface, host adapters, credential fingerprint semantics).

Vorherrschende Sprache
TypeScript
Sterne
5.2k
Forks
359
Ø Merge
13 Std. 23 Min.
Gemergte PRs (30 T.)
655

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus callstack/agent-device

Alle Issues in callstack/agent-device

Ähnliche Issues

Weitere Issues zu TypeScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.