feat(gateway): support bundled .skill documents - #9615
Open
LevSky22 wants to merge 2 commits into
Open
Conversation
RuckVibeCodes
left a comment
There was a problem hiding this comment.
[gus-first-pass] feat(gateway): support bundled .skill documents - Clear feature improvement, no issues found.
LevSky22
force-pushed
the
feat/skill-document-support
branch
from
April 28, 2026 05:26
6e83990 to
28afc88
Compare
Contributor
Author
|
Updated this PR for the latest upstream
The warnings are the existing asyncio / Slack AsyncMock warnings already noted in the PR, not new failures from this change. |
teknium1
reviewed
Jul 12, 2026
teknium1
left a comment
Contributor
There was a problem hiding this comment.
Thanks for the content-aware .skill handling work. The underlying gap still exists on current main, but this branch no longer reaches the running adapters.
Problems
gh api repos/NousResearch/hermes-agent/pulls/9615reportsmergeable_state: dirty. The five editedgateway/platforms/*.pyadapter files were removed by5600105478ffde29d7566b45421b100eaa29c4ef; current adapters live inplugins/platforms/.- Current main still has no
.skillentry ingateway/platforms/base.py:1333-1383. The active Telegram, Slack, and Discord paths select text injection through that shared policy atplugins/platforms/telegram/adapter.py:7977-8002,plugins/platforms/slack/adapter.py:3102-3129, andplugins/platforms/discord/adapter.py:6406-6449; Feishu and WhatsApp have distinct extraction paths atplugins/platforms/feishu/adapter.py:3827-3841andplugins/platforms/whatsapp/adapter.py:1457-1481.
Suggested changes
- Port the byte-aware
.skillclassification and injection gate to the five current plugin adapters, then move the tests to those live paths. Add plaintext and ZIP-backed coverage for Feishu and WhatsApp too.
Automated hermes-sweeper review.
LevSky22
force-pushed
the
feat/skill-document-support
branch
from
July 13, 2026 07:02
28afc88 to
9ad8883
Compare
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.
What does this PR do?
Adds content-aware
.skilldocument support across the main gateway adapters.Some
.skillfiles are plaintext markdown-like skills, while others are ZIP bundles containingSKILL.md, references, and assets. This PR admits.skilluploads across the shared gateway allowlist, then classifies each payload by bytes instead of assuming every.skillfile is text.That means:
.skillpayloads continue to inject inline like existing text documents.skillpayloads are cached as archives instead of being incorrectly injected as markdown textThis is the same general class of gateway-document enhancement as
#4105/#4109, but for a Hermes-specific skill packaging use case.Latest upstream adaptation
Rebased onto upstream
mainat8081425a1c095d01db858ea1a574d17c93703f48and resolved the Slack conflict by preserving upstream's expanded text-snippet injection while adding content-aware.skillclassification.Related Issue
Related to:
Type of Change
Changes Made
gateway/platforms/base.py.skillfrom a hardcoded text MIME to content-aware classificationclassify_document_mime()to distinguish ZIP-backed vs plaintext.skillpayloadsgateway/platforms/telegram.py.skilluploads by bytes before deciding whether to inject textgateway/platforms/slack.py.skillhandling for downloaded filesgateway/platforms/discord.py.skillhandling for downloaded attachmentsgateway/platforms/feishu.py.skillfile is actually a ZIP archivegateway/platforms/whatsapp.py.skillfile is actually a ZIP archivetests/gateway/test_document_cache.pytests/gateway/test_telegram_documents.pytests/gateway/test_slack.pytests/gateway/test_discord_document_handling.pyHow to Test
.skillfile through Telegram, Slack, or Discord.md/.txt.skillbundleAutomated validation performed after rebasing:
python -m pytest -o addopts="" \ tests/gateway/test_document_cache.py \ tests/gateway/test_telegram_documents.py \ tests/gateway/test_slack.py \ tests/gateway/test_discord_document_handling.py -q -raResult:
230 passed, 27 warningsThe warning set was existing asyncio / Slack AsyncMock noise, not introduced by this PR.
Manual validation performed:
.skillupload that was actually a ZIP bundlePKheader and extracted the bundle instead of treating it as inline markdown textChecklist
Code
fix(scope):,feat(scope):, etc.)pytest tests/ -qand all tests passDocumentation & Housekeeping
docs/, docstrings) — or N/Acli-config.yaml.exampleif I added/changed config keys — or N/ACONTRIBUTING.mdorAGENTS.mdif I changed architecture or workflows — or N/AScreenshots / Logs
Plaintext
.skill:ZIP-backed
.skill:PKheader