Provider plugins v2, daemon ownership and host environment (umbrella)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 8/100
- Type d'issue
- Refactorisation
- Clarté
- À clarifier
- Activité
- Active
- Stack technique
- node.js, typescript
Piste de recherche
This is a tracking umbrella with no code change of its own; the work sits in the child issues listed in the checklist (#3748 to #3759). The unblocked starting points are #3748 (refuse leases for providers without a registered runtime) and #3749 (HostEnvironment captured once at entry points), and the payload names no files or tests. Done means each child lands additively in 0.21.x and the external acceptance items are met.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Purpose
One provider plugin contract loaded three ways, an explicit owner for every daemon, and a daemon that reads no process globals.
The three ways a plugin loads:
- built-in providers;
agent-device plugins add(the store);- a JS host that imports the plugin package as an ordinary npm dependency.
This replaces the current workaround in e2e's @e2e-dev/testmu. It fakes the plugin store: it symlinks the package into plugins/<uuid>/node_modules, writes a private AGENT_DEVICE_HOME, and lets a client start a detached daemon implicitly.
Release rule
Every child lands additively in 0.21.x. Superseded shapes keep working until #3759 removes them in 0.22.
Children
- #3748 — refuse leases for providers without a registered runtime
- #3749 — HostEnvironment captured once at entry points (foundation)
- #3750 — HostEnvironment in platform and capture packages (blocked by #3749)
- #3751 — HostEnvironment in root src and remaining packages (blocked by #3749)
- #3752 — daemon runtime owns no process globals;
ShutdownReport(blocked by #3749) - #3794 — explicit host for configuration reads; one entered runtime store (follow-up to #3763/#3772)
- #3753 — gate: no process globals outside entry points (after #3794 part 1) (blocked by #3750, #3751, #3752)
- #3754 — explicit daemon lifecycle:
ensureDaemon()and attach clients - #3755 — plugin contract v2, one provider registry, inventory, ADR 0034 (blocked by #3748)
- #3756 —
@agent-device/testmuon plugin contract v2 (blocked by #3755) - #3757 —
agent-device/hoststartAgentDevice()(blocked by #3772 and the HostEnvironment PRs #3763/#3775/#3777; design pass done 2026-10-17) - #3758 — proposal: per-lease provider options (not scheduled)
- #3759 — 0.22 removals (blocked by all of the above and #3311)
Decisions (maintainer, 2026-10-16)
- Plugins are factories called with options. A store install passes
config.jsonoptions; a JS host callstestmu({ credentials })directly. - No module-URL identity. Nothing relies on
import.meta.url. - No Effect dependency.
{ webDriver }stays a data descriptor. Plugins import only types from agent-device.- One registry. Sources compose in the order built-in → store → embedder. A plugin that fails is listed, not fatal.
- The plugin set is fixed for a daemon's lifetime.
- Clients never manage the daemon implicitly. Starting or replacing one is an explicit
ensureDaemon()call. Embedders own their daemon throughagent-device/host. - The ADR is brief. ADR 0034 records the plugin registry, with only a short note on daemon ownership.
External acceptance
- e2e:
tester-army/e2emigrates@e2e-dev/testmuand@e2e-dev/limruntoagent-device/host, deletinginstallPluginand the CLI-based daemon stop. That work is tracked in e2e after #3757 ships. - #3311: the Limrun extraction ships
@agent-device/limrunon the v2 contract from #3755.
- Langage dominant
- TypeScript
- Étoiles
- 5.3k
- Forks
- 377
- Merge moyen
- 13 h 18 min
- PR mergées (30 j)
- 653
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de callstack/agent-device
-
bug ready-for-agent
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
callstack/agent-device#4212 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
iOS alert wait: the last poll can get ~30 ms and turns "no alert" into a failed readPeut-être pris @pcbeingused333 l’a pris il y a 4 jours. Ouvertebug ready-for-agent
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
callstack/agent-device#4018 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
callstack/agent-device#1869 ·
Les mainteneurs répondent en général sous 1 jour
-
iOS 27: HealthKit's authorization sheet reads as one node, so label and ref presses can't reach itOuverte
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
callstack/agent-device#4226 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 70/100
callstack/agent-device#4216 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de callstack/agent-device
Issues similaires
-
needs-area-label
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
Les mainteneurs répondent en général sous 2 jours
-
Website: the hero tip's video play() has no catch, so a refused play is an unhandled rejectionOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
liberation-data/drivine#615 ·
Les mainteneurs répondent en général sous 1 jour
-
backend bug ready-for-agent
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
geolens-io/geolens#3639 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
radius-project/ai-extensions#1196 ·
Les mainteneurs répondent en général sous 1 jour
-
good first issue
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100