# aardio 范例: lmarena 前沿大模型快速切换工具

``````aardio
import win.ui;
import win.ts;
import fonts.fontAwesome;
import key;
/*DSG{{*/
mainForm = win.form(text="lmarena 前沿大模型快速切换工具";right=1040;bottom=642;bgcolor=0xFFFFFF;border="none")
mainForm.add(
btnCopySystemPrompt={cls="plus";left=814;top=5;right=848;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-14);iconStyle={font=LOGFONT(h=-14;name='FontAwesome')};iconText='\uF031';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=10};
chkImage={cls="plus";text="图像";left=717;top=5;right=777;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-14);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome')};iconText='\uF0C8 ';notify=1;textPadding={left=21};x=0.5;y=0.2;z=9};
chkSearch={cls="plus";text="联网";left=653;top=4;right=713;bottom=39;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-14);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome')};iconText='\uF0C8 ';notify=1;textPadding={left=21};x=0.5;y=0.2;z=8};
nav1={cls="plus";text="Gemini 3 Flash";left=10;top=5;right=148;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-14);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=12;top=4}};iconText='\uF1D8';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=35;bottom=1};x=0.5;y=0.2;z=5};
nav2={cls="plus";text="Grok 4.20";left=149;top=5;right=265;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-14);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=12;top=4}};iconText='\uF121';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=35;bottom=1};x=0.5;y=0.2;z=3};
nav3={cls="plus";text="Claude Sonnet 4.5";left=267;top=5;right=429;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-14);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=12;top=4}};iconText='\uF11C';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=35;bottom=1};x=0.5;y=0.2;z=4};
nav4={cls="plus";text="GPT 5.2";left=429;top=5;right=523;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-14);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=12;top=4}};iconText='\uF0E6';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=35;bottom=1};x=0.5;y=0.2;z=7};
navReset={cls="plus";left=779;top=5;right=813;bottom=40;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-14);iconStyle={font=LOGFONT(h=-14;name='FontAwesome')};iconText='\uF1F8';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=6};
tabPanel={cls="static";left=0;top=40;right=1040;bottom=643;bgcolor=0xFFFFFF;color=0xFFFFFF;db=1;dl=1;dr=1;dt=1;font=LOGFONT(h=-14);z=1};
titleBar={cls="bkplus";left=0;top=0;right=1041;bottom=41;bgcolor=0xE48900;dl=1;dr=1;dt=1;z=2}
)
/*}}*/

import win.ui.tabs;
var tabs = win.ui.tabs( mainForm.nav1,mainForm.nav2,mainForm.nav3,mainForm.nav4);
mainForm.show();

/*自动发现SOCKS5代理{{*/
var knownPorts = { [135] = true; [445] = true;[3389] = true;}
var knownSocks5Ports = function (p) {
    if( knownPorts[p] ) return false;
    if( p < 1080 || p >= 49152 ) return false;
    
    return (
           (p >= 1080 && p < 1090) 
        || (p >= 7890 && p < 7900) 
        || (p >= 10800 && p < 10810) 
        || (p >= 2080 && p <= 2081) 
        || (p >= 8888 && p <= 8890) 
        || (p == 9050 || p == 9150) 
        || (p == 2334 || p == 10085) 
        || (p == 51837) 
        || (p == 6153)  
        || (p == 20170) 
        || (p == 2801) 
    );
}

import inet.stat;
var stat = inet.stat();
var listeningPorts = table.filter(
    stat.tcp, 
    lambda(conn) 
		conn.state == "LISTENING" 
        && knownSocks5Ports(conn.localPort)
        && (conn.local == "0.0.0.0" || conn.local = "127.0.0.1" || conn.local == "::") 
);

listeningPorts = table.map(listeningPorts,lambda(v) v.localPort );
table.sort(listeningPorts);

