OpenClaw Refactoring: Code-Basis effizient optimieren
Kennst du das? Du arbeitest an einem neuen Feature und merkst plötzlich, dass du genau diesen Code-Block schon in drei anderen Dateien gesehen hast. Copy-Paste fühlt sich am Anfang schnell an, aber irgendwann wird die Codebase unübersichtlich und schwer zu warten.
Es ist Zeit, den Wildwuchs zu bändigen. In diesem Backlog schauen wir uns an, wo wir durch Refactoring die meisten Zeilen Code (LOC) einsparen können, ohne die Stabilität des Systems zu gefährden.
1. Channel-Plugin-Konfiguration und Security-Gerüst
Abschnitt betitelt „1. Channel-Plugin-Konfiguration und Security-Gerüst“Dies ist das Cluster mit dem höchsten Mehrwert. Wir sehen immer wieder die gleichen Strukturen in vielen Channel-Plugins:
config.listAccountIdsconfig.resolveAccountconfig.defaultAccountIdconfig.setAccountEnabledconfig.deleteAccountconfig.describeAccountsecurity.resolveDmPolicy
Gute Beispiele dafür findest du hier:
extensions/telegram/src/channel.tsextensions/googlechat/src/channel.tsextensions/slack/src/channel.tsextensions/discord/src/channel.tsextensions/matrix/src/channel.tsextensions/irc/src/channel.tsextensions/signal/src/channel.tsextensions/mattermost/src/channel.ts
Wahrscheinliche Form der Extraktion:
buildChannelConfigAdapter(...)buildMultiAccountConfigAdapter(...)buildDmSecurityAdapter(...)
Erwartete Ersparnis:
- ~250-450 LOC
Risiko:
- Mittel. Jeder Channel hat leicht unterschiedliche
isConfigured-Logiken, Warnungen und Normalisierungen.
2. Extension Runtime Singleton Boilerplate
Abschnitt betitelt „2. Extension Runtime Singleton Boilerplate“Diese Änderung ist sehr sicher. Fast jede Extension nutzt den gleichen Runtime-Holder:
let runtime: PluginRuntime | null = nullsetXRuntimegetXRuntime
Gute Beispiele:
extensions/telegram/src/runtime.tsextensions/matrix/src/runtime.tsextensions/slack/src/runtime.tsextensions/discord/src/runtime.tsextensions/whatsapp/src/runtime.tsextensions/imessage/src/runtime.tsextensions/twitch/src/runtime.ts
Spezialfälle:
extensions/bluebubbles/src/runtime.tsextensions/line/src/runtime.tsextensions/synology-chat/src/runtime.ts
Wahrscheinliche Form der Extraktion:
createPluginRuntimeStore<T>(errorMessage)
Erwartete Ersparnis:
- ~180-260 LOC
Risiko:
- Niedrig
3. Onboarding-Prompts und Config-Patch-Schritte
Abschnitt betitelt „3. Onboarding-Prompts und Config-Patch-Schritte“Hier haben wir einen großen Umfang an Code. Viele Onboarding-Dateien wiederholen die gleichen Schritte:
- Account-ID auflösen
- Allowlist-Einträge abfragen
- allowFrom zusammenführen
- DM-Policy setzen
- Secrets abfragen
- Config-Patches auf Top-Level vs. Account-Ebene anwenden
Gute Beispiele:
extensions/bluebubbles/src/onboarding.tsextensions/googlechat/src/onboarding.tsextensions/msteams/src/onboarding.tsextensions/zalo/src/onboarding.tsextensions/zalouser/src/onboarding.tsextensions/nextcloud-talk/src/onboarding.tsextensions/matrix/src/onboarding.tsextensions/irc/src/onboarding.ts
Bestehender Ansatzpunkt für Helper:
src/channels/plugins/onboarding/helpers.ts
Wahrscheinliche Form der Extraktion:
promptAllowFromList(...)buildDmPolicyAdapter(...)applyScopedAccountPatch(...)promptSecretFields(...)
Erwartete Ersparnis:
- ~300-600 LOC
Risiko:
- Mittel. Es besteht die Gefahr der Über-Generalisierung; halte die Helper fokussiert und kombinierbar.
4. Multi-Account Config-Schema Fragmente
Abschnitt betitelt „4. Multi-Account Config-Schema Fragmente“Wir haben viele wiederkehrende Schema-Fragmente über verschiedene Extensions hinweg.
Häufige Muster:
const allowFromEntry = z.union([z.string(), z.number()])- Account-Schema plus:
accounts: z.object({}).catchall(accountSchema).optional()defaultAccount: z.string().optional()
- Wiederkehrende DM/Group-Felder
- Wiederkehrende Markdown/Tool-Policy-Felder
Gute Beispiele:
extensions/bluebubbles/src/config-schema.tsextensions/zalo/src/config-schema.tsextensions/zalouser/src/config-schema.tsextensions/matrix/src/config-schema.tsextensions/nostr/src/config-schema.ts
Wahrscheinliche Form der Extraktion:
AllowFromEntrySchemabuildMultiAccountChannelSchema(accountSchema)buildCommonDmGroupFields(...)
Erwartete Ersparnis:
- ~120-220 LOC
Risiko:
- Niedrig bis mittel. Einige Schemas sind simpel, andere sind speziell.
5. Webhook- und Monitor-Lifecycle-Startup
Abschnitt betitelt „5. Webhook- und Monitor-Lifecycle-Startup“Ein gutes Cluster mit mittlerem Mehrwert. Wir sehen oft die gleichen startAccount / Monitor-Setup-Muster:
- Account auflösen
- Webhook-Pfad berechnen
- Startup loggen
- Monitor starten
- Auf Abort warten
- Cleanup
- Status-Sink-Updates
Gute Beispiele:
extensions/googlechat/src/channel.tsextensions/bluebubbles/src/channel.tsextensions/zalo/src/channel.tsextensions/telegram/src/channel.tsextensions/nextcloud-talk/src/channel.ts
Bestehender Ansatzpunkt für Helper:
src/plugin-sdk/channel-lifecycle.ts
Wahrscheinliche Form der Extraktion:
- Helper für den Account-Monitor-Lifecycle
- Helper für Webhook-basierten Account-Startup
Erwartete Ersparnis:
- ~150-300 LOC
Risiko:
- Mittel bis hoch. Die Transport-Details weichen oft schnell voneinander ab.
6. Bereinigung kleiner exakter Klone
Abschnitt betitelt „6. Bereinigung kleiner exakter Klone“Ein Cleanup-Topf mit geringem Risiko.
Beispiele:
- Duplizierte Gateway-argv-Erkennung:
src/infra/gateway-lock.tssrc/cli/daemon-cli/lifecycle.ts
- Dupliziertes Rendering der Port-Diagnose:
src/cli/daemon-cli/restart-health.ts
- Duplizierte Session-Key-Konstruktion:
src/web/auto-reply/monitor/broadcast.ts
Erwartete Ersparnis:
- ~30-60 LOC
Risiko:
- Niedrig
Test-Cluster
Abschnitt betitelt „Test-Cluster“LINE Webhook-Event Fixtures
Abschnitt betitelt „LINE Webhook-Event Fixtures“Gute Beispiele:
src/line/bot-handlers.test.ts
Wahrscheinliche Extraktion:
makeLineEvent(...)runLineEvent(...)makeLineAccount(...)
Erwartete Ersparnis:
- ~120-180 LOC
Telegram Native Command Auth Matrix
Abschnitt betitelt „Telegram Native Command Auth Matrix“Gute Beispiele:
src/telegram/bot-native-commands.group-auth.test.tssrc/telegram/bot-native-commands.plugin-auth.test.ts
Wahrscheinliche Extraktion:
- Forum-Context-Builder
- Helper für Denied-Message-Assertions
- Table-driven Auth-Cases
Erwartete Ersparnis:
- ~80-140 LOC
Zalo Lifecycle-Setup
Abschnitt betitelt „Zalo Lifecycle-Setup“Gute Beispiele:
extensions/zalo/src/monitor.lifecycle.test.ts
Wahrscheinliche Extraktion:
- Gemeinsames Monitor-Setup-Harness
Erwartete Ersparnis:
- ~50-90 LOC
Brave LLM-Context Unsupported-Option Tests
Abschnitt betitelt „Brave LLM-Context Unsupported-Option Tests“Gute Beispiele:
src/agents/tools/web-tools.enabled-defaults.test.ts
Wahrscheinliche Extraktion:
it.each(...)Matrix
Erwartete Ersparnis:
- ~30-50 LOC
Empfohlene Reihenfolge
Abschnitt betitelt „Empfohlene Reihenfolge“- Runtime Singleton Boilerplate
- Bereinigung kleiner exakter Klone
- Extraktion der Config- und Security-Builder
- Extraktion der Test-Helper
- Extraktion der Onboarding-Schritte
- Extraktion der Monitor-Lifecycle-Helper
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“OpenClaw Expert
Noch festgefahren?
Wenn diese Seite nicht hilft, frage OpenClaw Expert nach Schritt-fuer-Schritt-Loesungen.