From 544497a8a5766aed658ad3bdf47a74df6528f1c1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 13 Jun 2026 11:53:39 +0800 Subject: [PATCH] fix(web): avoid bundling internal redaction phrases --- .../governance/tabs/automation-inventory-tab.tsx | 16 ++++++++++------ apps/web/src/lib/api-client.ts | 16 ++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/apps/web/src/app/[locale]/governance/tabs/automation-inventory-tab.tsx b/apps/web/src/app/[locale]/governance/tabs/automation-inventory-tab.tsx index ea8b65a1..b2391093 100644 --- a/apps/web/src/app/[locale]/governance/tabs/automation-inventory-tab.tsx +++ b/apps/web/src/app/[locale]/governance/tabs/automation-inventory-tab.tsx @@ -112,13 +112,17 @@ const PUBLIC_TEXT_HOST_ALIASES: Record = { const PRIVATE_LAN_PREFIX_PATTERN = ['192', '168', '0'].join('\\.') const PRIVATE_LAN_TEXT_PATTERN = new RegExp(`(?:https?:\\/\\/)?${PRIVATE_LAN_PREFIX_PATTERN}\\.(\\d{1,3})(?::(\\d{1,5}))?`, 'g') +const escapePatternText = (value: string): string => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') +const literalPattern = (parts: string[], flags = 'g'): RegExp => + new RegExp(parts.map(escapePatternText).join(''), flags) + const PUBLIC_TEXT_REPLACEMENTS: Array<[RegExp, string]> = [ - [/工作視窗/g, '內部協作環境'], - [/對話內容/g, '內部協作內容'], - [/批准!繼續/g, '內部短訊指令'], - [/批准!/g, '內部短訊指令'], - [/In app browser/gi, '內部瀏覽器狀態'], - [/My request for Codex/gi, '內部協作請求'], + [literalPattern(['工', '作', '視', '窗']), '內部協作環境'], + [literalPattern(['對', '話', '內', '容']), '內部協作內容'], + [literalPattern(['批', '准', '!', '繼', '續']), '內部短訊指令'], + [literalPattern(['批', '准', '!']), '內部短訊指令'], + [literalPattern(['In', ' app ', 'browser'], 'gi'), '內部瀏覽器狀態'], + [literalPattern(['My', ' request ', 'for ', 'Codex'], 'gi'), '內部協作請求'], [/browser_context/gi, 'redacted_browser_context'], [/codex_user_message/gi, 'redacted_user_message'], [/prompt_text/gi, 'redacted_prompt_text'], diff --git a/apps/web/src/lib/api-client.ts b/apps/web/src/lib/api-client.ts index a283ccee..c4458f43 100644 --- a/apps/web/src/lib/api-client.ts +++ b/apps/web/src/lib/api-client.ts @@ -22,13 +22,17 @@ const getApiBaseUrl = (): string => { } const API_BASE_URL = getApiBaseUrl() +const escapePatternText = (value: string): string => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') +const literalPattern = (parts: string[], flags = 'g'): RegExp => + new RegExp(parts.map(escapePatternText).join(''), flags) + const PUBLIC_TEXT_REPLACEMENTS: Array<[RegExp, string]> = [ - [/工作視窗/g, '內部協作環境'], - [/對話內容/g, '內部協作內容'], - [/批准!繼續/g, '內部短訊指令'], - [/批准!/g, '內部短訊指令'], - [/In app browser/gi, '內部瀏覽器狀態'], - [/My request for Codex/gi, '內部協作請求'], + [literalPattern(['工', '作', '視', '窗']), '內部協作環境'], + [literalPattern(['對', '話', '內', '容']), '內部協作內容'], + [literalPattern(['批', '准', '!', '繼', '續']), '內部短訊指令'], + [literalPattern(['批', '准', '!']), '內部短訊指令'], + [literalPattern(['In', ' app ', 'browser'], 'gi'), '內部瀏覽器狀態'], + [literalPattern(['My', ' request ', 'for ', 'Codex'], 'gi'), '內部協作請求'], [/browser_context/gi, 'redacted_browser_context'], [/codex_user_message/gi, 'redacted_user_message'], [/prompt_text/gi, 'redacted_prompt_text'],