from pathlib import Path import json,hashlib for root in [Path('C:/wechat_rpa'), Path('C:/kefu/wechat_rpa')]: p=root/'assets/ui/console-app.js';s=p.read_text(encoding='utf-8') s=s.replace('&& !task.needsHuman && String(task.answer || "").trim());','&& !task.needsHuman && !task.deliveryUncertain && String(task.answer || "").trim());') needle='function taskReviewHint(task){' assert s.count(needle)==1 s=s.replace(needle,'''function taskRetryButton(task){ return task && task.key && task.canRetry === true && !task.awaitingReview && !task.deliveryUncertain ? `` : ""; } function taskHandoffLabel(task){ return task.deliveryUncertain ? "核对后转人工" : "转人工"; } '''+needle) s=s.replace(' const help = canApprove\n', ''' const help = task.deliveryUncertain ? "发送结果尚不确定,请先在企业微信核对是否已发出,避免重复回复。核对后点击「核对后转人工」处理此任务。" : task.canRetry === true && !task.awaitingReview ? "可点击「立即重试」重新生成回复,或在企业微信查看原始消息并转人工处理。" : canApprove ''') old=' const retryButton = !task.awaitingReview && !task.needsHuman ? `` : "";' assert s.count(old)==1;s=s.replace(old,' const retryButton = taskRetryButton(task);') s=s.replace('
${approveBtn}', '
${approveBtn}${taskRetryButton(task)}') for glyph in ['user','users']: old='${icon("'+glyph+'")}转人工
' # Restrict live task action strings; static demo uses toast rather than handoff-task. lines=s.splitlines() for i,line in enumerate(lines): if 'data-action="handoff-task"' in line: lines[i]=line.replace(old,'${icon("'+glyph+'")}'+ '${taskHandoffLabel(task)}
') s='\n'.join(lines)+'\n' s=s.replace(' canApprove: state.task.canApprove,',' canApprove: state.task.canApprove,\n canRetry: state.task.canRetry,\n deliveryUncertain: state.task.deliveryUncertain,') s=s.replace(' "retry-task": () => callBridge("retryTask", key),',''' "retry-task": () => { if (!STATE.task || STATE.task.key !== key || STATE.task.canRetry !== true || STATE.task.awaitingReview || STATE.task.deliveryUncertain) return toast("此任务当前不能重试,请查看处理说明。"); callBridge("retryTask", key); },''') p.write_text(s,encoding='utf-8',newline='\n') report=Path('C:/kefu/deploy/review-visibility-20260916/frontend-files.json') results=json.loads(report.read_text(encoding='utf-8')) for result in results: for f in result['files']: f['sha256']=hashlib.sha256((Path(result['root'])/f['path']).read_bytes()).hexdigest() report.write_text(json.dumps(results,ensure_ascii=False,indent=2),encoding='utf-8') print('Updated delivery receipt and retry controls in both directories.')