fix(packaging): ship plugin.yaml via package-data + MANIFEST.in (closes #76)#77
Merged
Conversation
… MANIFEST.in (closes #76)
This was referenced May 24, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #76. Critical packaging bug: pip-installed hermes-agent wheel from main shipped ZERO plugin.yaml files → loader silently skipped every devagentic-* plugin → G1/G2/G3/G4 all installed-but-non-functional in the duplex container after pip-reinstall.
Root cause
pyproject.tomlhad[tool.setuptools.package-data]mappingplugins = […]but the patterns only covered*/dashboard/manifest.json+*/dashboard/dist/*. Noplugin.yamlpattern anywhere.[tool.setuptools.packages.find]picks up.pyfiles only; non-.pyfiles require explicit package-data orinclude-package-data = true+ MANIFEST.in.So
find_packages()ran fine (33 plugin packages found),.pyfiles were shipped, but the per-pluginplugin.yamlwas silently dropped by the build backend → loader's__init__.py + plugin.yamlrequirement failed silently.Fix
Both layers (belt-and-suspenders for sdist + wheel build backends):
pyproject.toml— expandplugins = [...]package-data globs to cover plugin.yaml + README + skills + JSON + assets at all depths via**patterns:MANIFEST.in—recursive-include plugins *.yaml *.yml *.md *.txt *.json+ similar for skills/ + dashboard/.End-to-end verification
Built the wheel + inspected zip contents:
Test plan
tests/test_packaging_plugins.py:**/plugin.yaml(or compatible) glob**/*.mdglobrecursive-include plugins *.yamlrecursive-include plugins *.mdpip wheelbuild inspected: 72 yaml entries present (was 0 pre-fix).Combined with NousResearch#221
/graphqlon_OaiHandlerso plugins can reach the GraphQL endpoint.Both required for the fusion stack to function on a pip-reinstall + service restart. Either alone leaves a silent failure.
Deploy
Operator-side container rebuild from main (G6/#66 cycle). After this lands + container redeploys:
find /home/duplex/.local/lib/python3.11/site-packages/plugins -name plugin.yamlreturns ~25+ fileshermesboot shows the post-G1-G4 tool count (33+ MCP tools, not 16 from the pre-G1-G4 v0.14.0 binary)