var sock5Proxy;
import wsock.tcp.socks5Client; 
for i, port in listeningPorts { 
    if( wsock.tcp.socks5Client.test("127.0.0.1",port)){
         sock5Proxy = "SOCKS5://127.0.0.1:"+port;
         break
    }
}
/*}}*/

/*获取最新版本号{{*/
var edgeProductVersionUpdateTime = time("2026/01/24 00:00:00") ; 
lastEdgeProductVersion = function(){
    if(..time().diffDays(edgeProductVersionUpdateTime)<180){
        return "145.0.3800.70";
    }

    import web.rest.jsonLiteClient;
	var http = ..web.rest.jsonLiteClient();
	var products = http.get("http://edgeupdates.microsoft.com/api/products");
	http.close();
	
	if(products){ 
		for i,product in ..table.eachIndex(products){
			if(product[["Product"]] == "Stable"){
				var releases = product[["Releases"]]
				var version = releases[1].ProductVersion; 
				if(version){
					latestEdgeVersion = version;
					return version;
				}
			}
		}
	} 	
}
var latestEdgeVersion = lastEdgeProductVersion();
/*}}*/

//修改浏览器指纹以避免被误伤
var deviceProfile = {
	name = "Android Phone";
	mobile = true;
	platform = "Android";
	platformVersion = "14.0.0";
	majorPlatformVersion = lambda () string.map(owner.platformVersion)[1];
	arch = "";
	bitness = "";
	model = "Pixel 8 Pro";
	acceptLang = "en-US,en;q=0.9";
	locale = "en-US";
	timezone = "America/Los_Angeles";
	width = 412;
	height = 915;
	deviceScaleFactor = 2.625;
	touchPoints = 5;
	hardwareConcurrency = 8;
	deviceMemory = 8; 
	version = latestEdgeVersion;
	majorVersion = lambda () string.map(owner.version)[1];
	userAgent = lambda () "Mozilla/5.0 (Linux; Android "+owner.majorPlatformVersion()+"; Pixel 8 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/"+owner.version+" Mobile Safari/537.36";
};

import web.view;
var wb = web.view(mainForm.tabPanel,{
	language =  deviceProfile.locale; 
	startArguments = {
		acceptLang =  deviceProfile.acceptLang;
		userAgent = deviceProfile.userAgent();
		proxyServer = sock5Proxy//指定代理服务器
	};
	userDataDir = _STUDIO_INVOKED ? io.appData("/aardio/webview2/user-data/ide/example/lmarena")
})

/*修改浏览器指纹{{*/

// 启用 CDP 的 Emulation 域
wb.cdp("Emulation.enable");

// 启用 CDP 的 Network 域
wb.cdp("Network.enable");

var chromeVersions = [deviceProfile.version]
var nextChromeVersion = function(){
	if(!#chromeVersions) chromeVersions = ["145.0.3800.70",
		"145.0.7632.110",
		"145.0.7632.77" ,
		"144.0.7559.220",
		"144.0.7559.37",
		"144.0.3719.92", 
		"143.0.7499.150", 
		"140.0.7339.80"
	]
	
	return table.pop(chromeVersions);
}

