TRAE IDE和TRAE WORK 历史版本下载参考(2026年8月更新)
https://gitee.com/anyphasy/trae-history-builds

7月底之后,
3.3.81开始换成积分制,不友好,用完没法使用
最后一个3.3.80版本是2.3.59356
下载链接:
https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/2.3.59356/win32/Trae_CN-Setup-x64.exe
Traework也是0.1.39是最后一个无积分版本
https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/2.3.57763/win32/TRAE_Work_CN-Setup-x64.exe
新代码,用于寻找版本
import sys
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
import threading
import time
import os
import json
# https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/2.3.62837/win32/Trae_CN-Setup-x64.exe
base_url = "https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/{version}/win32/Trae_CN-Setup-x64.exe"
file_lock = threading.Lock()
counter_lock = threading.Lock()
progress_lock = threading.Lock()
found_count = 0
checked_count = 0
PROGRESS_FILE = "trae_scan_progress.json"
RESULT_FILE = "trae_available_versions.txt"
# ============================================================
# 断点续传:保存和加载进度
# ============================================================
def save_progress(last_checked_index, found_versions):
with progress_lock:
data = {
"last_checked_index": last_checked_index,
"found_versions": found_versions,
"save_time": time.strftime('%Y-%m-%d %H:%M:%S')
}
with open(PROGRESS_FILE, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
def load_progress():
if os.path.exists(PROGRESS_FILE):
with open(PROGRESS_FILE, "r", encoding="utf-8") as f:
data = json.load(f)
return data
return None
def save_result(version, url):
with file_lock:
with open(RESULT_FILE, "a", encoding="utf-8") as f:
f.write(f"{version} {url}\n")
# ============================================================
# 检测单个版本
# ============================================================
def check_version(version):
url = base_url.format(version=version)
try:
# 打印请求的URL
# print(f"正在检查版本: {version} ({url})")
response = requests.head(url, timeout=5, allow_redirects=True)
if response.status_code == 200:
return (version, url, True)
return (version, url, False)
except:
return (version, url, False)
# ============================================================
# 生成版本列表(从新到旧)
# ============================================================
def generate_versions():
versions = []
# 可以👇自己调整
# 2.3.62837 → 2.3.58
for patch in range(62839, 27281, -1):
versions.append(f"2.3.{patch}")
# # 2.3.62837 → 2.3.0
# for patch in range(62839, -1, -1):
# versions.append(f"2.3.{patch}")
# # 2.2.MAX → 2.2.0
# for patch in range(70000, -1, -1):
# versions.append(f"2.2.{patch}")
# # 2.1.MAX → 2.1.0
# for patch in range(70000, -1, -1):
# versions.append(f"2.1.{patch}")
# # 2.0.MAX → 2.0.0
# for patch in range(70000, -1, -1):
# versions.append(f"2.0.{patch}")
return versions
# ============================================================
# 主函数
# ============================================================
def main():
global found_count, checked_count
print("正在生成版本列表...")
all_versions = generate_versions()
total = len(all_versions)
print(f"总版本数: {total}")
# ============================================================
# 检查是否有断点
# ============================================================
progress = load_progress()
if progress:
last_index = progress["last_checked_index"]
found_list = progress.get("found_versions", [])
save_time = progress.get("save_time", "未知")
print(f"\n{'='*50}")
print(f"发现上次中断的进度!")
print(f" 上次保存时间: {save_time}")
print(f" 上次扫描到第: {last_index}/{total}")
print(f" 上次已找到: {len(found_list)} 个版本")
print(f" 剩余: {total - last_index} 个版本")
print(f"{'='*50}")
choice = input("\n是否继续上次的扫描?(y=继续 / n=从头开始): ").strip().lower()
if choice == 'y':
# 跳过已扫描的部分
versions_to_scan = all_versions[last_index:]
found_count = len(found_list)
checked_count = last_index
print(f"\n从第 {last_index} 个继续扫描,剩余 {len(versions_to_scan)} 个...")
else:
versions_to_scan = all_versions
found_count = 0
checked_count = 0
# 清空文件
with open(RESULT_FILE, "w", encoding="utf-8") as f:
f.write("=== Trae CN 可用版本扫描结果 ===\n")
f.write(f"扫描范围: 2.3.62837 ~ 2.0.0(从新到旧)\n")
f.write(f"开始时间: {time.strftime('%Y-%m-%d %H:%M:%S')}\n")
f.write("=" * 50 + "\n")
if os.path.exists(PROGRESS_FILE):
os.remove(PROGRESS_FILE)
else:
versions_to_scan = all_versions
print(f"\n首次扫描,共 {total} 个版本")
# 初始化结果文件
with open(RESULT_FILE, "w", encoding="utf-8") as f:
f.write("=== Trae CN 可用版本扫描结果 ===\n")
f.write(f"扫描范围: 2.3.62837 ~ 2.0.0(从新到旧)\n")
f.write(f"开始时间: {time.strftime('%Y-%m-%d %H:%M:%S')}\n")
f.write("=" * 50 + "\n")
print(f"使用 50 线程加速...")
print(f"支持 Ctrl+C 随时中断,下次运行自动续传\n")
available_versions = []
start_time = time.time()
# 分批扫描,每批 1000 个,每批结束保存进度
BATCH_SIZE = 1000
batches = []
for i in range(0, len(versions_to_scan), BATCH_SIZE):
batches.append(versions_to_scan[i:i + BATCH_SIZE])
batch_start_index = checked_count
try:
for batch_num, batch in enumerate(batches):
batch_results = []
with ThreadPoolExecutor(max_workers=50) as executor:
futures = {executor.submit(check_version, v): v for v in batch}
for future in as_completed(futures):
version, url, ok = future.result()
with counter_lock:
checked_count += 1
current = checked_count
if ok:
with counter_lock:
found_count += 1
idx = found_count
available_versions.append((version, url))
batch_results.append(version)
save_result(version, url)
elapsed = time.time() - start_time
speed = (current - batch_start_index) / \
elapsed if elapsed > 0 else 0
remaining = (total - current) / \
speed if speed > 0 else 0
print(f"\n✅ [{current}/{total}] 发现版本: {version}")
print(f" 下载地址: {url}")
print(f" 已找到: {idx} 个 | "
f"进度: {current/total*100:.1f}% | "
f"速度: {speed:.0f}/秒 | "
f"剩余: {remaining/60:.0f}分钟")
else:
if current % 200 == 0:
elapsed = time.time() - start_time
speed = (current - batch_start_index) / \
elapsed if elapsed > 0 else 0
remaining = (total - current) / \
speed if speed > 0 else 0
print(f"[{current}/{total}] "
f"进度: {current/total*100:.1f}% | "
f"速度: {speed:.0f}/秒 | "
f"已找到: {found_count} | "
f"剩余: {remaining/60:.0f}分钟",
flush=True)
# 每批结束保存进度(断点)
save_progress(checked_count, [v for v, _ in available_versions])
except KeyboardInterrupt:
print(f"\n\n⚠️ 用户中断!保存进度中...")
# ============================================================
# 输出结果
# ============================================================
elapsed = time.time() - start_time
# 保存最终进度
save_progress(checked_count, [v for v, _ in available_versions])
# 写入汇总到文件
with file_lock:
with open(RESULT_FILE, "a", encoding="utf-8") as f:
f.write("\n" + "=" * 50 + "\n")
f.write(f"扫描结束时间: {time.strftime('%Y-%m-%d %H:%M:%S')}\n")
f.write(f"共扫描 {checked_count}/{total} 个版本\n")
f.write(f"共找到 {len(available_versions)} 个可用版本\n")
f.write(f"耗时: {elapsed/60:.1f} 分钟\n")
f.write("=" * 50 + "\n")
for i, (ver, url) in enumerate(
sorted(available_versions, key=lambda x: x[0], reverse=True), 1):
f.write(f"{i}. {ver}\n {url}\n")
print(f"\n\n{'='*60}")
print(f"扫描结果:")
print(f" 已扫描: {checked_count}/{total}")
print(f" 找到: {len(available_versions)} 个可用版本")
print(f" 耗时: {elapsed/60:.1f} 分钟")
print(f" 进度已保存到: {PROGRESS_FILE}")
print(f" 结果已保存到: {RESULT_FILE}")
print(f"{'='*60}")
if available_versions:
available_versions.sort(key=lambda x: x[0], reverse=True)
print(f"\n所有可用版本(从新到旧):")
for i, (ver, url) in enumerate(available_versions, 1):
print(f" {i}. {ver}")
print(f" {url}")
else:
print("\n本次未找到新的可用版本")
if checked_count < total:
print(f"\n💡 下次运行将自动从第 {checked_count} 个继续扫描")
if __name__ == "__main__":
main()
多余的版本记录保存到了gittee:
https://gitee.com/anyphasy/trae-history-builds

----------------------------------------分割线(下面是旧文章)---------------


比如版本号为1.0.11939
那么链接为https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/1.0.11939/win32/Trae%20CN-Setup-x64.exe
有关版本日期参考官网更新日志
TRAE IDE更新日志
更新日志 - 文档 - Trae CN
https://docs.trae.cn/ide_changelog
TRAEWork更新日志
https://docs.trae.cn/work_changelog
目前最新可下载版本号如下
1.0.12490 //最新截止4月29日
1.0.12470
1.0.12467
1.0.12457
1.0.12453
1.0.12385
1.0.12366
1.0.12354
1.0.12297
1.0.12284
1.0.12261
1.0.12236
1.0.12227
1.0.12118
1.0.12101
1.0.12006
1.0.11999 //对应4月22日版本
1.0.11959
1.0.11951
1.0.11939
1.0.11924
1.0.11911
1.0.11902
1.0.11896
1.0.11884
1.0.11873
1.0.11868
1.0.11849
1.0.11583 //对应4月16日版本
相关的ping代码
import requests
from urllib.parse import quote
import time
base_url = "https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/{version}/win32/Trae%20CN-Setup-x64.exe"
def check_version(url):
try:
response = requests.head(url, timeout=5)
return response.status_code == 200
except Exception as e:
print(f"请求失败: {str(e)}")
return False
def main():
# 从1.0.12384开始递减
major, minor, patch = 1, 0, 12491 # 开始版本号
available_versions = []
while patch > 0: # 设置最小版本号限制
version = f"{major}.{minor}.{patch}"
encoded_version = quote(version, safe='')
url = base_url.format(version=encoded_version)
print(f"正在检测版本: {version}", end='\r', flush=True)
if check_version(url):
print(f"\n发现可下载版本: {version}")
print(f"下载地址: {url}")
available_versions.append(url)
patch -= 1
if patch < 12480: # 这里调节结束版本号,否则难以停止,得在任务管理器手动结束进程
break
time.sleep(0.5) # 降低请求频率
print("\n\n检测完成,以下是所有可下载版本:")
for i, url in enumerate(available_versions, 1):
print(f"{i}. {url}")
if __name__ == "__main__":
print("开始检测可用版本...")
main()
运行结果
更多推荐



所有评论(0)