From a3b3836b8ac8017837c25532a487e76b3cf74ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Wed, 18 Feb 2026 22:14:31 +0800 Subject: [PATCH] Add process bypass option and update bypass fields Introduce a new 'process' bypass option and remove the old 'maps' key, updating all related schemas, types, defaults and validation. Adjusted napcat.json ordering and NapcatConfig defaults, updated BypassOptions schema and TypeScript interfaces, backend validation keys, loader/default parsing logic, and the web UI form mappings/labels to reflect the new field set and ordering. --- packages/napcat-core/external/napcat.json | 6 +-- packages/napcat-core/helper/config.ts | 6 +-- .../packet/handler/napi2nativeLoader.ts | 6 +-- packages/napcat-framework/napcat.ts | 6 +-- packages/napcat-shell/base.ts | 16 +++--- .../src/api/NapCatConfig.ts | 8 +-- .../src/pages/dashboard/config/bypass.tsx | 52 +++++++++---------- .../src/types/napcat_conf.d.ts | 6 +-- 8 files changed, 51 insertions(+), 55 deletions(-) diff --git a/packages/napcat-core/external/napcat.json b/packages/napcat-core/external/napcat.json index f8249a36..09ae21a1 100644 --- a/packages/napcat-core/external/napcat.json +++ b/packages/napcat-core/external/napcat.json @@ -8,10 +8,10 @@ "o3HookMode": 1, "bypass": { "hook": true, - "module": true, "window": true, - "js": true, + "module": true, + "process": true, "container": true, - "maps": true + "js": true } } \ No newline at end of file diff --git a/packages/napcat-core/helper/config.ts b/packages/napcat-core/helper/config.ts index 7060abfe..b3a01bdc 100644 --- a/packages/napcat-core/helper/config.ts +++ b/packages/napcat-core/helper/config.ts @@ -5,11 +5,11 @@ import { AnySchema } from 'ajv'; export const BypassOptionsSchema = Type.Object({ hook: Type.Boolean({ default: true }), - module: Type.Boolean({ default: true }), window: Type.Boolean({ default: true }), - js: Type.Boolean({ default: true }), + module: Type.Boolean({ default: true }), + process: Type.Boolean({ default: true }), container: Type.Boolean({ default: true }), - maps: Type.Boolean({ default: true }), + js: Type.Boolean({ default: true }), }); export const NapcatConfigSchema = Type.Object({ diff --git a/packages/napcat-core/packet/handler/napi2nativeLoader.ts b/packages/napcat-core/packet/handler/napi2nativeLoader.ts index 8e301954..b7012a52 100644 --- a/packages/napcat-core/packet/handler/napi2nativeLoader.ts +++ b/packages/napcat-core/packet/handler/napi2nativeLoader.ts @@ -6,11 +6,11 @@ import { LogWrapper } from '../../helper/log'; export interface BypassOptions { hook?: boolean; - module?: boolean; window?: boolean; - js?: boolean; + module?: boolean; + process?: boolean; container?: boolean; - maps?: boolean; + js?: boolean; } export interface Napi2NativeExportType { diff --git a/packages/napcat-framework/napcat.ts b/packages/napcat-framework/napcat.ts index 153d110d..1a1ac2dc 100644 --- a/packages/napcat-framework/napcat.ts +++ b/packages/napcat-framework/napcat.ts @@ -50,11 +50,11 @@ export async function NCoreInitFramework ( // 读取 napcat.json 配置 let bypassOptions: BypassOptions = { hook: false, - module: false, window: false, - js: false, + module: false, + process: false, container: false, - maps: false, + js: false, }; try { const configFile = path.join(pathWrapper.configPath, 'napcat.json'); diff --git a/packages/napcat-shell/base.ts b/packages/napcat-shell/base.ts index 63c6cd51..a2a6d553 100644 --- a/packages/napcat-shell/base.ts +++ b/packages/napcat-shell/base.ts @@ -51,15 +51,14 @@ import { connectToNamedPipe } from './pipe'; function loadBypassConfig (configPath: string, logger: LogWrapper): BypassOptions { const defaultOptions: BypassOptions = { hook: true, - module: true, window: true, - js: true, + module: true, + process: true, container: true, - maps: true, + js: true, }; let options = { ...defaultOptions }; - try { const configFile = path.join(configPath, 'napcat.json'); if (fs.existsSync(configFile)) { @@ -72,13 +71,11 @@ function loadBypassConfig (configPath: string, logger: LogWrapper): BypassOption } catch (e) { logger.logWarn('[NapCat] 读取 bypass 配置失败,使用默认值:', e); } - // 根据分步禁用级别覆盖配置 const disableLevel = parseInt(process.env['NAPCAT_BYPASS_DISABLE_LEVEL'] || '0', 10); if (disableLevel > 0) { const levelDescriptions = ['全部启用', '禁用 hook', '禁用 hook + module', '全部禁用 bypass']; logger.logWarn(`[NapCat] 崩溃恢复:当前 bypass 禁用级别 ${disableLevel} (${levelDescriptions[disableLevel] ?? '未知'})`); - if (disableLevel >= 1) { options.hook = false; } @@ -87,14 +84,13 @@ function loadBypassConfig (configPath: string, logger: LogWrapper): BypassOption } if (disableLevel >= 3) { options.hook = false; - options.module = false; options.window = false; - options.js = false; + options.module = false; + options.process = false; options.container = false; - options.maps = false; + options.js = false; } } - return options; } // NapCat Shell App ES 入口文件 diff --git a/packages/napcat-webui-backend/src/api/NapCatConfig.ts b/packages/napcat-webui-backend/src/api/NapCatConfig.ts index affa7950..9c234545 100644 --- a/packages/napcat-webui-backend/src/api/NapCatConfig.ts +++ b/packages/napcat-webui-backend/src/api/NapCatConfig.ts @@ -16,11 +16,11 @@ const defaultNapcatConfig = { o3HookMode: 1, bypass: { hook: true, - module: true, window: true, - js: true, + module: true, + process: true, container: true, - maps: true, + js: true, }, }; @@ -81,7 +81,7 @@ export const NapCatSetConfigHandler: RequestHandler = (req, res) => { // 验证 bypass 字段 if (mergedConfig.bypass && typeof mergedConfig.bypass === 'object') { const bypass = mergedConfig.bypass as Record; - const validKeys = ['hook', 'module', 'window', 'js', 'container', 'maps']; + const validKeys = ['hook', 'window', 'module', 'process', 'container', 'js']; for (const key of validKeys) { if (key in bypass && typeof bypass[key] !== 'boolean') { return sendError(res, `bypass.${key} must be boolean`); diff --git a/packages/napcat-webui-frontend/src/pages/dashboard/config/bypass.tsx b/packages/napcat-webui-frontend/src/pages/dashboard/config/bypass.tsx index bca17915..22c71e91 100644 --- a/packages/napcat-webui-frontend/src/pages/dashboard/config/bypass.tsx +++ b/packages/napcat-webui-frontend/src/pages/dashboard/config/bypass.tsx @@ -10,20 +10,20 @@ import QQManager from '@/controllers/qq_manager'; interface BypassFormData { hook: boolean; - module: boolean; window: boolean; - js: boolean; + module: boolean; + process: boolean; container: boolean; - maps: boolean; + js: boolean; } const defaultBypass: BypassFormData = { hook: true, - module: true, window: true, - js: true, + module: true, + process: true, container: true, - maps: true, + js: true, }; const BypassConfigCard = () => { @@ -43,11 +43,11 @@ const BypassConfigCard = () => { const config = await QQManager.getNapCatConfig(); const bypass = config.bypass ?? defaultBypass; setValue('hook', bypass.hook ?? true); - setValue('module', bypass.module ?? true); setValue('window', bypass.window ?? true); - setValue('js', bypass.js ?? true); + setValue('module', bypass.module ?? true); + setValue('process', bypass.process ?? true); setValue('container', bypass.container ?? true); - setValue('maps', bypass.maps ?? true); + setValue('js', bypass.js ?? true); if (showTip) toast.success('刷新成功'); } catch (error) { const msg = (error as Error).message; @@ -101,17 +101,6 @@ const BypassConfigCard = () => { /> )} /> - ( - - )} - /> { /> ( + )} + /> + ( + )} /> @@ -147,12 +147,12 @@ const BypassConfigCard = () => { /> ( )} /> diff --git a/packages/napcat-webui-frontend/src/types/napcat_conf.d.ts b/packages/napcat-webui-frontend/src/types/napcat_conf.d.ts index fd52fa40..e954c35e 100644 --- a/packages/napcat-webui-frontend/src/types/napcat_conf.d.ts +++ b/packages/napcat-webui-frontend/src/types/napcat_conf.d.ts @@ -1,10 +1,10 @@ interface BypassOptions { hook: boolean; - module: boolean; window: boolean; - js: boolean; + module: boolean; + process: boolean; container: boolean; - maps: boolean; + js: boolean; } interface NapCatConfig {