Zum Inhalt springen

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.listAccountIds
  • config.resolveAccount
  • config.defaultAccountId
  • config.setAccountEnabled
  • config.deleteAccount
  • config.describeAccount
  • security.resolveDmPolicy

Gute Beispiele dafür findest du hier:

  • extensions/telegram/src/channel.ts
  • extensions/googlechat/src/channel.ts
  • extensions/slack/src/channel.ts
  • extensions/discord/src/channel.ts
  • extensions/matrix/src/channel.ts
  • extensions/irc/src/channel.ts
  • extensions/signal/src/channel.ts
  • extensions/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.

Diese Änderung ist sehr sicher. Fast jede Extension nutzt den gleichen Runtime-Holder:

  • let runtime: PluginRuntime | null = null
  • setXRuntime
  • getXRuntime

Gute Beispiele:

  • extensions/telegram/src/runtime.ts
  • extensions/matrix/src/runtime.ts
  • extensions/slack/src/runtime.ts
  • extensions/discord/src/runtime.ts
  • extensions/whatsapp/src/runtime.ts
  • extensions/imessage/src/runtime.ts
  • extensions/twitch/src/runtime.ts

Spezialfälle:

  • extensions/bluebubbles/src/runtime.ts
  • extensions/line/src/runtime.ts
  • extensions/synology-chat/src/runtime.ts

Wahrscheinliche Form der Extraktion:

  • createPluginRuntimeStore<T>(errorMessage)

Erwartete Ersparnis:

  • ~180-260 LOC

Risiko:

  • Niedrig

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.ts
  • extensions/googlechat/src/onboarding.ts
  • extensions/msteams/src/onboarding.ts
  • extensions/zalo/src/onboarding.ts
  • extensions/zalouser/src/onboarding.ts
  • extensions/nextcloud-talk/src/onboarding.ts
  • extensions/matrix/src/onboarding.ts
  • extensions/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.

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.ts
  • extensions/zalo/src/config-schema.ts
  • extensions/zalouser/src/config-schema.ts
  • extensions/matrix/src/config-schema.ts
  • extensions/nostr/src/config-schema.ts

Wahrscheinliche Form der Extraktion:

  • AllowFromEntrySchema
  • buildMultiAccountChannelSchema(accountSchema)
  • buildCommonDmGroupFields(...)

Erwartete Ersparnis:

  • ~120-220 LOC

Risiko:

  • Niedrig bis mittel. Einige Schemas sind simpel, andere sind speziell.

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.ts
  • extensions/bluebubbles/src/channel.ts
  • extensions/zalo/src/channel.ts
  • extensions/telegram/src/channel.ts
  • extensions/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.

Ein Cleanup-Topf mit geringem Risiko.

Beispiele:

  • Duplizierte Gateway-argv-Erkennung:
    • src/infra/gateway-lock.ts
    • src/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

Gute Beispiele:

  • src/line/bot-handlers.test.ts

Wahrscheinliche Extraktion:

  • makeLineEvent(...)
  • runLineEvent(...)
  • makeLineAccount(...)

Erwartete Ersparnis:

  • ~120-180 LOC

Gute Beispiele:

  • src/telegram/bot-native-commands.group-auth.test.ts
  • src/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

Gute Beispiele:

  • extensions/zalo/src/monitor.lifecycle.test.ts

Wahrscheinliche Extraktion:

  • Gemeinsames Monitor-Setup-Harness

Erwartete Ersparnis:

  • ~50-90 LOC

Gute Beispiele:

  • src/agents/tools/web-tools.enabled-defaults.test.ts

Wahrscheinliche Extraktion:

  • it.each(...) Matrix

Erwartete Ersparnis:

  • ~30-50 LOC
  1. Runtime Singleton Boilerplate
  2. Bereinigung kleiner exakter Klone
  3. Extraktion der Config- und Security-Builder
  4. Extraktion der Test-Helper
  5. Extraktion der Onboarding-Schritte
  6. Extraktion der Monitor-Lifecycle-Helper

AI Setup Assistant

OpenClaw

OpenClaw Expert

Noch festgefahren?

Wenn diese Seite nicht hilft, frage OpenClaw Expert nach Schritt-fuer-Schritt-Loesungen.