102 lines
3.7 KiB
HTML
102 lines
3.7 KiB
HTML
<!doctype html>
|
|
<html lang="en-US" suppressHydrationWarning>
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<script>
|
|
(function () {
|
|
try {
|
|
var t = localStorage.getItem("strategy-theme");
|
|
var root = document.documentElement;
|
|
root.classList.remove("dark", "light");
|
|
if (t === "light") return;
|
|
root.classList.add("dark");
|
|
} catch (e) {}
|
|
})();
|
|
// Chrome 102 has no AbortSignal.timeout (Chrome 103+). Install before
|
|
// any module so LangGraph SDK control requests can set a deadline.
|
|
(function () {
|
|
try {
|
|
if (typeof AbortSignal === "undefined" || typeof AbortSignal.timeout === "function") {
|
|
return;
|
|
}
|
|
AbortSignal.timeout = function (milliseconds) {
|
|
var controller = new AbortController();
|
|
var timer = setTimeout(function () {
|
|
var reason;
|
|
try {
|
|
reason = new DOMException("signal timed out", "TimeoutError");
|
|
} catch (err) {
|
|
reason = new Error("signal timed out");
|
|
reason.name = "TimeoutError";
|
|
}
|
|
try {
|
|
controller.abort(reason);
|
|
} catch (err) {
|
|
controller.abort();
|
|
}
|
|
}, milliseconds);
|
|
controller.signal.addEventListener(
|
|
"abort",
|
|
function () {
|
|
clearTimeout(timer);
|
|
},
|
|
{ once: true },
|
|
);
|
|
return controller.signal;
|
|
};
|
|
} catch (err) {}
|
|
})();
|
|
</script>
|
|
<script>
|
|
// React 19's development profiler uses the User Timing Level 3
|
|
// `performance.measure(name, options)` overload. Firefox 101 only
|
|
// implements the legacy string-marker form and otherwise throws a
|
|
// DOMException during every scheduled update. Detect that overload
|
|
// before React loads and disable its optional profiler when unavailable.
|
|
(function () {
|
|
try {
|
|
var perf = window.performance;
|
|
if (!perf || typeof perf.measure !== "function" || typeof perf.now !== "function") return;
|
|
var probe = "__deerflow_user_timing_options_probe__";
|
|
var now = perf.now();
|
|
perf.measure(probe, { start: now, end: now });
|
|
if (typeof perf.clearMeasures === "function") perf.clearMeasures(probe);
|
|
} catch (e) {
|
|
try {
|
|
Object.defineProperty(window.performance, "measure", {
|
|
value: undefined,
|
|
configurable: true,
|
|
});
|
|
} catch (defineError) {
|
|
try {
|
|
window.performance.measure = undefined;
|
|
} catch (assignmentError) {}
|
|
}
|
|
}
|
|
})();
|
|
</script>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<script>
|
|
// Relative production assets need a directory URL. Normalize a mounted
|
|
// prefix such as /web to /web/ before the browser resolves asset URLs.
|
|
(function () {
|
|
var path = window.location.pathname;
|
|
if (path !== "/" && !path.endsWith("/") && !/\.[^/]+$/.test(path)) {
|
|
window.history.replaceState(
|
|
window.history.state,
|
|
"",
|
|
path + "/" + window.location.search + window.location.hash,
|
|
);
|
|
}
|
|
})();
|
|
</script>
|
|
<link rel="icon" type="image/svg+xml" href="%BASE_URL%favicon.svg" />
|
|
<title>CM 助手</title>
|
|
<script src="%BASE_URL%runtime-config.js" data-runtime-config></script>
|
|
</head>
|
|
<body>
|
|
<div id="root"></div>
|
|
<script type="module" src="/src/main.tsx"></script>
|
|
</body>
|
|
</html>
|