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.listAccountIdsconfig.resolveAccountconfig.defaultAccountIdconfig.setAccountEnabledconfig.deleteAccountconfig.describeAccountsecurity.resolveDmPolicy
Ejemplos claros:
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
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 = nullsetXRuntimegetXRuntime
Ejemplos claros:
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
Variantes de casos especiales:
extensions/bluebubbles/src/runtime.tsextensions/line/src/runtime.tsextensions/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.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
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.tsextensions/zalo/src/config-schema.tsextensions/zalouser/src/config-schema.tsextensions/matrix/src/config-schema.tsextensions/nostr/src/config-schema.ts
Forma de extracción probable:
AllowFromEntrySchemabuildMultiAccountChannelSchema(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.tsextensions/bluebubbles/src/channel.tsextensions/zalo/src/channel.tsextensions/telegram/src/channel.tsextensions/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.
6. Limpieza de clones exactos pequeños
Sección titulada «6. Limpieza de clones exactos pequeños»Cajón de limpieza de bajo riesgo. Ejemplos:
- detección duplicada de
argven el Gateway:src/infra/gateway-lock.tssrc/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
Clusters de pruebas
Sección titulada «Clusters de pruebas»Fixtures de eventos de webhook de LINE
Sección titulada «Fixtures de eventos de webhook de LINE»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.tssrc/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
Configuración del ciclo de vida de Zalo
Sección titulada «Configuración del ciclo de vida de Zalo»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
Orden sugerido
Sección titulada «Orden sugerido»- Boilerplate de singleton para el runtime
- Limpieza de clones exactos pequeños
- Extracción de constructores de configuración y seguridad
- Extracción de helpers de prueba
- Extracción de pasos de onboarding
- Extracción de helpers para el ciclo de vida del monitor
Próximos pasos
Sección titulada «Próximos pasos»- Revisa la documentación de Plugin SDK
- Consulta las guías de Testing
OpenClaw Expert
Sigues atascado?
Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.