var updateDeviceProfile = function(){
deviceProfile.version = nextChromeVersion();

// Client Hints brands 信息
var brands = {
	{brand = "Google Chrome"; version = deviceProfile.majorVersion()};
	{brand = "Chromium"; version = deviceProfile.majorVersion()};
	{brand = "Not_A Brand"; version = "24"};
};

var fullVersionList = {
	{brand = "Google Chrome"; version = deviceProfile.version};
	{brand = "Chromium"; version = deviceProfile.version};
	{brand = "Not_A Brand"; version = "24.0.0.0"};
};

// 设置 User-Agent 和 Client Hints 元数据
wb.cdp("Emulation.setUserAgentOverride", {
	userAgent = deviceProfile.userAgent();
	acceptLanguage = deviceProfile.acceptLang;
	platform = deviceProfile.platform;
	userAgentMetadata = {
		brands = brands;
		fullVersionList = fullVersionList;
		platform = deviceProfile.platform;
		platformVersion = deviceProfile.platformVersion;
		architecture = deviceProfile.arch;
		model = deviceProfile.model;
		mobile = deviceProfile.mobile;
		bitness = deviceProfile.bitness;
		wow64 = false;
	};
});

// 模拟手机设备指标
wb.cdp("Emulation.setDeviceMetricsOverride", { 
	deviceScaleFactor = 2.625; //不会影响页面布局，不要改 width 这些影响布局的字段
    mobile = true; // 声明为移动设备
});

// 设置 HTTP 请求头
var headers = {
	["Sec-CH-UA"] = '"Google Chrome";v="'+deviceProfile.majorVersion()+'", "Chromium";v="'+deviceProfile.majorVersion()+'", "Not_A Brand";v="24"';
	["Sec-CH-UA-Mobile"] = deviceProfile.mobile ? "?1" : "?0"; // "?1" 表示 true
	["Sec-CH-UA-Platform"] = '"' ++ deviceProfile.platform ++ '"'; // 注意平台名称需要用双引号包围
	["Sec-CH-UA-Platform-Version"] = '"' ++ deviceProfile.platformVersion ++ '"';
	["Accept-Language"] = deviceProfile.acceptLang;
};

// 可选字段（非空时添加）
if(#deviceProfile.arch > 0){
	headers["Sec-CH-UA-Arch"] = '"' ++ deviceProfile.arch ++ '"';
}

if(#deviceProfile.bitness > 0){
	headers["Sec-CH-UA-Bitness"] = '"' ++ deviceProfile.bitness ++ '"';
}

if(#deviceProfile.model > 0){
	headers["Sec-CH-UA-Model"] = '"' ++ deviceProfile.model ++ '"';
}

wb.cdp("Network.setExtraHTTPHeaders", {
	headers = headers;
});

// 设置语言区域
wb.cdp("Emulation.setLocaleOverride", {
	locale = deviceProfile.locale;
}); 

// 设置时区
wb.cdp("Emulation.setTimezoneOverride", {
	timezoneId = deviceProfile.timezone;
});

// 设置硬件并发数（CPU 核心数）
wb.cdp("Emulation.setHardwareConcurrencyOverride", {
	hardwareConcurrency = deviceProfile.hardwareConcurrency;
});

}

updateDeviceProfile();

// 注入 JavaScript 修改 navigator 属性（覆盖无法通过 CDP 直接修改的指纹）
var jsTemplate  = /**
	Object.defineProperty(navigator, 'deviceMemory', { get: () => %d });
	Object.defineProperty(navigator, 'hardwareConcurrency', { get: () => %d });
	Object.defineProperty(navigator, 'maxTouchPoints', { get: () => %d });
	Object.defineProperty(navigator, 'platform', { get: () => '%s' });
	Object.defineProperty(navigator, 'vendor', { get: () => 'Google Inc.' });
	Object.defineProperty(navigator, 'language', { get: () => '%s' });
	Object.defineProperty(navigator, 'languages', { get: () => ['%s', 'en'] });
	
	// 覆盖 WebGL 渲染器信息
	const getParameterProxyHandler = {
		apply: function(target, thisArg, args) {
			const param = args[0];
			const gl = thisArg;
			if (param === 37445) return '%s'; // UNMASKED_VENDOR_WEBGL
			if (param === 37446) return '%s'; // UNMASKED_RENDERER_WEBGL
			return Reflect.apply(target, thisArg, args);
		}
	};
	
	const canvasProto = HTMLCanvasElement.prototype;
	const origGetContext = canvasProto.getContext;
	canvasProto.getContext = function(type, ...args) {
		const ctx = origGetContext.call(this, type, ...args);
		if (ctx && (type === 'webgl' || type === 'webgl2' || type === 'experimental-webgl')) {
			ctx.getParameter = new Proxy(ctx.getParameter, getParameterProxyHandler);
		}
		return ctx;
	};
**/

