from pathlib import Path root=Path('C:/kefu') p=root/'admin-web/apps/web-antd/src/api/error-message.ts';s=p.read_text(encoding='utf-8') s=s.replace(" return responseErrorMessage(data, fallback);", " // RequestClient unwraps Axios response.data before rejecting to page handlers.\n return responseErrorMessage(data ?? (error instanceof Error ? undefined : error), fallback);") p.write_text(s,encoding='utf-8',newline='\n') p=root/'admin-web/apps/web-antd/src/api/error-message.test.ts';s=p.read_text(encoding='utf-8') s=s.replace(" it('handles maximum length", " it('handles response bodies unwrapped by RequestClient', () => {\n expect(requestErrorMessage({ detail: [{ type: 'string_too_short', loc: ['body', 'query'], ctx: { min_length: 2 } }] })).toBe('检索问题至少需要 2 个字符');\n expect(requestErrorMessage({ detail: '知识索引暂不可用' })).toBe('知识索引暂不可用');\n });\n it('handles maximum length") p.write_text(s,encoding='utf-8',newline='\n') p=root/'deploy/knowledge-v5-search/qa/browser.mjs';s=p.read_text(encoding='utf-8') s=s.replace("await page.getByText('检索问题至少需要 2 个字符',{exact:true}).first().waitFor();", "await page.locator('.ant-alert').filter({hasText:'检索问题至少需要 2 个字符'}).waitFor();") p.write_text(s,encoding='utf-8',newline='\n') for p in [root/'wechat_rpa/KNOWLEDGE.md',root/'deploy/knowledge-v5-search/package.py']: s=p.read_text(encoding='utf-8').replace('9 项前端错误格式与批量操作测试','10 项前端错误格式与批量操作测试') p.write_text(s,encoding='utf-8',newline='\n') print('Page errors now handle unwrapped API responses.')