feat(install): translate any Claude plugin with --external

未关闭
#79 0 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@ryzizub 已经在做这个了。

开始于 2026年10月16日。

评估

这个 Issue 还没有评估数据。

描述

feature spike

Description

The parse → translate pipeline is already plugin-neutral. ClaudePluginParser turns any Claude Code plugin directory into PluginAssets, and every HarnessTranslator depends only on that model — never on a parser or on VGV. What is hardcoded is only the input list: PluginResolver defaults _plugins to vgvPlugins (packages/vgv_ai_cli/lib/src/resolve/plugin_resolver.dart:19), and there is no way to name a different plugin.

So vgv_ai could already work as a general Claude-plugin translator — point it at a plugin, get Codex, Gemini, OpenCode, Pi and Copilot config out — for anyone who writes Claude plugins and wants them to run on the other harnesses.

Proposed shape, repeatable:

vgv_ai install --external ./my-plugin
vgv_ai install --external owner/[email protected]
vgv_ai install --external ./my-plugin --only codex,gemini --check

Open questions

  • Source form. PluginRef requires repo + gitRef, so a local directory is not representable today. Local path only, git slug only, or both behind one option?
  • Does --external add to the pinned VGV plugins or replace them? "Use the CLI as a translator" reads like replace; --external alone reads like add.
  • Claude itself. ClaudeTranslator.settings() writes extraKnownMarketplaces and enabledPlugins for the VGV marketplace (claude_translator.dart:26). An external plugin has no marketplace entry, and a local one cannot have one. Skip Claude for external sources, or write a local-source entry?
  • Manifest and doctor. The manifest records plugins: {name: version} and doctor reports drift against vgvPlugins (doctor_command.dart:237). An external plugin has no declared version — record the git ref, or a content hash for a local path?
  • Trust. This runs third-party plugin content through our translators and writes hooks into the user's harness config. Worth deciding whether --external prints what it is about to install, or requires --check first.

Requirements

  • --external accepts at least one source and is repeatable.
  • A local plugin directory resolves without git and without the Claude cache.
  • Translation, reconciliation and the manifest treat external plugins the same as pinned ones, so doctor and uninstall still account for every file written.
  • A source that is not a Claude plugin fails with the actionable PluginParseException message, before anything is written.
  • Decisions above documented in the README and AGENTS.md.
主要语言
Dart
星标
3
派生
0
平均合并
2 天 4 小时
30 天内合并 PR
40

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

VeryGoodOpenSource/vgv_ai_cli 的其他 Issue

查看 VeryGoodOpenSource/vgv_ai_cli 的全部 Issue

相似的 Issue

更多 Dart Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。