var jsSource = string.format(jsTemplate,
		deviceProfile.deviceMemory,
		deviceProfile.hardwareConcurrency,
		deviceProfile.touchPoints,
		deviceProfile.mobile ? (deviceProfile.platform == "iOS" ? "iPhone" : "Linux armv8l") : (deviceProfile.platform == "macOS" ? "MacIntel" : "Win32"),
		deviceProfile.locale,
		deviceProfile.locale,
		deviceProfile.mobile ? "Google Inc." : (deviceProfile.platform == "macOS" ? "Apple Inc." : "Google Inc."),
		deviceProfile.mobile ? "Adreno (TM) 740" : (deviceProfile.platform == "macOS" ? "Apple M2 Pro" : "ANGLE (Intel, Intel(R) UHD Graphics 630)")
	);

wb.cdp("Page.addScriptToEvaluateOnNewDocument", {
	Source = jsSource
});
/*}}*/

//订阅 CDP 事件，拦截并自动关闭网页对话框。
wb.cdp("Page.enable");
wb.cdpSubscribe("Page.javascriptDialogOpening",function(dlg){   
	return function(){
		wb.cdp("Page.handleJavaScriptDialog",{accept=true})
		
		if(tabs.selText=="lmarena"){
			wb.doScript(`document.documentElement.scrollTop = document.documentElement.scrollHeight;`);
		}
	} 
})  

wb.export({
	clearErrorsAndResetSession = function(){
		mainForm.navReset.disabledText = ['\uF254','\uF251','\uF252','\uF253','\uF250']
		
		mainForm.setTimeout( 
			function(){ 
				mainForm.navReset.oncommand();	
			},500
		)
	};
	tecentLighthouse = function(){
		import process;
		process.openUrl("https://cloud.tencent.com/act/pro/double12-2025#CH")
	};
	mstsc = function(){
		raw.execute("mstsc.exe");
	};
})

wb.onDocumentInit = function(url){
	if(url=="chrome-error://chromewebdata/"){
		return mainForm.setTimeout(
			function(){ wb.html = $"~/lib/web/view/.res/socks-error.html" }
		);	
	}
}

if(!win.ts.session.isRemote()){
	wb.html = $"~/lib/web/view/.res/socks-try.html"
}
else{
	wb.html = "<body style='text-align: center;margin:50px'><progress></progress></body>"
}

