Refactoring-Plan für das Qwen Code Command-Modul
1. Zieldefinition
Dieser Plan basiert ausschließlich auf folgenden Prinzipien:
- Die Code-Architektur muss nicht 1:1 von Claude Code übernommen werden
- Die Kernfunktionen, die Benutzererfahrung und die Interaktion des Command-Systems müssen jedoch zu 95 % mit Claude Code übereinstimmen
„Übereinstimmung“ bezieht sich hier auf direkt vom Nutzer wahrnehmbare Fähigkeiten, darunter:
- Abdeckung der Command-Quellen
- Command-Hilfe und Discoverability
- Command-Vervollständigung und Mid-Input-Slash-Command-Erfahrung
- Verfügbarkeit in ACP / non-interactive
- Modell-Aufruffähigkeit für Prompt-Commands / Skills
Dieses Refactoring ist kein bloßes Hinzufügen einiger Felder und auch keine kleine Anpassung des bestehenden SlashCommand. Stattdessen wird das Command-Modul von einer „begleitenden Fähigkeit der interaktiven UI“ zu einer „einheitlichen Command-Plattform für interactive / ACP / non-interactive / model“ aufgewertet.
2. Fazit nach der Neukonzeption
Das Problem des bestehenden Qwen Command-Systems ist nicht ein völliges Fehlen von Fähigkeiten, sondern:
- Es ist nur im interaktiven Hauptpfad weitgehend vollständig
- Das Typenmodell ist zu dünn, um ein Produkt auf Claude-Niveau zu tragen
- ACP / non-interactive hängt von einer Allowlist ab und ist extrem schlecht erweiterbar
- Command-Quellen existieren zwar, bilden aber kein einheitliches, für den Nutzer sichtbares Konzept
- Die Offenlegung von Prompt-Commands und Modell-Skills ist fragmentiert
Daher muss der neue Ansatz gleichzeitig vier Dinge lösen:
- Die Fähigkeiten von Claude Code nachrüsten
- Die Engineering-Vorteile des einheitlichen Outcome-Modells von Qwen bewahren
- Eine einheitliche Registry / Resolver / Executor / Adapter-Architektur etablieren
- Hilfe, Vervollständigung, ACP available commands und Dokumentation dieselben Metadaten nutzen lassen
3. Refactoring-Prinzipien
3.1 Funktionsübereinstimmung vor Implementierungsübereinstimmung
Unterschiede sind erlaubt bei:
- Internen Klassennamen
- Modul-Aufteilung
- Executor-Implementierung
- Effect / Outcome-Struktur
Unterschiede sind nicht erlaubt bei:
- Deutlich reduzierter Abdeckung der Command-Quellen
- Deutlich reduzierter Command-Hilfe und Vervollständigungserfahrung
- Deutlich reduzierter Verfügbarkeit in ACP / non-interactive
- Deutlich reduzierter Integration von Prompt-Commands und Modellfähigkeiten
Bei Zielkonflikten gilt folgende Priorität:
- Übereinstimmung der Benutzererfahrung
- Übereinstimmung der Command-Fähigkeitsabdeckung
- Übereinstimmung der Moduskonsistenz
- Einfachheit der internen Implementierung
3.2 Bewahrung des einheitlichen Outcome-Modells von Qwen
Eine mechanische Kopie der Claude-Implementierung wird nicht empfohlen.
Das aktuelle einheitliche Ergebnismodell von Qwen sollte beibehalten werden, da es sich natürlich eignet für:
- UI-Übernahme
- Genehmigung/Bestätigung
- Tool-Dispatching
- Prompt-Übermittlung
- Modusübergreifende Anpassung
Es muss jedoch so erweitert werden, dass es Command-Fähigkeiten auf Claude-Niveau tragen kann, anstatt weiterhin als vereinfachtes UI-Command-Framework zu existieren.
3.3 Typ, Quelle, Modus und Sichtbarkeit müssen vollständig entkoppelt werden
Das neue Command-Modell muss mindestens folgende Dimensionen trennen:
- Typ: Wie der Command ausgeführt wird
- Quelle: Woher der Command stammt
- Modus-Fähigkeiten: In welchen Laufzeitumgebungen er verfügbar ist
- Sichtbarkeit: Ob er für den Nutzer oder für das Modell sichtbar ist
4. Claude Code-Fähigkeiten, die angeglichen werden müssen
4.1 Command-Typen
Qwen muss explizit drei Command-Typen unterstützen:
promptlocallocal-jsx
4.2 Command-Quellen
Das Qwen Command-Schema muss ab Phase 1 folgende Quellen abdecken:
- built-in commands
- bundled skills
- skill dir commands
- workflow commands
- plugin commands
- plugin skills
- dynamic skills
- mcp prompts
- mcp skills
Hier darf kein Rückfall auf „erstmal nur die aktuell vorhandenen Typen unterstützen“ erfolgen.
4.3 Command-Metadaten
Mindestens folgende Felder müssen ergänzt werden:
argumentHintwhenToUseexamplessourceLabeluserFacingNamealiasimmediateisSensitiveuserInvocablemodelInvocablesupportedModesrequiresUi
4.4 Experience-Fähigkeiten
Mindestens folgende Erfahrungen müssen ergänzt werden:
- Vervollständigung bei Alias-Treffern
- Source-Badge
- Parameter-Hinweise
- Sortierung nach „recently used“
- Erkennung und Vervollständigung von Mid-Input-Slash-Commands
- Verzeichnisartige Help
- Vollständige Darstellung von ACP available commands
5. Neues Command-Modell
5.1 Kernstruktur
Es wird empfohlen, einen einheitlichen CommandDescriptor als Registrierungsformat für alle Commands einzuführen.
Er umfasst mindestens vier Teile:
identitymetadatacapabilitieshandler
identity
idnamealtNamescanonicalPath
metadata
descriptionargumentHintwhenToUseexamplesgroupsourcesourceLabeluserFacingNamehidden
capabilities
type:prompt | local | local-jsxsupportedModes:interactive | acp | non_interactiverequiresUisupportsDialogsupportsStreamingsupportsToolInvocationsupportsConfirmationremoteSafereadOnlyimmediateisSensitiveuserInvocablemodelInvocable
handler
resolveArgs()execute()completion()fallback()
5.2 Verantwortlichkeiten der drei Command-Typen
prompt
Verwendet für:
- skills
- file commands
- workflow prompt commands
- plugin skills
- mcp prompt / skill
Merkmale:
- Erzeugt prompt / skill-Assets
- Standardmäßig unterstützt: interactive / ACP / non-interactive
- Kann vom Nutzer oder vom Modell aufgerufen werden
local
Verwendet für:
- Abfrage-Commands
- Konfigurations-Commands
- Headless ausführbare Status-Commands
- Kernausführungseinstieg für die meisten built-in commands
Merkmale:
- UI-unabhängig
- Soll der primäre Trägertyp für ACP / non-interactive werden
local-jsx
Verwendet für:
- picker
- Panels
- wizard
- interactive UI shell
Merkmale:
- Verarbeitet ausschließlich interactive UI
- Darf nicht mehr der einzige Ausführungseinstieg sein
- Muss einen Fallback oder entsprechende local-Subcommands bereitstellen
6. Command-Quellenmodell
6.1 Externes Quellenmodell
Dies ist das für den Nutzer sichtbare Quellenmodell und muss sich möglichst am mentalen Modell von Claude Code orientieren:
builtin-commandbundled-skillskill-dir-commandworkflow-commandplugin-commandplugin-skilldynamic-skillbuiltin-plugin-skillmcp-promptmcp-skill
Diese Felder werden direkt verwendet für:
- Help-Gruppierung
- Completion-Source-Badge
- ACP available commands
- Dokumentationsexport
6.2 Internes Normalisierungsmodell
Um nicht an externe Namen gebunden zu sein, wird intern eine zusätzliche Implementierungsebene hinzugefügt:
providerTypeartifactTypeactivationModebuiltinProvidedoriginPathnamespace
Dadurch wird Folgendes erreicht:
- Die externe Erfahrung wird an Claude angeglichen
- Die interne Implementierung bleibt wartbar im Qwen-Stil
6.3 Konfliktstrategie
Einheitliche Verwaltung über stabile id, Trennung von Anzeigenamen und Eingabenamen:
id: Stabiler, eindeutiger Bezeichnername: Primärer EingabenameuserFacingName: Anzeigename für Hilfe/Vervollständigung
Empfohlene Priorität bei Konflikten:
- built-in
- bundled / skill-dir / workflow
- plugin / builtin-plugin
- dynamic
- mcp-eigener Namespace
7. Einheitliche Ausführungsarchitektur
7.1 CommandRegistry
Verantwortlichkeiten:
- Aggregation aller Loader/Provider
- Aufbau multidimensionaler Indizes
- Ausgabe von Hilfe-, Vervollständigungs-, ACP- und Dokumentationsansichten
- Bereitstellung separater Ansichten für nutzer- und modellsichtbare Commands
Zu unterstützende Provider:
BuiltinCommandLoaderBundledSkillLoaderFileCommandLoaderMcpPromptLoaderWorkflowCommandLoaderPluginCommandLoaderPluginSkillLoaderDynamicSkillProviderBuiltinPluginSkillLoader
Auch wenn einige Provider in der ersten Phase nicht vollständig implementiert sind, müssen Schema und API sie bereits unterstützen.
7.2 CommandResolver
Verantwortlichkeiten:
- Parsen von Slash-Commands
- Parsen von Aliases
- Parsen von Subcommand-Pfaden
- Erkennung von Mid-Input-Slash-Tokens
- Ausgabe des canonical resolved command
7.3 CommandExecutor
Verantwortlichkeiten:
- Durchführung von Capability-Checks
- Ausführung von
prompt | local | local-jsx - Einheitliche Generierung von Outcomes
- Behandlung von Fallback / unsupported
7.4 ModeAdapter
Es müssen drei Adapter extrahiert werden:
InteractiveModeAdapterAcpModeAdapterNonInteractiveModeAdapter
Nur so können alle drei Modi dieselbe Command-Registry und denselben Executor nutzen, anstatt jeweils hartkodiert zu sein.
8. Refactoring-Prinzipien für UI-Commands: Trennung von Kern-Command und Interaktions-Shell
Dies ist der Schlüssel zur tatsächlichen Nutzbarkeit in ACP und non-interactive.
Jeder Command, der im Wesentlichen ein „Dialog öffnen“ ist, muss umgebaut werden zu:
- Einer interactive shell
- Einer Gruppe von local-Subcommands
Erste Charge der Commands, die aufgeteilt werden müssen
/model/permissions/mcp/resume/hooks/extensions/agents/approval-mode
Beispiel für die Zielstruktur
/model
/model/model show/model list/model set <id>
/permissions
/permissions/permissions show/permissions set <mode>/permissions allow <tool>/permissions deny <tool>
/mcp
/mcp/mcp list/mcp show <server>/mcp enable <server>/mcp disable <server>
9. Einheitliches Design für Prompt Command / Skill
Dies ist P0 im Refactoring und keine nachträgliche Ergänzung.
9.1 Ziel
Aufbau einer einheitlichen Model-Invocable Prompt Command Registry, die folgende Assets in einer für das Modell aufrufbaren Ansicht zusammenführt:
- bundled skills
- file commands
- workflow prompt commands
- plugin skills
- mcp prompts / mcp skills
9.2 Schlüsselfelder
Müssen neu hinzugefügt werden:
userInvocablemodelInvocableallowedToolswhenToUseargSchemaoder minimale ParameterbeschreibungcontextMode: inline | forkagenteffort
9.3 Beziehung zu SkillTool
Nach dem Refactoring sollte SkillTool nicht mehr ausschließlich eng gefasste Skills konsumieren.
Stattdessen sollte Folgendes gelten:
CommandRegistry.getModelInvocablePromptCommands()liefert eine einheitliche AnsichtSkillTooloder ein zukünftiges einheitliches Command-Tool konsumiert diese Ansicht- Nutzer-Slash-Commands und Modell-Skill-Invocations nutzen denselben Prompt-Command-Asset-Pool
Nur so kann Qwen in der Benutzererfahrung an die Art und Weise von Claude herankommen, wie Fähigkeiten wie /review, /commit oder /openspec-apply behandelt werden.
10. Neugestaltung von Help / Completion / Discoverability
10.1 Completion
Vervollständigungseinträge müssen mindestens anzeigen:
labeldescriptionargumentHintsourceBadgemodeBadgesaliasHitrecentlyUsedScore
Die Sortierung muss mindestens berücksichtigen:
- Exakte Treffer
- Alias-Treffer
- Zuletzt verwendet
- Prefix-Treffer
- Fuzzy-Treffer
10.2 Mid-input slash command
Muss ergänzt werden:
- Erkennung von Slash-Tokens in der Nähe des Cursors
- Ghost-Text-Hinweise
- Tab-Vervollständigung
- Hervorhebung gültiger Command-Tokens
In Phase 1 wird zunächst die Eingabeerfahrung angeglichen; die Einführung einer stärkeren „Inline-Command-Ausführungssemantik“ kann in späteren Iterationen erfolgen.
10.3 Help
Help ist keine flache Liste mehr, sondern ein vollständiges Command-Verzeichnis.
Mindestens gruppiert in:
- Built-in Commands
- Bundled Skills
- Skill Dir Commands
- Workflow Commands
- Plugin Commands
- Plugin Skills
- Dynamic Skills
- Builtin Plugin Skills
- MCP Commands / MCP Skills
Jeder Command zeigt mindestens:
- Name
- Parameter-Hinweis
- Beschreibung
- Quelle
- Unterstützte Modi
- Ob modell-aufrufbar
- Subcommand-Zusammenfassung
11. Refactoring für ACP / Non-Interactive
11.1 Vollständige Abschaffung des Allowlist-Ansatzes
Alter Ansatz:
- built-in allowlist
- Sonderbehandlung für FILE / SKILL
- Andere Ergebnistypen: unsupported
Neuer Ansatz:
- Jeder Command deklariert seine eigenen Capabilities
- Die Registry ist für das Filtern zuständig
- Der Adapter ist für Ausführung und Fallback zuständig
11.2 Unterstützte Outcome-Ziele
interactive
submit_promptmessagestream_messagestooldialogload_historyconfirm_actionconfirm_shell_commands
acp
submit_promptmessagestream_messagestoolconfirm_actionconfirm_shell_commandsdialog fallback
non_interactive
submit_promptmessagestream_messagestoolconfirm_actionconfirm_shell_commandsdialog fallback / structured failure
11.3 Ausgabe von ACP available commands
Muss mindestens enthalten:
namedescriptionargumentHintsourceexamplessupportedModesinteractiveOnlysubcommandsmodelInvocable
12. Dokumentation, Hilfe und Vervollständigung nutzen dieselben Metadaten
Nach dem Refactoring müssen folgende Inhalte aus derselben Registry-Ansicht exportiert werden:
- Help
- Completion
- ACP available commands
- Dokumentationsexport
Dies dient dazu, das aktuelle Problem der „inkonsistenten Command-Oberflächen in Implementierung, Hilfe und Dokumentation“ zu lösen.
13. Implementierungsphasen
Phase 1: Fundament-Neubau
Lieferumfang:
- Neuer
CommandDescriptor - Vollständiges Quellen-Schema
- Capability-Modell
userInvocable / modelInvocableCommandRegistryCommandResolverCommandExecutor- Drei
ModeAdapter getModelInvocablePromptCommands()
Phase 2: Migration der Kern-Commands
Lieferumfang:
/model/permissions/mcp/resume/hooks/extensions/agents/approval-mode
Alle diese Commands müssen das „interactive shell + local-Subcommand“-Refactoring abschließen.
Phase 3: Integration der Modellfähigkeiten
Lieferumfang:
SkillToolan die einheitliche Registry-Ansicht anbinden- File-Command / Bundled-Skill / MCP-Prompt / Plugin-Skill in die einheitliche model-invocable-Menge aufnehmen
- Prompt-Command- und Skill-Assets vollständig vereinheitlichen
Phase 4: Angleichung der Experience-Schicht an Claude
Lieferumfang:
- Sortierung nach „recently used“
- Source-Badge
- Argument-Hinweis
- Mode-Badge
- Vollständiges Help-Verzeichnis
- Mid-Input-Slash-Command-Erfahrung
- Automatischer Dokumentationsexport oder Validierung
14. Abnahmekriterien
Nach Abschluss müssen mindestens folgende Kriterien erfüllt sein:
- Hilfe, Vervollständigung, ACP und Dokumentation können das vollständige Quellenmodell abbilden
- Die meisten built-in commands sind in ACP / non-interactive nutzbar (außer reine UI-Shell-Commands)
- Prompt-Commands und Modell-Skill-Aufrufe nutzen denselben Asset-Pool
- Die Command-Erfahrung erreicht in Hilfe, Vervollständigung, Quellendarstellung, Parameter-Hinweisen und Mid-Input-Erfahrung 95 % des Niveaus von Claude Code
- Keine Abhängigkeit mehr von einer built-in allowlist zur Aufrechterhaltung der ACP / non-interactive Command-Fähigkeiten
15. Fazit
Der Kern dieses Refactorings ist nicht „ein paar Felder zum bestehenden SlashCommand hinzuzufügen“, sondern:
- Mit dem internen Architekturstil von Qwen eine Command-Plattform zu liefern, die in der externen Erfahrung zu 95 % mit Claude Code übereinstimmt
Falls eine Wahl getroffen werden muss:
- Die interne Implementierung ähnelt Claude
- Die externe Erfahrung ähnelt Claude
Dieser Plan wählt explizit Letzteres.