Qwen Code Command-Modul: Umstrukturierungsplan
1. Zieldefinition
Dieser Plan basiert auf dem folgenden einzigen Grundsatz:
- Die Code-Architektur muss nicht Claude Code kopieren
- Aber die Kernfunktionen, das Nutzungserlebnis und die Interaktionserfahrung des Befehlssystems müssen zu 95 % mit Claude Code übereinstimmen
„Übereinstimmung“ bezieht sich hier auf die vom Benutzer direkt wahrnehmbaren Fähigkeiten, darunter:
- Abdeckung der Befehlsquellen
- Befehls-Hilfe und Auffindbarkeit
- Befehlsautovervollständigung und Mid-Input-Slash-Command-Erlebnis
- ACP / Non-Interactive-Verfügbarkeit
- Prompt-Command / Skill-Modellaufruffähigkeit
Diese Umstrukturierung ist keine kleine Korrektur einiger Felder oder eine Minimodifikation des bestehenden SlashCommand, sondern die Aufwertung des Command-Moduls von einer „interaktiven UI-Hilfsfunktion“ zu einer „einheitlichen Befehlsplattform, die Interactive / ACP / Non-Interactive / Model umfasst“.
2. Fazit nach der Neugestaltung
Das Problem des bestehenden Qwen-Command-Systems ist nicht, dass es völlig unfähig ist, sondern:
- Es ist nur auf dem interaktiven Hauptpfad relativ vollständig
- Das Typmodell ist zu dünn, um die Claude-Produktebene zu tragen
- ACP / Non-Interactive sind auf eine Whitelist angewiesen, was die Erweiterbarkeit stark einschränkt
- Befehlsquellen existieren zwar, bilden aber keine für den Benutzer sichtbare einheitliche Denkweise
- Prompt-Command und Modell-Skill-Expositionssystem sind getrennt
Daher muss der neue Plan vier Dinge gleichzeitig lösen:
- Die Claude Code-Funktionsebene ergänzen
- Die technischen Vorteile des einheitlichen Outcome-Modells von Qwen bewahren
- Eine einheitliche Registry / Resolver / Executor / Adapter-Architektur aufbauen
- Hilfe, Autovervollständigung, verfügbare ACP-Befehle und Dokumentation dieselben Metadaten verwenden lassen
3. Umstrukturierungsprinzipien
3.1 Funktionale Übereinstimmung vor Implementierungsübereinstimmung
Erlaubt sind Unterschiede in:
- Internen Klassennamen
- Modulaufteilungsweise
- Executor-Implementierung
- Effect / Outcome-Struktur
Nicht erlaubt sind Unterschiede in:
- Deutlich geringerer Abdeckung der Befehlsquellen
- Deutlich geringerem Erlebnis bei Befehls-Hilfe und Autovervollständigung
- Deutlich geringerer ACP / Non-Interactive-Verfügbarkeit
- Deutlich geringerer Integration von Prompt-Command und Modellfähigkeiten
Bei Abwägungen sollte die Priorität wie folgt sein:
- Benutzererfahrungs-Übereinstimmung
- Befehlsfunktionsabdeckungs-Übereinstimmung
- Moduskonsistenz-Übereinstimmung
- Einfachheit der internen Implementierung
3.2 Einheitliches Outcome-Modell von Qwen beibehalten
Es wird nicht empfohlen, die Claude-Ausführungsimplementierung mechanisch zu kopieren.
Das aktuelle einheitliche Ergebnis-Modell von Qwen bleibt erhaltenswert, da es sich natürlich eignet für:
- UI-Übernahme
- Genehmigung/Bestätigung
- Tool-Dispatch
- Prompt-Einreichung
- Modusübergreifende Anpassung
Es muss jedoch aufgerüstet werden, um Claude-ähnliche Command-Fähigkeiten zu tragen, anstatt weiterhin als vereinfachtes UI-Command-Framework zu existieren.
3.3 Typ, Quelle, Modus, Sichtbarkeit müssen vollständig entkoppelt sein
Das neue Command-Modell muss mindestens die folgenden Dimensionen trennen:
- Typ: Wie der Befehl ausgeführt wird
- Quelle: Woher der Befehl kommt
- Modus-Fähigkeit: In welchen Laufzeitumgebungen er verfügbar ist
- Sichtbarkeit: Für den Benutzer sichtbar oder für das Modell sichtbar
4. Claude Code-Funktionsebene, die angeglichen werden muss
4.1 Befehlstypen
Qwen muss explizit drei Befehlstypen unterstützen:
promptlocallocal-jsx
4.2 Befehlsquellen
Das Qwen-Command-Schema muss von der ersten Phase an die folgenden Quellen abdecken:
- Built-in-Befehle
- Gebündelte Skills
- Skill-Verzeichnis-Befehle
- Workflow-Befehle
- Plugin-Befehle
- Plugin-Skills
- Dynamische Skills
- MCP-Prompts
- MCP-Skills
Es darf nicht sein, dass man zu „erstmal nur die aktuell vorhandenen Typen unterstützen“ zurückkehrt.
4.3 Befehlsmetadaten
Mindestens die folgenden Felder müssen ergänzt werden:
argumentHintwhenToUseexamplessourceLabeluserFacingNamealiasimmediateisSensitiveuserInvocablemodelInvocablesupportedModesrequiresUi
4.4 Erlebnis-Fähigkeiten
Mindestens die folgenden Erlebnisse müssen ergänzt werden:
- Alias-Treffer in der Autovervollständigung
- Quellen-Badge
- Parameterhinweise
- Sortierung nach zuletzt verwendet
- Mid-Input-Slash-Command-Erkennung und -Vervollständigung
- Befehlsverzeichnis-ähnliche Hilfe
- Vollständige Darstellung der verfügbaren ACP-Befehle
5. Neues Command-Modell
5.1 Kernstruktur
Es wird empfohlen, einen einheitlichen CommandDescriptor als Registrierungsformat für alle Befehle einzuführen.
Er besteht aus mindestens vier Teilen:
identitymetadatacapabilitieshandler
identity
idnamealtNamescanonicalPath
metadata
descriptionargumentHintwhenToUseexamplesgroupsourcesourceLabeluserFacingNamehidden
capabilities
type:prompt | local | local-jsxsupportedModes:interactive | acp | non_interactiverequiresUisupportsDialogsupportsStreamingsupportsToolInvocationsupportsConfirmationremoteSafereadOnlyimmediateisSensitiveuserInvocablemodelInvocable
handler
resolveArgs()execute()completion()fallback()
5.2 Aufgaben der drei Befehlstypen
prompt
Verwendung für:
- Skills
- File-Befehle
- Workflow-Prompt-Befehle
- Plugin-Skills
- MCP-Prompt / Skill
Eigenschaften:
- Erzeugt Prompt- / Skill-Assets
- Standardmäßig unterstützt in Interactive / ACP / Non-Interactive
- Kann vom Benutzer oder vom Modell aufgerufen werden
local
Verwendung für:
- Abfragebefehle
- Konfigurationsbefehle
- Headless ausführbare Statusbefehle
- Den Haupteinstiegspunkt der meisten Built-in-Befehle
Eigenschaften:
- Nicht auf UI angewiesen
- Sollte der Hauptträgertyp für ACP / Non-Interactive sein
local-jsx
Verwendung für:
- Picker
- Panels
- Wizard
- Interaktive UI-Shell
Eigenschaften:
- Verarbeitet nur interaktive UI
- Darf nicht mehr der einzige Einstiegspunkt sein
- Muss einen Fallback oder einen entsprechenden Local-Unterbefehl bereitstellen
6. Befehlsquellen-Modell
6.1 Externes Quellenmodell
Dies ist das für Benutzer sichtbare Quellenmodell und muss so weit wie möglich mit der Claude Code-Denkweise übereinstimmen:
builtin-commandbundled-skillskill-dir-commandworkflow-commandplugin-commandplugin-skilldynamic-skillbuiltin-plugin-skillmcp-promptmcp-skill
Diese Feldgruppe wird direkt verwendet für:
- Hilfe-Gruppierung
- Quellen-Badge in der Autovervollständigung
- Verfügbare ACP-Befehle
- Dokumentationsexport
6.2 Internes Normalisierungsmodell
Um nicht durch externe Namen eingeschränkt zu sein, wird intern eine weitere Implementierungsebene hinzugefügt:
providerTypeartifactTypeactivationModebuiltinProvidedoriginPathnamespace
So kann Folgendes erreicht werden:
- Externes Erlebnis nach Claude ausgerichtet
- Interne Implementierung bleibt Qwen wartbar
6.3 Konfliktstrategie
Einheitlich über eine stabile id verwalten, Anzeigenamen und Eingabenamen trennen:
id: Stabile eindeutige Kennungname: Primärer EingabenameuserFacingName: Anzeigename in Hilfe/Autovervollständigung
Vorgeschlagene Konfliktpriorität:
- Built-in
- Bundled / Skill-Dir / Workflow
- Plugin / Builtin-Plugin
- Dynamic
- MCP mit eigenem Namespace
7. Einheitliche Ausführungsarchitektur
7.1 CommandRegistry
Aufgaben:
- Aggregiert alle Loader/Provider
- Baut mehrdimensionale Indizes auf
- Gibt Ansichten für Hilfe, Autovervollständigung, ACP und Dokumentation aus
- Bietet getrennte Ansichten für benutzersichtbare und modellsichtbare Befehle
Unterstützte Provider (obligatorisch):
BuiltinCommandLoaderBundledSkillLoaderFileCommandLoaderMcpPromptLoaderWorkflowCommandLoaderPluginCommandLoaderPluginSkillLoaderDynamicSkillProviderBuiltinPluginSkillLoader
Selbst wenn einige Provider in der ersten Phase noch nicht vollständig umgesetzt sind, müssen Schema und API bereits unterstützt werden.
7.2 CommandResolver
Aufgaben:
- Analysiert Slash-Commands
- Analysiert Aliasse
- Analysiert Subcommand-Pfade
- Erkennt Mid-Input-Slash-Tokens
- Gibt kanonische aufgelöste Befehle aus
7.3 CommandExecutor
Aufgaben:
- Führt Capability-Prüfungen durch
- Führt
prompt | local | local-jsxaus - Erzeugt einheitliche Outcomes
- Behandelt Fallbacks / nicht unterstützte Fälle
7.4 ModeAdapter
Es müssen drei Adapter ausgegliedert werden:
InteractiveModeAdapterAcpModeAdapterNonInteractiveModeAdapter
So können alle drei Modi dieselbe Command-Registry und denselben Executor gemeinsam nutzen, anstatt jeweils eigene Hardcodierungen zu haben.
8. UI-Befehlsumstrukturierungsprinzip: Kernbefehle von der Interaktionshülle trennen
Dies ist der Schlüssel zur tatsächlichen Nutzbarkeit von ACP und Non-Interactive.
Alle Befehle, die derzeit im Wesentlichen „einen Dialog öffnen“, müssen umgestaltet werden zu:
- Einer interaktiven Shell
- Einer Gruppe von Local-Unterbefehlen
Erste Befehle, die aufgeteilt werden müssen
/model/permissions/mcp/resume/hooks/extensions/agents/approval-mode
Beispiel für die Zielform
/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. Prompt-Command / Skill-einheitliches Design
Dies ist P0 in der Umstrukturierung, keine nachträglich hinzugefügte Fähigkeit.
9.1 Ziel
Aufbau einer einheitlichen Model-Invocable Prompt Command Registry, die die folgenden Assets in einer für das Modell aufrufbaren Ansicht zusammenführt:
- Gebündelte 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 der Umstrukturierung sollte SkillTool nicht mehr nur eng definierte Skills konsumieren.
Stattdessen:
CommandRegistry.getModelInvocablePromptCommands()erzeugt eine einheitliche AnsichtSkillTooloder ein zukünftiges einheitliches Command-Tool konsumiert diese Ansicht- Benutzer-Slash-Commands und Modell-Skill-Aufrufe nutzen denselben Pool an Prompt-Command-Assets
So kann Qwen in der Benutzererfahrung an die Behandlung von Fähigkeiten wie /review, /commit, /openspec-apply durch Claude herankommen.
10. Hilfe / Autovervollständigung / Auffindbarkeit neu gemacht
10.1 Autovervollständigung
Vervollständigungsvorschläge müssen mindestens Folgendes anzeigen:
labeldescriptionargumentHintsourceBadgemodeBadgesaliasHitrecentlyUsedScore
Die Sortierung berücksichtigt mindestens:
- Exakter 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
Erste Phase: Zuerst das Eingabeerlebnis angleichen; ob stärkere „eingebettete Befehlsausführungssemantik“ eingeführt wird, kann in späteren Iterationen entschieden werden.
10.3 Hilfe
Hilfe ist keine flache Liste mehr, sondern ein vollständiges Befehlsverzeichnis.
Mindestens gruppieren in:
- Built-in-Befehle
- Gebündelte Skills
- Skill-Verzeichnis-Befehle
- Workflow-Befehle
- Plugin-Befehle
- Plugin-Skills
- Dynamische Skills
- Builtin-Plugin-Skills
- MCP-Befehle / MCP-Skills
Jeder Befehl zeigt mindestens:
- Name
- Parameterhinweis
- Beschreibung
- Quelle
- Unterstützter Modus
- Ob modellaufrufbar
- Zusammenfassung der Unterbefehle
11. ACP / Non-Interactive-Umstrukturierung
11.1 Whitelist-Ansatz vollständig aufgeben
Altes Schema:
- Built-in-Allowlist
- FILE / SKILL-Sonderbehandlung
- Andere Ergebnistypen: nicht unterstützt
Neues Schema:
- Jeder Befehl deklariert seine eigene Capability
- Registry filtert
- Adapter führt aus und behandelt Fallbacks
11.2 Outcome-Unterstützungsziele
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 verfügbarer ACP-Befehle
Muss mindestens enthalten:
namedescriptionargumentHintsourceexamplessupportedModesinteractiveOnlysubcommandsmodelInvocable
12. Dokumentation, Hilfe, Autovervollständigung teilen sich dieselben Metadaten
Nach der Umstrukturierung müssen die folgenden Inhalte von derselben Registry-Ansicht exportiert werden:
- Hilfe
- Autovervollständigung
- Verfügbare ACP-Befehle
- Dokumentationsexport
Dies löst das aktuelle Problem der Inkonsistenz zwischen „Implementierung, Hilfe und Dokumentation als drei verschiedenen Befehlsebenen“.
13. Implementierungsphasen
Phase 1: Basis-Neubau
Lieferumfang:
- Neuer
CommandDescriptor - Vollständiges Quellen-Schema
- Capability-Modell
userInvocable / modelInvocableCommandRegistryCommandResolverCommandExecutor- Drei
ModeAdapter getModelInvocablePromptCommands()
Phase 2: Migration der Kernbefehle
Lieferumfang:
/model/permissions/mcp/resume/hooks/extensions/agents/approval-mode
Alle diese Befehle müssen die Umstrukturierung „Interaktive Shell + Local-Unterbefehle“ abgeschlossen haben.
Phase 3: Modellfähigkeiten durchgängig machen
Lieferumfang:
SkillToolan die einheitliche Registry-Ansicht anbinden- File-Command / Gebündelter Skill / MCP-Prompt / Plugin-Skill in die einheitliche modellaufrufbare Sammlung aufnehmen
- Prompt-Command und Skill-Assets vollständig vereinheitlichen
Phase 4: Erlebnisebene an Claude angleichen
Lieferumfang:
- Sortierung nach zuletzt verwendet
- Quellen-Badge
- Parameterhinweis
- Modus-Badge
- Vollständiges Hilfe-Verzeichnis
- Mid-Input-Slash-Command-Erlebnis
- Automatischer Dokumentationsexport oder -validierung
14. Abnahmekriterien
Nach Abschluss muss mindestens Folgendes erfüllt sein:
- Hilfe, Autovervollständigung, ACP und Dokumentation können das vollständige Quellenmodell ausdrücken
- Mit Ausnahme von reinen UI-Hüllenbefehlen können die meisten Built-in-Befehle in ACP / Non-Interactive verwendet werden
- Prompt-Command und Modell-Skill-Aufruf verwenden denselben Asset-Pool
- Das Befehlserlebnis erreicht bei Hilfe, Autovervollständigung, Quellenausdruck, Parameterhinweisen und Mid-Input-Erlebnis das Niveau von Claude Code zu 95 %
- Es wird nicht mehr auf eine Built-in-Allowlist angewiesen, um die ACP / Non-Interactive-Befehlsfähigkeit aufrechtzuerhalten
15. Abschließende Beurteilung
Das Wesen dieser Umstrukturierung ist nicht, „dem bestehenden SlashCommand ein paar Felder hinzuzufügen“, sondern:
- Mit dem internen Architekturstil von Qwen eine Command-Plattform zu liefern, die im externen Erlebnis zu 95 % mit Claude Code übereinstimmt
Wenn eine Wahl zwischen zwei Optionen getroffen werden muss:
- Interne Implementierung ähnlicher wie Claude
- Externes Erlebnis ähnlicher wie Claude
Dieser Plan entscheidet sich klar für Letzteres.