//自动选择网页上的 模型 ID，自动关闭 JS/React 对话框。
var selectModel = function(model,chatModality){
	wb.currentAiModel = model;
	wb.currentAiChatModality = chatModality;
	
	mainForm.chkSearch.disabled = true;
	mainForm.chkImage.disabled = true;
	mainForm.navReset.disabled = true;
	
	tabs.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250'};
	if(!model) return;

	wb.go("https://arena.ai/?mode=direct",{"chat-modality":chatModality});

	var title = wb.eval("document.title");
	if(title){
		if(string.startsWith(title,"404")){
			wb.cdp("Page.reload");
		}
		elseif(title=="Attention Required! | Cloudflare"){
			wb.html = $"~/lib/web/view/.res/socks-error.html" 
			
			mainForm.chkSearch.disabled = false;
			mainForm.chkImage.disabled = false;
			mainForm.navReset.disabled = false
			tabs.disabled = false;
			return;
		}
	}
	
	//跨页面等待指定节点
	wb.waitEle2(`button[type="button"][aria-haspopup="dialog"][aria-expanded="false"],button[role="combobox"][aria-haspopup="dialog"],button[role="combobox"][aria-haspopup="dialog"],button[data-sentry-source-file="model-selector-trigger.tsx"],button[data-sentry-source-file="model-selected.tsx"],button[role="combobox"][data-sentry-source-file="model-dropdown.tsx"]`);

	wb.doScript($"/lmarena-translate.js");

	//点击 `Accept Cookies` 按钮
	wb.waitEle(`//div[@role="dialog"]//button[contains(., "Accept Cookies") or contains(., "Agree")]`
		,`this.click()`);
		
	//点击 `Agreen` 按钮（点发送按钮才会弹出）
	wb.doScript(`
(function(){
    let timer = setInterval(() => {
        let path = '//div[@role="dialog"]//button[contains(., "Accept Cookies") or contains(., "Agree")]';
        let accept = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        if(accept) {
            accept.click();
            clearInterval(timer); // 点击成功后清除定时器
        }
    }, 1000);
})()`);

	//清除已选择的模型
	wb.doScript( `
	const closeButtons = document.querySelectorAll('button[data-sentry-source-file="model-selected.tsx"][data-state="closed"]');

	if (closeButtons.length > 0) { 
  		buttonsToClick.forEach((button, index) => { 
    		button.click();
  		}); 
	} `)

	wb.wait();//等待页面加载，不能省略
	 
	//让网页获得输入焦点
	wb.focus();

	//查找并模拟点击 React 下拉框组件
	wb.waitEle(`button[type="button"][aria-haspopup="dialog"][aria-expanded="false"],button[role="combobox"][aria-haspopup="dialog"],button[data-sentry-source-file="model-selector-trigger.tsx"],button[role="combobox"][data-sentry-source-file="model-dropdown.tsx"]`,`
	this.click();`); //参数 2 指定的 JS 是异步非阴塞回调

	wb.waitEle(`input[placeholder="Search models"]`,`
function selectModelOption(modelName) {
  const options = document.querySelectorAll('[cmdk-item]');
  let targetOption = null;
  
  for (const option of options) {
    const textElement = option.querySelector('span.truncate');
    if (textElement && textElement.textContent.trim() === modelName) {
      targetOption = option;
      break;
    }
  }
  
  if (!targetOption) {
  	
    return false;
  }
  
  const events = ['mousedown', 'mouseup', 'click'];
  events.forEach(eventType => {
    const event = new MouseEvent(eventType, {
      view: window,
      bubbles: true,
      cancelable: true
    });
    targetOption.dispatchEvent(event);
  });
  
  const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
    window.HTMLElement.prototype,
    'value'
  )?.set;
  
  if (nativeInputValueSetter) {
    nativeInputValueSetter.call(targetOption, modelName);
    const inputEvent = new Event('input', { bubbles: true });
    targetOption.dispatchEvent(inputEvent);
  }
  
  return true;
}

selectModelOption('`+model+`');	
`); 
	
	thread.delay(200); 
	
	wb.focus();
	wb.waitEle(`textarea`,`this.focus();
	this.placeholder = "请输入提示词，按 Shift+Enter 换行 ..."
	const modelList = document.querySelector('div[data-sentry-source-file="model-selector-popover.tsx"]');
	if(modelList){
		modelList.style.display="none"
	}
	
	const dismissButton = document.querySelector('button[aria-label="Dismiss banner"]');
	if (dismissButton) {
    	dismissButton.click();
	}
	`);
	
	tabs.disabledText = null;
	mainForm.chkSearch.disabled = false;
	mainForm.chkImage.disabled = false;
	mainForm.navReset.disabled = false;
}

