chore: import original project baseline

Import the pre-repair source tree as the history baseline.
Runtime data (data/), virtualenvs, bytecode caches and logs are
gitignored so local secrets and user state stay out of the repo.
This commit is contained in:
2026-09-17 16:40:01 +08:00
commit a7412824e0
124 changed files with 26747 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
# -*- coding: utf-8 -*-
"""on-screen 布局验证:正文 .md-segment 在真实窗口中的 offsetHeight。
offscreen 没有布局(一切 h=0),必须在真实窗口验证。
PASS 条件:流式中 + finish 后 正文段 h > 0。
"""
import os, sys
os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = "--disable-gpu"
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from PyQt6.QtWidgets import QApplication
import PyQt6.QtWebEngineWidgets # noqa
from PyQt6.QtCore import QTimer
from ui.views.main_window import MainWindow
app = QApplication(sys.argv)
w = MainWindow()
w.resize(1000, 700)
w.show()
AUDIT = {}
def js(expr, cb=None):
if cb:
w.browser.page().runJavaScript(expr, cb)
else:
w.browser.page().runJavaScript(expr)
def on_ready(_res):
js(f"createMessage('vtest', 'assistant');")
QTimer.singleShot(300, phase_stream)
def phase_stream():
js("appendReasoning('vtest', '这是思考第一段内容。');")
body = "测试!测试!测试!\n\n这是第二段正文,用于验证布局高度。"
import json as _json
for ch in body:
js("appendToken('vtest', " + _json.dumps(ch) + ");")
QTimer.singleShot(1500, phase_mid_check)
def phase_mid_check(_r=None):
js("""(function(){
var seg = document.querySelector('#vtest .md-segment');
var tc = document.querySelector('#vtest .think-content');
return JSON.stringify({
mid: true,
segH: seg ? seg.offsetHeight : -1,
segConnected: seg ? seg.isConnected : null,
segRect: seg ? Math.round(seg.getBoundingClientRect().height) : -1,
tcH: tc ? tc.offsetHeight : -1
});
})()""", on_mid)
def on_mid(res):
AUDIT["mid"] = res
js("finishMessage('vtest');")
QTimer.singleShot(1200, phase_finish_check)
def phase_finish_check(_r=None):
js("""(function(){
var seg = document.querySelector('#vtest .md-segment');
return JSON.stringify({
fin: true,
segH: seg ? seg.offsetHeight : -1,
segText: seg ? seg.textContent.length : -1,
segDisplay: seg ? getComputedStyle(seg).display : null
});
})()""", on_finish)
def on_finish(res):
AUDIT["fin"] = res
print("MID =", AUDIT.get("mid"))
print("FIN =", AUDIT.get("fin"))
try:
import json
m, f = json.loads(AUDIT["mid"]), json.loads(AUDIT["fin"])
ok = m["segH"] > 0 and m["tcH"] > 0 and f["segH"] > 0 and f["segText"] > 20
print("===== " + ("PASS: 正文段真实布局高度正常" if ok else "FAIL: 正文段高度异常") + f" mid.segH={m['segH']} fin.segH={f['segH']} =====")
except Exception as e:
print("===== FAIL: 解析异常", e, "=====")
app.quit()
QTimer.singleShot(2500, lambda: js("document.readyState", on_ready))
QTimer.singleShot(30000, app.quit)
app.exec()