重構叢集待辦清單

依可能的程式碼行數精簡量、安全性和廣度排序。

1. 頻道外掛設定與安全樣板

最高價值的叢集。

多個頻道外掛中重複的模式:

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

典型範例:

  • 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

可能的抽取形式:

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

預期節省:

  • ~250-450 行

風險:

  • 中等。每個頻道的 isConfigured、警告和正規化略有不同。

2. 擴充套件執行時單例樣板

非常安全。

幾乎每個擴充套件都有相同的執行時持有者:

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

典型範例:

  • 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

特殊變體:

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

可能的抽取形式:

  • createPluginRuntimeStore<T>(errorMessage)

預期節省:

  • ~180-260 行

風險:

3. 安裝引導提示與設定修補步驟

涵蓋面大。

許多安裝引導檔案重複:

  • 解析帳號 id
  • 提示白名單項目
  • 合併 allowFrom
  • 設定 DM 策略
  • 提示密鑰
  • 修補最上層 vs 帳號範圍的設定

典型範例:

  • 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

既有的輔助接縫:

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

可能的抽取形式:

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

預期節省:

  • ~300-600 行

風險:

  • 中等。容易過度泛化;保持輔助函式窄且可組合。

4. 多帳號設定 schema 片段

擴充套件間重複的 schema 片段。

常見模式:

  • const allowFromEntry = z.union([z.string(), z.number()])
  • 帳號 schema 加上:
    • accounts: z.object({}).catchall(accountSchema).optional()
    • defaultAccount: z.string().optional()
  • 重複的 DM/群組欄位
  • 重複的 markdown/工具策略欄位

典型範例:

  • 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

可能的抽取形式:

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

預期節省:

  • ~120-220 行

風險:

  • 低至中等。有些 schema 簡單,有些特殊。

5. Webhook 與監控器生命週期啟動

良好的中等價值叢集。

重複的 startAccount / 監控器設置模式:

  • 解析帳號
  • 計算 webhook 路徑
  • 記錄啟動
  • 啟動監控器
  • 等待 abort
  • 清理
  • 狀態 sink 更新

典型範例:

  • 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

既有的輔助接縫:

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

可能的抽取形式:

  • 帳號監控器生命週期輔助
  • webhook 支援的帳號啟動輔助

預期節省:

  • ~150-300 行

風險:

  • 中至高。傳輸細節很快會偏差。

6. 小型精確複製清理

低風險清理項目。

範例:

  • 重複的 gateway argv 偵測:
    • src/infra/gateway-lock.ts
    • src/cli/daemon-cli/lifecycle.ts
  • 重複的埠號診斷呈現:
    • src/cli/daemon-cli/restart-health.ts
  • 重複的 session-key 建構:
    • src/web/auto-reply/monitor/broadcast.ts

預期節省:

  • ~30-60 行

風險:

測試叢集

LINE webhook 事件 fixtures

典型範例:

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

可能的抽取:

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

預期節省:

  • ~120-180 行

Telegram 原生指令驗證矩陣

典型範例:

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

可能的抽取:

  • 論壇上下文建構器
  • 拒絕訊息斷言輔助
  • 表格驅動的驗證案例

預期節省:

  • ~80-140 行

Zalo 生命週期設置

典型範例:

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

可能的抽取:

  • 共用的監控器設置 harness

預期節省:

  • ~50-90 行

Brave llm-context 不支援選項測試

典型範例:

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

可能的抽取:

  • it.each(...) 矩陣

預期節省:

  • ~30-50 行

建議順序

  1. 執行時單例樣板
  2. 小型精確複製清理
  3. 設定與安全建構器抽取
  4. 測試輔助抽取
  5. 安裝引導步驟抽取
  6. 監控器生命週期輔助抽取