//切换选项卡回调此函数
tabs.onSelchange = function(idx,tab,form){

	if(mainForm.chkSearch.checked){
		select(idx){
			case 1 {
				selectModel("gemini-3-flash-grounding","search");
			}
			case 2 {
				
				selectModel("grok-4.20-multi-agent-beta-0309","search");
			}
			case 3 {
				selectModel("claude-sonnet-4-6-search","search"); 
			}
			case 4 {
				selectModel("gpt-5.2-search","search");
			}
		}
	}
	elseif(mainForm.chkImage.checked){
		select(idx){
			case 1 {
				selectModel("gemini-3.1-flash-image-preview (nano-banana-2) [web-search]","image"); 
			}
			case 2 {
				selectModel("flux-2-max","image");
			}
			case 3 {
				selectModel("hunyuan-image-3.0","image");
			}
			case 4 {
				selectModel("gpt-image-2 (medium)","image");
			}
		}
	}
	else{
		select(idx){
			case 1 {
				selectModel("gemini-3-flash");	
			}
			case 2 { 
				selectModel("grok-4.20-beta1");
			}
			case 3 {
				selectModel("claude-sonnet-4-5-20250929-thinking-32k");	
			}
			case 4 {
				selectModel("gpt-5.2");	
			}
		}	
	} 
}

mainForm.navReset.oncommand = function(){  
	mainForm.navReset.disabledText = ['\uF254','\uF251','\uF252','\uF253','\uF250']
	
	updateDeviceProfile();
	
	/*
	清空网站数据，
	如果对话报错，清空网站数据以后可以解决。
	同时会清空对话记录（网站将对话记录保存在本地）。
	*/
	wb.cdp("Storage.clearDataForOrigin",  {
		"origin": "https://lmarena.ai",
		"storageTypes": "all"
		});
	wb.cdp("Storage.clearDataForOrigin",  {
		"origin": "https://arena.ai",
		"storageTypes": "all"
		});
	wb.cdp("Storage.clearCookies" );
		
	thread.delay(2000);
	mainForm.navReset.disabledText = null;
	wb.cdp("Page.reload");
	if(wb.currentAiModel) selectModel(wb.currentAiModel,wb.currentAiChatModality)
} 

//设置选项卡样式
tabs.skin({
	foreground={
		active=0xFFFFFFFF;
		default=0x00FFFFFF;
		hover=0x38FFFFFF
	};
	color={
		default=0xFFFFFFFF;
	};
	checked={
		foreground={default=0xFFFFFFFF;}; 
		color={default=0xFF42A875;};
	}
})

//为无边框窗口添加标题栏按钮、可拖动缩放的窗体边框等。
import win.ui.simpleWindow;
win.ui.simpleWindow( mainForm );

var onCheckedChanged = function(){  
	if(mainForm.chkSearch.checked){ 
		mainForm.nav1.text = "Gemini 3 Flash";
		mainForm.nav2.text = "Grok 4.20";
		mainForm.nav3.text = "Claude Sonnet 4.6";
		mainForm.nav4.text = "GPT 5.2"; 
	}
	elseif(mainForm.chkImage.checked){
		mainForm.nav1.text = "Banana 2"
		mainForm.nav2.text = "Flux 2 Max";
		mainForm.nav3.text = "Hunyuan 3.0"
		mainForm.nav4.text = "GPT 2"	 
	}
	else{
		mainForm.nav1.text = "Gemini 3 Flash";
		mainForm.nav2.text = "Grok 4.20";
		mainForm.nav3.text = "Claude Sonnet 4.5";
		mainForm.nav4.text = "GPT 5.2";  	
	} 
	
	tabs.onSelchange(tabs.selIndex,tabs.selTab,tabs.selForm)
}

mainForm.chkSearch.oncommand = function(id,event){
	if(owner.checked){
		mainForm.chkImage.checked = false;
	}
	
	onCheckedChanged();
}

mainForm.chkImage.oncommand = function(id,event){
	if(owner.checked){
		mainForm.chkSearch.checked = false;
	}
	
	onCheckedChanged();
}

