${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.')