hermes-agent/website/docs/developer-guide
kshitij 0d32607c62 fix(gateway): split check_fn (passive probe) from ensure_deps_fn (active installer)
PlatformEntry.check_fn served three contradictory roles: adapter-creation
gate, config auto-enablement gate, and status display. Plugins had to pick
one function for all three:

- Active installer as check_fn (discord/slack/telegram/matrix/dingtalk/
  feishu): every status display could pip-install SDKs as a side effect
  (the desktop 94% boot-loop class).
- Passive probe as check_fn (teams, wecom_callback): create_adapter()
  returned None before connect() could lazy-install, so the SDK never
  installed (#79812 deadlock; wecom_callback's platform.wecom_callback
  LAZY_DEPS entry was dead code).

The split makes both call sites correct by construction:

- check_fn is now contractually PASSIVE (probe only, never installs).
- New optional PlatformEntry.ensure_deps_fn is the ACTIVE installer;
  create_adapter() runs it exactly when check_fn is False — the platform
  is enabled+configured and the gateway is about to connect it.
- Config enablement keeps a configured platform whose deps are missing
  but installable; the install itself is deferred to create_adapter().
- Status surfaces (_platform_status, hermes status) read only the
  passive probe and can never trigger pip.

Migrated all lazy-installable platform plugins to the split; platforms
with no optional deps (irc/ntfy/buzz/simplex/line/a2a/...) are unchanged
— no ensure_deps_fn means a False check_fn stays a hard block.
wecom_callback gains a working installer for the first time.

Builds on @xxxigm's #79812 (both commits cherry-picked with authorship
preserved), reworking the check_fn swap into the two-field split so the
Teams fix doesn't reintroduce install-on-status.
2026-08-07 13:28:43 +05:30
..
plugins
_category_.json
acp-internals.md
adding-platform-adapters.md
adding-providers.md
adding-tools.md
agent-loop.md
architecture.md
browser-provider-plugin.md
browser-supervisor.md
context-compression-and-caching.md
context-engine-plugin.md
contributing.md
creating-skills.md
cron-internals.md
desktop-plugin-sdk.md
egress-internals.md
extending-the-cli.md
gateway-internals.md
image-gen-provider-plugin.md
memory-provider-plugin.md
model-provider-plugin.md
plugin-llm-access.md
programmatic-integration.md
prompt-assembly.md
provider-runtime.md
secret-source-plugin.md
session-storage.md
subagent-lifecycle-api.md
tools-runtime.md
trajectory-format.md
video-gen-provider-plugin.md
web-search-provider-plugin.md
worktree-ui-dev.md