mainForm.btnCopySystemPrompt.oncommand = function(id,event){

	var insertSystemPrompt = function(prompt){
		import win.clip;
		var oldCipText = win.clip.read();
		  
		win.clip.write(prompt)
		
		if(!wb.waitEle(`textarea`,500))  {
			
			mainForm.msgbox("已复制 aardio 提示词");
			return;
		}
		
		wb.focus();
		wb.waitEle(`textarea`,"this.focus();",500)
	
		import key;
		key.combine("CTRL","V")
		
		if(#oldCipText){
			thread.delay(300);
			win.clip.write(oldCipText)
		}		
	}
	
	var prompt = ..string.removeBom(string.load("~\doc\guide\ide\system-prompt.md"));
	prompt = string.replace(prompt,"\#\#\s*aardio\s*作者联系方式.*$",'');
	

 	var menuFile = win.ui.popmenu(mainForm);
	menuFile.add(
		"插入 aardio 提示词",
		function(id){
			prompt = prompt + '## 任务\n\n';
			insertSystemPrompt(prompt);
		} 
	) 
	
	menuFile.add(
		"插入 aardio 提示词（自绘、小游戏）",
		function(id){
			prompt = prompt + '\n\n## plus 控件自绘示例\n\n```aardio\n' 
			+string.load("~/example/plus/draw/base.aardio")
			+ '\n```\n\n## plus 控件自绘小游戏示例\n\n```aardio\n'
			+string.load("~/example/plus/draw/game/trap-the-cat.aardio")+ '\n```\n\n'
			
			prompt = prompt + '## 任务\n请使用 plus 控件的自绘功能完成以下任务：\n\n';
			insertSystemPrompt(prompt);
		} 
	) 
	
	menuFile.add(
		"插入 aardio 提示词（网页前端）",
		function(id){
			prompt = prompt + '\n\n## web.view 示例\n\n在 aardio 开发环境新建 WebView2 窗体的生成的示例代码如下：\n\n```aardio\n' 
			+string.load("~\extensions\wizard\files\webform-blank.aardio")
			+ '\n```\n\n'
			
			prompt = prompt + '## 任务\n\n';
			insertSystemPrompt(prompt);
		} 
	) 
	
	var dpiX = mainForm.dpiScale(1);
	var x,y,cx,cy = mainForm.btnCopySystemPrompt.getPos();
	menuFile.popup(x-50*dpiX,y+cy+3*dpiX);
	return;
}

mainForm.chkSearch.skin({
	color={
		active=0xFF00FF00;
		default=0xFFFFFFFF;
		disabled=0xFF42A875;
		hover=0xFFFF0000		
	};
	checked={
		iconText='\uF14A';
		color={
			active=0xFF00FF00;
			default=0xFFFFFFFF;
			disabled=0xFF42A875;
			hover=0xFFFF0000		
		};		
	}
})

mainForm.chkImage.skin({
	color={
		active=0xFF00FF00;
		default=0xFFFFFFFF;
		disabled=0xFF42A875;
		hover=0xFFFF0000		
	};
	checked={
		iconText='\uF14A';
		color={
			active=0xFF00FF00;
			default=0xFFFFFFFF;
			disabled=0xFF42A875;
			hover=0xFFFF0000		
		};		
	}
})

mainForm.navReset.skin({
	foreground={
		active=0xFFFFFFFF;
		default=0x00FFFFFF;
		hover=0x38FFFFFF
	};
	iconColor={
		default=0xFFFFFFFF; 
		active=0xFFCCCCCC; 
		disabled=0xFF42A875;
	};
})

mainForm.btnCopySystemPrompt.skin({
	foreground={
		active=0xFFFFFFFF;
		default=0x00FFFFFF;
		hover=0x38FFFFFF
	};
	iconColor={
		default=0xFFFFFFFF; 
		active=0xFFCCCCCC; 
		disabled=0xFF42A875;
	};
})

var x,y,cx,cy = mainForm.navReset.getPos(true);

import winex.tooltip;
winex.tooltip.balloon("清除会话记录
对话报错点这里重置 / 修复",x+cx/2,y+cy*0.75,7000);

tabs.selIndex = 3;

win.loopMessage();
``````