))}
@@ -124,7 +122,7 @@ export default function MathAnimatorViewer({
- {t("View Manim Code")}
+ View Manim Code
{result.code.content}
@@ -149,12 +147,12 @@ export default function MathAnimatorViewer({
{result.render.quality ? (
- quality: {result.render.quality}
+ Quality: {result.render.quality}
) : null}
{typeof result.render.retry_attempts === "number" ? (
- retries: {result.render.retry_attempts}
+ Retries: {result.render.retry_attempts}
) : null}
{Object.keys(result.timings).length > 0 ? (
@@ -175,7 +173,7 @@ export default function MathAnimatorViewer({
>
diff --git a/web/components/notebook/NotebookRecordPicker.tsx b/web/components/notebook/NotebookRecordPicker.tsx
index 4e2e715ef..c7b6d66df 100644
--- a/web/components/notebook/NotebookRecordPicker.tsx
+++ b/web/components/notebook/NotebookRecordPicker.tsx
@@ -2,7 +2,6 @@
import { useEffect } from "react";
import { X } from "lucide-react";
-import { useTranslation } from "react-i18next";
import NotebookSelector from "@/app/(workspace)/guide/components/NotebookSelector";
import { useNotebookSelection } from "@/app/(workspace)/guide/hooks/useNotebookSelection";
import type { SelectedRecord } from "@/app/(workspace)/guide/types";
@@ -18,9 +17,8 @@ export default function NotebookRecordPicker({
open,
onClose,
onApply,
- actionLabel = "Use Selected Records ({n})",
+ actionLabel = "Use selected records ({n})",
}: NotebookRecordPickerProps) {
- const { t } = useTranslation();
const {
notebooks,
expandedNotebooks,
@@ -49,10 +47,10 @@ export default function NotebookRecordPicker({
- {t("Select Notebook Records")}
+ Select Notebook Records
- {t("Choose records across one or more notebooks to ground the next request.")}
+ Select records from one or more notebooks to provide context for the next request.
([]);
const [selectedIds, setSelectedIds] = useState([]);
const [title, setTitle] = useState("");
const [summaryPreview, setSummaryPreview] = useState("");
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState("");
- const abortRef = useRef(null);
useEffect(() => {
- if (!open) {
- abortRef.current?.abort();
- return;
- }
+ if (!open) return;
setTitle(payload?.title || "");
setSummaryPreview("");
setError("");
@@ -109,9 +103,6 @@ export default function SaveToNotebookModal({
const handleSave = async () => {
if (!payload || !canSave) return;
- abortRef.current?.abort();
- const controller = new AbortController();
- abortRef.current = controller;
setIsLoading(true);
setError("");
setSummaryPreview("");
@@ -129,7 +120,6 @@ export default function SaveToNotebookModal({
metadata: payload.metadata || {},
kb_name: payload.kbName || null,
}),
- signal: controller.signal,
});
if (!response.ok || !response.body) {
@@ -173,7 +163,6 @@ export default function SaveToNotebookModal({
throw new Error("Notebook save stream ended unexpectedly.");
} catch (err) {
- if (controller.signal.aborted) return;
setError(err instanceof Error ? err.message : "Failed to save to notebook.");
setIsLoading(false);
}
@@ -187,13 +176,13 @@ export default function SaveToNotebookModal({
- {t("Notebook Output")}
+ Notebook Output
- {t("Save to Notebook")}
+ Save to Notebook
- {t("Select one or more notebooks. A summary will be generated automatically.")}
+ Select one or more notebooks. A summary will be generated automatically.
- {t("Title")}
+ Title
- {t("Notebooks")}
+ Notebooks
{selectedIds.length > 0 && (
@@ -230,7 +219,7 @@ export default function SaveToNotebookModal({
{notebooks.length === 0 ? (
- {t("No notebooks found.")}
+ No notebooks found.
) : (
notebooks.map((notebook) => {
@@ -268,12 +257,12 @@ export default function SaveToNotebookModal({
- {t("Summary preview")}
+ Summary Preview
{summaryPreview || (
- {t("The generated summary will appear here during saving.")}
+ The generated summary will appear here during save.
)}
@@ -291,7 +280,7 @@ export default function SaveToNotebookModal({
onClick={onClose}
className="rounded-xl px-4 py-2 text-sm text-slate-600 transition hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800"
>
- {t("Cancel")}
+ Cancel
{isLoading && }
- {t("Save")}
+ Save
diff --git a/web/components/quiz/QuestionFollowupPanel.tsx b/web/components/quiz/QuestionFollowupPanel.tsx
index 4c717460f..c2ca19313 100644
--- a/web/components/quiz/QuestionFollowupPanel.tsx
+++ b/web/components/quiz/QuestionFollowupPanel.tsx
@@ -7,7 +7,6 @@ import {
SendHorizonal,
Sparkles,
} from "lucide-react";
-import { useTranslation } from "react-i18next";
import MarkdownRenderer from "@/components/common/MarkdownRenderer";
import type { QuizQuestion } from "@/lib/quiz-types";
@@ -48,7 +47,6 @@ export default function QuestionFollowupPanel({
onInputChange,
onSend,
}: QuestionFollowupPanelProps) {
- const { t } = useTranslation();
const visibleMessages = thread.messages.filter((message) => message.role !== "system");
return (
@@ -60,7 +58,7 @@ export default function QuestionFollowupPanel({
>
- {t("Follow-up Chat")}
+ Follow-up Chat
@@ -95,10 +93,10 @@ export default function QuestionFollowupPanel({
- {t("Ask anything about this question")}
+ Ask anything about this question
- {t("Try: why this answer is correct, where your reasoning went wrong, or ask for a cleaner explanation.")}
+ Try: why this answer is correct, where your reasoning went wrong, or ask for a cleaner explanation.
) : (
@@ -142,7 +140,7 @@ export default function QuestionFollowupPanel({
onChange={(event) => onInputChange(event.target.value)}
rows={2}
disabled={thread.isStreaming}
- placeholder={t("Ask a follow-up question about this item...")}
+ placeholder="Ask a follow-up question about this item..."
className="min-h-[56px] flex-1 resize-none rounded-md border border-[var(--border)]/80 bg-[var(--background)] px-3 py-2 text-[13px] text-[var(--foreground)] outline-none transition-colors placeholder:text-[var(--muted-foreground)] focus:border-[var(--primary)]/35"
/>
)}
- {t("Send")}
+ Send
diff --git a/web/components/quiz/QuizConfigPanel.tsx b/web/components/quiz/QuizConfigPanel.tsx
index 75178af6d..0ab0efc63 100644
--- a/web/components/quiz/QuizConfigPanel.tsx
+++ b/web/components/quiz/QuizConfigPanel.tsx
@@ -2,7 +2,6 @@
import { useRef, useState } from "react";
import { FileText, Upload, X } from "lucide-react";
-import { useTranslation } from "react-i18next";
import type { DeepQuestionFormConfig, DeepQuestionMode } from "@/lib/quiz-types";
import { Field, INPUT_CLS } from "@/components/chat/home/composer-field";
@@ -19,7 +18,6 @@ export default function QuizConfigPanel({
uploadedPdf,
onUploadPdf,
}: QuizConfigPanelProps) {
- const { t } = useTranslation();
const fileRef = useRef
(null);
const [dragOver, setDragOver] = useState(false);
@@ -44,7 +42,7 @@ export default function QuizConfigPanel({
: "text-[var(--muted-foreground)]/50 hover:text-[var(--muted-foreground)]"
}`}
>
- {m === "custom" ? t("Custom") : t("Mimic Paper")}
+ {m === "custom" ? "Custom" : "Mimic Paper"}
))}
@@ -70,10 +68,10 @@ export default function QuizConfigPanel({
onChange={(e) => update("difficulty", e.target.value)}
className={`${INPUT_CLS} w-full`}
>
- {t("Auto")}
- {t("Easy")}
- {t("Medium")}
- {t("Hard")}
+ Auto
+ Easy
+ Medium
+ Hard
@@ -83,10 +81,10 @@ export default function QuizConfigPanel({
onChange={(e) => update("question_type", e.target.value)}
className={`${INPUT_CLS} w-full`}
>
- {t("Auto")}
- {t("Multiple Choice")}
- {t("Written")}
- {t("Coding")}
+ Auto
+ Multiple Choice
+ Written
+ Coding
@@ -95,7 +93,7 @@ export default function QuizConfigPanel({
type="text"
value={value.preference}
onChange={(e) => update("preference", e.target.value)}
- placeholder={t("Extra constraints...")}
+ placeholder="Extra constraints..."
className={`${INPUT_CLS} w-full`}
/>
@@ -111,7 +109,7 @@ export default function QuizConfigPanel({
type="button"
onClick={() => onUploadPdf(null)}
className="ml-auto shrink-0 text-[var(--muted-foreground)]/40 transition-colors hover:text-[var(--foreground)]"
- aria-label={t("Remove PDF")}
+ aria-label="Remove PDF"
>
@@ -139,7 +137,7 @@ export default function QuizConfigPanel({
}}
>
-
{t("Upload PDF")}
+
Upload PDF
@@ -188,4 +186,3 @@ export default function QuizConfigPanel({
);
}
-
diff --git a/web/components/quiz/QuizViewer.tsx b/web/components/quiz/QuizViewer.tsx
index ef3a1c61c..87615a12a 100644
--- a/web/components/quiz/QuizViewer.tsx
+++ b/web/components/quiz/QuizViewer.tsx
@@ -2,7 +2,6 @@
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { Check, ChevronLeft, ChevronRight, Eye, RotateCcw } from "lucide-react";
-import { useTranslation } from "react-i18next";
import MarkdownRenderer from "@/components/common/MarkdownRenderer";
import QuestionFollowupPanel, {
type FollowupThreadState,
@@ -74,9 +73,8 @@ function isAnswerCorrect(question: QuizQuestion, answer: AnswerState): boolean {
export default function QuizViewer({
questions,
sessionId,
- language = "en",
+ language = "zh",
}: QuizViewerProps) {
- const { t } = useTranslation();
const [idx, setIdx] = useState(0);
const [answers, setAnswers] = useState>({});
const [threads, setThreads] = useState>({});
@@ -501,7 +499,7 @@ export default function QuizViewer({
disabled={ans.submitted}
rows={3}
placeholder={
- q.question_type === "coding" ? t("Write your code here...") : t("Type your answer...")
+ q.question_type === "coding" ? "Write your code here..." : "Type your answer..."
}
className={`w-full resize-none rounded-lg border px-3 py-2 text-[13px] outline-none transition-colors placeholder:text-[var(--muted-foreground)] ${
ans.submitted
@@ -520,7 +518,7 @@ export default function QuizViewer({
className="inline-flex items-center gap-1.5 rounded-lg bg-[var(--primary)] px-3 py-1.5 text-[12px] font-medium text-white transition-opacity disabled:opacity-30"
>
- {t("Check Answer")}
+ Check Answer
) : (
<>
@@ -532,7 +530,7 @@ export default function QuizViewer({
: "bg-red-100 text-red-700 dark:bg-red-950/30 dark:text-red-400"
}`}
>
- {isCorrect ? t("Correct") : t("Incorrect")}
+ {isCorrect ? "Correct" : "Incorrect"}
)}
- {t("Retry")}
+ Retry
>
)}
@@ -551,7 +549,7 @@ export default function QuizViewer({
{!isChoice && q.correct_answer && (
- {t("Reference Answer")}
+ Reference Answer
@@ -561,7 +559,7 @@ export default function QuizViewer({
{q.explanation && (
- {t("Explanation")}
+ Explanation
@@ -579,7 +577,7 @@ export default function QuizViewer({
className="inline-flex items-center gap-1 rounded-lg px-2 py-1 text-[12px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)] hover:text-[var(--foreground)] disabled:opacity-30"
>
- {t("Previous")}
+ Previous
@@ -594,7 +592,7 @@ export default function QuizViewer({
disabled={idx === total - 1}
className="inline-flex items-center gap-1 rounded-lg px-2 py-1 text-[12px] font-medium text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)] hover:text-[var(--foreground)] disabled:opacity-30"
>
- {t("Next")}
+ Next
diff --git a/web/components/research/ResearchConfigPanel.tsx b/web/components/research/ResearchConfigPanel.tsx
index 2fbca3ba9..004a202a1 100644
--- a/web/components/research/ResearchConfigPanel.tsx
+++ b/web/components/research/ResearchConfigPanel.tsx
@@ -1,7 +1,6 @@
"use client";
import { ChevronDown } from "lucide-react";
-import { useTranslation } from "react-i18next";
import type {
DeepResearchFormConfig,
ResearchDepth,
@@ -71,7 +70,6 @@ export default function ResearchConfigPanel({
onChange,
onToggleCollapsed,
}: ResearchConfigPanelProps) {
- const { t } = useTranslation();
const update =
(
key: K,
next: DeepResearchFormConfig[K],
@@ -90,7 +88,7 @@ export default function ResearchConfigPanel({
size={10}
className={`shrink-0 text-[var(--muted-foreground)]/40 transition-transform ${collapsed ? "-rotate-90" : ""}`}
/>
- {t("Settings")}
+ Settings
{collapsed && summary !== "Incomplete settings" && (
— {summary}
)}
@@ -105,7 +103,7 @@ export default function ResearchConfigPanel({
onChange={(e) => update("mode", e.target.value as ResearchMode)}
className={`${INPUT_CLS} w-full`}
>
- {t("Select...")}
+ Select...
{MODE_OPTIONS.map((option) => (
{option.label}
@@ -119,7 +117,7 @@ export default function ResearchConfigPanel({
onChange={(e) => update("depth", e.target.value as ResearchDepth)}
className={`${INPUT_CLS} w-full`}
>
- {t("Select...")}
+ Select...
{DEPTH_OPTIONS.map((option) => (
{option.label}
diff --git a/web/components/research/ResearchOutlineEditor.tsx b/web/components/research/ResearchOutlineEditor.tsx
index 69b549654..d1e24cbee 100644
--- a/web/components/research/ResearchOutlineEditor.tsx
+++ b/web/components/research/ResearchOutlineEditor.tsx
@@ -2,7 +2,6 @@
import { useCallback, useState } from "react";
import { Plus, Play, Trash2, Loader2, CheckCircle2 } from "lucide-react";
-import { useTranslation } from "react-i18next";
import type { OutlineItem } from "@/lib/research-types";
type OutlineStatus = "editing" | "researching" | "done";
@@ -20,7 +19,6 @@ export default function ResearchOutlineEditor({
onConfirm,
status: externalStatus,
}: ResearchOutlineEditorProps) {
- const { t } = useTranslation();
const [items, setItems] = useState(initialOutline);
const [localConfirmed, setLocalConfirmed] = useState(false);
@@ -60,7 +58,7 @@ export default function ResearchOutlineEditor({
- {t("Research Outline")}
+ Research Outline
{statusLabel && (
@@ -107,13 +105,13 @@ export default function ResearchOutlineEditor({
type="text"
value={item.title ?? ""}
onChange={(e) => updateItem(index, "title", e.target.value)}
- placeholder={t("Sub-topic title...")}
+ placeholder="Sub-topic title..."
className="w-full bg-transparent text-[12px] font-medium text-[var(--foreground)] outline-none placeholder:text-[var(--muted-foreground)]/30"
/>
)}
diff --git a/web/components/sidebar/SidebarShell.tsx b/web/components/sidebar/SidebarShell.tsx
index 1712981ee..8f3d4531e 100644
--- a/web/components/sidebar/SidebarShell.tsx
+++ b/web/components/sidebar/SidebarShell.tsx
@@ -4,20 +4,22 @@ import Image from "next/image";
import Link from "next/link";
import { usePathname, useRouter } from "next/navigation";
import { useState, type ReactNode } from "react";
+import { useTranslation } from "react-i18next";
import {
BookOpen,
Bot,
Brain,
GraduationCap,
+ ListTodo,
MessageSquare,
PanelLeftClose,
PanelLeftOpen,
PenLine,
Plus,
+ Search,
Settings,
type LucideIcon,
} from "lucide-react";
-import { useTranslation } from "react-i18next";
import SessionList from "@/components/SessionList";
import { TutorBotRecent } from "@/components/sidebar/TutorBotRecent";
import type { SessionSummary } from "@/lib/session-api";
@@ -33,6 +35,8 @@ const PRIMARY_NAV: NavEntry[] = [
{ href: "/agents", label: "TutorBot", icon: Bot },
{ href: "/co-writer", label: "Co-Writer", icon: PenLine },
{ href: "/guide", label: "Guided Learning", icon: GraduationCap },
+ { href: "/goal", label: "Goal Mode", icon: ListTodo },
+ { href: "/exam-radar", label: "Exam Radar", icon: Search },
{ href: "/knowledge", label: "Knowledge", icon: BookOpen },
{ href: "/memory", label: "Memory", icon: Brain },
];
@@ -65,9 +69,9 @@ export function SidebarShell({
onDeleteSession,
footerSlot,
}: SidebarShellProps) {
+ const { t } = useTranslation();
const pathname = usePathname();
const router = useRouter();
- const { t } = useTranslation();
const [collapsed, setCollapsed] = useState(false);
const handleNewChat = () => {
@@ -93,7 +97,7 @@ export function SidebarShell({
@@ -150,9 +154,9 @@ export function SidebarShell({
{/* Header: logo + collapse toggle */}
-
+
- DeepTutor
+ {t("DeepTutor")}
- {t("New Chat")}
+ {t("New chat")}
{PRIMARY_NAV.map((item) => {
diff --git a/web/components/sidebar/UtilitySidebar.tsx b/web/components/sidebar/UtilitySidebar.tsx
index b5cc82588..18beb7065 100644
--- a/web/components/sidebar/UtilitySidebar.tsx
+++ b/web/components/sidebar/UtilitySidebar.tsx
@@ -2,7 +2,6 @@
import { useCallback, useEffect, useRef, useState } from "react";
import { useRouter } from "next/navigation";
-import { useTranslation } from "react-i18next";
import { SidebarShell } from "@/components/sidebar/SidebarShell";
import { useAppShell } from "@/context/AppShellContext";
import {
@@ -13,7 +12,6 @@ import {
} from "@/lib/session-api";
export default function UtilitySidebar() {
- const { t } = useTranslation();
const router = useRouter();
const { activeSessionId, setActiveSessionId } = useAppShell();
const [sessions, setSessions] = useState
([]);
@@ -64,7 +62,7 @@ export default function UtilitySidebar() {
const handleDeleteSession = useCallback(
async (sessionId: string) => {
- if (!window.confirm(t("Delete this chat history?"))) return;
+ if (!window.confirm("Delete this chat session?")) return;
await deleteSession(sessionId);
setSessions((prev) => prev.filter((session) => session.session_id !== sessionId));
if (activeSessionId === sessionId) {
diff --git a/web/components/sidebar/WorkspaceSidebar.tsx b/web/components/sidebar/WorkspaceSidebar.tsx
index 0a3a5b395..434089fff 100644
--- a/web/components/sidebar/WorkspaceSidebar.tsx
+++ b/web/components/sidebar/WorkspaceSidebar.tsx
@@ -2,7 +2,6 @@
import { useCallback, useEffect, useRef, useState } from "react";
import { usePathname, useRouter } from "next/navigation";
-import { useTranslation } from "react-i18next";
import { SidebarShell } from "@/components/sidebar/SidebarShell";
import { useUnifiedChat } from "@/context/UnifiedChatContext";
import {
@@ -13,7 +12,6 @@ import {
} from "@/lib/session-api";
export default function WorkspaceSidebar() {
- const { t } = useTranslation();
const pathname = usePathname();
const router = useRouter();
const { newSession, loadSession, selectedSessionId, sessionStatuses, sidebarRefreshToken } =
@@ -88,7 +86,7 @@ export default function WorkspaceSidebar() {
const handleDeleteSession = useCallback(
async (sessionId: string) => {
- if (!window.confirm(t("Delete this chat history?"))) return;
+ if (!window.confirm("Delete this chat session?")) return;
await deleteSession(sessionId);
setSessions((prev) => prev.filter((session) => session.session_id !== sessionId));
if (selectedSessionId === sessionId) {
diff --git a/web/components/visualize/VisualizationViewer.tsx b/web/components/visualize/VisualizationViewer.tsx
deleted file mode 100644
index 987e68f5b..000000000
--- a/web/components/visualize/VisualizationViewer.tsx
+++ /dev/null
@@ -1,180 +0,0 @@
-"use client";
-
-import { useEffect, useMemo, useRef, useState } from "react";
-import { Code2, Copy, Check } from "lucide-react";
-import { useTranslation } from "react-i18next";
-import type { VisualizeResult } from "@/lib/visualize-types";
-
-function ChartJsRenderer({ config }: { config: string }) {
- const canvasRef = useRef(null);
- const chartRef = useRef(null);
- const [error, setError] = useState(null);
-
- useEffect(() => {
- let cancelled = false;
-
- async function render() {
- if (!canvasRef.current) return;
-
- try {
- const ChartModule = await import("chart.js/auto");
- const Chart = ChartModule.default;
-
- if (chartRef.current) {
- (chartRef.current as InstanceType).destroy();
- chartRef.current = null;
- }
-
- // eslint-disable-next-line no-new-func
- const parsedConfig = new Function(`"use strict"; return (${config});`)();
-
- if (cancelled) return;
-
- chartRef.current = new Chart(canvasRef.current, parsedConfig);
- setError(null);
- } catch (err) {
- if (!cancelled) {
- setError(err instanceof Error ? err.message : "Failed to render chart");
- }
- }
- }
-
- void render();
-
- return () => {
- cancelled = true;
- if (chartRef.current) {
- (chartRef.current as { destroy: () => void }).destroy();
- chartRef.current = null;
- }
- };
- }, [config]);
-
- if (error) {
- return (
-
-
- Chart rendering error
-
-
{error}
-
- );
- }
-
- return (
-
-
-
- );
-}
-
-function SvgRenderer({ svg }: { svg: string }) {
- const containerRef = useRef(null);
- const [error, setError] = useState(null);
-
- const sanitizedSvg = useMemo(() => {
- const trimmed = svg.trim();
- if (!trimmed.startsWith("
-
- SVG rendering error
-
- {error}
-
- );
- }
-
- return (
-
- );
-}
-
-export default function VisualizationViewer({
- result,
-}: {
- result: VisualizeResult;
-}) {
- const { t } = useTranslation();
- const [showCode, setShowCode] = useState(false);
- const [copied, setCopied] = useState(false);
-
- const handleCopy = async () => {
- try {
- await navigator.clipboard.writeText(result.code.content);
- setCopied(true);
- setTimeout(() => setCopied(false), 2000);
- } catch {
- /* clipboard API may be unavailable */
- }
- };
-
- return (
-
- {/* Visualization area */}
-
- {result.render_type === "svg" ? (
-
- ) : (
-
- )}
-
-
- {/* Toolbar */}
-
- setShowCode((prev) => !prev)}
- className="inline-flex items-center gap-1.5 rounded-md border border-[var(--border)] bg-[var(--background)] px-2.5 py-1.5 text-[11px] font-medium text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]"
- >
-
- {showCode ? t("Hide code") : t("Show code")}
-
-
-
- {copied ? : }
- {copied ? t("Copied") : t("Copy code")}
-
-
-
- {result.render_type === "svg" ? "SVG" : `Chart.js · ${result.analysis.chart_type || "chart"}`}
-
-
-
- {/* Code panel */}
- {showCode && (
-
-
- {result.code.language}
-
-
- {result.code.content}
-
-
- )}
-
- {/* Review notes */}
- {result.review.changed && result.review.review_notes && (
-
- {t("Review")}: {result.review.review_notes}
-
- )}
-
- );
-}
diff --git a/web/components/visualize/VisualizeConfigPanel.tsx b/web/components/visualize/VisualizeConfigPanel.tsx
deleted file mode 100644
index 5de7baa10..000000000
--- a/web/components/visualize/VisualizeConfigPanel.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-"use client";
-
-import { useTranslation } from "react-i18next";
-import type { VisualizeFormConfig } from "@/lib/visualize-types";
-import { Field, INPUT_CLS } from "@/components/chat/home/composer-field";
-
-interface VisualizeConfigPanelProps {
- value: VisualizeFormConfig;
- onChange: (next: VisualizeFormConfig) => void;
-}
-
-export default function VisualizeConfigPanel({
- value,
- onChange,
-}: VisualizeConfigPanelProps) {
- const { t } = useTranslation();
-
- return (
-
-
-
- onChange({ ...value, render_mode: e.target.value as VisualizeFormConfig["render_mode"] })
- }
- className={`${INPUT_CLS} w-full`}
- >
- {t("Auto")}
- {t("Chart.js")}
- {t("SVG")}
-
-
-
- );
-}
diff --git a/web/context/AppShellContext.tsx b/web/context/AppShellContext.tsx
index f40fcd635..494d9cea7 100644
--- a/web/context/AppShellContext.tsx
+++ b/web/context/AppShellContext.tsx
@@ -97,16 +97,12 @@ export function AppShellProvider({
const [theme, setThemeState] = useState
(() => {
return getStoredTheme() ?? getSystemTheme();
});
- // Always start with "en" to match SSR; hydrate from localStorage after mount
+ // Keep first paint deterministic between SSR and client hydration.
const [language, setLanguageState] = useState("en");
const [activeSessionId, setActiveSessionIdState] = useState(() =>
readStoredActiveSessionId(),
);
- useEffect(() => {
- setLanguageState(readStoredLanguage());
- }, []);
-
useEffect(() => {
return subscribeToThemeChanges((nextTheme) => {
setThemeState(nextTheme);
diff --git a/web/context/UnifiedChatContext.tsx b/web/context/UnifiedChatContext.tsx
index 12bdd73aa..af1f0a3bf 100644
--- a/web/context/UnifiedChatContext.tsx
+++ b/web/context/UnifiedChatContext.tsx
@@ -151,7 +151,7 @@ function createSessionEntry(key: string, sessionId: string | null = null): Sessi
messages: [],
isStreaming: false,
currentStage: "",
- language: typeof window === "undefined" ? "en" : readStoredLanguage(),
+ language: typeof window === "undefined" ? "zh" : readStoredLanguage(),
status: "idle",
activeTurnId: null,
lastSeq: 0,
@@ -351,19 +351,15 @@ function reducer(state: ProviderState, action: Action): ProviderState {
},
};
}
- case "NEW_SESSION": {
- const MAX_CACHED_SESSIONS = 20;
- let nextSessions = { ...state.sessions, [action.key]: createSessionEntry(action.key) };
- const keys = Object.keys(nextSessions);
- if (keys.length > MAX_CACHED_SESSIONS) {
- const evictable = keys
- .filter((k) => k !== action.key && nextSessions[k].status !== "running")
- .sort((a, b) => nextSessions[a].updatedAt - nextSessions[b].updatedAt);
- const toRemove = evictable.slice(0, keys.length - MAX_CACHED_SESSIONS);
- for (const k of toRemove) delete nextSessions[k];
- }
- return { ...state, selectedKey: action.key, sessions: nextSessions };
- }
+ case "NEW_SESSION":
+ return {
+ ...state,
+ selectedKey: action.key,
+ sessions: {
+ ...state.sessions,
+ [action.key]: createSessionEntry(action.key),
+ },
+ };
default:
return state;
}
@@ -413,22 +409,11 @@ export function UnifiedChatProvider({ children }: { children: React.ReactNode })
>
>(new Map());
const draftCounterRef = useRef(0);
- const retryTimersRef = useRef>>(new Set());
useEffect(() => {
stateRef.current = state;
}, [state]);
- useEffect(
- () => () => {
- runnersRef.current.forEach(({ client }) => client.disconnect());
- runnersRef.current.clear();
- retryTimersRef.current.forEach((id) => clearTimeout(id));
- retryTimersRef.current.clear();
- },
- [],
- );
-
const makeDraftKey = useCallback(() => {
draftCounterRef.current += 1;
return `draft_${Date.now()}_${draftCounterRef.current}`;
@@ -551,11 +536,7 @@ export function UnifiedChatProvider({ children }: { children: React.ReactNode })
dispatch({ type: "STREAM_END", key, status: "failed" });
return;
}
- const timerId = setTimeout(() => {
- retryTimersRef.current.delete(timerId);
- dispatchToRunner(key, msg, attempt + 1);
- }, 200);
- retryTimersRef.current.add(timerId);
+ window.setTimeout(() => dispatchToRunner(key, msg, attempt + 1), 200);
return;
}
runner.client.send(msg);
@@ -579,7 +560,7 @@ export function UnifiedChatProvider({ children }: { children: React.ReactNode })
knowledgeBases: Array.isArray(session.preferences?.knowledge_bases)
? session.preferences.knowledge_bases
: [],
- language: session.preferences?.language || "en",
+ language: session.preferences?.language || "zh",
});
if (activeTurn?.turn_id || activeTurn?.id) {
const key = session.session_id || session.id;
diff --git a/web/hooks/useChatAutoScroll.ts b/web/hooks/useChatAutoScroll.ts
index 63e548453..e2193e9e5 100644
--- a/web/hooks/useChatAutoScroll.ts
+++ b/web/hooks/useChatAutoScroll.ts
@@ -51,12 +51,7 @@ export function useChatAutoScroll({
lastScrollTimeRef.current = performance.now();
}
}, THROTTLE_MS - elapsed);
- return () => {
- if (pendingRafRef.current) {
- clearTimeout(pendingRafRef.current);
- pendingRafRef.current = 0;
- }
- };
+ return;
}
const raf = window.requestAnimationFrame(() => {
diff --git a/web/lib/goal-api.ts b/web/lib/goal-api.ts
new file mode 100644
index 000000000..3010a6736
--- /dev/null
+++ b/web/lib/goal-api.ts
@@ -0,0 +1,198 @@
+"use client";
+
+import { apiUrl } from "@/lib/api";
+
+export interface GoalConfigPayload {
+ goal_level: "foundation" | "competent" | "advanced";
+ remaining_days: number;
+ daily_minutes: number;
+ days_per_week: number;
+ goal_statement?: string;
+ preferences: {
+ strategy: "depth_first" | "breadth_first" | "high_yield_first";
+ include_practice: boolean;
+ practice_ratio: number;
+ review_ratio: number;
+ language: string;
+ };
+}
+
+type GoalApiErrorPayload = {
+ ok?: boolean;
+ error?: {
+ code?: string;
+ message?: string;
+ detail?: unknown;
+ };
+};
+
+async function parseGoalApiError(response: Response, fallback: string): Promise {
+ try {
+ const payload = (await response.json()) as GoalApiErrorPayload;
+ const detail = payload?.error;
+ if (detail?.code || detail?.message) {
+ const prefix = detail.code ? `[${detail.code}] ` : "";
+ return new Error(`${prefix}${detail.message || fallback}`);
+ }
+ } catch {
+ // Ignore JSON parsing failures and use fallback message.
+ }
+ return new Error(fallback);
+}
+
+export async function createGoalSession(kbName: string, goalConfig: GoalConfigPayload) {
+ const response = await fetch(apiUrl("/api/v1/goal/create_session"), {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ kb_name: kbName, goal_config: goalConfig }),
+ });
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to create goal session");
+ }
+ return response.json();
+}
+
+export async function runGoalPlan(sessionId: string) {
+ const response = await fetch(apiUrl(`/api/v1/goal/session/${sessionId}/run_plan`), {
+ method: "POST",
+ });
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to run plan");
+ }
+ return response.json();
+}
+
+export async function getGoalPlan(sessionId: string) {
+ const response = await fetch(apiUrl(`/api/v1/goal/session/${sessionId}/plan`));
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to load plan");
+ }
+ return response.json();
+}
+
+export async function getGoalDayPlanDetail(sessionId: string, dayIndex: number) {
+ const response = await fetch(apiUrl(`/api/v1/goal/session/${sessionId}/day/${dayIndex}`));
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to load day plan detail");
+ }
+ return response.json();
+}
+
+export async function submitGoalFeedback(
+ sessionId: string,
+ payload: {
+ feedback_id: string;
+ task_id: string;
+ completion: "done" | "partial" | "missed" | "skipped";
+ actual_minutes?: number;
+ quiz?: { score: number; total: number } | null;
+ reflection?: string;
+ },
+) {
+ const response = await fetch(apiUrl(`/api/v1/goal/session/${sessionId}/feedback`), {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(payload),
+ });
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to submit feedback");
+ }
+ return response.json();
+}
+
+export async function replanGoalSession(sessionId: string, reason = "manual_feedback") {
+ const response = await fetch(apiUrl(`/api/v1/goal/session/${sessionId}/replan`), {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ reason, strategy: "rule_based" }),
+ });
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to replan");
+ }
+ return response.json();
+}
+
+export async function generateGoalPractice(
+ sessionId: string,
+ taskId: string,
+ payload: {
+ count: number;
+ difficulty: string;
+ question_type: string;
+ },
+) {
+ const response = await fetch(
+ apiUrl(`/api/v1/goal/session/${sessionId}/task/${taskId}/generate_practice`),
+ {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(payload),
+ },
+ );
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to generate practice");
+ }
+ return response.json();
+}
+
+export async function generateGoalDayInteractivePage(
+ sessionId: string,
+ dayIndex: number,
+ payload: { force?: boolean } = {},
+) {
+ const response = await fetch(
+ apiUrl(`/api/v1/goal/session/${sessionId}/day/${dayIndex}/interactive_page`),
+ {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ force: Boolean(payload.force) }),
+ },
+ );
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to generate interactive page");
+ }
+ return response.json();
+}
+
+export async function askGoalDayInteractiveAssistant(
+ sessionId: string,
+ dayIndex: number,
+ payload: { question: string },
+) {
+ const response = await fetch(
+ apiUrl(`/api/v1/goal/session/${sessionId}/day/${dayIndex}/interactive_chat`),
+ {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(payload),
+ },
+ );
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to ask interactive assistant");
+ }
+ return response.json();
+}
+
+export async function analyzeGoalExamMaterials(
+ sessionId: string,
+ payload: {
+ pastedText?: string;
+ files?: File[];
+ },
+) {
+ const form = new FormData();
+ if (payload.pastedText) {
+ form.append("pasted_text", payload.pastedText);
+ }
+ for (const file of payload.files || []) {
+ form.append("files", file);
+ }
+ const response = await fetch(apiUrl(`/api/v1/goal/session/${sessionId}/exam_analysis`), {
+ method: "POST",
+ body: form,
+ });
+ if (!response.ok) {
+ throw await parseGoalApiError(response, "Failed to analyze exam materials");
+ }
+ return response.json();
+}
diff --git a/web/lib/visualize-types.ts b/web/lib/visualize-types.ts
deleted file mode 100644
index ba6a3b411..000000000
--- a/web/lib/visualize-types.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-export type VisualizeRenderType = "svg" | "chartjs";
-export type VisualizeRenderMode = "auto" | "svg" | "chartjs";
-
-export interface VisualizeFormConfig {
- render_mode: VisualizeRenderMode;
-}
-
-export const DEFAULT_VISUALIZE_CONFIG: VisualizeFormConfig = {
- render_mode: "auto",
-};
-
-export function buildVisualizeWSConfig(
- cfg: VisualizeFormConfig,
-): Record {
- return { render_mode: cfg.render_mode };
-}
-
-export interface VisualizeResult {
- response: string;
- render_type: VisualizeRenderType;
- code: {
- language: string;
- content: string;
- };
- analysis: {
- render_type: string;
- description: string;
- data_description: string;
- chart_type: string;
- visual_elements: string[];
- rationale: string;
- };
- review: {
- optimized_code: string;
- changed: boolean;
- review_notes: string;
- };
-}
-
-export function extractVisualizeResult(
- resultMetadata: Record | undefined,
-): VisualizeResult | null {
- if (!resultMetadata) return null;
-
- const renderType = resultMetadata.render_type;
- if (renderType !== "svg" && renderType !== "chartjs") return null;
-
- const codeRaw =
- resultMetadata.code && typeof resultMetadata.code === "object"
- ? (resultMetadata.code as Record)
- : {};
-
- if (!codeRaw.content) return null;
-
- return {
- response: String(resultMetadata.response ?? ""),
- render_type: renderType,
- code: {
- language: String(codeRaw.language ?? ""),
- content: String(codeRaw.content ?? ""),
- },
- analysis:
- resultMetadata.analysis && typeof resultMetadata.analysis === "object"
- ? (resultMetadata.analysis as VisualizeResult["analysis"])
- : {
- render_type: renderType,
- description: "",
- data_description: "",
- chart_type: "",
- visual_elements: [],
- rationale: "",
- },
- review:
- resultMetadata.review && typeof resultMetadata.review === "object"
- ? (resultMetadata.review as VisualizeResult["review"])
- : { optimized_code: "", changed: false, review_notes: "" },
- };
-}
diff --git a/web/locales/en/app.json b/web/locales/en/app.json
index f37a5e90b..0492121de 100644
--- a/web/locales/en/app.json
+++ b/web/locales/en/app.json
@@ -1,861 +1,919 @@
{
- "language.english": "English",
- "language.chinese": "中文",
- "Start": "Start",
- "Learn": "Learn",
- "Research": "Research",
- "Dashboard": "Dashboard",
- "Question Generator": "Question Generator",
- "Custom": "Custom",
- "Mimic Exam": "Mimic Exam",
- "Generating": "Generating",
- "questions": "questions",
- "extended": "extended",
- "Custom Mode": "Custom Mode",
- "Mimic Exam Paper Mode": "Mimic Exam Paper Mode",
- "Generate questions based on knowledge base content": "Generate questions based on knowledge base content",
- "Generate similar questions based on an exam paper": "Generate similar questions based on an exam paper",
- "Knowledge Point / Topic": "Knowledge Point / Topic",
- "e.g. Gradient Descent Optimization": "e.g. Gradient Descent Optimization",
- "Count": "Count",
- "Generate Questions": "Generate Questions",
- "Questions": "Questions",
- "Type your answer here...": "Type your answer here...",
- "Correct Answer": "Correct Answer",
- "Explanation": "Explanation",
- "Relevance Analysis": "Relevance Analysis",
- "round": "round",
- "s": "s",
- "Submit Answer": "Submit Answer",
- "Submitted": "Submitted",
- "Generating questions...": "Generating questions...",
- "View progress in the Logs panel": "View progress in the Logs panel",
- "Select a question to view details": "Select a question to view details",
- "Brainstorm": "Brainstorm",
- "Code": "Code",
- "Reason": "Reason",
- "Arxiv Search": "Arxiv Search",
- "Papers": "Papers",
- "Deep Solve": "Deep Solve",
- "Quiz Generation": "Quiz Generation",
- "Math Animator": "Math Animator",
- "Flexible conversation with any tool": "Flexible conversation with any tool",
- "Multi-step reasoning & problem solving": "Multi-step reasoning & problem solving",
- "Auto-validated question generation": "Auto-validated question generation",
- "Comprehensive multi-agent research": "Comprehensive multi-agent research",
- "Generate math videos or storyboard images": "Generate math videos or storyboard images",
- "No KB": "No KB",
- "Enable Knowledge Base source first": "Enable Knowledge Base source first",
- "Tools": "Tools",
- "Send": "Send",
- "Drop images here": "Drop images here",
- "Attachment preview": "Attachment preview",
- "Describe the math animation or storyboard you want...": "Describe the math animation or storyboard you want...",
- "Smart Solver": "Smart Solver",
- "Vision Solver": "Vision Solver",
- "Upload a Math Problem Image": "Upload a Math Problem Image",
- "Describe the problem or ask a question...": "Describe the problem or ask a question...",
- "Figure Reconstruction": "Figure Reconstruction",
- "Verified by DeepTutor Vision Engine": "Verified by DeepTutor Vision Engine",
+ ". Documents in the folder will be processed and added to this knowledge base.": ". Documents in the folder will be processed and added to this knowledge base.",
+ "(History)": "(History)",
+ "(optional)": "(optional)",
+ "{{count}} min": "{{count}} min",
+ "{{count}} tasks": "{{count}} tasks",
+ "{{count}} tools": "{{count}} tools",
+ "{{count}} 分钟": "{{count}} min",
+ "{{count}} 天": "{{count}} days",
+ "{{count}}%": "{{count}}%",
+ "{{file}} is empty": "{{file}} is empty",
+ "{n} file selected": "{n} file selected",
+ "{n} files selected": "{n} files selected",
+ "{n} notebook selected": "{n} notebook selected",
+ "{n} notebooks selected": "{n} notebooks selected",
+ "✨ Your description here": "✨ Your description here",
+ "💡 Tip:": "💡 Tip:",
+ "📄 Supported files: PDF, DOCX, TXT, MD": "📄 Supported files: PDF, DOCX, TXT, MD",
+ "7天内完成微积分核心知识复习,并建立可执行的刷题节奏": "Complete core calculus review in 7 days and establish an executable practice rhythm.",
+ "A brief description of what this bot does": "A brief description of what this bot does",
+ "Acceptance Criteria": "Acceptance Criteria",
+ "Active": "Active",
+ "Active LLM Model": "Active LLM Model",
+ "Active Models": "Active Models",
+ "Activity": "Activity",
+ "Activity Details": "Activity Details",
+ "Activity Log": "Activity Log",
+ "Add Configuration": "Add Configuration",
+ "Add New Configuration": "Add New Configuration",
+ "Add records from Solver, Question, Research, or Co-Writer": "Add records from Solver, Question, Research, or Co-Writer",
+ "Add to Notebook": "Add to Notebook",
+ "Added {{count}}": "Added {{count}}",
+ "Added Successfully!": "Added Successfully!",
+ "Added to notebook.": "Added to notebook.",
+ "Advanced": "Advanced",
+ "After generation, 3-5 key points will be listed here.": "After generation, 3-5 key points will be listed here.",
+ "After generation, the narration script will appear here.": "After generation, the narration script will appear here.",
+ "After generation, you can play the podcast audio here.": "After generation, you can play the podcast audio here.",
+ "AI Edit Assistant": "AI Edit Assistant",
+ "AI Mark": "AI Mark",
+ "All": "All",
+ "All Activities": "All Activities",
"Analysis Details": "Analysis Details",
- "Detected Elements": "Detected Elements",
- "Elements": "Elements",
- "Geometric Analysis": "Geometric Analysis",
- "Constraints": "Constraints",
- "Relations": "Relations",
- "Image is reference for problem": "Image is reference for problem",
- "Commands generated": "Commands generated",
- "Validation": "Validation",
- "Issues found": "Issues found",
- "Final commands": "Final commands",
- "Upload an image to see analysis details": "Upload an image to see analysis details",
"Analyzing Image": "Analyzing Image",
- "Extracting geometric elements and generating visualization...": "Extracting geometric elements and generating visualization...",
- "Element Detection": "Element Detection",
- "Command Generation": "Command Generation",
- "Found": "Found",
- "elements": "elements",
- "constraints": "constraints",
- "relations": "relations",
- "commands": "commands",
- "No issues found": "No issues found",
- "issues fixed": "issues fixed",
- "Refresh": "Refresh",
- "Maximize": "Maximize",
- "Minimize": "Minimize",
- "Please select an image file": "Please select an image file",
- "Image size must be less than 10MB": "Image size must be less than 10MB",
- "Enter image URL": "Enter image URL",
- "Load": "Load",
- "Failed to load image from URL": "Failed to load image from URL",
- "Upload image (drag, paste, or click)": "Upload image (drag, paste, or click)",
- "IdeaGen": "IdeaGen",
- "Deep Research": "Deep Research",
- "Welcome to Deep Research Lab. \n\nPlease configure your settings above, then enter a research topic below.": "Welcome to Deep Research Lab. \n\nPlease configure your settings above, then enter a research topic below.",
- "PDF Export failed": "PDF Export failed",
- "Plan Mode": "Plan Mode",
- "Research Tools": "Research Tools",
- "Topic Optimization": "Topic Optimization",
- "Topic Assistant": "Topic Assistant",
- "Start Research": "Start Research",
- "Research in progress...": "Research in progress...",
- "Co-Writer": "Co-Writer",
- "Intelligent markdown editor with AI-powered writing assistance.": "Intelligent markdown editor with AI-powered writing assistance.",
- "Guided Learning": "Guided Learning",
- "TutorBot": "TutorBot",
- "Knowledge": "Knowledge",
- "Memory": "Memory",
- "Knowledge Bases": "Knowledge Bases",
- "Refresh knowledge bases": "Refresh knowledge bases",
- "New Knowledge Base": "New Knowledge Base",
- "Set as Default": "Set as Default",
- "Upload Documents": "Upload Documents",
- "Delete Knowledge Base": "Delete Knowledge Base",
- "Upload failed": "Upload failed",
- "No knowledge bases found. Create one to get started.": "No knowledge bases found. Create one to get started.",
- "Create Knowledge Base": "Create Knowledge Base",
- "Knowledge Base Name": "Knowledge Base Name",
- "Notebooks": "Notebooks",
- "Settings": "Settings",
- "Loading": "Loading...",
- "Save": "Save",
- "Cancel": "Cancel",
- "Error": "Error",
- "Success": "Success",
- "Unknown error": "Unknown error",
- "tokens": "tokens",
- "View All": "View All",
- "Create": "Create",
- "Overview": "Overview",
- "LLM": "LLM",
- "Embedding": "Embedding",
- "TTS": "TTS",
- "Search": "Search",
- "Light": "Light",
- "Dark": "Dark",
- "Configure your AI services and preferences": "Configure your AI services and preferences",
- "Local Data": "Local Data",
- "Clear Cache": "Clear Cache",
- "Confirm Clear": "Confirm Clear",
- "This will clear all locally cached data": "This will clear all locally cached data",
- "Clear All": "Clear All",
- "Including: chat history, solver history, question results, research reports, guided learning progress, Co-Writer content, etc. This action cannot be undone.": "Including: chat history, solver history, question results, research reports, guided learning progress, Co-Writer content, etc. This action cannot be undone.",
- "Model": "Model",
- "Provider": "Provider",
- "Port Configuration": "Port Configuration",
- "Backend Port": "Backend Port",
- "Frontend Port": "Frontend Port",
- "LLM Configuration": "LLM Configuration",
- "Configure language model providers": "Configure language model providers",
- "Embedding Configuration": "Embedding Configuration",
- "Configure embedding model providers": "Configure embedding model providers",
- "TTS Configuration": "TTS Configuration",
- "Configure text-to-speech providers": "Configure text-to-speech providers",
- "Search Configuration": "Search Configuration",
- "Configure web search providers": "Configure web search providers",
- "Add Configuration": "Add Configuration",
- "Default": "Default",
- "Active": "Active",
- "Set Active": "Set Active",
- "Test": "Test",
- "Edit": "Edit",
- "Delete": "Delete",
- "No configurations found. Add one to get started.": "No configurations found. Add one to get started.",
- "Are you sure you want to delete this configuration?": "Are you sure you want to delete this configuration?",
- "Connection test failed": "Connection test failed",
- "Name": "Name",
- "My Configuration": "My Configuration",
- "local": "local",
- "Base URL": "Base URL",
- "Use .env": "Use .env",
+ "Answer:": "Answer:",
"API Key": "API Key",
- "optional for local providers": "optional for local providers",
- "Not required": "Not required",
- "Base URL is required for testing": "Base URL is required for testing",
"API Key is required for cloud providers": "API Key is required for cloud providers",
- "Model name is required": "Model name is required",
- "Dimensions is required for embedding models": "Dimensions is required for embedding models",
- "Connection successful": "Connection successful",
- "Connection failed": "Connection failed",
- "Connection test failed - network error": "Connection test failed - network error",
- "Failed to update configuration": "Failed to update configuration",
- "Failed to add configuration": "Failed to add configuration",
- "Edit Configuration": "Edit Configuration",
- "Add New Configuration": "Add New Configuration",
- "Test Connection": "Test Connection",
- "Save Changes": "Save Changes",
- "System Settings": "System Settings",
- "Manage system configuration and preferences": "Manage system configuration and preferences",
- "General Settings": "General Settings",
- "Environment Variables": "Environment Variables",
- "Interface Preferences": "Interface Preferences",
- "Theme": "Theme",
- "Light Mode": "Light Mode",
- "Dark Mode": "Dark Mode",
- "Language": "Language",
- "English": "English",
- "Chinese": "Chinese",
- "System Configuration": "System Configuration",
- "System Language": "System Language",
- "Default language for system operations": "Default language for system operations",
- "Web Search": "Web Search",
- "Max Results": "Max Results",
- "Knowledge Base": "Knowledge Base",
- "Default KB": "Default KB",
- "Base Directory": "Base Directory",
- "Text-to-Speech": "Text-to-Speech",
- "Default Voice": "Default Voice",
- "Default Language": "Default Language",
- "Active Models": "Active Models",
- "Status": "Status",
- "Active LLM Model": "Active LLM Model",
- "Not configured": "Not configured",
- "Configure in Environment Variables tab": "Configure in Environment Variables tab",
- "Save All Changes": "Save All Changes",
- "Configuration Saved": "Configuration Saved",
- "Configuration Status": "Configuration Status",
- "Refresh Status": "Refresh Status",
- "Runtime Configuration": "Runtime Configuration",
- "Environment variables are loaded from": "Environment variables are loaded from",
- "file on startup": "file on startup",
- "Changes made here take effect immediately but are not saved to file": "Changes made here take effect immediately but are not saved to file",
- "On restart, values will be reloaded from": "On restart, values will be reloaded from",
+ "Applied {{action}} to the full draft.": "Applied {{action}} to the full draft.",
+ "Applied AI edit to the selection.": "Applied AI edit to the selection.",
+ "Applied auto-mark annotations.": "Applied auto-mark annotations.",
+ "Apply": "Apply",
+ "Apply AI edit": "Apply AI edit",
"Apply Environment Changes": "Apply Environment Changes",
- "Environment Updated!": "Environment Updated!",
- "REQUIRED": "REQUIRED",
- "Error loading data": "Error loading data",
- "Failed to load settings": "Failed to load settings",
- "Failed to connect to backend": "Failed to connect to backend",
- "Overview of your recent learning activities": "Overview of your recent learning activities",
- "Recent Activity": "Recent Activity",
- "Loading activities...": "Loading activities...",
- "No recent activity found": "No recent activity found",
- "Start solving problems or generating questions!": "Start solving problems or generating questions!",
- "Problem Solved": "Problem Solved",
- "Question Generated": "Question Generated",
- "Research Report": "Research Report",
- "Activity": "Activity",
- "My Notebooks": "My Notebooks",
- "records": "records",
- "Solve": "Solve",
- "Question": "Question",
- "No notebooks yet": "No notebooks yet",
- "Create your first notebook": "Create your first notebook",
- "Create your first notebook above": "Create your first notebook above",
- "System Status": "System Status",
- "Quick Actions": "Quick Actions",
- "Ask a Question": "Ask a Question",
- "Generate Quiz": "Generate Quiz",
- "Home": "Home",
- "History": "History",
- "What would you like to learn?": "What would you like to learn?",
- "Ask anything — I'm here to help you understand.": "Ask anything — I'm here to help you understand.",
- "Welcome to DeepTutor": "Welcome to DeepTutor",
- "How can I help you today?": "How can I help you today?",
- "Ask anything...": "Ask anything...",
- "Type your message...": "Type your message...",
- "RAG": "RAG",
- "Select Knowledge Base": "Select Knowledge Base",
- "Explore Modules": "Explore Modules",
- "Smart Problem Solving": "Smart Problem Solving",
- "Generate Practice Questions": "Generate Practice Questions",
- "Deep Research Reports": "Deep Research Reports",
- "Generate Novel Ideas": "Generate Novel Ideas",
- "Searching knowledge base...": "Searching knowledge base...",
- "Searching the web...": "Searching the web...",
- "Generating response...": "Generating response...",
- "Clear Chat": "Clear Chat",
- "New Session": "New Session",
- "New": "New",
- "Ask a difficult question...": "Ask a difficult question...",
- "DeepTutor can make mistakes. Please verify important information.": "DeepTutor can make mistakes. Please verify important information.",
- "Logic Stream": "Logic Stream",
- "Running": "Running",
- "I can help you solve complex STEM problems using multi-step reasoning. Try asking about calculus, physics, or coding algorithms.": "I can help you solve complex STEM problems using multi-step reasoning. Try asking about calculus, physics, or coding algorithms.",
- "Sources": "Sources",
- "RAG Enabled": "RAG Enabled",
- "Web Search Enabled": "Web Search Enabled",
- "From Knowledge Base": "From Knowledge Base",
- "From Web": "From Web",
- "New Chat": "New Chat",
- "New chat": "New chat",
- "Save to Notebook": "Save to Notebook",
- "Click to edit": "Click to edit",
- "Expand sidebar": "Expand sidebar",
- "Collapse sidebar": "Collapse sidebar",
- "Collapse left panel": "Collapse left panel",
- "Search notebooks...": "Search notebooks...",
- "Loading records...": "Loading records...",
- "No records in this notebook": "No records in this notebook",
- "Chat Session": "Chat Session",
- "User": "User",
+ "Are you sure you want to delete this configuration?": "Are you sure you want to delete this configuration?",
+ "Ask a difficult question...": "Ask a difficult question...",
+ "Ask a Question": "Ask a Question",
+ "Ask about key points, framework, or pitfalls...": "Ask about key points, framework, or pitfalls...",
+ "Ask anything — I'm here to help you understand.": "Ask anything — I'm here to help you understand.",
+ "Ask anything...": "Ask anything...",
"Assistant": "Assistant",
- "Multi-agent reasoning": "Multi-agent reasoning",
+ "Attachment preview": "Attachment preview",
+ "Auto": "Auto",
+ "Auto Mark": "Auto Mark",
"Auto-validated quizzes": "Auto-validated quizzes",
- "Comprehensive analysis": "Comprehensive analysis",
+ "Back to Day Plan": "Back to Day Plan",
+ "Back to Goal Board": "Back to Goal Board",
+ "Backend Port": "Backend Port",
+ "Backend Service": "Backend Service",
+ "Base Directory": "Base Directory",
+ "Base URL": "Base URL",
+ "Base URL is required for testing": "Base URL is required for testing",
+ "Bot": "Bot",
+ "Bots": "Bots",
"Brainstorm & synthesize": "Brainstorm & synthesize",
- "Step-by-step tutoring": "Step-by-step tutoring",
- "Collaborative writing": "Collaborative writing",
- "Collection of Research Ideas": "Collection of Research Ideas",
- "Research ideas containing {n} knowledge points": "Research ideas containing {n} knowledge points",
- "Select Source (Cross-Notebook)": "Select Source (Cross-Notebook)",
- "Clear": "Clear",
- "No notebooks with records found": "No notebooks with records found",
- "Your Thoughts": "Your Thoughts",
- "Optional": "Optional",
- "Required": "Required",
- "Describe your thoughts or research direction based on these materials...": "Describe your thoughts or research direction based on these materials...",
- "Describe your research topic or idea (no notebook selection needed)...": "Describe your research topic or idea (no notebook selection needed)...",
- "You can generate ideas from text description alone, or select notebook records above for richer context.": "You can generate ideas from text description alone, or select notebook records above for richer context.",
- "Generating...": "Generating...",
- "Discover research ideas from your notes": "Discover research ideas from your notes",
- "Select All": "Select All",
- "Save Selected": "Save Selected",
- "Generate Ideas ({n} items)": "Generate Ideas ({n} items)",
- "Generate Ideas (Text Only)": "Generate Ideas (Text Only)",
- "Chat History": "Chat History",
- "Solver History": "Solver History",
- "All Activities": "All Activities",
- "Filter by type": "Filter by type",
- "Today": "Today",
- "Yesterday": "Yesterday",
- "session": "session",
- "sessions": "sessions",
- "All": "All",
+ "Breadth First": "Breadth First",
+ "C:\\Users\\name\\Documents\\papers": "C:\\Users\\name\\Documents\\papers",
+ "Cancel": "Cancel",
+ "Capabilities": "Capabilities",
+ "Capability": "Capability",
+ "Changes made here take effect immediately but are not saved to file": "Changes made here take effect immediately but are not saved to file",
+ "chars": "chars",
"Chat": "Chat",
- "No history found": "No history found",
- "Your activities will appear here": "Your activities will appear here",
- "Continue": "Continue",
- "View": "View",
- "Close": "Close",
- "messages": "messages",
- "Failed to load session": "Failed to load session",
- "Add to Notebook": "Add to Notebook",
- "Added Successfully!": "Added Successfully!",
- "Record Preview": "Record Preview",
- "Select Notebooks": "Select Notebooks",
- "New Notebook": "New Notebook",
- "Notebook name": "Notebook name",
- "Color:": "Color:",
- "Create & Initialize": "Create & Initialize",
- "Loading notebooks...": "Loading notebooks...",
- "Record has been saved to {n} notebook": "Record has been saved to {n} notebook",
- "Record has been saved to {n} notebooks": "Record has been saved to {n} notebooks",
- "{n} notebook selected": "{n} notebook selected",
- "{n} notebooks selected": "{n} notebooks selected",
- "Select at least one notebook": "Select at least one notebook",
- "Saving...": "Saving...",
- "Import from Notebooks": "Import from Notebooks",
- "Select content from your notebooks to import": "Select content from your notebooks to import",
- "No notebooks found": "No notebooks found",
- "Select a notebook to view records": "Select a notebook to view records",
- "No records": "No records",
- "Selected {n} items": "Selected {n} items",
- "Import Selected": "Import Selected",
- "Backend Service": "Backend Service",
- "LLM Model": "LLM Model",
- "Embeddings": "Embeddings",
- "TTS Model": "TTS Model",
+ "Chat History": "Chat History",
+ "Chat Session": "Chat Session",
"Checking...": "Checking...",
- "Online": "Online",
- "Offline": "Offline",
- "Configured": "Configured",
- "Not Configured": "Not Configured",
- "Unknown": "Unknown",
- "Testing...": "Testing...",
- "Test failed": "Test failed",
- "Link Folder": "Link Folder",
- "Link Local Folder": "Link Local Folder",
- "Folder Path": "Folder Path",
- "Paste or type the full folder path": "Paste or type the full folder path",
- "Supported files: PDF, DOCX, TXT, MD": "Supported files: PDF, DOCX, TXT, MD",
- "New and modified files will be automatically detected when you sync.": "New and modified files will be automatically detected when you sync.",
- "Folder linked successfully!": "Folder linked successfully!",
- "Failed to link folder": "Failed to link folder",
- "Activity Details": "Activity Details",
- "Type": "Type",
- "Final Answer": "Final Answer",
- "Parameters": "Parameters",
- "Generated Question": "Generated Question",
- "Correct Answer & Explanation": "Correct Answer & Explanation",
- "Answer:": "Answer:",
- "No explanation provided": "No explanation provided",
- "Topic:": "Topic:",
- "Difficulty:": "Difficulty:",
- "Type:": "Type:",
- "Topic": "Topic",
- "Report Preview": "Report Preview",
- "N/A": "N/A",
- "No question content": "No question content",
- "Workspace": "WORKSPACE",
- "Learn & Research": "Learn & Research",
- "✨ Your description here": "✨ Your description here",
- "Enter your description...": "Enter your description...",
- "Visit DeepTutor Homepage": "Visit DeepTutor Homepage",
- "View on GitHub": "View on GitHub",
- "KB": "KB",
- "Solution image": "Solution image",
- "Count:": "Count:",
- "Initializing": "Initializing",
- "Generating Search Queries": "Generating Search Queries",
- "Retrieving Knowledge": "Retrieving Knowledge",
- "Creating Question Plan": "Creating Question Plan",
- "Uploading PDF": "Uploading PDF",
- "Parsing PDF (MinerU)": "Parsing PDF (MinerU)",
- "Extracting Questions": "Extracting Questions",
- "Ready to Generate": "Ready to Generate",
- "Generation Complete": "Generation Complete",
- "Progress": "Progress",
- "Question Focuses ({n})": "Question Focuses ({n})",
- "Logs ({n})": "Logs ({n})",
- "Clear logs": "Clear logs",
- "Waiting for logs...": "Waiting for logs...",
- "Mimic Exam Mode": "Mimic Exam Mode",
- "Generating questions based on reference exam paper": "Generating questions based on reference exam paper",
- "Learning Assistant": "Learning Assistant",
- "Have any questions? Feel free to ask...": "Have any questions? Feel free to ask...",
- "Learning Summary": "Learning Summary",
- "Fix HTML Issue": "Fix HTML Issue",
- "Issue Description": "Issue Description",
- "Describe the HTML issue, e.g.: button not clickable, style display error, interaction not working...": "Describe the HTML issue, e.g.: button not clickable, style display error, interaction not working...",
- "Fixing...": "Fixing...",
- "Fix": "Fix",
- "Loading learning content...": "Loading learning content...",
- "Fix HTML": "Fix HTML",
- "Interactive Learning Content": "Interactive Learning Content",
- "Deselect": "Deselect",
- "Generate Learning Plan ({n} items)": "Generate Learning Plan ({n} items)",
- "Learning Progress": "Learning Progress",
- "Knowledge Point {n} / {total}": "Knowledge Point {n} / {total}",
- "Start Learning": "Start Learning",
- "Loading...": "Loading...",
- "Next": "Next",
- "Generating Summary...": "Generating Summary...",
- "Complete Learning": "Complete Learning",
- "Switch to narrow sidebar (1:3)": "Switch to narrow sidebar (1:3)",
- "Switch to wide sidebar (3:1)": "Switch to wide sidebar (3:1)",
- "Select a notebook, and the system will generate a personalized learning plan. Through interactive pages and intelligent Q&A, you'll gradually master all the content.": "Select a notebook, and the system will generate a personalized learning plan. Through interactive pages and intelligent Q&A, you'll gradually master all the content.",
- "Select notebook records or describe your research topic": "Select notebook records or describe your research topic",
- "Manage and explore your educational content repositories.": "Manage and explore your educational content repositories.",
- "RAG-Anything": "LlamaIndex",
- "RAG-Anything (Docling)": "LlamaIndex",
- "Documents": "Documents",
- "Images": "Images",
- "Ready": "Ready",
- "Processing": "Processing",
- "Processing File": "Processing File",
- "Extracting Items": "Extracting Items",
- "Not Indexed": "Not Indexed",
- "e.g., Math101": "e.g., Math101",
- "Pure vector retrieval, fastest processing speed.": "Pure vector retrieval, fastest processing speed.",
- "Lightweight knowledge graph retrieval, fast processing of text documents.": "Reserved for future providers.",
- "Multimodal document processing with chart and formula extraction, builds knowledge graphs.": "Reserved for future providers.",
- "Select a RAG pipeline suitable for your document type": "Select a RAG provider (currently only LlamaIndex)",
- "Click or drop to add more files": "Click or drop to add more files",
- "Drag & drop files or folders here": "Drag & drop files or folders here",
- "{n} file selected": "{n} file selected",
- "{n} files selected": "{n} files selected",
+ "Chinese": "Chinese",
+ "Choose files...": "Choose files...",
+ "Clear": "Clear",
"Clear all": "Clear all",
- "Remove file": "Remove file",
- "Upload documents to": "Upload documents to",
- "RAG Provider": "RAG Provider",
- "RAG Provider (Optional)": "RAG Provider (Optional)",
- "Leave as-is to use the KB's existing provider": "Leave as-is to use the KB's existing provider",
- "Keep unchanged to use this KB's existing provider": "Keep unchanged to use this KB's existing provider",
+ "Clear All": "Clear All",
+ "Clear Cache": "Clear Cache",
+ "Clear Chat": "Clear Chat",
+ "Clear logs": "Clear logs",
"Clear progress status": "Clear progress status",
- "DeepTutor Logo": "DeepTutor Logo",
- "Optimizing topic...": "Optimizing topic...",
- "Verified by DeepTutor Logic Engine": "Verified by DeepTutor Logic Engine",
- "Model:": "Model:",
- "Activity Log": "Activity Log",
- "Waiting for logic execution...": "Waiting for logic execution...",
- "gpt-4o": "gpt-4o",
- "Link a local folder to": "Link a local folder to",
- ". Documents in the folder will be processed and added to this knowledge base.": ". Documents in the folder will be processed and added to this knowledge base.",
- "C:\\Users\\name\\Documents\\papers": "C:\\Users\\name\\Documents\\papers",
- "📄 Supported files: PDF, DOCX, TXT, MD": "📄 Supported files: PDF, DOCX, TXT, MD",
- "💡 Tip:": "💡 Tip:",
- "Use folders synced with Google Drive, OneDrive, SharePoint, or Dropbox for automatic cloud integration.": "Use folders synced with Google Drive, OneDrive, SharePoint, or Dropbox for automatic cloud integration.",
- "Diagram rendering error": "Diagram rendering error",
- "Show source": "Show source",
- "Planning": "Planning",
- "Researching": "Researching",
- "Reporting": "Reporting",
- "Planning Research Strategy": "Planning Research Strategy",
- "Research Plan": "Research Plan",
- "Original Topic": "Original Topic",
- "Optimized Topic": "Optimized Topic",
- "No research data yet": "No research data yet",
- "(History)": "(History)",
- "Report Generated!": "Report Generated!",
- "Generating Report": "Generating Report",
- "Report Generation": "Report Generation",
- "Currently Writing": "Currently Writing",
- "Report Outline": "Report Outline",
- "View Full Report": "View Full Report",
- "Parallel Mode": "Parallel Mode",
- "AI Edit Assistant": "AI Edit Assistant",
+ "Click or drop to add more files": "Click or drop to add more files",
+ "Click Start to generate interactive pages.": "Click Start to generate interactive pages.",
+ "Click to edit": "Click to edit",
+ "Click to expand": "Click to expand",
+ "Click to upload PDF": "Click to upload PDF",
+ "Close": "Close",
"Close dialog": "Close dialog",
- "Instruction (Optional)": "Instruction (Optional)",
- "e.g. Make it more formal...": "e.g. Make it more formal...",
+ "Cmd+S to save · Markdown supported": "Cmd+S to save · Markdown supported",
+ "Co-Writer": "Co-Writer",
+ "Co-Writer Draft": "Co-Writer Draft",
+ "Code input": "Code input",
+ "Coding": "Coding",
+ "Collaborative writing": "Collaborative writing",
+ "Collapse editor": "Collapse editor",
+ "Collapse left panel": "Collapse left panel",
+ "Collapse middle panel": "Collapse middle panel",
+ "Collapse preview": "Collapse preview",
+ "Collapse right panel": "Collapse right panel",
+ "Collapse sidebar": "Collapse sidebar",
+ "Collection of Research Ideas": "Collection of Research Ideas",
+ "Color": "Color",
+ "Color:": "Color:",
+ "Command Generation": "Command Generation",
+ "commands": "commands",
+ "Commands generated": "Commands generated",
+ "Competent": "Competent",
+ "Complete": "Complete",
+ "Complete Learning": "Complete Learning",
+ "Completed": "Completed",
+ "Completed {{done}}/{{total}}": "Completed {{done}}/{{total}}",
+ "Comprehensive analysis": "Comprehensive analysis",
+ "Configuration Saved": "Configuration Saved",
+ "Configuration Status": "Configuration Status",
+ "Configure embedding model providers": "Configure embedding model providers",
+ "Configure in Environment Variables tab": "Configure in Environment Variables tab",
+ "Configure language model providers": "Configure language model providers",
+ "Configure text-to-speech providers": "Configure text-to-speech providers",
+ "Configure web search providers": "Configure web search providers",
+ "Configure your AI services and preferences": "Configure your AI services and preferences",
+ "Configured": "Configured",
+ "Confirm Clear": "Confirm Clear",
+ "Connection failed": "Connection failed",
+ "Connection successful": "Connection successful",
+ "Connection test failed": "Connection test failed",
+ "Connection test failed - network error": "Connection test failed - network error",
+ "constraints": "constraints",
+ "Constraints": "Constraints",
+ "Content": "Content",
"Context Source (Optional)": "Context Source (Optional)",
- "Web": "Web",
- "Rewrite": "Rewrite",
- "Shorten": "Shorten",
- "Expand": "Expand",
- "AI Mark": "AI Mark",
- "Processing...": "Processing...",
- "Apply": "Apply",
- "Live Preview · Synced Scroll": "Live Preview · Synced Scroll",
- "Show AI Marks": "Show AI Marks",
- "Hide AI Marks": "Hide AI Marks",
- "Preview": "Preview",
- "Process": "Process",
- "Report": "Report",
- "Ready to Research": "Ready to Research",
- "Enter a topic in the left panel to start deep research.": "Enter a topic in the left panel to start deep research.",
- "Markdown": "Markdown",
- "Generating report preview...": "Generating report preview...",
- "Select a task to view execution details": "Select a task to view execution details",
- "Waiting for execution logs...": "Waiting for execution logs...",
- "No tasks initialized yet": "No tasks initialized yet",
- "Current Action:": "Current Action:",
- "Waiting to start...": "Waiting to start...",
- "Tools:": "Tools:",
- "User Query": "User Query",
- "Output": "Output",
- "Metadata": "Metadata",
- "No records yet": "No records yet",
- "Add records from Solver, Question, Research, or Co-Writer": "Add records from Solver, Question, Research, or Co-Writer",
- "Select a record to view details": "Select a record to view details",
+ "Continue": "Continue",
+ "Correct Answer": "Correct Answer",
+ "Correct Answer & Explanation": "Correct Answer & Explanation",
+ "Count": "Count",
+ "Count:": "Count:",
+ "Create": "Create",
+ "Create & Initialize": "Create & Initialize",
+ "Create & Start": "Create & Start",
+ "Create a bot first in the Bots tab.": "Create a bot first in the Bots tab.",
+ "Create knowledge base": "Create knowledge base",
+ "Create Knowledge Base": "Create Knowledge Base",
"Create New Notebook": "Create New Notebook",
+ "Create notebook": "Create notebook",
+ "Create Process": "Create Process",
+ "Create TutorBot": "Create TutorBot",
+ "Create your first notebook": "Create your first notebook",
+ "Create your first notebook above": "Create your first notebook above",
+ "Create your first soul template. Default presets will be seeded automatically on next server restart.": "Create your first soul template. Default presets will be seeded automatically on next server restart.",
+ "Create your first TutorBot to get started.": "Create your first TutorBot to get started.",
+ "Creating goal session...": "Creating goal session...",
+ "Creating Question Plan": "Creating Question Plan",
+ "Current Action:": "Current Action:",
+ "Current note is empty, cannot generate narration.": "Current note is empty, cannot generate narration.",
+ "Current page": "Current page",
+ "Currently Writing": "Currently Writing",
+ "Custom": "Custom",
+ "Custom Mode": "Custom Mode",
+ "Daily Minutes": "Daily Minutes",
+ "Dark": "Dark",
+ "Dark Mode": "Dark Mode",
+ "Dashboard": "Dashboard",
+ "Day {{count}}": "Day {{count}}",
+ "Day Plan Detail": "Day Plan Detail",
+ "Days per Week": "Days per Week",
+ "Deep Research": "Deep Research",
+ "Deep Research Reports": "Deep Research Reports",
+ "DeepTutor": "DeepTutor",
+ "DeepTutor can make mistakes. Please verify important information.": "DeepTutor can make mistakes. Please verify important information.",
+ "DeepTutor Logo": "DeepTutor Logo",
+ "default": "default",
+ "Default": "Default",
+ "Default KB": "Default KB",
+ "Default Language": "Default Language",
+ "Default language for system operations": "Default language for system operations",
+ "Default Voice": "Default Voice",
+ "Define the bot's personality, values, and communication style in markdown...": "Define the bot's personality, values, and communication style in markdown...",
+ "Define the soul in markdown...": "Define the soul in markdown...",
+ "Delete": "Delete",
+ "Delete Knowledge Base": "Delete Knowledge Base",
+ "Delete knowledge base \"{{name}}\"?": "Delete knowledge base \"{{name}}\"?",
+ "Delete Notebook?": "Delete Notebook?",
+ "Delete soul \\": "Delete soul \\",
+ "Depth First": "Depth First",
+ "Describe how you want the text edited...": "Describe how you want the text edited...",
+ "Describe the HTML issue, e.g.: button not clickable, style display error, interaction not working...": "Describe the HTML issue, e.g.: button not clickable, style display error, interaction not working...",
+ "Describe the math animation or storyboard you want...": "Describe the math animation or storyboard you want...",
+ "Describe the problem or ask a question...": "Describe the problem or ask a question...",
+ "Describe the research topic...": "Describe the research topic...",
+ "Describe what you want to learn": "Describe what you want to learn",
+ "Describe your research topic or idea (no notebook selection needed)...": "Describe your research topic or idea (no notebook selection needed)...",
+ "Describe your thoughts or research direction based on these materials...": "Describe your thoughts or research direction based on these materials...",
+ "Description": "Description",
"Description (Optional)": "Description (Optional)",
- "Color": "Color",
+ "Deselect": "Deselect",
+ "Details": "Details",
+ "Detected Elements": "Detected Elements",
+ "Diagram rendering error": "Diagram rendering error",
+ "Difficulty": "Difficulty",
+ "Difficulty:": "Difficulty:",
+ "Dimensions is required for embedding models": "Dimensions is required for embedding models",
+ "Disabled": "Disabled",
+ "Discover research ideas from your notes": "Discover research ideas from your notes",
+ "Documents": "Documents",
+ "done": "done",
+ "Done {{count}}": "Done {{count}}",
+ "Drag & drop files or folders here": "Drag & drop files or folders here",
+ "Drop images here": "Drop images here",
+ "Dropped {{count}}": "Dropped {{count}}",
+ "e.g. 2211asm1": "e.g. 2211asm1",
+ "e.g. Creative Writer": "e.g. Creative Writer",
+ "e.g. Gradient Descent Optimization": "e.g. Gradient Descent Optimization",
+ "e.g. Make it more formal...": "e.g. Make it more formal...",
+ "e.g. Math Tutor": "e.g. Math Tutor",
+ "e.g., Math101": "e.g., Math101",
+ "Easy": "Easy",
+ "Edit": "Edit",
+ "Edit {{file}}...": "Edit {{file}}...",
+ "Edit Configuration": "Edit Configuration",
"Edit Notebook": "Edit Notebook",
- "Description": "Description",
- "Delete Notebook?": "Delete Notebook?",
- "Import Records": "Import Records",
- "Source Notebook": "Source Notebook",
- "Select a notebook...": "Select a notebook...",
+ "Editor": "Editor",
+ "Element Detection": "Element Detection",
+ "elements": "elements",
+ "Elements": "Elements",
+ "Embedding": "Embedding",
+ "Embedding Configuration": "Embedding Configuration",
+ "Embeddings": "Embeddings",
+ "Enable Tools": "Enable Tools",
+ "Enabled": "Enabled",
+ "English": "English",
+ "Enter a topic in the left panel to start deep research.": "Enter a topic in the left panel to start deep research.",
+ "Enter image URL": "Enter image URL",
+ "Enter your description...": "Enter your description...",
+ "Enter your input...": "Enter your input...",
+ "Enter your query...": "Enter your query...",
+ "Environment Updated!": "Environment Updated!",
+ "Environment Variables": "Environment Variables",
+ "Environment variables are loaded from": "Environment variables are loaded from",
+ "Error": "Error",
+ "Error loading data": "Error loading data",
+ "Example template is already loaded.": "Example template is already loaded.",
+ "Execute": "Execute",
+ "Expand": "Expand",
+ "Expand editor": "Expand editor",
"Expand left panel": "Expand left panel",
- "Collapse middle panel": "Collapse middle panel",
"Expand middle panel": "Expand middle panel",
- "Collapse right panel": "Collapse right panel",
+ "Expand preview": "Expand preview",
"Expand right panel": "Expand right panel",
+ "Expand sidebar": "Expand sidebar",
+ "Explanation": "Explanation",
+ "Explore Modules": "Explore Modules",
+ "Explore the building blocks of DeepTutor: reusable tools and higher-level capabilities.": "Explore the building blocks of DeepTutor: reusable tools and higher-level capabilities.",
"Export as Markdown": "Export as Markdown",
"Export as PDF": "Export as PDF",
- "Import records from other notebooks": "Import records from other notebooks",
- "My Notebook": "My Notebook",
- "Notes about machine learning...": "Notes about machine learning...",
- "This action cannot be undone. All records in this notebook will be permanently deleted.": "This action cannot be undone. All records in this notebook will be permanently deleted.",
- "Logs": "Logs",
- "Difficulty": "Difficulty",
- "Easy": "Easy",
- "Medium": "Medium",
- "Hard": "Hard",
- "Multiple Choice": "Multiple Choice",
- "Written": "Written",
- "Upload Exam Paper (PDF)": "Upload Exam Paper (PDF)",
- "Click to upload PDF": "Click to upload PDF",
- "The system will parse and generate questions": "The system will parse and generate questions",
- "OR": "OR",
- "Pre-parsed Directory": "Pre-parsed Directory",
- "KB Coverage": "KB Coverage",
+ "Export Markdown": "Export Markdown",
+ "extended": "extended",
+ "Extended Aspects": "Extended Aspects",
"Extension Points": "Extension Points",
+ "Extra constraints, style, focus areas...": "Extra constraints, style, focus areas...",
+ "Extracting geometric elements and generating visualization...": "Extracting geometric elements and generating visualization...",
+ "Extracting Items": "Extracting Items",
+ "Extracting Questions": "Extracting Questions",
+ "Failed": "Failed",
+ "Failed to add configuration": "Failed to add configuration",
+ "Failed to ask interactive assistant": "Failed to ask interactive assistant",
+ "Failed to connect to backend": "Failed to connect to backend",
+ "Failed to generate goal plan": "Failed to generate goal plan",
+ "Failed to generate interactive page": "Failed to generate interactive page",
+ "Failed to generate narration, please try again.": "Failed to generate narration, please try again.",
+ "Failed to generate practice": "Failed to generate practice",
+ "Failed to link folder": "Failed to link folder",
+ "Failed to load day plan detail": "Failed to load day plan detail",
+ "Failed to load generated plan": "Failed to load generated plan",
+ "Failed to load image from URL": "Failed to load image from URL",
+ "Failed to load session": "Failed to load session",
+ "Failed to load settings": "Failed to load settings",
+ "Failed to replan": "Failed to replan",
+ "Failed to restore latest plan": "Failed to restore latest plan",
+ "Failed to submit feedback": "Failed to submit feedback",
+ "Failed to update configuration": "Failed to update configuration",
+ "Feedback accepted.": "Feedback accepted.",
+ "Figure Reconstruction": "Figure Reconstruction",
+ "file on startup": "file on startup",
+ "Filter by type": "Filter by type",
+ "Final Answer": "Final Answer",
+ "Final commands": "Final commands",
+ "Fix": "Fix",
+ "Fix HTML": "Fix HTML",
+ "Fix HTML Issue": "Fix HTML Issue",
+ "Fixing...": "Fixing...",
+ "Folder linked successfully!": "Folder linked successfully!",
+ "Folder Path": "Folder Path",
+ "Found": "Found",
+ "Foundation": "Foundation",
+ "From Knowledge Base": "From Knowledge Base",
+ "From Web": "From Web",
+ "Frontend Port": "Frontend Port",
+ "Full Draft": "Full Draft",
+ "Full Draft AI Edit": "Full Draft AI Edit",
+ "General Settings": "General Settings",
+ "Generate": "Generate",
+ "Generate Ideas ({n} items)": "Generate Ideas ({n} items)",
+ "Generate Ideas (Text Only)": "Generate Ideas (Text Only)",
+ "Generate learning plan": "Generate learning plan",
+ "Generate Learning Plan ({n} items)": "Generate Learning Plan ({n} items)",
+ "Generate Novel Ideas": "Generate Novel Ideas",
+ "Generate Podcast": "Generate Podcast",
+ "Generate Practice Questions": "Generate Practice Questions",
+ "Generate Questions": "Generate Questions",
+ "Generate questions based on knowledge base content": "Generate questions based on knowledge base content",
+ "Generate Quiz": "Generate Quiz",
+ "Generate similar questions based on an exam paper": "Generate similar questions based on an exam paper",
+ "Generated Question": "Generated Question",
+ "Generating": "Generating",
+ "Generating interactive lesson...": "Generating interactive lesson...",
+ "Generating interactive page...": "Generating interactive page...",
+ "Generating Podcast": "Generating Podcast",
+ "Generating practice...": "Generating practice...",
+ "Generating questions based on reference exam paper": "Generating questions based on reference exam paper",
+ "Generating questions...": "Generating questions...",
+ "Generating Report": "Generating Report",
+ "Generating report preview...": "Generating report preview...",
+ "Generating response...": "Generating response...",
+ "Generating Search Queries": "Generating Search Queries",
+ "Generating Summary...": "Generating Summary...",
+ "Generating...": "Generating...",
+ "Generation Complete": "Generation Complete",
+ "Generation failed": "Generation failed",
+ "Initialized": "Initialized",
+ "Geometric Analysis": "Geometric Analysis",
+ "Goal Form": "Goal Form",
+ "Goal Level": "Goal Level",
+ "Goal Mode": "Exam Prep Learning",
+ "Goal-Oriented Adaptive Learning Mode": "Exam Prep Learning",
+ "gpt-4o": "gpt-4o",
+ "Guided Learning": "Guided Learning",
+ "Hard": "Hard",
+ "Have any questions? Feel free to ask...": "Have any questions? Feel free to ask...",
+ "Hide AI Marks": "Hide AI Marks",
+ "High Yield": "High Yield",
+ "History": "History",
+ "Home": "Home",
+ "How can I help you today?": "How can I help you today?",
+ "Learning": "Learning",
+ "知识点数量": "Knowledge Points",
+ "已就绪页面": "Ready Pages",
+ "学习状态": "Learning Status",
+ "从概念到理解闭环,逐步构建可迁移的知识结构。": "Build transferable knowledge from concept to understanding.",
+ "引导式学习强调概念拆解、原理解释与交互式课件学习,适合从0到1建立系统理解,再衔接备考式学习做提分训练。": "Break down concepts, understand principles, and learn with interactive courseware before exam-focused training.",
+ "I can help you solve complex STEM problems using multi-step reasoning. Try asking about calculus, physics, or coding algorithms.": "I can help you solve complex STEM problems using multi-step reasoning. Try asking about calculus, physics, or coding algorithms.",
+ "IdeaGen": "IdeaGen",
+ "Idle": "Idle",
+ "image": "image",
+ "Image is reference for problem": "Image is reference for problem",
+ "Image size must be less than 10MB": "Image size must be less than 10MB",
+ "Images": "Images",
+ "Import from Notebooks": "Import from Notebooks",
+ "Import Records": "Import Records",
+ "Import records from other notebooks": "Import records from other notebooks",
+ "Import Selected": "Import Selected",
+ "In Progress": "In Progress",
+ "Include Practice": "Include Practice",
+ "Including: chat history, solver history, question results, research reports, guided learning progress, Co-Writer content, etc. This action cannot be undone.": "Including: chat history, solver history, question results, research reports, guided learning progress, Co-Writer content, etc. This action cannot be undone.",
+ "Initializing": "Initializing",
+ "Instruction (Optional)": "Instruction (Optional)",
+ "Intelligent markdown editor with AI-powered writing assistance.": "Intelligent markdown editor with AI-powered writing assistance.",
+ "Interactive Learning Content": "Interactive Learning Content",
+ "Interactive Lesson": "Interactive Lesson",
+ "Interface Preferences": "Interface Preferences",
+ "Issue Description": "Issue Description",
+ "issues fixed": "issues fixed",
+ "Issues found": "Issues found",
+ "KB": "KB",
"KB Connection": "KB Connection",
- "Extended Aspects": "Extended Aspects",
- "Reasoning": "Reasoning",
- "e.g. 2211asm1": "e.g. 2211asm1",
- "Please upload a PDF exam paper": "Please upload a PDF exam paper",
- "Remove PDF": "Remove PDF",
- "Podcast Narration": "Podcast Narration",
- "Click to expand": "Click to expand",
- "Script only (TTS not configured)": "Script only (TTS not configured)",
- "Current note is empty, cannot generate narration.": "Current note is empty, cannot generate narration.",
- "Failed to generate narration, please try again.": "Failed to generate narration, please try again.",
- "Generating Podcast": "Generating Podcast",
- "Generate Podcast": "Generate Podcast",
- "Save Podcast to Notebook": "Save Podcast to Notebook",
- "After generation, the narration script will appear here.": "After generation, the narration script will appear here.",
+ "KB Coverage": "KB Coverage",
+ "KB Name": "KB Name",
+ "Keep unchanged to use this KB's existing provider": "Keep unchanged to use this KB's existing provider",
"Key Points": "Key Points",
- "After generation, 3-5 key points will be listed here.": "After generation, 3-5 key points will be listed here.",
- "Podcast Audio": "Podcast Audio",
- "Your browser does not support the audio element.": "Your browser does not support the audio element.",
- "TTS not configured, script generation only.": "TTS not configured, script generation only.",
- "After generation, you can play the podcast audio here.": "After generation, you can play the podcast audio here.",
- "Cmd+S to save · Markdown supported": "Cmd+S to save · Markdown supported",
- "Refresh from a session or write directly in the editor.": "Refresh from a session or write directly in the editor.",
- "Manage your knowledge bases and notebooks in one place.": "Manage your knowledge bases and notebooks in one place.",
- "Create knowledge base": "Create knowledge base",
+ "Knowledge": "Knowledge",
+ "Knowledge Base": "Knowledge Base",
"Knowledge base name": "Knowledge base name",
- "Choose files...": "Choose files...",
- "Create Process": "Create Process",
- "Upload documents": "Upload documents",
- "Select a knowledge base": "Select a knowledge base",
- "No ready knowledge base is available for upload. Create a new KB or reindex legacy KBs first.": "No ready knowledge base is available for upload. Create a new KB or reindex legacy KBs first.",
- "Upload": "Upload",
- "Upload Process": "Upload Process",
+ "Knowledge Base Name": "Knowledge Base Name",
"Knowledge bases": "Knowledge bases",
+ "Knowledge Bases": "Knowledge Bases",
+ "Knowledge Point": "Knowledge Point",
+ "Knowledge Point {n} / {total}": "Knowledge Point {n} / {total}",
+ "Knowledge Point / Topic": "Knowledge Point / Topic",
+ "Language": "Language",
+ "language.chinese": "Chinese",
+ "language.english": "English",
+ "Latest plan restored.": "Latest plan restored.",
+ "Learn": "Learn",
+ "Learn & Research": "Learn & Research",
+ "Learning Assistant": "Learning Assistant",
+ "Learning Goal": "Learning Goal",
+ "Learning History": "Learning History",
+ "Learning Progress": "Learning Progress",
+ "Learning Summary": "Learning Summary",
+ "Leave as-is to use the KB's existing provider": "Leave as-is to use the KB's existing provider",
+ "Light": "Light",
+ "Light Mode": "Light Mode",
+ "Lightweight knowledge graph retrieval, fast processing of text documents.": "Reserved for future providers.",
+ "Link a local folder to": "Link a local folder to",
+ "Link Folder": "Link Folder",
+ "Link Local Folder": "Link Local Folder",
+ "Linked Tasks": "Linked Tasks",
+ "Live Preview · Synced Scroll": "Live Preview · Synced Scroll",
+ "LLM": "LLM",
+ "LLM Configuration": "LLM Configuration",
+ "LLM Model": "LLM Model",
+ "Load": "Load",
+ "Load Example Template": "Load Example Template",
+ "Loaded example template.": "Loaded example template.",
+ "Loading": "Loading...",
+ "Loading activities...": "Loading activities...",
+ "Loading day plan...": "Loading day plan...",
+ "Loading history...": "Loading history...",
+ "Loading learning content...": "Loading learning content...",
+ "Loading notebooks...": "Loading notebooks...",
+ "Loading records...": "Loading records...",
+ "Loading...": "Loading...",
+ "local": "local",
+ "Local Data": "Local Data",
+ "Logic Stream": "Logic Stream",
+ "Logs": "Logs",
+ "Logs ({n})": "Logs ({n})",
+ "Manage and explore your educational content repositories.": "Manage and explore your educational content repositories.",
+ "Manage system configuration and preferences": "Manage system configuration and preferences",
+ "Manage your in-process TutorBot instances": "Manage your in-process TutorBot instances",
+ "Manage your knowledge bases and notebooks in one place.": "Manage your knowledge bases and notebooks in one place.",
+ "Markdown": "Markdown",
+ "Max Questions": "Max Questions",
+ "Max Results": "Max Results",
+ "Maximize": "Maximize",
+ "Medium": "Medium",
+ "Memory": "Memory",
+ "messages": "messages",
+ "Metadata": "Metadata",
+ "Mimic Exam": "Mimic Exam",
+ "Mimic Exam Mode": "Mimic Exam Mode",
+ "Mimic Exam Paper Mode": "Mimic Exam Paper Mode",
+ "Minimize": "Minimize",
+ "missed": "missed",
+ "Model": "Model",
+ "Model name is required": "Model name is required",
+ "Model:": "Model:",
+ "Moved {{count}}": "Moved {{count}}",
+ "Multi-agent reasoning": "Multi-agent reasoning",
+ "Multimodal document processing with chart and formula extraction, builds knowledge graphs.": "Reserved for future providers.",
+ "Multiple Choice": "Multiple Choice",
+ "My Configuration": "My Configuration",
+ "My Notebook": "My Notebook",
+ "My Notebooks": "My Notebooks",
+ "N/A": "N/A",
+ "Name": "Name",
"needs reindex": "needs reindex",
- "Set default": "Set default",
+ "New": "New",
+ "New and modified files will be automatically detected when you sync.": "New and modified files will be automatically detected when you sync.",
+ "New Bot": "New Bot",
+ "New chat": "New chat",
+ "New Chat": "New Chat",
+ "New Knowledge Base": "New Knowledge Base",
+ "New Notebook": "New Notebook",
+ "New Session": "New Session",
+ "New Soul": "New Soul",
+ "Next": "Next",
+ "No bots to configure": "No bots to configure",
+ "No configurations found. Add one to get started.": "No configurations found. Add one to get started.",
+ "No explanation provided": "No explanation provided",
+ "No history found": "No history found",
+ "No issues found": "No issues found",
+ "No knowledge bases found. Create one to get started.": "No knowledge bases found. Create one to get started.",
"No knowledge bases yet. Create one to get started.": "No knowledge bases yet. Create one to get started.",
- "Create notebook": "Create notebook",
+ "No learning history yet": "No learning history yet",
+ "No linked tasks.": "No linked tasks.",
+ "No notebooks found": "No notebooks found",
+ "No notebooks with records found": "No notebooks with records found",
+ "No notebooks yet": "No notebooks yet",
"No notebooks yet. Create one to organize outputs.": "No notebooks yet. Create one to organize outputs.",
- "This notebook is empty for now.": "This notebook is empty for now.",
- "Select a notebook to inspect its saved records.": "Select a notebook to inspect its saved records.",
- "Unknown time": "Unknown time",
+ "No plan yet": "No plan yet",
+ "No question content": "No question content",
+ "No ready knowledge base is available for upload. Create a new KB or reindex legacy KBs first.": "No ready knowledge base is available for upload. Create a new KB or reindex legacy KBs first.",
+ "No recent activity found": "No recent activity found",
+ "No records": "No records",
+ "No records in this notebook": "No records in this notebook",
+ "No records yet": "No records yet",
+ "No research data yet": "No research data yet",
+ "No response": "No response",
+ "No souls yet": "No souls yet",
+ "No source selected: the run will use llm-only research.": "No source selected: the run will use llm-only research.",
+ "No tasks for this day.": "No tasks for this day.",
+ "No tasks initialized yet": "No tasks initialized yet",
+ "No TutorBots yet": "No TutorBots yet",
+ "None": "None",
+ "Not configured": "Not configured",
+ "Not Configured": "Not Configured",
+ "Not Indexed": "Not Indexed",
+ "Not required": "Not required",
+ "Notebook": "Notebook",
+ "Notebook Context": "Notebook Context",
+ "Notebook name": "Notebook name",
+ "Notebooks": "Notebooks",
+ "Notes about machine learning...": "Notes about machine learning...",
+ "Nothing to preview yet.": "Nothing to preview yet.",
+ "Observe": "Observe",
+ "Offline": "Offline",
+ "On restart, values will be reloaded from": "On restart, values will be reloaded from",
+ "Online": "Online",
+ "Open": "Open",
+ "Open any page once it is ready. Early stages are prioritized.": "Open any page once it is ready. Early stages are prioritized.",
"Open chat session": "Open chat session",
"Open guided learning session": "Open guided learning session",
- "Query:": "Query:",
- "Delete knowledge base \"{{name}}\"?": "Delete knowledge base \"{{name}}\"?",
- "This knowledge base is in legacy index format and needs reindex before upload.": "This knowledge base is in legacy index format and needs reindex before upload.",
- "This knowledge base is currently {{status}} and cannot accept uploads yet.": "This knowledge base is currently {{status}} and cannot accept uploads yet.",
- "1 / 4 — LLM": "1 / 4 — LLM",
- "Configure your language model endpoint. This powers all chat and reasoning.": "Configure your language model endpoint. This powers all chat and reasoning.",
- "2 / 4 — Embedding": "2 / 4 — Embedding",
- "Set the embedding model for knowledge retrieval.": "Set the embedding model for knowledge retrieval.",
- "3 / 4 — Search": "3 / 4 — Search",
- "Optional: add a web search provider for real-time information.": "Optional: add a web search provider for real-time information.",
- "4 / 4 — Complete": "4 / 4 — Complete",
- "When you are ready, click here to test and launch DeepTutor.": "When you are ready, click here to test and launch DeepTutor.",
- "Skip tour": "Skip tour",
- "Got it": "Got it",
- "Passed": "Passed",
- "Failed": "Failed",
- "Skipped": "Skipped",
- "Running tests...": "Running tests...",
- "Test Results": "Test Results",
- "Back to editing": "Back to editing",
- "Launch anyway": "Launch anyway",
- "Confirm & Launch": "Confirm & Launch",
- "Please wait...": "Please wait...",
- "Draft saved": "Draft saved",
- "Applied to .env": "Applied to .env",
- "Diagnostics stream disconnected": "Diagnostics stream disconnected",
- "Failed to complete tour": "Failed to complete tour",
- "Run {{command}} in your terminal.": "Run {{command}} in your terminal.",
- "Run python scripts/start_tour.py in your terminal.": "Run python scripts/start_tour.py in your terminal.",
- "Setup Tour": "Setup Tour",
- "Configure your endpoints below, run tests, then launch DeepTutor.": "Configure your endpoints below, run tests, then launch DeepTutor.",
- "Complete & Launch": "Complete & Launch",
- "Configuration saved": "Configuration saved",
- "Redirecting to DeepTutor in {{count}}s...": "Redirecting to DeepTutor in {{count}}s...",
- "Redirecting...": "Redirecting...",
- "Draft has unsaved changes": "Draft has unsaved changes",
- "All changes saved": "All changes saved",
- "Save Draft": "Save Draft",
- "Complete the tour first": "Complete the tour first",
- "Backend": "Backend",
- "Emb": "Emb",
- "Profile": "Profile",
- "No endpoint": "No endpoint",
- "Delete profile": "Delete profile",
- "Provider Hint / Binding": "Provider Hint / Binding",
- "Select provider...": "Select provider...",
- "Perplexity requires API key. It will fail hard without credentials.": "Perplexity requires API key. It will fail hard without credentials.",
- "Supported provider.": "Supported provider.",
- "Deprecated provider. Switch to brave/tavily/jina/searxng/duckduckgo/perplexity.": "Deprecated provider. Switch to brave/tavily/jina/searxng/duckduckgo/perplexity.",
- "Unsupported provider. Use brave/tavily/jina/searxng/duckduckgo/perplexity.": "Unsupported provider. Use brave/tavily/jina/searxng/duckduckgo/perplexity.",
- "API Version": "API Version",
- "Proxy": "Proxy",
- "Extra Headers (JSON)": "Extra Headers (JSON)",
- "Models": "Models",
- "Label": "Label",
- "Model ID": "Model ID",
- "Dimension": "Dimension",
- "No profiles configured. Add a profile to start.": "No profiles configured. Add a profile to start.",
- "Diagnostics": "Diagnostics",
- "Run test": "Run test",
- "Collapse diagnostics": "Collapse diagnostics",
- "Expand diagnostics": "Expand diagnostics",
- "Streams config snapshot, request target, response summary, and service-specific validation for the active {{service}} profile.": "Streams config snapshot, request target, response summary, and service-specific validation for the active {{service}} profile.",
- "Run Terminal Tour": "Run Terminal Tour",
- "Loading settings...": "Loading settings...",
- "words": "words",
- "chars": "chars",
- "Export Markdown": "Export Markdown",
- "Load Example Template": "Load Example Template",
+ "Optimized Topic": "Optimized Topic",
+ "Optimizing topic...": "Optimizing topic...",
+ "Optional": "Optional",
+ "optional for local providers": "optional for local providers",
+ "Optionally ground the learning plan with saved notebook records.": "Optionally ground the learning plan with saved notebook records.",
+ "Or": "Or",
+ "OR": "OR",
+ "Original Topic": "Original Topic",
+ "Output": "Output",
+ "Overview": "Overview",
+ "Overview of your recent learning activities": "Overview of your recent learning activities",
+ "pages ready": "pages ready",
+ "Parallel Mode": "Parallel Mode",
+ "Parameters": "Parameters",
+ "Parsing PDF (MinerU)": "Parsing PDF (MinerU)",
+ "partial": "partial",
+ "Paste or type the full folder path": "Paste or type the full folder path",
+ "PDF Export failed": "PDF Export failed",
+ "Pending {{count}}": "Pending {{count}}",
+ "Permanently delete \\": "Permanently delete \\",
+ "Pick a soul from the library above, or write your own. Manage the library in the Souls tab.": "Pick a soul from the library above, or write your own. Manage the library in the Souls tab.",
+ "Pitfalls": "Pitfalls",
+ "placeholder_kb": "placeholder_kb",
+ "Plan Board": "Plan Board",
+ "Plan created successfully.": "Plan created successfully.",
+ "Plan generated.": "Plan generated.",
+ "Plan Mode": "Plan Mode",
+ "Plan v{{version}}": "Plan v{{version}}",
+ "Planned": "Planned",
+ "Planner failed": "Planner failed",
+ "Planning": "Planning",
+ "Planning Progress": "Planning Progress",
+ "Planning Research Strategy": "Planning Research Strategy",
+ "Planning stream closed unexpectedly": "Planning stream closed unexpectedly",
+ "Planning timed out, please retry.": "Planning timed out, please retry.",
+ "Planning...": "Planning...",
+ "Playground": "Playground",
+ "Please enter an editing instruction first.": "Please enter an editing instruction first.",
+ "Please enter an instruction or choose a mode.": "Please enter an instruction or choose a mode.",
+ "Please select a text passage first.": "Please select a text passage first.",
+ "Please select an image file": "Please select an image file",
+ "Please upload a PDF exam paper": "Please upload a PDF exam paper",
+ "Podcast Audio": "Podcast Audio",
+ "Podcast Narration": "Podcast Narration",
+ "Port Configuration": "Port Configuration",
+ "Practice generated.": "Practice generated.",
+ "Practice Preview": "Practice Preview",
+ "Practice question": "Practice question",
+ "Pre-parsed Directory": "Pre-parsed Directory",
+ "Preference": "Preference",
+ "Preview": "Preview",
"Pro Vide Writing": "Pro Vide Writing",
- "Full Draft": "Full Draft",
- "Editor": "Editor",
- "Collapse editor": "Collapse editor",
- "Start writing in Markdown...": "Start writing in Markdown...",
- "Expand editor": "Expand editor",
- "Expand preview": "Expand preview",
- "Collapse preview": "Collapse preview",
- "Nothing to preview yet.": "Nothing to preview yet.",
- "Tell AI what to do with the selection...": "Tell AI what to do with the selection...",
- "Apply AI edit": "Apply AI edit",
- "{{count}} tools": "{{count}} tools",
- "Mode": "Mode",
- "Trace": "Trace",
- "Thought": "Thought",
- "Thinking...": "Thinking...",
- "Tool": "Tool",
+ "Problem Solved": "Problem Solved",
+ "Process": "Process",
+ "Processing": "Processing",
+ "Processing File": "Processing File",
+ "Processing...": "Processing...",
+ "Profiles": "Profiles",
+ "Progress": "Progress",
+ "Provider": "Provider",
+ "Pure vector retrieval, fastest processing speed.": "Pure vector retrieval, fastest processing speed.",
+ "Query input": "Query input",
+ "Query:": "Query:",
+ "Question": "Question",
+ "Question Focuses ({n})": "Question Focuses ({n})",
+ "Question Generated": "Question Generated",
+ "Question Generator": "Question Generator",
+ "questions": "questions",
+ "Questions": "Questions",
+ "Quick Actions": "Quick Actions",
+ "Quick feedback submitted from Goal board.": "Quick feedback submitted from Goal board.",
+ "RAG": "RAG",
+ "RAG Enabled": "RAG Enabled",
+ "RAG Provider": "RAG Provider",
+ "RAG Provider (Optional)": "RAG Provider (Optional)",
+ "RAG-Anything": "LlamaIndex",
+ "RAG-Anything (Docling)": "LlamaIndex",
+ "Raw logs": "Raw logs",
+ "Ready": "Ready",
+ "Ready to Generate": "Ready to Generate",
+ "Ready to open": "Ready to open",
+ "Ready to Research": "Ready to Research",
+ "Reasoning": "Reasoning",
+ "Received invalid planner stream message": "Received invalid planner stream message",
+ "Recent Activity": "Recent Activity",
+ "Record has been saved to {n} notebook": "Record has been saved to {n} notebook",
+ "Record has been saved to {n} notebooks": "Record has been saved to {n} notebooks",
+ "Record Preview": "Record Preview",
+ "records": "records",
+ "Refresh": "Refresh",
+ "Refresh from a session or write directly in the editor.": "Refresh from a session or write directly in the editor.",
+ "Refresh knowledge bases": "Refresh knowledge bases",
+ "Refresh Status": "Refresh Status",
+ "Regenerate Lesson": "Regenerate Lesson",
+ "relations": "relations",
+ "Relations": "Relations",
+ "Relevance Analysis": "Relevance Analysis",
+ "Remaining Days": "Remaining Days",
+ "Remove file": "Remove file",
+ "Replan Changes": "Replan Changes",
+ "Replan finished.": "Replan finished.",
+ "Replanning from latest feedback...": "Replanning from latest feedback...",
+ "Report": "Report",
+ "Report Generated!": "Report Generated!",
+ "Report Generation": "Report Generation",
+ "Report Outline": "Report Outline",
+ "Report Preview": "Report Preview",
+ "Reporting": "Reporting",
+ "Required": "Required",
+ "REQUIRED": "REQUIRED",
+ "Research": "Research",
+ "Research ideas containing {n} knowledge points": "Research ideas containing {n} knowledge points",
+ "Research in progress...": "Research in progress...",
+ "Research Plan": "Research Plan",
+ "Research Report": "Research Report",
+ "Research Tools": "Research Tools",
+ "Researching": "Researching",
"Response": "Response",
+ "Restore Latest Plan": "Restore Latest Plan",
+ "Restoring latest plan...": "Restoring latest plan...",
+ "Retrieving Knowledge": "Retrieving Knowledge",
+ "Retry": "Retry",
+ "Reusable soul templates for creating TutorBots.": "Reusable soul templates for creating TutorBots.",
+ "Review Actions": "Review Actions",
+ "Rewrite": "Rewrite",
+ "round": "round",
+ "Run a focused conversation here without leaving the playground.": "Run a focused conversation here without leaving the playground.",
+ "Run Research": "Run Research",
+ "Running": "Running",
+ "Running planner stream...": "Running planner stream...",
"Running tools and preparing the final edit...": "Running tools and preparing the final edit...",
- "Full Draft AI Edit": "Full Draft AI Edit",
- "Describe how you want the text edited...": "Describe how you want the text edited...",
- "Source": "Source",
- "None": "None",
+ "Running...": "Running...",
+ "Runtime Configuration": "Runtime Configuration",
+ "s": "s",
+ "Save": "Save",
+ "Save All Changes": "Save All Changes",
+ "Save Changes": "Save Changes",
+ "Save Podcast to Notebook": "Save Podcast to Notebook",
+ "Save Selected": "Save Selected",
+ "Save to Notebook": "Save to Notebook",
+ "Saving...": "Saving...",
+ "Script only (TTS not configured)": "Script only (TTS not configured)",
+ "Search": "Search",
+ "Search Configuration": "Search Configuration",
+ "Search notebooks...": "Search notebooks...",
+ "Searching knowledge base...": "Searching knowledge base...",
+ "Searching the web...": "Searching the web...",
+ "Select a knowledge base": "Select a knowledge base",
+ "Select a notebook to inspect its saved records.": "Select a notebook to inspect its saved records.",
+ "Select a notebook to view records": "Select a notebook to view records",
+ "Select a notebook, and the system will generate a personalized learning plan. Through interactive pages and intelligent Q&A, you'll gradually master all the content.": "Select a notebook, and the system will generate a personalized learning plan. Through interactive pages and intelligent Q&A, you'll gradually master all the content.",
+ "Select a notebook...": "Select a notebook...",
+ "Select a question to view details": "Select a question to view details",
+ "Select a RAG pipeline suitable for your document type": "Select a RAG provider (currently only LlamaIndex)",
+ "Select a record to view details": "Select a record to view details",
+ "Select a task to view execution details": "Select a task to view execution details",
+ "Select All": "Select All",
+ "Select at least one notebook": "Select at least one notebook",
+ "Select content from your notebooks to import": "Select content from your notebooks to import",
+ "Select Knowledge Base": "Select Knowledge Base",
+ "Select knowledge base...": "Select knowledge base...",
+ "Select notebook records or describe your research topic": "Select notebook records or describe your research topic",
+ "Select Notebooks": "Select Notebooks",
+ "Select Records": "Select Records",
+ "Select Source (Cross-Notebook)": "Select Source (Cross-Notebook)",
"Select...": "Select...",
- "Auto Mark": "Auto Mark",
- "Example template is already loaded.": "Example template is already loaded.",
- "Loaded example template.": "Loaded example template.",
- "Applied AI edit to the selection.": "Applied AI edit to the selection.",
- "Applied {{action}} to the full draft.": "Applied {{action}} to the full draft.",
- "Applied auto-mark annotations.": "Applied auto-mark annotations.",
- "Added to notebook.": "Added to notebook.",
- "Please select a text passage first.": "Please select a text passage first.",
- "Please enter an instruction or choose a mode.": "Please enter an instruction or choose a mode.",
- "Please enter an editing instruction first.": "Please enter an editing instruction first.",
- "Co-Writer Draft": "Co-Writer Draft",
- "Undo": "Undo",
- "Redo": "Redo",
- "Heading 1": "Heading 1",
- "Heading 2": "Heading 2",
- "Heading 3": "Heading 3",
- "Heading 4": "Heading 4",
- "Heading 5": "Heading 5",
- "Heading 6": "Heading 6",
- "Bold": "Bold",
- "Italic": "Italic",
- "Strikethrough": "Strikethrough",
- "Inline Code": "Inline Code",
- "Blockquote": "Blockquote",
- "Bullet List": "Bullet List",
- "Numbered List": "Numbered List",
- "Task List": "Task List",
- "Horizontal Rule": "Horizontal Rule",
- "Table": "Table",
- "Link": "Link",
- "Image": "Image",
- "Code Block": "Code Block",
- "Mermaid Diagram": "Mermaid Diagram",
- "Math Block": "Math Block",
- "TutorBot Agents": "TutorBot Agents",
- "Manage your in-process TutorBot instances": "Manage your in-process TutorBot instances",
- "Bots": "Bots",
- "Profiles": "Profiles",
- "Souls": "Souls",
- "New Bot": "New Bot",
- "Create TutorBot": "Create TutorBot",
- "(optional)": "(optional)",
- "e.g. Math Tutor": "e.g. Math Tutor",
- "A brief description of what this bot does": "A brief description of what this bot does",
+ "Selected {n} items": "Selected {n} items",
+ "Selected sources will be queried during research.": "Selected sources will be queried during research.",
+ "Send": "Send",
+ "session": "session",
+ "sessions": "sessions",
+ "Set Active": "Set Active",
+ "Set as Default": "Set as Default",
+ "Set default": "Set default",
+ "Settings": "Settings",
+ "Shorten": "Shorten",
+ "Show AI Marks": "Show AI Marks",
+ "Show source": "Show source",
+ "skipped": "skipped",
+ "Skipped {{count}}": "Skipped {{count}}",
+ "Smart Problem Solving": "Smart Problem Solving",
+ "Smart Solver": "Smart Solver",
+ "Solution image": "Solution image",
+ "Solve": "Solve",
+ "Solver History": "Solver History",
"Soul": "Soul",
- "Define the bot's personality, values, and communication style in markdown...": "Define the bot's personality, values, and communication style in markdown...",
- "Pick a soul from the library above, or write your own. Manage the library in the Souls tab.": "Pick a soul from the library above, or write your own. Manage the library in the Souls tab.",
- "Uses default model if empty": "Uses default model if empty",
- "Create & Start": "Create & Start",
- "No TutorBots yet": "No TutorBots yet",
- "Create your first TutorBot to get started.": "Create your first TutorBot to get started.",
- "Stop": "Stop",
- "Permanently delete \"{{name}}\" ({{id}})? This cannot be undone.": "Permanently delete \"{{name}}\" ({{id}})? This cannot be undone.",
+ "Souls": "Souls",
+ "Source": "Source",
+ "Source Notebook": "Source Notebook",
+ "Sources": "Sources",
+ "Start": "Start",
+ "Start Learning": "Start Learning",
+ "Start Research": "Start Research",
+ "Start solving problems or generating questions!": "Start solving problems or generating questions!",
+ "Start writing in Markdown...": "Start writing in Markdown...",
"started {{time}}": "started {{time}}",
- "No bots to configure": "No bots to configure",
- "Create a bot first in the Bots tab.": "Create a bot first in the Bots tab.",
- "Bot": "Bot",
- "Edit {{file}}...": "Edit {{file}}...",
- "Unsaved changes": "Unsaved changes",
- "{{file}} is empty": "{{file}} is empty",
+ "Starting...": "Starting...",
+ "Status": "Status",
+ "Step-by-step tutoring": "Step-by-step tutoring",
+ "Stop": "Stop",
+ "Strategy": "Strategy",
+ "Submit Answer": "Submit Answer",
+ "Submitted": "Submitted",
+ "Submitting feedback...": "Submitting feedback...",
+ "Success": "Success",
+ "Summary": "Summary",
+ "Supported files: PDF, DOCX, TXT, MD": "Supported files: PDF, DOCX, TXT, MD",
"Switch to Edit to add content.": "Switch to Edit to add content.",
- "Reusable soul templates for creating TutorBots.": "Reusable soul templates for creating TutorBots.",
- "New Soul": "New Soul",
- "Content": "Content",
- "e.g. Creative Writer": "e.g. Creative Writer",
- "Define the soul in markdown...": "Define the soul in markdown...",
- "No souls yet": "No souls yet",
- "Create your first soul template. Default presets will be seeded automatically on next server restart.": "Create your first soul template. Default presets will be seeded automatically on next server restart.",
- "Delete soul \"{{name}}\"?": "Delete soul \"{{name}}\"?",
- "Send a message to start the conversation.": "Send a message to start the conversation.",
- "Chat with {{name}}": "Chat with {{name}}",
- "Type a message...": "Type a message...",
- "Thinking ({{count}} steps)": "Thinking ({{count}} steps)",
- "Working...": "Working...",
- "Playground": "Playground",
- "Explore the building blocks of DeepTutor: reusable tools and higher-level capabilities.": "Explore the building blocks of DeepTutor: reusable tools and higher-level capabilities.",
- "Capabilities": "Capabilities",
- "Capability": "Capability",
- "Enable Tools": "Enable Tools",
+ "Switch to narrow sidebar (1:3)": "Switch to narrow sidebar (1:3)",
+ "Switch to wide sidebar (3:1)": "Switch to wide sidebar (3:1)",
+ "System Configuration": "System Configuration",
+ "System Language": "System Language",
+ "System Settings": "System Settings",
+ "System Status": "System Status",
+ "Task Actions": "Task Actions",
+ "Task Completion": "Task Completion",
+ "TBD": "TBD",
+ "Tell AI what to do with the selection...": "Tell AI what to do with the selection...",
+ "Test": "Test",
+ "Test Connection": "Test Connection",
+ "Test failed": "Test failed",
+ "Testing...": "Testing...",
+ "Text-to-Speech": "Text-to-Speech",
+ "The system will parse and generate questions": "The system will parse and generate questions",
+ "Theme": "Theme",
+ "Thinking...": "Thinking...",
+ "This action cannot be undone. All records in this notebook will be permanently deleted.": "This action cannot be undone. All records in this notebook will be permanently deleted.",
"This capability runs without optional tools.": "This capability runs without optional tools.",
- "Try this capability": "Try this capability",
- "Run a focused conversation here without leaving the playground.": "Run a focused conversation here without leaving the playground.",
- "Select knowledge base...": "Select knowledge base...",
- "Code input": "Code input",
- "Query input": "Query input",
- "Enter your input...": "Enter your input...",
- "Enter your query...": "Enter your query...",
- "Running...": "Running...",
- "Execute": "Execute",
- "Details": "Details",
+ "This knowledge base is currently {{status}} and cannot accept uploads yet.": "This knowledge base is currently {{status}} and cannot accept uploads yet.",
+ "This knowledge base is in legacy index format and needs reindex before upload.": "This knowledge base is in legacy index format and needs reindex before upload.",
+ "This notebook is empty for now.": "This notebook is empty for now.",
+ "This will clear all locally cached data": "This will clear all locally cached data",
+ "Thought": "Thought",
+ "Time Blocks": "Time Blocks",
+ "Today": "Today",
+ "Today's Objective": "Today's Objective",
+ "tokens": "tokens",
+ "Tool": "Tool",
"Tool call": "Tool call",
"Tool result": "Tool result",
- "Auto": "Auto",
- "Coding": "Coding",
- "Preference": "Preference",
- "Max Questions": "Max Questions",
- "Or": "Or",
- "You": "You",
- "Generate": "Generate",
- "Selected sources will be queried during research.": "Selected sources will be queried during research.",
- "No source selected: the run will use llm-only research.": "No source selected: the run will use llm-only research.",
- "Describe the research topic...": "Describe the research topic...",
- "Run Research": "Run Research",
- "Code Execution": "Code Execution",
- "default": "default",
- "Extra constraints, style, focus areas...": "Extra constraints, style, focus areas...",
+ "Tools": "Tools",
+ "Tools:": "Tools:",
+ "Topic": "Topic",
+ "Topic Assistant": "Topic Assistant",
+ "Topic Optimization": "Topic Optimization",
+ "Topic:": "Topic:",
+ "Trace": "Trace",
"Try": "Try",
- "No conversations yet": "No conversations yet",
- "Save title": "Save title",
- "Rename chat": "Rename chat",
- "Delete chat": "Delete chat",
- "Notebook": "Notebook",
- "Select History Sessions": "Select History Sessions",
- "Choose one or more past conversations to analyze before this turn.": "Choose one or more past conversations to analyze before this turn.",
- "No matching sessions found.": "No matching sessions found.",
- "Search sessions by title or last message": "Search sessions by title or last message",
- "Retrieve": "Retrieve",
- "Plan": "Plan",
- "Observe": "Observe",
- "Rendering diagram...": "Rendering diagram...",
- "Process Logs": "Process Logs",
- "Raw logs": "Raw logs",
- "Notebook Output": "Notebook Output",
- "Select one or more notebooks. A summary will be generated automatically.": "Select one or more notebooks. A summary will be generated automatically.",
- "Title": "Title",
- "No notebooks found.": "No notebooks found.",
- "Summary preview": "Summary preview",
- "The generated summary will appear here during saving.": "The generated summary will appear here during saving.",
- "Select Notebook Records": "Select Notebook Records",
- "Choose records across one or more notebooks to ground the next request.": "Choose records across one or more notebooks to ground the next request.",
- "Follow-up Chat": "Follow-up Chat",
- "Ask anything about this question": "Ask anything about this question",
- "Try: why this answer is correct, where your reasoning went wrong, or ask for a cleaner explanation.": "Try: why this answer is correct, where your reasoning went wrong, or ask for a cleaner explanation.",
- "Ask a follow-up question about this item...": "Ask a follow-up question about this item...",
- "Mimic Paper": "Mimic Paper",
- "Upload PDF": "Upload PDF",
- "Extra constraints...": "Extra constraints...",
- "Check Answer": "Check Answer",
- "Correct": "Correct",
- "Incorrect": "Incorrect",
- "Retry": "Retry",
- "Reference Answer": "Reference Answer",
- "Previous": "Previous",
- "Write your code here...": "Write your code here...",
- "Type your answer...": "Type your answer...",
- "Research Outline": "Research Outline",
- "Add sub-topic": "Add sub-topic",
- "Sub-topic title...": "Sub-topic title...",
- "Research direction and focus...": "Research direction and focus...",
- "Video": "Video",
- "Low": "Low",
- "High": "High",
- "Style, pacing, color...": "Style, pacing, color...",
- "Fullscreen": "Fullscreen",
- "View Manim Code": "View Manim Code",
- "Video Output": "Video Output",
- "Image Output": "Image Output",
- "Fullscreen math animation output": "Fullscreen math animation output",
- "Delete this chat history?": "Delete this chat history?"
+ "Try this capability": "Try this capability",
+ "TTS": "TTS",
+ "TTS Configuration": "TTS Configuration",
+ "TTS Model": "TTS Model",
+ "TTS not configured, script generation only.": "TTS not configured, script generation only.",
+ "TutorBot": "TutorBot",
+ "TutorBot Agents": "TutorBot Agents",
+ "Type": "Type",
+ "Type your answer here...": "Type your answer here...",
+ "Type your message...": "Type your message...",
+ "Type:": "Type:",
+ "Unknown": "Unknown",
+ "Unknown error": "Unknown error",
+ "Unknown time": "Unknown time",
+ "Unsaved changes": "Unsaved changes",
+ "Untitled": "Untitled",
+ "Untitled Session": "Untitled Session",
+ "Upload": "Upload",
+ "Upload a Math Problem Image": "Upload a Math Problem Image",
+ "Upload an image to see analysis details": "Upload an image to see analysis details",
+ "Upload documents": "Upload documents",
+ "Upload Documents": "Upload Documents",
+ "Upload documents to": "Upload documents to",
+ "Upload Exam Paper (PDF)": "Upload Exam Paper (PDF)",
+ "Upload failed": "Upload failed",
+ "Upload image (drag, paste, or click)": "Upload image (drag, paste, or click)",
+ "Upload Process": "Upload Process",
+ "Uploading PDF": "Uploading PDF",
+ "Use .env": "Use .env",
+ "Use folders synced with Google Drive, OneDrive, SharePoint, or Dropbox for automatic cloud integration.": "Use folders synced with Google Drive, OneDrive, SharePoint, or Dropbox for automatic cloud integration.",
+ "User": "User",
+ "User Query": "User Query",
+ "Uses default model if empty": "Uses default model if empty",
+ "Validation": "Validation",
+ "Verified by DeepTutor Logic Engine": "Verified by DeepTutor Logic Engine",
+ "Verified by DeepTutor Vision Engine": "Verified by DeepTutor Vision Engine",
+ "View": "View",
+ "View All": "View All",
+ "View Day Details": "View Day Details",
+ "View Full Report": "View Full Report",
+ "View on GitHub": "View on GitHub",
+ "View progress in the Logs panel": "View progress in the Logs panel",
+ "Vision Solver": "Vision Solver",
+ "Visit DeepTutor Homepage": "Visit DeepTutor Homepage",
+ "Waiting for execution logs...": "Waiting for execution logs...",
+ "Waiting for logic execution...": "Waiting for logic execution...",
+ "Waiting for logs...": "Waiting for logs...",
+ "Waiting for the selected interactive page...": "Waiting for the selected interactive page...",
+ "Waiting in queue": "Waiting in queue",
+ "Waiting to start...": "Waiting to start...",
+ "Web": "Web",
+ "Web Search": "Web Search",
+ "Web Search Enabled": "Web Search Enabled",
+ "WebSocket planning failed": "WebSocket planning failed",
+ "WebSocket unavailable, falling back to REST planning...": "WebSocket unavailable, falling back to REST planning...",
+ "Welcome to Deep Research Lab. \n\nPlease configure your settings above, then enter a research topic below.": "Welcome to Deep Research Lab. \n\nPlease configure your settings above, then enter a research topic below.",
+ "Welcome to DeepTutor": "Welcome to DeepTutor",
+ "What would you like to learn?": "What would you like to learn?",
+ "words": "words",
+ "Workspace": "WORKSPACE",
+ "Written": "Written",
+ "Yesterday": "Yesterday",
+ "You": "You",
+ "You can generate ideas from text description alone, or select notebook records above for richer context.": "You can generate ideas from text description alone, or select notebook records above for richer context.",
+ "Your activities will appear here": "Your activities will appear here",
+ "Your browser does not support the audio element.": "Your browser does not support the audio element.",
+ "Your Thoughts": "Your Thoughts",
+ "一键出题": "Generate Questions",
+ "先用兜底 KB 跑通 MVP,后面替换成真实知识库即可。": "Use a fallback KB to validate the MVP first, then replace it with a real knowledge base.",
+ "创建 Session 后会通过 WebSocket 返回阶段进度,并在完成时推送最新计划。": "After creating a session, stage progress is returned via WebSocket and the latest plan is pushed on completion.",
+ "反馈已提交,可稍后手动触发重排。": "Feedback submitted. You can trigger replanning manually later.",
+ "反馈已提交,是否基于最新反馈立即重排计划?": "Feedback submitted. Replan immediately based on the latest feedback?",
+ "学习周期": "Study Duration",
+ "尚未创建": "Not created yet",
+ "当前会话": "Current Session",
+ "当前版本支持在没有知识库的情况下先生成骨架计划,方便你先演示完整链路;后续接入真实 KB 后,计划会自动替换成更细的知识点图谱。": "Generate a scaffold plan first, then auto-refine it after a real KB is connected.",
+ "把模糊的学习目标,压缩成按天可执行的计划。": "Turn vague learning goals into executable daily plans.",
+ "提交反馈": "Submit Feedback",
+ "本次未生成题目,可重试一次。": "No questions generated this time. You can retry.",
+ "正在根据最新反馈重排计划...": "Replanning based on latest feedback...",
+ "每日预算": "Daily Budget",
+ "没有 KB 时会显示 scaffolded plan,便于先联调整条链路。": "Without a KB, a scaffolded plan is shown to help validate the flow first.",
+ "生成后会在这里按天展示任务卡片。": "Generated task cards will be shown here by day.",
+ "生成学习路径": "Generate Learning Path",
+ "目标级别": "Goal Level",
+ "等待阶段消息...": "Waiting for stage updates...",
+ "触发重排": "Trigger Replan",
+ "输入你的学习目标、时间约束和希望达到的水平": "Enter your learning goal, time constraints, and target level",
+ "重试出题": "Retry Question Generation",
+ "阶段:{{stage}}": "Stage: {{stage}}",
+ "Brainstorm": "Brainstorm",
+ "Code": "Code",
+ "Reason": "Reason",
+ "Arxiv Search": "Arxiv Search",
+ "Deep Solve": "Deep Solve",
+ "Quiz Generation": "Quiz Generation",
+ "Math Animator": "Math Animator",
+ "Flexible conversation with any tool": "Flexible conversation with any tool",
+ "Multi-step reasoning & problem solving": "Multi-step reasoning & problem solving",
+ "Auto-validated question generation": "Auto-validated question generation",
+ "Comprehensive multi-agent research": "Comprehensive multi-agent research",
+ "Generate math videos or storyboard images": "Generate math videos or storyboard images",
+ "Papers": "Papers",
+ "Memory Summary": "Summary",
+ "Memory Profile": "Profile",
+ "Running summary of the learning journey. Auto-updated after conversations.": "Running summary of the learning journey. Auto-updated after conversations.",
+ "User identity, preferences, and knowledge levels. Auto-updated after conversations.": "User identity, preferences, and knowledge levels. Auto-updated after conversations.",
+ "Not updated yet": "Not updated yet",
+ "Updated": "Updated",
+ "No {{name}} yet": "No {{name}} yet",
+ "{{name}} saved": "{{name}} saved",
+ "{{name}} cleared": "{{name}} cleared",
+ "Clear {{name}}?": "Clear {{name}}?",
+ "Memory refreshed from session": "Memory refreshed from session",
+ "真题分析与考点提取": "Past Paper Analysis & Keypoint Mining",
+ "真题分析输入": "Exam Analysis Input",
+ "可粘贴题目原文、考点说明、历年题摘录...": "Paste original questions, key point notes, or excerpts from past exams...",
+ "已选择 {{count}} 个文件": "{{count}} file(s) selected",
+ "开始分析真题频次": "Analyze Exam Frequency",
+ "请先生成学习路径,再进行真题分析。": "Please generate a learning path first, then run exam analysis.",
+ "请至少粘贴题目文本或上传一个文件。": "Please paste question text or upload at least one file.",
+ "真题分析失败": "Exam analysis failed",
+ "样本题数": "Question Count",
+ "文本来源": "Text Sources",
+ "图片来源": "Image Sources",
+ "高频考点 Top": "Top Key Points",
+ "高频题型 Top": "Top Question Types",
+ "分析结论": "Analysis Conclusion",
+ "Exam Radar": "Exam Radar",
+ "前往考点雷达": "Go to Exam Radar",
+ "请先在备考式学习中生成学习路径,再回到考点雷达。": "Please generate a learning path in exam-prep mode first, then return to Exam Radar.",
+ "从真题中提取高频题型与高频考点,给出可执行的冲刺优先级。": "Extract high-frequency question types and key points from real exams, and provide actionable sprint priorities.",
+ "支持 PDF、题目截图和文本粘贴,自动统计频次并输出考点 Top 与题型 Top,作为后续备考路径优化依据。": "Supports PDF, screenshots, and pasted text. Automatically counts frequency and outputs top key points and question types for later plan optimization.",
+ "分析目标": "Analysis Target",
+ "高频考点挖掘": "High-Frequency Key Point Mining",
+ "当前样本": "Current Sample",
+ "待分析": "Pending Analysis",
+ "关联会话": "Linked Session",
+ "分析输入": "Analysis Input",
+ "建议先在备考式学习中生成路径,再将真题材料在这里统一分析。": "Generate a study path in exam-prep mode first, then analyze exam materials here.",
+ "会话 ID": "Session ID",
+ "输入备考式学习会话 ID": "Enter exam-prep session ID",
+ "返回备考式学习": "Back to Exam Prep",
+ "雷达结果面板": "Radar Result Panel",
+ "上传真题后,这里会展示高频题型与高频考点分析结果。": "After uploading exam questions, high-frequency question types and key points will be shown here.",
+ "{{count}} 题": "{{count}} questions"
}
diff --git a/web/locales/zh/app.json b/web/locales/zh/app.json
index b6c4fe3a7..d87d66c2e 100644
--- a/web/locales/zh/app.json
+++ b/web/locales/zh/app.json
@@ -1,861 +1,919 @@
{
- "language.english": "English",
- "language.chinese": "中文",
- "Start": "开始",
- "Learn": "学习",
- "Research": "研究",
- "Dashboard": "仪表盘",
- "Question Generator": "题目生成器",
- "Custom": "自定义",
- "Mimic Exam": "仿真试卷",
- "Generating": "生成中",
- "questions": "道题",
- "extended": "扩展",
- "Custom Mode": "自定义模式",
- "Mimic Exam Paper Mode": "仿真试卷模式",
- "Generate questions based on knowledge base content": "基于知识库内容生成题目",
- "Generate similar questions based on an exam paper": "基于试卷生成相似题目",
- "Knowledge Point / Topic": "知识点 / 主题",
- "e.g. Gradient Descent Optimization": "例如:梯度下降优化",
- "Count": "数量",
- "Generate Questions": "生成题目",
- "Questions": "题目列表",
- "Type your answer here...": "在此输入你的答案…",
- "Correct Answer": "正确答案",
- "Explanation": "解析",
- "Relevance Analysis": "相关性分析",
- "round": "轮",
- "s": "",
- "Submit Answer": "提交答案",
- "Submitted": "已提交",
- "Generating questions...": "正在生成题目…",
- "View progress in the Logs panel": "可在日志面板查看进度",
- "Select a question to view details": "请选择一道题查看详情",
- "Brainstorm": "头脑风暴",
- "Code": "代码",
- "Reason": "推理",
- "Arxiv Search": "论文搜索",
- "Papers": "论文",
- "Deep Solve": "深度解题",
- "Quiz Generation": "题目生成",
- "Math Animator": "数学动画",
- "Flexible conversation with any tool": "灵活对话,可使用任意工具",
- "Multi-step reasoning & problem solving": "多步推理与问题求解",
- "Auto-validated question generation": "自动校验的题目生成",
- "Comprehensive multi-agent research": "多智能体综合研究",
- "Generate math videos or storyboard images": "生成数学视频或分镜图",
- "No KB": "无知识库",
- "Enable Knowledge Base source first": "请先启用知识库来源",
- "Tools": "工具",
- "Send": "发送",
- "Drop images here": "将图片拖放到此处",
- "Attachment preview": "附件预览",
- "Describe the math animation or storyboard you want...": "描述你想要的数学动画或分镜…",
- "Smart Solver": "智能解题",
- "Vision Solver": "视觉解题",
- "Upload a Math Problem Image": "上传数学题目图片",
- "Describe the problem or ask a question...": "描述问题或提问...",
- "Figure Reconstruction": "配图还原",
- "Verified by DeepTutor Vision Engine": "已通过 DeepTutor 视觉引擎验证",
+ ". Documents in the folder will be processed and added to this knowledge base.": "。文件夹内的文档将被处理并添加到该知识库。",
+ "(History)": "(历史)",
+ "(optional)": "(可选)",
+ "{{count}} min": "{{count}} 分钟",
+ "{{count}} tasks": "{{count}} 个任务",
+ "{{count}} tools": "{{count}} 个工具",
+ "{{count}} 分钟": "{{count}} 分钟",
+ "{{count}} 天": "{{count}} 天",
+ "{{count}}%": "{{count}}%",
+ "{{file}} is empty": "{{file}} 为空",
+ "{n} file selected": "已选择 {n} 个文件",
+ "{n} files selected": "已选择 {n} 个文件",
+ "{n} notebook selected": "已选择 {n} 个笔记本",
+ "{n} notebooks selected": "已选择 {n} 个笔记本",
+ "✨ Your description here": "✨ 在此输入你的描述",
+ "💡 Tip:": "💡 提示:",
+ "📄 Supported files: PDF, DOCX, TXT, MD": "📄 支持文件:PDF、DOCX、TXT、MD",
+ "7天内完成微积分核心知识复习,并建立可执行的刷题节奏": "7天内完成微积分核心知识复习,并建立可执行的刷题节奏",
+ "A brief description of what this bot does": "简要描述这个机器人做什么",
+ "Acceptance Criteria": "验收标准",
+ "Active": "当前",
+ "Active LLM Model": "当前 LLM 模型",
+ "Active Models": "活动模型",
+ "Activity": "活动",
+ "Activity Details": "活动详情",
+ "Activity Log": "活动日志",
+ "Add Configuration": "添加配置",
+ "Add New Configuration": "添加新配置",
+ "Add records from Solver, Question, Research, or Co-Writer": "从解题、出题、研究或智能写作中添加记录",
+ "Add to Notebook": "保存到笔记本",
+ "Added {{count}}": "新增 {{count}}",
+ "Added Successfully!": "保存成功!",
+ "Added to notebook.": "已添加到笔记本。",
+ "Advanced": "进阶",
+ "After generation, 3-5 key points will be listed here.": "生成后,3-5 个关键点将列在这里。",
+ "After generation, the narration script will appear here.": "生成后,旁白脚本将显示在这里。",
+ "After generation, you can play the podcast audio here.": "生成后,您可以在这里播放播客音频。",
+ "AI Edit Assistant": "AI 编辑助手",
+ "AI Mark": "AI 批改",
+ "All": "全部",
+ "All Activities": "所有活动",
"Analysis Details": "分析详情",
- "Detected Elements": "检测到的元素",
- "Elements": "元素",
- "Geometric Analysis": "几何分析",
- "Constraints": "约束条件",
- "Relations": "几何关系",
- "Image is reference for problem": "图片是题目的参考",
- "Commands generated": "生成的命令",
- "Validation": "验证",
- "Issues found": "发现的问题",
- "Final commands": "最终命令",
- "Upload an image to see analysis details": "上传图片以查看分析详情",
"Analyzing Image": "正在分析图片",
- "Extracting geometric elements and generating visualization...": "正在提取几何元素并生成可视化...",
- "Element Detection": "元素检测",
- "Command Generation": "命令生成",
- "Found": "发现",
- "elements": "个元素",
- "constraints": "个约束",
- "relations": "个关系",
- "commands": "条命令",
- "No issues found": "未发现问题",
- "issues fixed": "个问题已修复",
- "Refresh": "刷新",
- "Maximize": "最大化",
- "Minimize": "最小化",
- "Please select an image file": "请选择图片文件",
- "Image size must be less than 10MB": "图片大小不能超过 10MB",
- "Enter image URL": "输入图片 URL",
- "Load": "加载",
- "Failed to load image from URL": "从 URL 加载图片失败",
- "Upload image (drag, paste, or click)": "上传图片(拖拽、粘贴或点击)",
- "IdeaGen": "创意生成",
- "Deep Research": "深度研究",
- "Welcome to Deep Research Lab. \n\nPlease configure your settings above, then enter a research topic below.": "欢迎来到深度研究实验室。\n\n请先在上方配置设置,然后在下方输入研究主题。",
- "PDF Export failed": "导出 PDF 失败",
- "Plan Mode": "计划模式",
- "Research Tools": "研究工具",
- "Topic Optimization": "主题优化",
- "Topic Assistant": "主题助手",
- "Start Research": "开始研究",
- "Research in progress...": "研究进行中…",
- "Co-Writer": "智能写作",
- "Intelligent markdown editor with AI-powered writing assistance.": "带 AI 写作辅助的智能 Markdown 编辑器。",
- "Guided Learning": "引导式学习",
- "TutorBot": "辅导机器人",
- "Knowledge": "知识库",
- "Memory": "记忆",
- "Knowledge Bases": "知识库",
- "Refresh knowledge bases": "刷新知识库列表",
- "New Knowledge Base": "新建知识库",
- "Set as Default": "设为默认",
- "Upload Documents": "上传文档",
- "Delete Knowledge Base": "删除知识库",
- "Upload failed": "上传失败",
- "No knowledge bases found. Create one to get started.": "未找到任何知识库。请先创建一个。",
- "Create Knowledge Base": "创建知识库",
- "Knowledge Base Name": "知识库名称",
- "Notebooks": "笔记本",
- "Settings": "设置",
- "Loading": "加载中...",
- "Save": "保存",
+ "Answer:": "答案:",
+ "API Key": "API Key",
+ "API Key is required for cloud providers": "云端服务需要 API Key",
+ "Applied {{action}} to the full draft.": "已将 {{action}} 应用于全文草稿。",
+ "Applied AI edit to the selection.": "已将 AI 编辑应用到选中文本。",
+ "Applied auto-mark annotations.": "已应用自动批注。",
+ "Apply": "应用",
+ "Apply AI edit": "应用 AI 编辑",
+ "Apply Environment Changes": "应用环境变量更改",
+ "Are you sure you want to delete this configuration?": "确定要删除此配置吗?",
+ "Ask a difficult question...": "输入一道难题…",
+ "Ask a Question": "提问问题",
+ "Ask about key points, framework, or pitfalls...": "可提问:常考知识点、知识框架、典型易错点…",
+ "Ask anything — I'm here to help you understand.": "任何问题都可以问,我会帮助你理解。",
+ "Ask anything...": "问我任何问题...",
+ "Assistant": "助手",
+ "Attachment preview": "附件预览",
+ "Auto": "自动",
+ "Auto Mark": "自动批改",
+ "Auto-validated quizzes": "自动校验的测验",
+ "Back to Day Plan": "返回当日计划",
+ "Back to Goal Board": "返回计划看板",
+ "Backend Port": "后端端口",
+ "Backend Service": "后端服务",
+ "Base Directory": "基础目录",
+ "Base URL": "Base URL",
+ "Base URL is required for testing": "测试需要 Base URL",
+ "Bot": "机器人",
+ "Bots": "Bots",
+ "Brainstorm & synthesize": "头脑风暴与综合",
+ "Breadth First": "广度优先",
+ "C:\\Users\\name\\Documents\\papers": "C:\\Users\\name\\Documents\\papers",
"Cancel": "取消",
- "Error": "错误",
- "Success": "成功",
- "Unknown error": "未知错误",
- "tokens": "tokens",
- "View All": "查看全部",
- "Create": "创建",
- "Overview": "概览",
- "LLM": "LLM",
- "Embedding": "Embedding",
- "TTS": "TTS",
- "Search": "搜索",
- "Light": "浅色",
- "Dark": "深色",
- "Configure your AI services and preferences": "配置你的 AI 服务与偏好",
- "Local Data": "本地数据",
- "Clear Cache": "清除缓存",
- "Confirm Clear": "确认清除",
- "This will clear all locally cached data": "此操作将清除所有本地缓存数据",
+ "Capabilities": "能力",
+ "Capability": "能力",
+ "Changes made here take effect immediately but are not saved to file": "此处的更改立即生效但不会保存到文件",
+ "chars": "字符",
+ "Chat": "聊天",
+ "Chat History": "聊天历史",
+ "Chat Session": "聊天会话",
+ "Checking...": "检测中…",
+ "Chinese": "中文",
+ "Choose files...": "选择文件…",
+ "Clear": "清空",
+ "Clear all": "清空全部",
"Clear All": "全部清除",
- "Including: chat history, solver history, question results, research reports, guided learning progress, Co-Writer content, etc. This action cannot be undone.": "包括:聊天记录、解题历史、题目生成结果、研究报告、引导学习进度、Co-Writer 内容等。此操作不可撤销。",
- "Model": "模型",
- "Provider": "提供商",
- "Port Configuration": "端口配置",
- "Backend Port": "后端端口",
- "Frontend Port": "前端端口",
- "LLM Configuration": "LLM 配置",
- "Configure language model providers": "配置语言模型提供商",
- "Embedding Configuration": "Embedding 配置",
+ "Clear Cache": "清除缓存",
+ "Clear Chat": "清空对话",
+ "Clear logs": "清空日志",
+ "Clear progress status": "清除进度状态",
+ "Click or drop to add more files": "点击或拖拽以继续添加文件",
+ "Click Start to generate interactive pages.": "点击「开始」后将生成互动学习页面。",
+ "Click to edit": "点击编辑",
+ "Click to expand": "点击展开",
+ "Click to upload PDF": "点击上传 PDF",
+ "Close": "关闭",
+ "Close dialog": "关闭对话框",
+ "Cmd+S to save · Markdown supported": "按 Cmd+S 保存 · 支持 Markdown",
+ "Co-Writer": "智能写作",
+ "Co-Writer Draft": "Co-Writer 草稿",
+ "Code input": "代码输入",
+ "Coding": "编程",
+ "Collaborative writing": "协作写作",
+ "Collapse editor": "收起编辑器",
+ "Collapse left panel": "收起左侧面板",
+ "Collapse middle panel": "收起中间面板",
+ "Collapse preview": "收起预览",
+ "Collapse right panel": "收起右侧面板",
+ "Collapse sidebar": "收起侧边栏",
+ "Collection of Research Ideas": "研究创意合集",
+ "Color": "颜色",
+ "Color:": "颜色:",
+ "Command Generation": "命令生成",
+ "commands": "条命令",
+ "Commands generated": "生成的命令",
+ "Competent": "熟练",
+ "Complete": "完成",
+ "Complete Learning": "完成学习",
+ "Completed": "已完成",
+ "Completed {{done}}/{{total}}": "已完成 {{done}}/{{total}}",
+ "Comprehensive analysis": "全面分析",
+ "Configuration Saved": "配置已保存",
+ "Configuration Status": "配置状态",
"Configure embedding model providers": "配置向量模型提供商",
- "TTS Configuration": "TTS 配置",
+ "Configure in Environment Variables tab": "请在环境变量标签页中配置",
+ "Configure language model providers": "配置语言模型提供商",
"Configure text-to-speech providers": "配置文字转语音提供商",
- "Search Configuration": "搜索配置",
"Configure web search providers": "配置网络搜索提供商",
- "Add Configuration": "添加配置",
- "Default": "默认",
- "Active": "当前",
- "Set Active": "设为当前",
- "Test": "测试",
- "Edit": "编辑",
- "Delete": "删除",
- "No configurations found. Add one to get started.": "未找到任何配置。请先添加一个配置。",
- "Are you sure you want to delete this configuration?": "确定要删除此配置吗?",
- "Connection test failed": "连接测试失败",
- "Name": "名称",
- "My Configuration": "我的配置",
- "local": "本地",
- "Base URL": "Base URL",
- "Use .env": "使用 .env",
- "API Key": "API Key",
- "optional for local providers": "本地服务可选",
- "Not required": "不需要",
- "Base URL is required for testing": "测试需要 Base URL",
- "API Key is required for cloud providers": "云端服务需要 API Key",
- "Model name is required": "需要填写模型名称",
- "Dimensions is required for embedding models": "向量模型需要维度",
- "Connection successful": "连接成功",
+ "Configure your AI services and preferences": "配置你的 AI 服务与偏好",
+ "Configured": "已配置",
+ "Confirm Clear": "确认清除",
"Connection failed": "连接失败",
+ "Connection successful": "连接成功",
+ "Connection test failed": "连接测试失败",
"Connection test failed - network error": "连接测试失败:网络错误",
- "Failed to update configuration": "更新配置失败",
- "Failed to add configuration": "添加配置失败",
- "Edit Configuration": "编辑配置",
- "Add New Configuration": "添加新配置",
- "Test Connection": "测试连接",
- "Save Changes": "保存更改",
- "System Settings": "系统设置",
- "Manage system configuration and preferences": "管理系统配置和偏好设置",
- "General Settings": "常规设置",
- "Environment Variables": "环境变量",
- "Interface Preferences": "界面偏好",
- "Theme": "主题",
- "Light Mode": "浅色模式",
- "Dark Mode": "深色模式",
- "Language": "语言",
- "English": "英语",
- "Chinese": "中文",
- "System Configuration": "系统配置",
- "System Language": "系统语言",
- "Default language for system operations": "系统操作的默认语言",
- "Web Search": "网络搜索",
- "Max Results": "最大结果数",
- "Knowledge Base": "知识库",
- "Default KB": "默认知识库",
- "Base Directory": "基础目录",
- "Text-to-Speech": "文字转语音",
- "Default Voice": "默认语音",
- "Default Language": "默认语言",
- "Active Models": "活动模型",
- "Status": "状态",
- "Active LLM Model": "当前 LLM 模型",
- "Not configured": "未配置",
- "Configure in Environment Variables tab": "请在环境变量标签页中配置",
- "Save All Changes": "保存所有更改",
- "Configuration Saved": "配置已保存",
- "Configuration Status": "配置状态",
- "Refresh Status": "刷新状态",
- "Runtime Configuration": "运行时配置",
- "Environment variables are loaded from": "环境变量从",
- "file on startup": "文件加载于启动时",
- "Changes made here take effect immediately but are not saved to file": "此处的更改立即生效但不会保存到文件",
- "On restart, values will be reloaded from": "重启后,值将从以下文件重新加载",
- "Apply Environment Changes": "应用环境变量更改",
- "Environment Updated!": "环境变量已更新!",
- "REQUIRED": "必填",
- "Error loading data": "加载数据出错",
- "Failed to load settings": "加载设置失败",
- "Failed to connect to backend": "连接后端失败",
- "Overview of your recent learning activities": "您最近的学习活动概览",
- "Recent Activity": "最近活动",
- "Loading activities...": "加载活动中...",
- "No recent activity found": "未找到最近活动",
- "Start solving problems or generating questions!": "开始解题或生成题目吧!",
- "Problem Solved": "问题已解决",
- "Question Generated": "题目已生成",
- "Research Report": "研究报告",
- "Activity": "活动",
- "My Notebooks": "我的笔记本",
- "records": "条记录",
- "Solve": "解题",
- "Question": "题目",
- "No notebooks yet": "暂无笔记本",
+ "constraints": "个约束",
+ "Constraints": "约束条件",
+ "Content": "内容",
+ "Context Source (Optional)": "上下文来源(可选)",
+ "Continue": "继续",
+ "Correct Answer": "正确答案",
+ "Correct Answer & Explanation": "正确答案与解析",
+ "Count": "数量",
+ "Count:": "数量:",
+ "Create": "创建",
+ "Create & Initialize": "创建并初始化",
+ "Create & Start": "创建并启动",
+ "Create a bot first in the Bots tab.": "请先在“机器人”标签页创建一个机器人。",
+ "Create knowledge base": "创建知识库",
+ "Create Knowledge Base": "创建知识库",
+ "Create New Notebook": "新建笔记本",
+ "Create notebook": "创建笔记本",
+ "Create Process": "创建流程",
+ "Create TutorBot": "创建 TutorBot",
"Create your first notebook": "创建您的第一个笔记本",
"Create your first notebook above": "请在上方创建你的第一个笔记本",
- "System Status": "系统状态",
- "Quick Actions": "快捷操作",
- "Ask a Question": "提问问题",
- "Generate Quiz": "生成测验",
- "Home": "首页",
- "History": "历史记录",
- "What would you like to learn?": "你想学点什么?",
- "Ask anything — I'm here to help you understand.": "随便问——我来帮你搞懂。",
- "Welcome to DeepTutor": "欢迎使用 DeepTutor",
- "How can I help you today?": "今天我能帮您什么?",
- "Ask anything...": "问我任何问题...",
- "Type your message...": "输入您的消息...",
- "RAG": "知识库检索",
- "Select Knowledge Base": "选择知识库",
- "Explore Modules": "探索模块",
- "Smart Problem Solving": "智能问题解答",
- "Generate Practice Questions": "生成练习题",
+ "Create your first soul template. Default presets will be seeded automatically on next server restart.": "Create your first soul template. Default presets will be seeded automatically on next server restart.",
+ "Create your first TutorBot to get started.": "Create your first TutorBot to get started.",
+ "Creating goal session...": "正在创建目标会话…",
+ "Creating Question Plan": "生成题目计划",
+ "Current Action:": "当前动作:",
+ "Current note is empty, cannot generate narration.": "当前笔记为空,无法生成旁白。",
+ "Current page": "当前页面",
+ "Currently Writing": "正在撰写",
+ "Custom": "自定义",
+ "Custom Mode": "自定义模式",
+ "Daily Minutes": "每日时长",
+ "Dark": "深色",
+ "Dark Mode": "深色模式",
+ "Dashboard": "仪表盘",
+ "Day {{count}}": "第 {{count}} 天",
+ "Day Plan Detail": "当日详细计划",
+ "Days per Week": "每周天数",
+ "Deep Research": "深度研究",
"Deep Research Reports": "深度研究报告",
- "Generate Novel Ideas": "生成创新想法",
- "Searching knowledge base...": "正在搜索知识库...",
- "Searching the web...": "正在搜索网络...",
- "Generating response...": "正在生成回复...",
- "Clear Chat": "清空对话",
- "New Session": "新会话",
- "New": "新建",
- "Ask a difficult question...": "输入一道难题…",
+ "DeepTutor": "DeepTutor",
"DeepTutor can make mistakes. Please verify important information.": "DeepTutor 可能会犯错,请核对重要信息。",
- "Logic Stream": "推理流",
- "Running": "运行中",
- "I can help you solve complex STEM problems using multi-step reasoning. Try asking about calculus, physics, or coding algorithms.": "我可以用多步推理帮助你解决复杂的 STEM 问题。你可以尝试提问微积分、物理或编程算法相关问题。",
- "Sources": "来源",
- "RAG Enabled": "已启用 RAG",
- "Web Search Enabled": "已启用网络搜索",
+ "DeepTutor Logo": "DeepTutor Logo",
+ "default": "默认",
+ "Default": "默认",
+ "Default KB": "默认知识库",
+ "Default Language": "默认语言",
+ "Default language for system operations": "系统操作的默认语言",
+ "Default Voice": "默认语音",
+ "Define the bot's personality, values, and communication style in markdown...": "使用 Markdown 定义机器人的人格、价值观和沟通风格…",
+ "Define the soul in markdown...": "使用 Markdown 定义灵魂内容…",
+ "Delete": "删除",
+ "Delete Knowledge Base": "删除知识库",
+ "Delete knowledge base \"{{name}}\"?": "删除知识库“{{name}}”?",
+ "Delete Notebook?": "删除笔记本?",
+ "Delete soul \\": "删除灵魂 \\",
+ "Depth First": "深度优先",
+ "Describe how you want the text edited...": "描述你希望如何编辑文本…",
+ "Describe the HTML issue, e.g.: button not clickable, style display error, interaction not working...": "描述 HTML 问题,例如:按钮无法点击、样式显示错误、交互不生效…",
+ "Describe the math animation or storyboard you want...": "描述你想要的数学动画或分镜…",
+ "Describe the problem or ask a question...": "描述问题或提问...",
+ "Describe the research topic...": "描述研究主题…",
+ "Describe what you want to learn": "描述你想学习的内容",
+ "Describe your research topic or idea (no notebook selection needed)...": "描述你的研究主题或想法(无需选择笔记本)……",
+ "Describe your thoughts or research direction based on these materials...": "结合这些材料,描述你的想法或研究方向……",
+ "Description": "描述",
+ "Description (Optional)": "描述(可选)",
+ "Deselect": "取消选择",
+ "Details": "详情",
+ "Detected Elements": "检测到的元素",
+ "Diagram rendering error": "图表渲染出错",
+ "Difficulty": "难度",
+ "Difficulty:": "难度:",
+ "Dimensions is required for embedding models": "向量模型需要维度",
+ "Disabled": "已禁用",
+ "Discover research ideas from your notes": "从你的笔记中发现研究创意",
+ "Documents": "文档",
+ "done": "完成",
+ "Done {{count}}": "完成 {{count}}",
+ "Drag & drop files or folders here": "将文件或文件夹拖拽到此处",
+ "Drop images here": "将图片拖拽到这里",
+ "Dropped {{count}}": "移除 {{count}}",
+ "e.g. 2211asm1": "例如:2211asm1",
+ "e.g. Creative Writer": "例如:创意写作者",
+ "e.g. Gradient Descent Optimization": "例如:梯度下降优化",
+ "e.g. Make it more formal...": "例如:使其更正式...",
+ "e.g. Math Tutor": "例如:数学导师",
+ "e.g., Math101": "例如:Math101",
+ "Easy": "简单",
+ "Edit": "编辑",
+ "Edit {{file}}...": "编辑 {{file}}…",
+ "Edit Configuration": "编辑配置",
+ "Edit Notebook": "编辑笔记本",
+ "Editor": "编辑器",
+ "Element Detection": "元素检测",
+ "elements": "个元素",
+ "Elements": "元素",
+ "Embedding": "Embedding",
+ "Embedding Configuration": "Embedding 配置",
+ "Embeddings": "向量模型",
+ "Enable Tools": "启用工具",
+ "Enabled": "已启用",
+ "English": "英语",
+ "Enter a topic in the left panel to start deep research.": "在左侧输入主题以开始深度研究。",
+ "Enter image URL": "输入图片 URL",
+ "Enter your description...": "输入你的描述…",
+ "Enter your input...": "输入你的内容…",
+ "Enter your query...": "输入你的问题…",
+ "Environment Updated!": "环境变量已更新!",
+ "Environment Variables": "环境变量",
+ "Environment variables are loaded from": "环境变量从",
+ "Error": "错误",
+ "Error loading data": "加载数据出错",
+ "Example template is already loaded.": "示例模板已加载。",
+ "Execute": "执行",
+ "Expand": "扩展",
+ "Expand editor": "展开编辑器",
+ "Expand left panel": "展开左侧面板",
+ "Expand middle panel": "展开中间面板",
+ "Expand preview": "展开预览",
+ "Expand right panel": "展开右侧面板",
+ "Expand sidebar": "展开侧边栏",
+ "Explanation": "解析",
+ "Explore Modules": "探索模块",
+ "Explore the building blocks of DeepTutor: reusable tools and higher-level capabilities.": "探索 DeepTutor 的构建模块:可复用工具与更高层能力。",
+ "Export as Markdown": "导出为 Markdown",
+ "Export as PDF": "导出为 PDF",
+ "Export Markdown": "导出 Markdown",
+ "extended": "扩展",
+ "Extended Aspects": "扩展维度",
+ "Extension Points": "扩展点",
+ "Extra constraints, style, focus areas...": "额外约束、风格、重点方向…",
+ "Extracting geometric elements and generating visualization...": "正在提取几何元素并生成可视化...",
+ "Extracting Items": "提取内容",
+ "Extracting Questions": "提取题目",
+ "Failed": "失败",
+ "Failed to add configuration": "添加配置失败",
+ "Failed to ask interactive assistant": "学习助教回答失败",
+ "Failed to connect to backend": "连接后端失败",
+ "Failed to generate goal plan": "生成目标计划失败",
+ "Failed to generate interactive page": "生成互动课件失败",
+ "Failed to generate narration, please try again.": "生成旁白失败,请重试。",
+ "Failed to generate practice": "生成练习失败",
+ "Failed to link folder": "关联文件夹失败",
+ "Failed to load day plan detail": "加载当日详细计划失败",
+ "Failed to load generated plan": "加载已生成计划失败",
+ "Failed to load image from URL": "从 URL 加载图片失败",
+ "Failed to load session": "加载会话失败",
+ "Failed to load settings": "加载设置失败",
+ "Failed to replan": "重排计划失败",
+ "Failed to restore latest plan": "恢复最近计划失败",
+ "Failed to submit feedback": "提交反馈失败",
+ "Failed to update configuration": "更新配置失败",
+ "Feedback accepted.": "反馈已接收。",
+ "Figure Reconstruction": "配图还原",
+ "file on startup": "文件加载于启动时",
+ "Filter by type": "按类型筛选",
+ "Final Answer": "最终答案",
+ "Final commands": "最终命令",
+ "Fix": "修复",
+ "Fix HTML": "修复 HTML",
+ "Fix HTML Issue": "修复 HTML 问题",
+ "Fixing...": "修复中…",
+ "Folder linked successfully!": "文件夹关联成功!",
+ "Folder Path": "文件夹路径",
+ "Found": "发现",
+ "Foundation": "基础",
"From Knowledge Base": "来自知识库",
"From Web": "来自网络",
- "New Chat": "新对话",
- "New chat": "新对话",
- "Save to Notebook": "保存到笔记本",
- "Click to edit": "点击编辑",
- "Expand sidebar": "展开侧边栏",
- "Collapse sidebar": "收起侧边栏",
- "Collapse left panel": "收起左侧面板",
- "Search notebooks...": "搜索笔记本…",
- "Loading records...": "正在加载记录…",
- "No records in this notebook": "该笔记本暂无记录",
- "Chat Session": "聊天会话",
- "User": "用户",
- "Assistant": "助手",
- "Multi-agent reasoning": "多智能体推理",
- "Auto-validated quizzes": "自动校验的测验",
- "Comprehensive analysis": "全面分析",
- "Brainstorm & synthesize": "头脑风暴与综合",
- "Step-by-step tutoring": "循序渐进辅导",
- "Collaborative writing": "协作写作",
- "Collection of Research Ideas": "研究创意合集",
- "Research ideas containing {n} knowledge points": "包含 {n} 个知识点的研究创意",
- "Select Source (Cross-Notebook)": "选择来源(跨笔记本)",
- "Clear": "清空",
- "No notebooks with records found": "未找到包含记录的笔记本",
- "Your Thoughts": "你的想法",
- "Optional": "可选",
- "Required": "必填",
- "Describe your thoughts or research direction based on these materials...": "结合这些材料,描述你的想法或研究方向……",
- "Describe your research topic or idea (no notebook selection needed)...": "描述你的研究主题或想法(无需选择笔记本)……",
- "You can generate ideas from text description alone, or select notebook records above for richer context.": "你可以仅根据文字描述生成创意,或在上方选择笔记记录以获得更丰富的上下文。",
- "Generating...": "生成中…",
- "Discover research ideas from your notes": "从你的笔记中发现研究创意",
- "Select All": "全选",
- "Save Selected": "保存已选",
+ "Frontend Port": "前端端口",
+ "Full Draft": "完整草稿",
+ "Full Draft AI Edit": "全文 AI 编辑",
+ "General Settings": "常规设置",
+ "Generate": "生成",
"Generate Ideas ({n} items)": "生成创意({n} 条)",
"Generate Ideas (Text Only)": "生成创意(仅文字)",
- "Chat History": "聊天历史",
- "Solver History": "解题历史",
- "All Activities": "所有活动",
- "Filter by type": "按类型筛选",
- "Today": "今天",
- "Yesterday": "昨天",
- "session": "个会话",
- "sessions": "个会话",
- "All": "全部",
- "Chat": "聊天",
- "No history found": "未找到历史记录",
- "Your activities will appear here": "您的活动将显示在这里",
- "Continue": "继续",
- "View": "查看",
- "Close": "关闭",
- "messages": "条消息",
- "Failed to load session": "加载会话失败",
- "Add to Notebook": "保存到笔记本",
- "Added Successfully!": "保存成功!",
- "Record Preview": "记录预览",
- "Select Notebooks": "选择笔记本",
- "New Notebook": "新建笔记本",
- "Notebook name": "笔记本名称",
- "Color:": "颜色:",
- "Create & Initialize": "创建并初始化",
- "Loading notebooks...": "正在加载笔记本…",
- "Record has been saved to {n} notebook": "已保存到 {n} 个笔记本",
- "Record has been saved to {n} notebooks": "已保存到 {n} 个笔记本",
- "{n} notebook selected": "已选择 {n} 个笔记本",
- "{n} notebooks selected": "已选择 {n} 个笔记本",
- "Select at least one notebook": "请至少选择一个笔记本",
- "Saving...": "保存中…",
+ "Generate learning plan": "生成学习计划",
+ "Generate Learning Plan ({n} items)": "生成学习计划({n} 项)",
+ "Generate Novel Ideas": "生成创新想法",
+ "Generate Podcast": "生成播客",
+ "Generate Practice Questions": "生成练习题",
+ "Generate Questions": "生成题目",
+ "Generate questions based on knowledge base content": "基于知识库内容生成题目",
+ "Generate Quiz": "生成测验",
+ "Generate similar questions based on an exam paper": "基于试卷生成相似题目",
+ "Generated Question": "生成的题目",
+ "Generating": "生成中",
+ "Generating interactive lesson...": "正在生成互动课件…",
+ "Generating interactive page...": "正在生成交互页面…",
+ "Generating Podcast": "正在生成播客",
+ "Generating practice...": "正在生成练习…",
+ "Generating questions based on reference exam paper": "正在基于参考试卷生成题目",
+ "Generating questions...": "正在生成题目…",
+ "Generating Report": "正在生成报告",
+ "Generating report preview...": "正在生成报告预览…",
+ "Generating response...": "正在生成回复...",
+ "Generating Search Queries": "生成搜索查询",
+ "Generating Summary...": "正在生成总结…",
+ "Generating...": "生成中…",
+ "Generation Complete": "生成完成",
+ "Generation failed": "生成失败",
+ "Initialized": "已初始化",
+ "Geometric Analysis": "几何分析",
+ "Goal Form": "目标表单",
+ "Goal Level": "目标等级",
+ "Goal Mode": "备考式学习",
+ "Goal-Oriented Adaptive Learning Mode": "备考式学习",
+ "gpt-4o": "gpt-4o",
+ "Guided Learning": "引导式学习",
+ "Hard": "困难",
+ "Have any questions? Feel free to ask...": "有问题吗?欢迎随时提问…",
+ "Hide AI Marks": "隐藏 AI 批注",
+ "High Yield": "高收益",
+ "History": "历史记录",
+ "Home": "首页",
+ "How can I help you today?": "今天我能帮您什么?",
+ "Learning": "学习中",
+ "知识点数量": "知识点数量",
+ "已就绪页面": "已就绪页面",
+ "学习状态": "学习状态",
+ "从概念到理解闭环,逐步构建可迁移的知识结构。": "从概念到理解闭环,逐步构建可迁移的知识结构。",
+ "引导式学习强调概念拆解、原理解释与交互式课件学习,适合从0到1建立系统理解,再衔接备考式学习做提分训练。": "引导式学习强调概念拆解、原理解释与交互式课件学习,适合从0到1建立系统理解,再衔接备考式学习做提分训练。",
+ "I can help you solve complex STEM problems using multi-step reasoning. Try asking about calculus, physics, or coding algorithms.": "我可以用多步推理帮助你解决复杂的 STEM 问题。你可以尝试提问微积分、物理或编程算法相关问题。",
+ "IdeaGen": "创意生成",
+ "Idle": "空闲",
+ "image": "图片",
+ "Image is reference for problem": "图片是题目的参考",
+ "Image size must be less than 10MB": "图片大小不能超过 10MB",
+ "Images": "图片",
"Import from Notebooks": "从笔记本导入",
- "Select content from your notebooks to import": "从你的笔记本中选择内容导入",
- "No notebooks found": "未找到笔记本",
- "Select a notebook to view records": "请选择一个笔记本查看记录",
- "No records": "暂无记录",
- "Selected {n} items": "已选择 {n} 项",
+ "Import Records": "导入记录",
+ "Import records from other notebooks": "从其他笔记本导入记录",
"Import Selected": "导入已选",
- "Backend Service": "后端服务",
- "LLM Model": "LLM 模型",
- "Embeddings": "向量模型",
- "TTS Model": "TTS 模型",
- "Checking...": "检测中…",
- "Online": "在线",
- "Offline": "离线",
- "Configured": "已配置",
- "Not Configured": "未配置",
- "Unknown": "未知",
- "Testing...": "测试中…",
- "Test failed": "测试失败",
+ "In Progress": "进行中",
+ "Include Practice": "包含练习",
+ "Including: chat history, solver history, question results, research reports, guided learning progress, Co-Writer content, etc. This action cannot be undone.": "包括:聊天记录、解题历史、题目生成结果、研究报告、引导学习进度、Co-Writer 内容等。此操作不可撤销。",
+ "Initializing": "初始化中",
+ "Instruction (Optional)": "指令(可选)",
+ "Intelligent markdown editor with AI-powered writing assistance.": "带 AI 写作辅助的智能 Markdown 编辑器。",
+ "Interactive Learning Content": "交互式学习内容",
+ "Interactive Lesson": "互动课件",
+ "Interface Preferences": "界面偏好",
+ "Issue Description": "问题描述",
+ "issues fixed": "个问题已修复",
+ "Issues found": "发现的问题",
+ "KB": "知识库",
+ "KB Connection": "知识库连接",
+ "KB Coverage": "知识库覆盖率",
+ "KB Name": "知识库名称",
+ "Keep unchanged to use this KB's existing provider": "保持不变以使用该知识库已有的提供方",
+ "Key Points": "关键点",
+ "Knowledge": "知识",
+ "Knowledge Base": "知识库",
+ "Knowledge base name": "知识库名称",
+ "Knowledge Base Name": "知识库名称",
+ "Knowledge bases": "知识库",
+ "Knowledge Bases": "知识库",
+ "Knowledge Point": "知识点",
+ "Knowledge Point {n} / {total}": "知识点 {n} / {total}",
+ "Knowledge Point / Topic": "知识点 / 主题",
+ "Language": "语言",
+ "language.chinese": "中文",
+ "language.english": "English",
+ "Latest plan restored.": "已恢复最近计划。",
+ "Learn": "学习",
+ "Learn & Research": "学习与研究",
+ "Learning Assistant": "学习助手",
+ "Learning Goal": "学习目标",
+ "Learning History": "学习历史",
+ "Learning Progress": "学习进度",
+ "Learning Summary": "学习总结",
+ "Leave as-is to use the KB's existing provider": "保持不变以使用该知识库已有的提供方",
+ "Light": "浅色",
+ "Light Mode": "浅色模式",
+ "Lightweight knowledge graph retrieval, fast processing of text documents.": "预留给未来可扩展 provider。",
+ "Link a local folder to": "关联本地文件夹到",
"Link Folder": "关联文件夹",
"Link Local Folder": "关联本地文件夹",
- "Folder Path": "文件夹路径",
- "Paste or type the full folder path": "粘贴或输入完整文件夹路径",
- "Supported files: PDF, DOCX, TXT, MD": "支持文件:PDF、DOCX、TXT、MD",
- "New and modified files will be automatically detected when you sync.": "同步时将自动检测新增与修改的文件。",
- "Folder linked successfully!": "文件夹关联成功!",
- "Failed to link folder": "关联文件夹失败",
- "Activity Details": "活动详情",
- "Type": "类型",
- "Final Answer": "最终答案",
- "Parameters": "参数",
- "Generated Question": "生成的题目",
- "Correct Answer & Explanation": "正确答案与解析",
- "Answer:": "答案:",
- "No explanation provided": "暂无解析",
- "Topic:": "主题:",
- "Difficulty:": "难度:",
- "Type:": "类型:",
- "Topic": "主题",
- "Report Preview": "报告预览",
+ "Linked Tasks": "关联任务",
+ "Live Preview · Synced Scroll": "实时预览 · 同步滚动",
+ "LLM": "LLM",
+ "LLM Configuration": "LLM 配置",
+ "LLM Model": "LLM 模型",
+ "Load": "加载",
+ "Load Example Template": "加载示例模板",
+ "Loaded example template.": "已加载示例模板。",
+ "Loading": "加载中...",
+ "Loading activities...": "加载活动中...",
+ "Loading day plan...": "正在加载当日计划…",
+ "Loading history...": "正在加载历史…",
+ "Loading learning content...": "正在加载学习内容…",
+ "Loading notebooks...": "正在加载笔记本…",
+ "Loading records...": "正在加载记录…",
+ "Loading...": "加载中…",
+ "local": "本地",
+ "Local Data": "本地数据",
+ "Logic Stream": "推理流",
+ "Logs": "日志",
+ "Logs ({n})": "日志({n})",
+ "Manage and explore your educational content repositories.": "管理与探索你的教育内容仓库。",
+ "Manage system configuration and preferences": "管理系统配置和偏好设置",
+ "Manage your in-process TutorBot instances": "Manage your in-process TutorBot instances",
+ "Manage your knowledge bases and notebooks in one place.": "在一个页面中管理你的知识库和笔记本。",
+ "Markdown": "Markdown",
+ "Max Questions": "最多题数",
+ "Max Results": "最大结果数",
+ "Maximize": "最大化",
+ "Medium": "中等",
+ "Memory": "记忆",
+ "messages": "条消息",
+ "Metadata": "元数据",
+ "Mimic Exam": "仿真试卷",
+ "Mimic Exam Mode": "仿真试卷模式",
+ "Mimic Exam Paper Mode": "仿真试卷模式",
+ "Minimize": "最小化",
+ "missed": "错过",
+ "Model": "模型",
+ "Model name is required": "需要填写模型名称",
+ "Model:": "模型:",
+ "Moved {{count}}": "移动 {{count}}",
+ "Multi-agent reasoning": "多智能体推理",
+ "Multimodal document processing with chart and formula extraction, builds knowledge graphs.": "预留给未来可扩展 provider。",
+ "Multiple Choice": "选择题",
+ "My Configuration": "我的配置",
+ "My Notebook": "我的笔记本",
+ "My Notebooks": "我的笔记本",
"N/A": "无",
+ "Name": "名称",
+ "needs reindex": "需要重建索引",
+ "New": "新建",
+ "New and modified files will be automatically detected when you sync.": "同步时将自动检测新增与修改的文件。",
+ "New Bot": "新建机器人",
+ "New chat": "新建聊天",
+ "New Chat": "新对话",
+ "New Knowledge Base": "新建知识库",
+ "New Notebook": "新建笔记本",
+ "New Session": "新会话",
+ "New Soul": "New Soul",
+ "Next": "下一个",
+ "No bots to configure": "暂无可配置机器人",
+ "No configurations found. Add one to get started.": "未找到任何配置。请先添加一个配置。",
+ "No explanation provided": "暂无解析",
+ "No history found": "未找到历史记录",
+ "No issues found": "未发现问题",
+ "No knowledge bases found. Create one to get started.": "未找到任何知识库。请先创建一个。",
+ "No knowledge bases yet. Create one to get started.": "暂无知识库,请先创建一个。",
+ "No learning history yet": "暂无学习历史",
+ "No linked tasks.": "暂无关联任务。",
+ "No notebooks found": "未找到笔记本",
+ "No notebooks with records found": "未找到包含记录的笔记本",
+ "No notebooks yet": "暂无笔记本",
+ "No notebooks yet. Create one to organize outputs.": "暂无笔记本,请创建一个来整理输出。",
+ "No plan yet": "暂无计划",
"No question content": "无题目内容",
- "Workspace": "工作区",
- "Learn & Research": "学习与研究",
- "✨ Your description here": "✨ 在此输入你的描述",
- "Enter your description...": "输入你的描述…",
- "Visit DeepTutor Homepage": "访问 DeepTutor 主页",
- "View on GitHub": "在 GitHub 查看",
- "KB": "知识库",
- "Solution image": "解题图片",
- "Count:": "数量:",
- "Initializing": "初始化中",
- "Generating Search Queries": "生成搜索查询",
- "Retrieving Knowledge": "检索知识",
- "Creating Question Plan": "生成题目计划",
- "Uploading PDF": "上传 PDF",
+ "No ready knowledge base is available for upload. Create a new KB or reindex legacy KBs first.": "当前没有可上传的就绪知识库。请先创建新知识库,或先重建旧知识库索引。",
+ "No recent activity found": "未找到最近活动",
+ "No records": "暂无记录",
+ "No records in this notebook": "该笔记本暂无记录",
+ "No records yet": "暂无记录",
+ "No research data yet": "暂无研究数据",
+ "No response": "暂无回答",
+ "No souls yet": "No souls yet",
+ "No source selected: the run will use llm-only research.": "未选择来源:本次将使用仅 LLM 的研究模式。",
+ "No tasks for this day.": "当天暂无可操作任务。",
+ "No tasks initialized yet": "暂无任务",
+ "No TutorBots yet": "No TutorBots yet",
+ "None": "无",
+ "Not configured": "未配置",
+ "Not Configured": "未配置",
+ "Not Indexed": "未建立索引",
+ "Not required": "不需要",
+ "Notebook": "笔记本",
+ "Notebook Context": "笔记本上下文",
+ "Notebook name": "笔记本名称",
+ "Notebooks": "笔记本",
+ "Notes about machine learning...": "例如:关于机器学习的笔记…",
+ "Nothing to preview yet.": "暂无可预览内容。",
+ "Observe": "观察",
+ "Offline": "离线",
+ "On restart, values will be reloaded from": "重启后,值将从以下文件重新加载",
+ "Online": "在线",
+ "Open": "打开",
+ "Open any page once it is ready. Early stages are prioritized.": "页面就绪后即可打开。早期阶段会优先处理。",
+ "Open chat session": "打开聊天会话",
+ "Open guided learning session": "打开引导学习会话",
+ "Optimized Topic": "优化后主题",
+ "Optimizing topic...": "正在优化主题…",
+ "Optional": "可选",
+ "optional for local providers": "本地服务可选",
+ "Optionally ground the learning plan with saved notebook records.": "可选:使用已保存的笔记记录增强学习计划。",
+ "Or": "或",
+ "OR": "或",
+ "Original Topic": "原始主题",
+ "Output": "输出",
+ "Overview": "概览",
+ "Overview of your recent learning activities": "您最近的学习活动概览",
+ "pages ready": "页已就绪",
+ "Parallel Mode": "并行模式",
+ "Parameters": "参数",
"Parsing PDF (MinerU)": "解析 PDF(MinerU)",
- "Extracting Questions": "提取题目",
- "Ready to Generate": "准备生成",
- "Generation Complete": "生成完成",
+ "partial": "部分完成",
+ "Paste or type the full folder path": "粘贴或输入完整文件夹路径",
+ "PDF Export failed": "导出 PDF 失败",
+ "Pending {{count}}": "待完成 {{count}}",
+ "Permanently delete \\": "永久删除 \\",
+ "Pick a soul from the library above, or write your own. Manage the library in the Souls tab.": "从上方库中选择一个灵魂,或自行编写。可在“灵魂”标签页管理模板库。",
+ "Pitfalls": "易错点",
+ "placeholder_kb": "示例知识库",
+ "Plan Board": "计划看板",
+ "Plan created successfully.": "学习计划已生成。",
+ "Plan generated.": "计划已生成。",
+ "Plan Mode": "计划模式",
+ "Plan v{{version}}": "计划 v{{version}}",
+ "Planned": "已规划",
+ "Planner failed": "规划器失败",
+ "Planning": "规划",
+ "Planning Progress": "规划进度",
+ "Planning Research Strategy": "规划研究策略",
+ "Planning stream closed unexpectedly": "规划流意外中断",
+ "Planning timed out, please retry.": "规划超时,请重试。",
+ "Planning...": "规划中…",
+ "Playground": "试验场",
+ "Please enter an editing instruction first.": "请先输入编辑指令。",
+ "Please enter an instruction or choose a mode.": "请输入指令或选择一个模式。",
+ "Please select a text passage first.": "请先选择一段文本。",
+ "Please select an image file": "请选择图片文件",
+ "Please upload a PDF exam paper": "请上传 PDF 试卷",
+ "Podcast Audio": "播客音频",
+ "Podcast Narration": "播客/旁白",
+ "Port Configuration": "端口配置",
+ "Practice generated.": "练习已生成。",
+ "Practice Preview": "练习预览",
+ "Practice question": "练习题",
+ "Pre-parsed Directory": "预解析目录",
+ "Preference": "偏好",
+ "Preview": "预览",
+ "Pro Vide Writing": "专业写作",
+ "Problem Solved": "问题已解决",
+ "Process": "过程",
+ "Processing": "处理中",
+ "Processing File": "处理文件",
+ "Processing...": "处理中...",
+ "Profiles": "Profiles",
"Progress": "进度",
+ "Provider": "提供商",
+ "Pure vector retrieval, fastest processing speed.": "纯向量检索,处理速度最快。",
+ "Query input": "查询输入",
+ "Query:": "问题:",
+ "Question": "题目",
"Question Focuses ({n})": "题目焦点({n})",
- "Logs ({n})": "日志({n})",
- "Clear logs": "清空日志",
- "Waiting for logs...": "等待日志…",
- "Mimic Exam Mode": "仿真试卷模式",
- "Generating questions based on reference exam paper": "正在基于参考试卷生成题目",
- "Learning Assistant": "学习助手",
- "Have any questions? Feel free to ask...": "有问题吗?欢迎随时提问…",
- "Learning Summary": "学习总结",
- "Fix HTML Issue": "修复 HTML 问题",
- "Issue Description": "问题描述",
- "Describe the HTML issue, e.g.: button not clickable, style display error, interaction not working...": "描述 HTML 问题,例如:按钮无法点击、样式显示错误、交互不生效…",
- "Fixing...": "修复中…",
- "Fix": "修复",
- "Loading learning content...": "正在加载学习内容…",
- "Fix HTML": "修复 HTML",
- "Interactive Learning Content": "交互式学习内容",
- "Deselect": "取消选择",
- "Generate Learning Plan ({n} items)": "生成学习计划({n} 项)",
- "Learning Progress": "学习进度",
- "Knowledge Point {n} / {total}": "知识点 {n} / {total}",
- "Start Learning": "开始学习",
- "Loading...": "加载中…",
- "Next": "下一个",
- "Generating Summary...": "正在生成总结…",
- "Complete Learning": "完成学习",
- "Switch to narrow sidebar (1:3)": "切换为窄侧栏(1:3)",
- "Switch to wide sidebar (3:1)": "切换为宽侧栏(3:1)",
- "Select a notebook, and the system will generate a personalized learning plan. Through interactive pages and intelligent Q&A, you'll gradually master all the content.": "请选择一个笔记本,系统将生成个性化学习计划。通过交互页面与智能问答,你将逐步掌握全部内容。",
- "Select notebook records or describe your research topic": "选择笔记记录或直接描述你的研究主题",
- "Manage and explore your educational content repositories.": "管理与探索你的教育内容仓库。",
+ "Question Generated": "题目已生成",
+ "Question Generator": "题目生成器",
+ "questions": "道题",
+ "Questions": "题目列表",
+ "Quick Actions": "快捷操作",
+ "Quick feedback submitted from Goal board.": "已从目标看板快速提交反馈。",
+ "RAG": "知识库检索",
+ "RAG Enabled": "已启用 RAG",
+ "RAG Provider": "RAG 提供方",
+ "RAG Provider (Optional)": "RAG 提供方(可选)",
"RAG-Anything": "LlamaIndex",
"RAG-Anything (Docling)": "LlamaIndex",
- "Documents": "文档",
- "Images": "图片",
+ "Raw logs": "原始日志",
"Ready": "就绪",
- "Processing": "处理中",
- "Processing File": "处理文件",
- "Extracting Items": "提取内容",
- "Not Indexed": "未建立索引",
- "e.g., Math101": "例如:Math101",
- "Pure vector retrieval, fastest processing speed.": "纯向量检索,处理速度最快。",
- "Lightweight knowledge graph retrieval, fast processing of text documents.": "预留给未来可扩展 provider。",
- "Multimodal document processing with chart and formula extraction, builds knowledge graphs.": "预留给未来可扩展 provider。",
- "Select a RAG pipeline suitable for your document type": "请选择 RAG 提供方(当前仅支持 LlamaIndex)",
- "Click or drop to add more files": "点击或拖拽以继续添加文件",
- "Drag & drop files or folders here": "将文件或文件夹拖拽到此处",
- "{n} file selected": "已选择 {n} 个文件",
- "{n} files selected": "已选择 {n} 个文件",
- "Clear all": "清空全部",
+ "Ready to Generate": "准备生成",
+ "Ready to open": "可打开",
+ "Ready to Research": "准备开始研究",
+ "Reasoning": "推理",
+ "Received invalid planner stream message": "收到无效的规划流消息",
+ "Recent Activity": "最近活动",
+ "Record has been saved to {n} notebook": "已保存到 {n} 个笔记本",
+ "Record has been saved to {n} notebooks": "已保存到 {n} 个笔记本",
+ "Record Preview": "记录预览",
+ "records": "条记录",
+ "Refresh": "刷新",
+ "Refresh from a session or write directly in the editor.": "可从会话刷新,或直接在编辑器中编写。",
+ "Refresh knowledge bases": "刷新知识库列表",
+ "Refresh Status": "刷新状态",
+ "Regenerate Lesson": "重新生成课件",
+ "relations": "个关系",
+ "Relations": "几何关系",
+ "Relevance Analysis": "相关性分析",
+ "Remaining Days": "剩余天数",
"Remove file": "移除文件",
- "Upload documents to": "上传文档到",
- "RAG Provider": "RAG 提供方",
- "RAG Provider (Optional)": "RAG 提供方(可选)",
- "Leave as-is to use the KB's existing provider": "保持不变以使用该知识库已有的提供方",
- "Keep unchanged to use this KB's existing provider": "保持不变以使用该知识库已有的提供方",
- "Clear progress status": "清除进度状态",
- "DeepTutor Logo": "DeepTutor Logo",
- "Optimizing topic...": "正在优化主题…",
- "Verified by DeepTutor Logic Engine": "由 DeepTutor 推理引擎校验",
- "Model:": "模型:",
- "Activity Log": "活动日志",
- "Waiting for logic execution...": "等待推理执行…",
- "gpt-4o": "gpt-4o",
- "Link a local folder to": "关联本地文件夹到",
- ". Documents in the folder will be processed and added to this knowledge base.": "。文件夹内的文档将被处理并添加到该知识库。",
- "C:\\Users\\name\\Documents\\papers": "C:\\Users\\name\\Documents\\papers",
- "📄 Supported files: PDF, DOCX, TXT, MD": "📄 支持文件:PDF、DOCX、TXT、MD",
- "💡 Tip:": "💡 提示:",
- "Use folders synced with Google Drive, OneDrive, SharePoint, or Dropbox for automatic cloud integration.": "建议使用与 Google Drive、OneDrive、SharePoint 或 Dropbox 同步的文件夹以实现自动云端集成。",
- "Diagram rendering error": "图表渲染出错",
- "Show source": "显示源码",
- "Planning": "规划",
- "Researching": "研究中",
- "Reporting": "撰写报告",
- "Planning Research Strategy": "规划研究策略",
- "Research Plan": "研究计划",
- "Original Topic": "原始主题",
- "Optimized Topic": "优化后主题",
- "No research data yet": "暂无研究数据",
- "(History)": "(历史)",
+ "Replan Changes": "重排变更",
+ "Replan finished.": "重排计划完成。",
+ "Replanning from latest feedback...": "正在基于最新反馈重排计划…",
+ "Report": "报告",
"Report Generated!": "报告已生成!",
- "Generating Report": "正在生成报告",
"Report Generation": "报告生成",
- "Currently Writing": "正在撰写",
"Report Outline": "报告大纲",
- "View Full Report": "查看完整报告",
- "Parallel Mode": "并行模式",
- "AI Edit Assistant": "AI 编辑助手",
- "Close dialog": "关闭对话框",
- "Instruction (Optional)": "指令(可选)",
- "e.g. Make it more formal...": "例如:使其更正式...",
- "Context Source (Optional)": "上下文来源(可选)",
- "Web": "网络",
+ "Report Preview": "报告预览",
+ "Reporting": "撰写报告",
+ "Required": "必填",
+ "REQUIRED": "必填",
+ "Research": "研究",
+ "Research ideas containing {n} knowledge points": "包含 {n} 个知识点的研究创意",
+ "Research in progress...": "研究进行中…",
+ "Research Plan": "研究计划",
+ "Research Report": "研究报告",
+ "Research Tools": "研究工具",
+ "Researching": "研究中",
+ "Response": "回复",
+ "Restore Latest Plan": "恢复最近计划",
+ "Restoring latest plan...": "正在恢复最近计划…",
+ "Retrieving Knowledge": "检索知识",
+ "Retry": "重试",
+ "Reusable soul templates for creating TutorBots.": "Reusable soul templates for creating TutorBots.",
+ "Review Actions": "复盘动作",
"Rewrite": "重写",
+ "round": "轮",
+ "Run a focused conversation here without leaving the playground.": "在不离开试验场的情况下,在此进行一次聚焦对话。",
+ "Run Research": "运行研究",
+ "Running": "运行中",
+ "Running planner stream...": "正在运行规划流…",
+ "Running tools and preparing the final edit...": "正在运行工具并准备最终编辑…",
+ "Running...": "运行中…",
+ "Runtime Configuration": "运行时配置",
+ "s": "",
+ "Save": "保存",
+ "Save All Changes": "保存所有更改",
+ "Save Changes": "保存更改",
+ "Save Podcast to Notebook": "保存播客到笔记本",
+ "Save Selected": "保存已选",
+ "Save to Notebook": "保存到笔记本",
+ "Saving...": "保存中…",
+ "Script only (TTS not configured)": "仅脚本(未配置 TTS)",
+ "Search": "搜索",
+ "Search Configuration": "搜索配置",
+ "Search notebooks...": "搜索笔记本…",
+ "Searching knowledge base...": "正在搜索知识库...",
+ "Searching the web...": "正在搜索网络...",
+ "Select a knowledge base": "选择一个知识库",
+ "Select a notebook to inspect its saved records.": "选择一个笔记本以查看其已保存记录。",
+ "Select a notebook to view records": "请选择一个笔记本查看记录",
+ "Select a notebook, and the system will generate a personalized learning plan. Through interactive pages and intelligent Q&A, you'll gradually master all the content.": "请选择一个笔记本,系统将生成个性化学习计划。通过交互页面与智能问答,你将逐步掌握全部内容。",
+ "Select a notebook...": "选择一个笔记本…",
+ "Select a question to view details": "请选择一道题查看详情",
+ "Select a RAG pipeline suitable for your document type": "请选择 RAG 提供方(当前仅支持 LlamaIndex)",
+ "Select a record to view details": "请选择一条记录查看详情",
+ "Select a task to view execution details": "选择一个任务以查看执行详情",
+ "Select All": "全选",
+ "Select at least one notebook": "请至少选择一个笔记本",
+ "Select content from your notebooks to import": "从你的笔记本中选择内容导入",
+ "Select Knowledge Base": "选择知识库",
+ "Select knowledge base...": "选择知识库…",
+ "Select notebook records or describe your research topic": "选择笔记记录或直接描述你的研究主题",
+ "Select Notebooks": "选择笔记本",
+ "Select Records": "选择记录",
+ "Select Source (Cross-Notebook)": "选择来源(跨笔记本)",
+ "Select...": "选择…",
+ "Selected {n} items": "已选择 {n} 项",
+ "Selected sources will be queried during research.": "研究过程中会查询已选来源。",
+ "Send": "发送",
+ "session": "个会话",
+ "sessions": "个会话",
+ "Set Active": "设为当前",
+ "Set as Default": "设为默认",
+ "Set default": "设为默认",
+ "Settings": "设置",
"Shorten": "缩短",
- "Expand": "扩展",
- "AI Mark": "AI 批改",
- "Processing...": "处理中...",
- "Apply": "应用",
- "Live Preview · Synced Scroll": "实时预览 · 同步滚动",
"Show AI Marks": "显示 AI 批注",
- "Hide AI Marks": "隐藏 AI 批注",
- "Preview": "预览",
- "Process": "过程",
- "Report": "报告",
- "Ready to Research": "准备开始研究",
- "Enter a topic in the left panel to start deep research.": "在左侧输入主题以开始深度研究。",
- "Markdown": "Markdown",
- "Generating report preview...": "正在生成报告预览…",
- "Select a task to view execution details": "选择一个任务以查看执行详情",
- "Waiting for execution logs...": "等待执行日志…",
- "No tasks initialized yet": "暂无任务",
- "Current Action:": "当前动作:",
- "Waiting to start...": "等待开始…",
- "Tools:": "工具:",
- "User Query": "用户问题",
- "Output": "输出",
- "Metadata": "元数据",
- "No records yet": "暂无记录",
- "Add records from Solver, Question, Research, or Co-Writer": "从解题、出题、研究或智能写作中添加记录",
- "Select a record to view details": "请选择一条记录查看详情",
- "Create New Notebook": "新建笔记本",
- "Description (Optional)": "描述(可选)",
- "Color": "颜色",
- "Edit Notebook": "编辑笔记本",
- "Description": "描述",
- "Delete Notebook?": "删除笔记本?",
- "Import Records": "导入记录",
+ "Show source": "显示源码",
+ "skipped": "已跳过",
+ "Skipped {{count}}": "跳过 {{count}}",
+ "Smart Problem Solving": "智能问题解答",
+ "Smart Solver": "智能解题",
+ "Solution image": "解题图片",
+ "Solve": "解题",
+ "Solver History": "解题历史",
+ "Soul": "Soul",
+ "Souls": "Souls",
+ "Source": "来源",
"Source Notebook": "来源笔记本",
- "Select a notebook...": "选择一个笔记本…",
- "Expand left panel": "展开左侧面板",
- "Collapse middle panel": "收起中间面板",
- "Expand middle panel": "展开中间面板",
- "Collapse right panel": "收起右侧面板",
- "Expand right panel": "展开右侧面板",
- "Export as Markdown": "导出为 Markdown",
- "Export as PDF": "导出为 PDF",
- "Import records from other notebooks": "从其他笔记本导入记录",
- "My Notebook": "我的笔记本",
- "Notes about machine learning...": "例如:关于机器学习的笔记…",
- "This action cannot be undone. All records in this notebook will be permanently deleted.": "此操作不可撤销。该笔记本内的所有记录将被永久删除。",
- "Logs": "日志",
- "Difficulty": "难度",
- "Easy": "简单",
- "Medium": "中等",
- "Hard": "困难",
- "Multiple Choice": "选择题",
- "Written": "主观题",
- "Upload Exam Paper (PDF)": "上传试卷(PDF)",
- "Click to upload PDF": "点击上传 PDF",
- "The system will parse and generate questions": "系统将解析并生成题目",
- "OR": "或",
- "Pre-parsed Directory": "预解析目录",
- "KB Coverage": "知识库覆盖率",
- "Extension Points": "扩展点",
- "KB Connection": "知识库连接",
- "Extended Aspects": "扩展维度",
- "Reasoning": "推理",
- "e.g. 2211asm1": "例如:2211asm1",
- "Please upload a PDF exam paper": "请上传 PDF 试卷",
- "Remove PDF": "移除 PDF",
- "Podcast Narration": "播客/旁白",
- "Click to expand": "点击展开",
- "Script only (TTS not configured)": "仅脚本(未配置 TTS)",
- "Current note is empty, cannot generate narration.": "当前笔记为空,无法生成旁白。",
- "Failed to generate narration, please try again.": "生成旁白失败,请重试。",
- "Generating Podcast": "正在生成播客",
- "Generate Podcast": "生成播客",
- "Save Podcast to Notebook": "保存播客到笔记本",
- "After generation, the narration script will appear here.": "生成后,旁白脚本将显示在这里。",
- "Key Points": "关键点",
- "After generation, 3-5 key points will be listed here.": "生成后,3-5 个关键点将列在这里。",
- "Podcast Audio": "播客音频",
- "Your browser does not support the audio element.": "您的浏览器不支持音频元素。",
- "TTS not configured, script generation only.": "TTS 未配置,仅生成脚本。",
- "After generation, you can play the podcast audio here.": "生成后,您可以在这里播放播客音频。",
- "Cmd+S to save · Markdown supported": "Cmd+S 保存 · 支持 Markdown",
- "Refresh from a session or write directly in the editor.": "从会话中刷新或直接在编辑器中编写。",
- "Manage your knowledge bases and notebooks in one place.": "在一个地方管理你的知识库和笔记本。",
- "Create knowledge base": "创建知识库",
- "Knowledge base name": "知识库名称",
- "Choose files...": "选择文件…",
- "Create Process": "创建进度",
- "Upload documents": "上传文档",
- "Select a knowledge base": "选择知识库",
- "No ready knowledge base is available for upload. Create a new KB or reindex legacy KBs first.": "没有可用于上传的就绪知识库。请先创建新知识库或重新索引旧知识库。",
- "Upload": "上传",
- "Upload Process": "上传进度",
- "Knowledge bases": "知识库列表",
- "needs reindex": "需要重新索引",
- "Set default": "设为默认",
- "No knowledge bases yet. Create one to get started.": "暂无知识库。创建一个开始使用吧。",
- "Create notebook": "创建笔记本",
- "No notebooks yet. Create one to organize outputs.": "暂无笔记本。创建一个来整理输出内容吧。",
- "This notebook is empty for now.": "该笔记本暂无内容。",
- "Select a notebook to inspect its saved records.": "选择一个笔记本以查看其保存的记录。",
- "Unknown time": "未知时间",
- "Open chat session": "打开聊天会话",
- "Open guided learning session": "打开引导学习会话",
- "Query:": "问题:",
- "Delete knowledge base \"{{name}}\"?": "确定删除知识库「{{name}}」吗?",
- "This knowledge base is in legacy index format and needs reindex before upload.": "该知识库使用旧版索引格式,需要重新索引后才能上传。",
- "This knowledge base is currently {{status}} and cannot accept uploads yet.": "该知识库当前处于{{status}}状态,暂时无法上传。",
- "1 / 4 — LLM": "1 / 4 — LLM",
- "Configure your language model endpoint. This powers all chat and reasoning.": "配置你的语言模型端点,用于驱动所有对话和推理。",
- "2 / 4 — Embedding": "2 / 4 — 向量模型",
- "Set the embedding model for knowledge retrieval.": "设置用于知识检索的向量模型。",
- "3 / 4 — Search": "3 / 4 — 搜索",
- "Optional: add a web search provider for real-time information.": "可选:添加网络搜索提供商以获取实时信息。",
- "4 / 4 — Complete": "4 / 4 — 完成",
- "When you are ready, click here to test and launch DeepTutor.": "准备好后,点击此处测试并启动 DeepTutor。",
- "Skip tour": "跳过引导",
- "Got it": "知道了",
- "Passed": "通过",
- "Failed": "失败",
- "Skipped": "已跳过",
- "Running tests...": "正在运行测试…",
- "Test Results": "测试结果",
- "Back to editing": "返回编辑",
- "Launch anyway": "仍然启动",
- "Confirm & Launch": "确认并启动",
- "Please wait...": "请稍候…",
- "Draft saved": "草稿已保存",
- "Applied to .env": "已应用到 .env",
- "Diagnostics stream disconnected": "诊断流已断开",
- "Failed to complete tour": "完成引导失败",
- "Run {{command}} in your terminal.": "请在终端中运行 {{command}}。",
- "Run python scripts/start_tour.py in your terminal.": "请在终端中运行 python scripts/start_tour.py。",
- "Setup Tour": "设置引导",
- "Configure your endpoints below, run tests, then launch DeepTutor.": "在下方配置你的端点,运行测试,然后启动 DeepTutor。",
- "Complete & Launch": "完成并启动",
- "Configuration saved": "配置已保存",
- "Redirecting to DeepTutor in {{count}}s...": "{{count}} 秒后跳转到 DeepTutor…",
- "Redirecting...": "正在跳转…",
- "Draft has unsaved changes": "草稿有未保存的更改",
- "All changes saved": "所有更改已保存",
- "Save Draft": "保存草稿",
- "Complete the tour first": "请先完成引导",
- "Backend": "后端",
- "Emb": "向量",
- "Profile": "配置文件",
- "No endpoint": "未设置端点",
- "Delete profile": "删除配置文件",
- "Provider Hint / Binding": "提供商提示 / 绑定",
- "Select provider...": "选择提供商...",
- "Perplexity requires API key. It will fail hard without credentials.": "Perplexity 需要 API 密钥,缺少凭证将无法使用。",
- "Supported provider.": "受支持的提供商。",
- "Deprecated provider. Switch to brave/tavily/jina/searxng/duckduckgo/perplexity.": "已弃用的提供商。请切换到 brave/tavily/jina/searxng/duckduckgo/perplexity。",
- "Unsupported provider. Use brave/tavily/jina/searxng/duckduckgo/perplexity.": "不受支持的提供商。请使用 brave/tavily/jina/searxng/duckduckgo/perplexity。",
- "API Version": "API 版本",
- "Proxy": "代理",
- "Extra Headers (JSON)": "额外请求头 (JSON)",
- "Models": "模型列表",
- "Label": "标签",
- "Model ID": "模型 ID",
- "Dimension": "维度",
- "No profiles configured. Add a profile to start.": "暂无配置文件。添加一个以开始使用。",
- "Diagnostics": "诊断",
- "Run test": "运行测试",
- "Collapse diagnostics": "收起诊断",
- "Expand diagnostics": "展开诊断",
- "Streams config snapshot, request target, response summary, and service-specific validation for the active {{service}} profile.": "为当前 {{service}} 配置文件流式输出配置快照、请求目标、响应摘要和服务特定验证。",
- "Run Terminal Tour": "运行终端引导",
- "Loading settings...": "加载设置中…",
- "TutorBot Agents": "TutorBot 代理",
- "Manage your in-process TutorBot instances": "管理正在运行的 TutorBot 实例",
- "Bots": "机器人",
- "Profiles": "配置",
- "Souls": "灵魂",
- "New Bot": "新建机器人",
- "Create TutorBot": "创建 TutorBot",
- "(optional)": "(可选)",
- "e.g. Math Tutor": "例如:数学辅导",
- "A brief description of what this bot does": "简要描述该机器人的功能",
- "Soul": "灵魂",
- "Define the bot's personality, values, and communication style in markdown...": "用 Markdown 定义机器人的性格、价值观和沟通风格…",
- "Pick a soul from the library above, or write your own. Manage the library in the Souls tab.": "从上方的灵魂库中选择,或自行编写。可在「灵魂」标签页管理灵魂库。",
- "Uses default model if empty": "留空则使用默认模型",
- "Create & Start": "创建并启动",
- "No TutorBots yet": "暂无 TutorBot",
- "Create your first TutorBot to get started.": "创建你的第一个 TutorBot 开始使用。",
- "Stop": "停止",
- "Permanently delete \"{{name}}\" ({{id}})? This cannot be undone.": "永久删除「{{name}}」({{id}})?此操作不可撤销。",
+ "Sources": "来源",
+ "Start": "开始",
+ "Start Learning": "开始学习",
+ "Start Research": "开始研究",
+ "Start solving problems or generating questions!": "开始解题或生成题目吧!",
+ "Start writing in Markdown...": "开始用 Markdown 写作…",
"started {{time}}": "启动于 {{time}}",
- "No bots to configure": "没有可配置的机器人",
- "Create a bot first in the Bots tab.": "请先在「机器人」标签页创建一个机器人。",
- "Bot": "机器人",
- "Edit {{file}}...": "编辑 {{file}}…",
- "Unsaved changes": "有未保存的更改",
- "{{file}} is empty": "{{file}} 为空",
+ "Starting...": "启动中…",
+ "Status": "状态",
+ "Step-by-step tutoring": "循序渐进辅导",
+ "Stop": "停止",
+ "Strategy": "策略",
+ "Submit Answer": "提交答案",
+ "Submitted": "已提交",
+ "Submitting feedback...": "正在提交反馈…",
+ "Success": "成功",
+ "Summary": "总结",
+ "Supported files: PDF, DOCX, TXT, MD": "支持文件:PDF、DOCX、TXT、MD",
"Switch to Edit to add content.": "切换到编辑模式以添加内容。",
- "Reusable soul templates for creating TutorBots.": "可复用的灵魂模板,用于创建 TutorBot。",
- "New Soul": "新建灵魂",
- "Content": "内容",
- "e.g. Creative Writer": "例如:创意写手",
- "Define the soul in markdown...": "用 Markdown 定义灵魂…",
- "No souls yet": "暂无灵魂模板",
- "Create your first soul template. Default presets will be seeded automatically on next server restart.": "创建你的第一个灵魂模板。默认预设将在下次服务器重启时自动填充。",
- "Delete soul \"{{name}}\"?": "删除灵魂「{{name}}」?",
- "Send a message to start the conversation.": "发送消息开始对话。",
- "Chat with {{name}}": "与 {{name}} 聊天",
- "Type a message...": "输入消息…",
- "Thinking ({{count}} steps)": "思考中({{count}} 步)",
- "Working...": "处理中…",
+ "Switch to narrow sidebar (1:3)": "切换为窄侧栏(1:3)",
+ "Switch to wide sidebar (3:1)": "切换为宽侧栏(3:1)",
+ "System Configuration": "系统配置",
+ "System Language": "系统语言",
+ "System Settings": "系统设置",
+ "System Status": "系统状态",
+ "Task Actions": "任务操作",
+ "Task Completion": "任务完成率",
+ "TBD": "待定",
+ "Tell AI what to do with the selection...": "告诉 AI 如何处理选中文本…",
+ "Test": "测试",
+ "Test Connection": "测试连接",
+ "Test failed": "测试失败",
+ "Testing...": "测试中…",
+ "Text-to-Speech": "文字转语音",
+ "The system will parse and generate questions": "系统将解析并生成题目",
+ "Theme": "主题",
"Thinking...": "思考中…",
- "words": "词",
- "chars": "字符",
- "Export Markdown": "导出 Markdown",
- "Load Example Template": "加载示例模板",
- "Pro Vide Writing": "Pro Vide Writing",
- "Full Draft": "全文",
- "Editor": "编辑器",
- "Collapse editor": "收起编辑器",
- "Start writing in Markdown...": "开始用 Markdown 写作…",
- "Expand editor": "展开编辑器",
- "Expand preview": "展开预览",
- "Collapse preview": "收起预览",
- "Nothing to preview yet.": "暂无内容可预览。",
- "Tell AI what to do with the selection...": "告诉 AI 如何处理所选内容…",
- "Apply AI edit": "应用 AI 编辑",
- "{{count}} tools": "{{count}} 个工具",
- "Mode": "模式",
- "Trace": "追踪",
+ "This action cannot be undone. All records in this notebook will be permanently deleted.": "此操作不可撤销。该笔记本内的所有记录将被永久删除。",
+ "This capability runs without optional tools.": "该能力可在不启用可选工具的情况下运行。",
+ "This knowledge base is currently {{status}} and cannot accept uploads yet.": "该知识库当前状态为 {{status}},暂时无法上传。",
+ "This knowledge base is in legacy index format and needs reindex before upload.": "该知识库为旧索引格式,上传前需要先重建索引。",
+ "This notebook is empty for now.": "该笔记本暂时为空。",
+ "This will clear all locally cached data": "此操作将清除所有本地缓存数据",
"Thought": "思考",
+ "Time Blocks": "时间块安排",
+ "Today": "今天",
+ "Today's Objective": "今日目标",
+ "tokens": "tokens",
"Tool": "工具",
- "Response": "回复",
- "Running tools and preparing the final edit...": "正在运行工具并准备最终编辑…",
- "Full Draft AI Edit": "全文 AI 编辑",
- "Describe how you want the text edited...": "描述你想如何编辑文本…",
- "Source": "来源",
- "None": "无",
- "Select...": "选择…",
- "Auto Mark": "自动批注",
- "Example template is already loaded.": "示例模板已加载。",
- "Loaded example template.": "已加载示例模板。",
- "Applied AI edit to the selection.": "已将 AI 编辑应用到所选内容。",
- "Applied {{action}} to the full draft.": "已对全文草稿执行{{action}}。",
- "Applied auto-mark annotations.": "已应用自动批注。",
- "Added to notebook.": "已添加到笔记本。",
- "Please select a text passage first.": "请先选择一段文本。",
- "Please enter an instruction or choose a mode.": "请输入指令或选择一种模式。",
- "Please enter an editing instruction first.": "请先输入编辑指令。",
- "Co-Writer Draft": "智能写作草稿",
- "Undo": "撤销",
- "Redo": "重做",
- "Heading 1": "标题 1",
- "Heading 2": "标题 2",
- "Heading 3": "标题 3",
- "Heading 4": "标题 4",
- "Heading 5": "标题 5",
- "Heading 6": "标题 6",
- "Bold": "粗体",
- "Italic": "斜体",
- "Strikethrough": "删除线",
- "Inline Code": "行内代码",
- "Blockquote": "引用",
- "Bullet List": "无序列表",
- "Numbered List": "有序列表",
- "Task List": "任务列表",
- "Horizontal Rule": "分割线",
- "Table": "表格",
- "Link": "链接",
- "Image": "图片",
- "Code Block": "代码块",
- "Mermaid Diagram": "Mermaid 图表",
- "Math Block": "数学公式",
- "Playground": "实验场",
- "Explore the building blocks of DeepTutor: reusable tools and higher-level capabilities.": "探索 DeepTutor 的核心模块:可复用工具与高级能力。",
- "Capabilities": "能力",
- "Capability": "能力",
- "Enable Tools": "启用工具",
- "This capability runs without optional tools.": "该能力无需额外工具即可运行。",
- "Try this capability": "试用此能力",
- "Run a focused conversation here without leaving the playground.": "无需离开实验场,在此进行专注对话。",
- "Select knowledge base...": "选择知识库…",
- "Code input": "代码输入",
- "Query input": "查询输入",
- "Enter your input...": "输入内容…",
- "Enter your query...": "输入查询…",
- "Running...": "运行中…",
- "Execute": "执行",
- "Details": "详情",
"Tool call": "工具调用",
"Tool result": "工具结果",
- "Auto": "自动",
- "Coding": "编程题",
- "Preference": "偏好",
- "Max Questions": "最大题目数",
- "Or": "或",
+ "Tools": "工具",
+ "Tools:": "工具:",
+ "Topic": "主题",
+ "Topic Assistant": "主题助手",
+ "Topic Optimization": "主题优化",
+ "Topic:": "主题:",
+ "Trace": "追踪",
+ "Try": "尝试",
+ "Try this capability": "试试这个能力",
+ "TTS": "TTS",
+ "TTS Configuration": "TTS 配置",
+ "TTS Model": "TTS 模型",
+ "TTS not configured, script generation only.": "TTS 未配置,仅生成脚本。",
+ "TutorBot": "TutorBot",
+ "TutorBot Agents": "TutorBot Agents",
+ "Type": "类型",
+ "Type your answer here...": "在此输入你的答案…",
+ "Type your message...": "输入您的消息...",
+ "Type:": "类型:",
+ "Unknown": "未知",
+ "Unknown error": "未知错误",
+ "Unknown time": "未知时间",
+ "Unsaved changes": "未保存更改",
+ "Untitled": "未命名",
+ "Untitled Session": "未命名会话",
+ "Upload": "上传",
+ "Upload a Math Problem Image": "上传数学题目图片",
+ "Upload an image to see analysis details": "上传图片以查看分析详情",
+ "Upload documents": "上传文档",
+ "Upload Documents": "上传文档",
+ "Upload documents to": "上传文档到",
+ "Upload Exam Paper (PDF)": "上传试卷(PDF)",
+ "Upload failed": "上传失败",
+ "Upload image (drag, paste, or click)": "上传图片(拖拽、粘贴或点击)",
+ "Upload Process": "上传流程",
+ "Uploading PDF": "上传 PDF",
+ "Use .env": "使用 .env",
+ "Use folders synced with Google Drive, OneDrive, SharePoint, or Dropbox for automatic cloud integration.": "建议使用与 Google Drive、OneDrive、SharePoint 或 Dropbox 同步的文件夹以实现自动云端集成。",
+ "User": "用户",
+ "User Query": "用户问题",
+ "Uses default model if empty": "留空则使用默认模型",
+ "Validation": "验证",
+ "Verified by DeepTutor Logic Engine": "由 DeepTutor 推理引擎校验",
+ "Verified by DeepTutor Vision Engine": "已通过 DeepTutor 视觉引擎验证",
+ "View": "查看",
+ "View All": "查看全部",
+ "View Day Details": "查看当日详细计划",
+ "View Full Report": "查看完整报告",
+ "View on GitHub": "在 GitHub 查看",
+ "View progress in the Logs panel": "可在日志面板查看进度",
+ "Vision Solver": "视觉解题",
+ "Visit DeepTutor Homepage": "访问 DeepTutor 主页",
+ "Waiting for execution logs...": "等待执行日志…",
+ "Waiting for logic execution...": "等待推理执行…",
+ "Waiting for logs...": "等待日志…",
+ "Waiting for the selected interactive page...": "正在等待所选交互页面…",
+ "Waiting in queue": "排队中",
+ "Waiting to start...": "等待开始…",
+ "Web": "网络",
+ "Web Search": "网络搜索",
+ "Web Search Enabled": "已启用网络搜索",
+ "WebSocket planning failed": "WebSocket 规划失败",
+ "WebSocket unavailable, falling back to REST planning...": "WebSocket 不可用,回退到 REST 规划…",
+ "Welcome to Deep Research Lab. \n\nPlease configure your settings above, then enter a research topic below.": "欢迎来到深度研究实验室。\n\n请先在上方配置设置,然后在下方输入研究主题。",
+ "Welcome to DeepTutor": "欢迎使用 DeepTutor",
+ "What would you like to learn?": "你想学习什么?",
+ "words": "词",
+ "Workspace": "工作区",
+ "Written": "主观题",
+ "Yesterday": "昨天",
"You": "你",
- "Generate": "生成",
- "Selected sources will be queried during research.": "所选来源将在研究过程中被查询。",
- "No source selected: the run will use llm-only research.": "未选择来源:将仅使用 LLM 进行研究。",
- "Describe the research topic...": "描述研究主题…",
- "Run Research": "开始研究",
- "Code Execution": "代码执行",
- "default": "默认",
- "Extra constraints, style, focus areas...": "额外约束、风格、重点方向…",
- "Try": "试试",
- "No conversations yet": "暂无对话",
- "Save title": "保存标题",
- "Rename chat": "重命名对话",
- "Delete chat": "删除对话",
- "Notebook": "笔记本",
- "Select History Sessions": "选择历史会话",
- "Choose one or more past conversations to analyze before this turn.": "选择一个或多个历史对话,在本轮对话前进行分析。",
- "No matching sessions found.": "未找到匹配的会话。",
- "Search sessions by title or last message": "按标题或最后消息搜索会话",
- "Retrieve": "检索",
- "Plan": "规划",
- "Observe": "观察",
- "Rendering diagram...": "正在渲染图表…",
- "Process Logs": "处理日志",
- "Raw logs": "原始日志",
- "Notebook Output": "笔记本输出",
- "Select one or more notebooks. A summary will be generated automatically.": "选择一个或多个笔记本,系统将自动生成摘要。",
- "Title": "标题",
- "No notebooks found.": "未找到笔记本。",
- "Summary preview": "摘要预览",
- "The generated summary will appear here during saving.": "保存时生成的摘要将显示在此处。",
- "Select Notebook Records": "选择笔记本记录",
- "Choose records across one or more notebooks to ground the next request.": "从一个或多个笔记本中选择记录,作为下一轮请求的依据。",
- "Follow-up Chat": "追问对话",
- "Ask anything about this question": "关于此题可以问任何问题",
- "Try: why this answer is correct, where your reasoning went wrong, or ask for a cleaner explanation.": "试试:为什么这个答案正确、你的推理哪里出错了、或要求更清晰的解释。",
- "Ask a follow-up question about this item...": "就此题提出追问…",
- "Mimic Paper": "仿真试卷",
- "Upload PDF": "上传 PDF",
- "Extra constraints...": "额外约束…",
- "Check Answer": "检查答案",
- "Correct": "正确",
- "Incorrect": "错误",
- "Retry": "重试",
- "Reference Answer": "参考答案",
- "Previous": "上一题",
- "Write your code here...": "在此输入代码…",
- "Type your answer...": "在此输入答案…",
- "Research Outline": "研究大纲",
- "Add sub-topic": "添加子主题",
- "Sub-topic title...": "子主题标题…",
- "Research direction and focus...": "研究方向与重点…",
- "Video": "视频",
- "Low": "低",
- "High": "高",
- "Style, pacing, color...": "风格、节奏、配色…",
- "Fullscreen": "全屏",
- "View Manim Code": "查看 Manim 代码",
- "Video Output": "视频输出",
- "Image Output": "图片输出",
- "Fullscreen math animation output": "全屏数学动画输出",
- "Delete this chat history?": "确定删除此聊天记录吗?"
+ "You can generate ideas from text description alone, or select notebook records above for richer context.": "你可以仅根据文字描述生成创意,或在上方选择笔记记录以获得更丰富的上下文。",
+ "Your activities will appear here": "您的活动将显示在这里",
+ "Your browser does not support the audio element.": "您的浏览器不支持音频元素。",
+ "Your Thoughts": "你的想法",
+ "一键出题": "一键出题",
+ "先用兜底 KB 跑通 MVP,后面替换成真实知识库即可。": "先用兜底 KB 跑通 MVP,后面替换成真实知识库即可。",
+ "创建 Session 后会通过 WebSocket 返回阶段进度,并在完成时推送最新计划。": "创建 Session 后会通过 WebSocket 返回阶段进度,并在完成时推送最新计划。",
+ "反馈已提交,可稍后手动触发重排。": "反馈已提交,可稍后手动触发重排。",
+ "反馈已提交,是否基于最新反馈立即重排计划?": "反馈已提交,是否基于最新反馈立即重排计划?",
+ "学习周期": "学习周期",
+ "尚未创建": "尚未创建",
+ "当前会话": "当前会话",
+ "当前版本支持在没有知识库的情况下先生成骨架计划,方便你先演示完整链路;后续接入真实 KB 后,计划会自动替换成更细的知识点图谱。": "当前版本支持在没有知识库的情况下先生成骨架计划,方便你先演示完整链路;后续接入真实 KB 后,计划会自动替换成更细的知识点图谱。",
+ "把模糊的学习目标,压缩成按天可执行的计划。": "把模糊的学习目标,压缩成按天可执行的计划。",
+ "提交反馈": "提交反馈",
+ "本次未生成题目,可重试一次。": "本次未生成题目,可重试一次。",
+ "正在根据最新反馈重排计划...": "正在根据最新反馈重排计划...",
+ "每日预算": "每日预算",
+ "没有 KB 时会显示 scaffolded plan,便于先联调整条链路。": "没有 KB 时会显示 scaffolded plan,便于先联调整条链路。",
+ "生成后会在这里按天展示任务卡片。": "生成后会在这里按天展示任务卡片。",
+ "生成学习路径": "生成学习路径",
+ "目标级别": "目标级别",
+ "等待阶段消息...": "等待阶段消息...",
+ "触发重排": "触发重排",
+ "输入你的学习目标、时间约束和希望达到的水平": "输入你的学习目标、时间约束和希望达到的水平",
+ "重试出题": "重试出题",
+ "阶段:{{stage}}": "阶段:{{stage}}",
+ "Brainstorm": "头脑风暴",
+ "Code": "代码执行",
+ "Reason": "推理",
+ "Arxiv Search": "Arxiv 检索",
+ "Deep Solve": "深度求解",
+ "Quiz Generation": "题目生成",
+ "Math Animator": "数学动画",
+ "Flexible conversation with any tool": "可结合任意工具进行灵活对话",
+ "Multi-step reasoning & problem solving": "多步骤推理与问题求解",
+ "Auto-validated question generation": "自动校验的题目生成",
+ "Comprehensive multi-agent research": "多智能体综合研究",
+ "Generate math videos or storyboard images": "生成数学视频或分镜图",
+ "Papers": "论文",
+ "Memory Summary": "摘要",
+ "Memory Profile": "画像",
+ "Running summary of the learning journey. Auto-updated after conversations.": "学习过程的滚动摘要,会在对话后自动更新。",
+ "User identity, preferences, and knowledge levels. Auto-updated after conversations.": "用户身份、偏好与知识水平,会在对话后自动更新。",
+ "Not updated yet": "尚未更新",
+ "Updated": "更新时间",
+ "No {{name}} yet": "暂无{{name}}",
+ "{{name}} saved": "已保存:{{name}}",
+ "{{name}} cleared": "已清空:{{name}}",
+ "Clear {{name}}?": "确认清空{{name}}吗?",
+ "Memory refreshed from session": "已根据会话刷新记忆",
+ "真题分析与考点提取": "真题分析与考点提取",
+ "真题分析输入": "真题分析输入",
+ "可粘贴题目原文、考点说明、历年题摘录...": "可粘贴题目原文、考点说明、历年题摘录...",
+ "已选择 {{count}} 个文件": "已选择 {{count}} 个文件",
+ "开始分析真题频次": "开始分析真题频次",
+ "请先生成学习路径,再进行真题分析。": "请先生成学习路径,再进行真题分析。",
+ "请至少粘贴题目文本或上传一个文件。": "请至少粘贴题目文本或上传一个文件。",
+ "真题分析失败": "真题分析失败",
+ "样本题数": "样本题数",
+ "文本来源": "文本来源",
+ "图片来源": "图片来源",
+ "高频考点 Top": "高频考点 Top",
+ "高频题型 Top": "高频题型 Top",
+ "分析结论": "分析结论",
+ "Exam Radar": "考点雷达",
+ "前往考点雷达": "前往考点雷达",
+ "请先在备考式学习中生成学习路径,再回到考点雷达。": "请先在备考式学习中生成学习路径,再回到考点雷达。",
+ "从真题中提取高频题型与高频考点,给出可执行的冲刺优先级。": "从真题中提取高频题型与高频考点,给出可执行的冲刺优先级。",
+ "支持 PDF、题目截图和文本粘贴,自动统计频次并输出考点 Top 与题型 Top,作为后续备考路径优化依据。": "支持 PDF、题目截图和文本粘贴,自动统计频次并输出考点 Top 与题型 Top,作为后续备考路径优化依据。",
+ "分析目标": "分析目标",
+ "高频考点挖掘": "高频考点挖掘",
+ "当前样本": "当前样本",
+ "待分析": "待分析",
+ "关联会话": "关联会话",
+ "分析输入": "分析输入",
+ "建议先在备考式学习中生成路径,再将真题材料在这里统一分析。": "建议先在备考式学习中生成路径,再将真题材料在这里统一分析。",
+ "会话 ID": "会话 ID",
+ "输入备考式学习会话 ID": "输入备考式学习会话 ID",
+ "返回备考式学习": "返回备考式学习",
+ "雷达结果面板": "雷达结果面板",
+ "上传真题后,这里会展示高频题型与高频考点分析结果。": "上传真题后,这里会展示高频题型与高频考点分析结果。",
+ "{{count}} 题": "{{count}} 题"
}
diff --git a/web/package-lock.json b/web/package-lock.json
index 6cbf89e4a..f13b21d55 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -8,7 +8,6 @@
"name": "opentutor-web",
"version": "1.0.0",
"dependencies": {
- "chart.js": "^4.5.1",
"clsx": "^2.1.1",
"cytoscape": "^3.33.1",
"framer-motion": "^12.24.0",
@@ -19,7 +18,6 @@
"mermaid": "^11.12.2",
"next": "^16.1.1",
"react": "^19.0.0",
- "react-chartjs-2": "^5.3.1",
"react-dom": "^19.0.0",
"react-i18next": "^16.5.3",
"react-markdown": "^10.1.0",
@@ -1138,12 +1136,6 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@kurkle/color": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz",
- "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
- "license": "MIT"
- },
"node_modules/@mermaid-js/parser": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.6.3.tgz",
@@ -2976,18 +2968,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/chart.js": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz",
- "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==",
- "license": "MIT",
- "dependencies": {
- "@kurkle/color": "^0.3.0"
- },
- "engines": {
- "pnpm": ">=8"
- }
- },
"node_modules/chevrotain": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz",
@@ -8188,16 +8168,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/react-chartjs-2": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.3.1.tgz",
- "integrity": "sha512-h5IPXKg9EXpjoBzUfyWJvllMjG2mQ4EiuHQFhms/AjUm0XSZHhyRy2xVmLXHKrtcdrPO4mnGqRtYoD0vp95A0A==",
- "license": "MIT",
- "peerDependencies": {
- "chart.js": "^4.1.1",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
"node_modules/react-dom": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz",
diff --git a/web/package.json b/web/package.json
index 3f149f78e..ac7e37740 100644
--- a/web/package.json
+++ b/web/package.json
@@ -19,7 +19,6 @@
"audit:report": "playwright show-report"
},
"dependencies": {
- "chart.js": "^4.5.1",
"clsx": "^2.1.1",
"cytoscape": "^3.33.1",
"framer-motion": "^12.24.0",
@@ -30,7 +29,6 @@
"mermaid": "^11.12.2",
"next": "^16.1.1",
"react": "^19.0.0",
- "react-chartjs-2": "^5.3.1",
"react-dom": "^19.0.0",
"react-i18next": "^16.5.3",
"react-markdown": "^10.1.0",
diff --git a/web/types/mermaid-dist.d.ts b/web/types/mermaid-dist.d.ts
new file mode 100644
index 000000000..93737c6c7
--- /dev/null
+++ b/web/types/mermaid-dist.d.ts
@@ -0,0 +1 @@
+declare module "mermaid/dist/mermaid.min.js";
diff --git a/web/types/mermaid.d.ts b/web/types/mermaid.d.ts
new file mode 100644
index 000000000..d6ab47edf
--- /dev/null
+++ b/web/types/mermaid.d.ts
@@ -0,0 +1 @@
+declare module "mermaid";