Files
deerflow-code/frontend-web/index.html
T

104 lines
3.9 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. A mounted prefix such
// as /web must resolve against /web/. history.replaceState during parsing
// makes old Firefox abort the document (NS_BINDING_ABORTED) before the
// login bundle runs, so install a base URL instead of rewriting history.
(function () {
try {
var path = window.location.pathname;
if (path === "/" || /\/$/.test(path) || /\.[^/]+$/.test(path)) return;
if (document.querySelector("base")) return;
var base = document.createElement("base");
base.href = path + "/";
document.head.appendChild(base);
} catch (e) {}
})();
</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>