Ir al contenido

Refactoriza OpenClaw: reduce hasta 600 líneas de código

¿Alguna vez has sentido que estás escribiendo el mismo código una y otra vez? Mantener un sistema de extensiones puede ser pesado cuando los patrones se repiten sin una estructura clara. Aquí tienes un plan para limpiar el backlog y reducir la deuda técnica de forma directa.

Clasificado por reducción probable de LOC, seguridad y alcance.

1. Configuración de plugins de canales y andamiaje de seguridad

Sección titulada «1. Configuración de plugins de canales y andamiaje de seguridad»

Este es el grupo de mayor valor. Hay estructuras que se repiten en muchos plugins de canales:

  • config.listAccountIds
  • config.resolveAccount
  • config.defaultAccountId
  • config.setAccountEnabled
  • config.deleteAccount
  • config.describeAccount
  • security.resolveDmPolicy

Ejemplos claros:

  • 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

Forma de extracción probable:

  • buildChannelConfigAdapter(...)
  • buildMultiAccountConfigAdapter(...)
  • buildDmSecurityAdapter(...)

Ahorro esperado:

  • ~250-450 LOC

Riesgo:

  • Medio. Cada canal tiene pequeñas diferencias en isConfigured, avisos y normalización.

2. Boilerplate de singleton para el runtime de extensiones

Sección titulada «2. Boilerplate de singleton para el runtime de extensiones»

Muy seguro. Casi todas las extensiones tienen el mismo contenedor de runtime:

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

Ejemplos claros:

  • 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

Variantes de casos especiales:

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

Forma de extracción probable:

  • createPluginRuntimeStore<T>(errorMessage)

Ahorro esperado:

  • ~180-260 LOC

Riesgo:

  • Bajo

3. Prompts de onboarding y pasos de parches de configuración

Sección titulada «3. Prompts de onboarding y pasos de parches de configuración»

Gran superficie de código. Muchos archivos de onboarding repiten:

  • resolver el ID de la cuenta
  • prompts para entradas de allowlist
  • fusionar allowFrom
  • configurar la política de DM
  • prompts para campos secretos
  • parchear configuración a nivel superior vs. nivel de cuenta

Ejemplos claros:

  • 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

Punto de ayuda existente:

  • src/channels/plugins/onboarding/helpers.ts

Forma de extracción probable:

  • promptAllowFromList(...)
  • buildDmPolicyAdapter(...)
  • applyScopedAccountPatch(...)
  • promptSecretFields(...)

Ahorro esperado:

  • ~300-600 LOC

Riesgo:

  • Medio. Es fácil generalizar demasiado; mantén los helpers específicos y combinables.

4. Fragmentos de esquemas de configuración multicuenta

Sección titulada «4. Fragmentos de esquemas de configuración multicuenta»

Esquemas repetidos en las extensiones. Patrones comunes:

  • const allowFromEntry = z.union([z.string(), z.number()])
  • esquema de cuenta más:
    • accounts: z.object({}).catchall(accountSchema).optional()
    • defaultAccount: z.string().optional()
  • campos repetidos de DM/grupos
  • campos repetidos de políticas de herramientas/markdown

Ejemplos claros:

  • 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

Forma de extracción probable:

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

Ahorro esperado:

  • ~120-220 LOC

Riesgo:

  • Bajo a medio. Algunos esquemas son simples, otros son especiales.

5. Inicio del ciclo de vida de webhooks y monitores

Sección titulada «5. Inicio del ciclo de vida de webhooks y monitores»

Buen grupo de valor medio. Patrones repetidos de startAccount y configuración de monitores:

  • resolver cuenta
  • calcular la ruta del webhook
  • registrar el inicio en logs
  • iniciar monitor
  • esperar el abort
  • limpieza
  • actualizaciones del sink de estado

Ejemplos claros:

  • 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

Punto de ayuda existente:

  • src/plugin-sdk/channel-lifecycle.ts

Forma de extracción probable:

  • helper para el ciclo de vida del monitor de cuenta
  • helper para el inicio de cuenta basado en webhooks

Ahorro esperado:

  • ~150-300 LOC

Riesgo:

  • Medio a alto. Los detalles del transporte divergen rápido.

Cajón de limpieza de bajo riesgo. Ejemplos:

  • detección duplicada de argv en el Gateway:
    • src/infra/gateway-lock.ts
    • src/cli/daemon-cli/lifecycle.ts
  • renderizado duplicado de diagnósticos de puerto:
    • src/cli/daemon-cli/restart-health.ts
  • construcción duplicada de session-key:
    • src/web/auto-reply/monitor/broadcast.ts

Ahorro esperado:

  • ~30-60 LOC

Riesgo:

  • Bajo

Ejemplos claros:

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

Extracción probable:

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

Ahorro esperado:

  • ~120-180 LOC

Matriz de autenticación de comandos nativos de Telegram

Sección titulada «Matriz de autenticación de comandos nativos de Telegram»

Ejemplos claros:

  • src/telegram/bot-native-commands.group-auth.test.ts
  • src/telegram/bot-native-commands.plugin-auth.test.ts

Extracción probable:

  • constructor de contexto de foro
  • helper de aserción de mensajes denegados
  • casos de autenticación basados en tablas

Ahorro esperado:

  • ~80-140 LOC

Ejemplos claros:

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

Extracción probable:

  • arnés compartido para la configuración del monitor

Ahorro esperado:

  • ~50-90 LOC

Pruebas de opciones no soportadas en llm-context de Brave

Sección titulada «Pruebas de opciones no soportadas en llm-context de Brave»

Ejemplos claros:

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

Extracción probable:

  • matriz it.each(...)

Ahorro esperado:

  • ~30-50 LOC
  1. Boilerplate de singleton para el runtime
  2. Limpieza de clones exactos pequeños
  3. Extracción de constructores de configuración y seguridad
  4. Extracción de helpers de prueba
  5. Extracción de pasos de onboarding
  6. Extracción de helpers para el ciclo de vida del monitor

AI Setup Assistant

OpenClaw

OpenClaw Expert

Sigues atascado?

Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.