feat(status): distinguish skills vs plugins, hoist status to root#415
Open
christso wants to merge 2 commits into
Open
feat(status): distinguish skills vs plugins, hoist status to root#415christso wants to merge 2 commits into
status to root#415christso wants to merge 2 commits into
Conversation
`workspace status` and `plugin list` labeled every installed entry as a "plugin" even when the source was a standalone skill (single-skill repo or deep URL into a `skills/<name>` subpath). That made the output misleading once support for standalone-skill sources was added in #406/#408/#413. This change classifies each resolved source as either `skill` (root SKILL.md, no `skills/` subdir) or `plugin` (everything else) and surfaces the kind in both human and JSON output: workspace status (before): ✓ NousResearch/hermes-agent/skills/research/llm-wiki (cached) workspace status (after): ✓ NousResearch/hermes-agent/skills/research/llm-wiki (skill, cached) `plugin list` gains a `Type:` line per entry and a kind-broken-down total. Also hoists `status` to the root surface so `allagents status` works without `workspace`, mirroring how `update` is already exposed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deploying allagents with
|
| Latest commit: |
c822575
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://f76ed338.allagents.pages.dev |
| Branch Preview URL: | https://feat-skill-vs-plugin-labelin.allagents.pages.dev |
Mirrors the CLI labeling added in the previous commit so the interactive
wizard surfaces the same skill/plugin distinction users see in
`allagents status` and `allagents plugin list`.
status panel (before):
✓ <source> (github)
status panel (after):
✓ <source> (skill, github)
plugins picker hint (before):
<source> github · project
plugins picker hint (after):
<source> skill · github · project
Verified end-to-end by driving the wizard through agent-tui against a
temp workspace containing a deep-URL skill source.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
Summary
workspace statusandplugin listnow classify each entry asskillorpluginbased on the resolved cache path (rootSKILL.md+ noskills/subdir = skill). Output gains a kind label /Type:line in human mode and akindfield in JSON.statusto the root CLI asallagents statusso it doesn't need theworkspaceprefix, mirroring howupdateis already exposed.Motivation
After #406 / #408 / #413 added support for installing standalone skill sources (deep URLs into a
skills/<name>subpath, single-skill repos),plugin listandworkspace statusstill labeled everything as a "plugin," and a skill that wasn't yet cached showed(not synced)with no indication that it was a skill. The output was misleading — users had to know out-of-band that an entry was actually a skill.Example diff in real output:
plugin list:Implementation notes
kind: 'skill' | 'plugin'toPluginStatus(src/core/status.ts). Classification looks forSKILL.mdat the resolved cache path and noskills/subdir, which matches the auto-wrap layout from feat: support installing standalone skills from flat repos (npx skills ecosystem) #232/feat(skills): support root-level SKILL.md single-skill repos #249.cachePath/subpath), not the repo root — so a deep URL intorepo/skills/<name>/is classified correctly.plugin listcallsgetWorkspaceStatusto populate asource → kindmap. Native-only plugins (no file install) default toplugin.statussymmetrically toupdate: exportedstatusCmdfromworkspace.tsand registered at root incli/index.ts.allagents workspace statusstill works.statusMeta.commandrenamed fromworkspace status→statusso--agent-help statusfinds it (mirrorssyncMeta.command: 'update').This is a non-breaking, cosmetic-layer fix. It does not change the data model — both kinds still flow through
PluginEntry. A deeper "Skill as first-class config type" refactor is a separate follow-up.Test plan
bun run typecheckcleanbun run lintcleanbun test— 1306 pass / 0 fail (updated 2 tests inagent-help.test.tsfor the renamed meta + new root command)bun run buildsucceedsallagents statusandallagents plugin listin a real workspace containing both a deep-URL skill and a marketplace skill spec, and confirmed labels are correct in both text and--jsonmodes🤖 Generated with Claude Code