#!/usr/bin/env node /** * Enable WeChat LLM intent router in shadow mode for Tang (103). * Dry-run by default; pass --apply to persist admin config. */ import process from 'node:process'; import mysql from 'mysql2/promise'; import { loadH5Environment } from './load-env.mjs'; loadH5Environment(import.meta.dirname); const TANG_USER_ID = 'a70ff537-8908-486e-9b6c-042e07cc25db'; const CONFIG_KEY = 'intent_router'; const CONFIG_TABLE = 'h5_wechat_admin_config'; const PREFERRED_PROVIDER = 'custom_deepseek'; const PREFERRED_MODEL = 'deepseek-v4-flash'; async function ensureTable(pool) { await pool.query(` CREATE TABLE IF NOT EXISTS ${CONFIG_TABLE} ( config_key VARCHAR(64) PRIMARY KEY, config_json JSON NOT NULL, updated_by CHAR(36) NULL, updated_at BIGINT NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci `); } async function main() { const apply = process.argv.includes('--apply'); if (!process.env.DATABASE_URL) { console.error('DATABASE_URL missing'); process.exit(1); } const pool = mysql.createPool({ uri: process.env.DATABASE_URL, connectionLimit: 2 }); await ensureTable(pool); const [identRows] = await pool.query( 'SELECT openid FROM h5_user_wechat_identities WHERE user_id = ? LIMIT 1', [TANG_USER_ID], ); const openid = identRows[0]?.openid; if (!openid) { console.error('Tang wechat openid not found'); process.exit(1); } const [providerRows] = await pool.query( `SELECT id, provider_id, default_model FROM h5_llm_provider_keys WHERE status = 'active' AND provider_id = ? LIMIT 1`, [PREFERRED_PROVIDER], ); const provider = providerRows[0]; if (!provider) { console.error(`Provider ${PREFERRED_PROVIDER} not found`); process.exit(1); } const config = { enabled: true, shadowMode: true, modelProviderKeyId: provider.id, model: PREFERRED_MODEL, minConfidence: 0.65, timeoutMs: 4000, canaryOpenids: [openid], }; const payload = { apply, tangUserId: TANG_USER_ID, openid, provider: { id: provider.id, providerId: provider.provider_id, model: PREFERRED_MODEL }, config, }; if (apply) { const now = Date.now(); await pool.query( `INSERT INTO ${CONFIG_TABLE} (config_key, config_json, updated_by, updated_at) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE config_json = VALUES(config_json), updated_by = VALUES(updated_by), updated_at = VALUES(updated_at)`, [CONFIG_KEY, JSON.stringify(config), TANG_USER_ID, now], ); payload.updatedAt = now; } console.log(JSON.stringify(payload, null, 2)); await pool.end(); } main().catch((err) => { console.error(err); process.exit(1); });