Skip to content

CRITICAL: pip-installed wheel ships zero plugin.yaml files — every devagentic-* plugin silently skipped on install #76

@PowerCreek

Description

@PowerCreek

Bug

`find /home/duplex/.local/lib/python3.11/site-packages/plugins -name plugin.yaml` returns ZERO files on a pip-installed hermes-agent from main. Plugin loader (`hermes_cli/plugins.py`) requires BOTH `plugin.yaml` AND `init.py` per directory — without yaml, plugin is silently skipped. So:

  • G1 `devagentic-vertical-preamble`: installed but loader skips → no preamble fetch → worker boots with zero vertical context
  • G2 `devagentic-mutations` (silo_query, confer_run): installed but loader skips → tools never registered
  • G3 `hermes-github` (file_issue): installed but loader skips → tool never registered
  • G4 `devagentic-lane-h` (lane_h_list, lane_h_fetch, grafted_context_fetch): installed but loader skips → tools never registered
  • Every other plugin with a plugin.yaml that's not also in skills/ (canvas, mutations, etc.): same

The 33 MCP tools count the orchestrator was seeing earlier was from the OLD container hermes (v0.14.0 pre-G1-G4) where plugins were not packaging-gated. The pip-reinstalled hermes from main loads ZERO plugins because the .yaml files aren't in the wheel.

Root cause

  • `MANIFEST.in` only contains:
    graft skills
    graft optional-skills
    global-exclude __pycache__
    global-exclude *.py[cod]
    
    No graft / recursive-include for `plugins/`.
  • `pyproject.toml` has `[tool.setuptools.packages.find] include = ["plugins", "plugins.*"]` which picks up Python packages (dirs with `init.py`) and .py files — but non-.py files like `plugin.yaml` / `README.md` are NOT included by default.
  • No `include-package-data = true` setting + no `[tool.setuptools.package-data]` mapping.

Setuptools' canonical fix: `include-package-data = true` in pyproject.toml + `recursive-include plugins *.yaml` etc. in MANIFEST.in.

Verification (in-tree files exist; only PACKAGING omits them)

$ find plugins -name plugin.yaml | wc -l
~25

So the files are in the source tree fine. Just not in the built wheel.

Fix

  • Update `MANIFEST.in` to add `recursive-include plugins *.yaml *.yml *.md *.txt` (also for skills/ subdirs within plugins/, e.g. `plugins/devagentic-canvas/skills/canvas/SKILL.md`)
  • Update `pyproject.toml` `[tool.setuptools]` to add `include-package-data = true`
  • Add a packaging-contract test asserting MANIFEST.in includes the right patterns AND in-tree .yaml files exist (regression catcher)

Severity

Critical, ships now. Every devagentic-* plugin built post-G1-G4 is non-functional on the canonical pip-installed deployment. Container redeploy that picks up the wheel is the only path to bring them online; this packaging fix is mandatory for that redeploy to actually deliver the plugins.

Related

  • devagentic#221 (just shipped) fixed the /graphql port-6071 oversight. Combined with this fix, plugins both LOAD and can actually REACH the graphql endpoint. Both are required.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions