@researai/deepscientist 1.5.14 → 1.5.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +336 -90
- package/assets/branding/logo-raster.png +0 -0
- package/bin/ds.js +816 -131
- package/docs/en/00_QUICK_START.md +36 -15
- package/docs/en/01_SETTINGS_REFERENCE.md +53 -4
- package/docs/en/02_START_RESEARCH_GUIDE.md +7 -0
- package/docs/en/03_QQ_CONNECTOR_GUIDE.md +19 -0
- package/docs/en/05_TUI_GUIDE.md +6 -0
- package/docs/en/06_RUNTIME_AND_CANVAS.md +4 -3
- package/docs/en/09_DOCTOR.md +11 -5
- package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
- package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +65 -13
- package/docs/en/15_CODEX_PROVIDER_SETUP.md +25 -8
- package/docs/en/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
- package/docs/en/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
- package/docs/en/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
- package/docs/en/19_EXTERNAL_CONTROLLER_GUIDE.md +226 -0
- package/docs/en/19_LOCAL_BROWSER_AUTH.md +70 -0
- package/docs/en/20_WORKSPACE_MODES_GUIDE.md +250 -0
- package/docs/en/README.md +24 -0
- package/docs/zh/00_QUICK_START.md +36 -15
- package/docs/zh/01_SETTINGS_REFERENCE.md +53 -4
- package/docs/zh/02_START_RESEARCH_GUIDE.md +7 -0
- package/docs/zh/03_QQ_CONNECTOR_GUIDE.md +19 -0
- package/docs/zh/05_TUI_GUIDE.md +6 -0
- package/docs/zh/09_DOCTOR.md +11 -5
- package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
- package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +65 -13
- package/docs/zh/15_CODEX_PROVIDER_SETUP.md +25 -8
- package/docs/zh/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
- package/docs/zh/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
- package/docs/zh/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
- package/docs/zh/19_EXTERNAL_CONTROLLER_GUIDE.md +226 -0
- package/docs/zh/19_LOCAL_BROWSER_AUTH.md +68 -0
- package/docs/zh/20_WORKSPACE_MODES_GUIDE.md +251 -0
- package/docs/zh/README.md +24 -0
- package/install.sh +2 -0
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/src/deepscientist/__init__.py +1 -1
- package/src/deepscientist/acp/envelope.py +6 -0
- package/src/deepscientist/artifact/charts.py +567 -0
- package/src/deepscientist/artifact/guidance.py +50 -10
- package/src/deepscientist/artifact/metrics.py +228 -5
- package/src/deepscientist/artifact/schemas.py +3 -0
- package/src/deepscientist/artifact/service.py +4276 -308
- package/src/deepscientist/bash_exec/models.py +23 -0
- package/src/deepscientist/bash_exec/monitor.py +147 -67
- package/src/deepscientist/bash_exec/runtime.py +218 -156
- package/src/deepscientist/bash_exec/service.py +309 -69
- package/src/deepscientist/bash_exec/shells.py +87 -0
- package/src/deepscientist/bridges/connectors.py +51 -2
- package/src/deepscientist/cli.py +115 -19
- package/src/deepscientist/codex_cli_compat.py +232 -0
- package/src/deepscientist/config/models.py +8 -4
- package/src/deepscientist/config/service.py +38 -11
- package/src/deepscientist/connector/weixin_support.py +122 -1
- package/src/deepscientist/daemon/api/handlers.py +199 -9
- package/src/deepscientist/daemon/api/router.py +5 -0
- package/src/deepscientist/daemon/app.py +1458 -289
- package/src/deepscientist/doctor.py +51 -0
- package/src/deepscientist/file_lock.py +48 -0
- package/src/deepscientist/gitops/__init__.py +10 -1
- package/src/deepscientist/gitops/diff.py +296 -1
- package/src/deepscientist/gitops/service.py +4 -1
- package/src/deepscientist/mcp/server.py +212 -5
- package/src/deepscientist/process_control.py +161 -0
- package/src/deepscientist/prompts/builder.py +501 -453
- package/src/deepscientist/quest/layout.py +15 -2
- package/src/deepscientist/quest/service.py +2539 -195
- package/src/deepscientist/quest/stage_views.py +177 -1
- package/src/deepscientist/runners/base.py +2 -0
- package/src/deepscientist/runners/codex.py +169 -31
- package/src/deepscientist/runners/runtime_overrides.py +17 -1
- package/src/deepscientist/skills/__init__.py +2 -2
- package/src/deepscientist/skills/installer.py +196 -5
- package/src/deepscientist/skills/registry.py +66 -0
- package/src/prompts/connectors/qq.md +18 -8
- package/src/prompts/connectors/weixin.md +16 -6
- package/src/prompts/contracts/shared_interaction.md +24 -4
- package/src/prompts/system.md +921 -72
- package/src/prompts/system_copilot.md +43 -0
- package/src/skills/analysis-campaign/SKILL.md +32 -2
- package/src/skills/analysis-campaign/references/artifact-orchestration.md +1 -1
- package/src/skills/analysis-campaign/references/writing-facing-slice-examples.md +65 -0
- package/src/skills/baseline/SKILL.md +10 -0
- package/src/skills/decision/SKILL.md +27 -2
- package/src/skills/experiment/SKILL.md +16 -2
- package/src/skills/figure-polish/SKILL.md +1 -0
- package/src/skills/finalize/SKILL.md +19 -0
- package/src/skills/idea/SKILL.md +79 -0
- package/src/skills/idea/references/idea-generation-playbook.md +100 -0
- package/src/skills/idea/references/outline-seeding-example.md +60 -0
- package/src/skills/intake-audit/SKILL.md +9 -1
- package/src/skills/mentor/SKILL.md +217 -0
- package/src/skills/mentor/references/correction-rules.md +210 -0
- package/src/skills/mentor/references/knowledge-profile.md +91 -0
- package/src/skills/mentor/references/persona-profile.md +138 -0
- package/src/skills/mentor/references/taste-profile.md +128 -0
- package/src/skills/mentor/references/thought-style-profile.md +138 -0
- package/src/skills/mentor/references/work-profile.md +289 -0
- package/src/skills/mentor/references/workflow-profile.md +240 -0
- package/src/skills/optimize/SKILL.md +1645 -0
- package/src/skills/rebuttal/SKILL.md +3 -1
- package/src/skills/review/SKILL.md +3 -1
- package/src/skills/scout/SKILL.md +8 -0
- package/src/skills/write/SKILL.md +81 -12
- package/src/skills/write/references/outline-evidence-contract-example.md +107 -0
- package/src/tui/dist/app/AppContainer.js +22 -11
- package/src/tui/dist/index.js +4 -1
- package/src/tui/dist/lib/api.js +33 -3
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/AiManusChatView-COFACy7V.js +204 -0
- package/src/ui/dist/assets/AnalysisPlugin-DnSm0GZn.js +1 -0
- package/src/ui/dist/assets/CliPlugin-CvwCmDQ5.js +109 -0
- package/src/ui/dist/assets/CodeEditorPlugin-cOqSa0xq.js +2 -0
- package/src/ui/dist/assets/CodeViewerPlugin-itb0tltR.js +270 -0
- package/src/ui/dist/assets/DocViewerPlugin-DqKkiCI6.js +7 -0
- package/src/ui/dist/assets/GitCommitViewerPlugin-DVgNHBCS.js +1 -0
- package/src/ui/dist/assets/GitDiffViewerPlugin-DxL2ezFG.js +6 -0
- package/src/ui/dist/assets/GitSnapshotViewer-B_RQm1YZ.js +30 -0
- package/src/ui/dist/assets/ImageViewerPlugin-tHqlXY3n.js +26 -0
- package/src/ui/dist/assets/LabCopilotPanel-ClMbq5Yu.js +14 -0
- package/src/ui/dist/assets/LabPlugin-L_SuE8ow.js +22 -0
- package/src/ui/dist/assets/LatexPlugin-B495DTXC.js +25 -0
- package/src/ui/dist/assets/MarkdownViewerPlugin-DG28-61B.js +128 -0
- package/src/ui/dist/assets/MarketplacePlugin-BiOGT-Kj.js +13 -0
- package/src/ui/dist/assets/{NotebookEditor-CccQYZjX.css → NotebookEditor-BHH8rdGj.css} +1 -1
- package/src/ui/dist/assets/NotebookEditor-BOr3x3Ej.css +1 -0
- package/src/ui/dist/assets/NotebookEditor-C-4Kt1p9.js +81 -0
- package/src/ui/dist/assets/NotebookEditor-CVsj8h_T.js +361 -0
- package/src/ui/dist/assets/PdfLoader-CASDQmxJ.js +16 -0
- package/src/ui/dist/assets/PdfLoader-Cy5jtWrr.css +1 -0
- package/src/ui/dist/assets/PdfMarkdownPlugin-BFhwoKsY.js +1 -0
- package/src/ui/dist/assets/PdfViewerPlugin-DcOzU9vd.js +17 -0
- package/src/ui/dist/assets/PdfViewerPlugin-nwwE-fjJ.css +1 -0
- package/src/ui/dist/assets/SearchPlugin-CHj7M58O.js +16 -0
- package/src/ui/dist/assets/SearchPlugin-DA4en4hK.css +1 -0
- package/src/ui/dist/assets/TextViewerPlugin-CB4DYfWO.js +54 -0
- package/src/ui/dist/assets/VNCViewer-CjlbyCB3.js +11 -0
- package/src/ui/dist/assets/bot-CFkZY-JP.js +6 -0
- package/src/ui/dist/assets/browser-CTB2jwNe.js +8 -0
- package/src/ui/dist/assets/chevron-up-Dq5ofbht.js +6 -0
- package/src/ui/dist/assets/code-DLC6G24T.js +6 -0
- package/src/ui/dist/assets/file-content-Dv4LoZec.js +1 -0
- package/src/ui/dist/assets/file-diff-panel-Denq-lC3.js +1 -0
- package/src/ui/dist/assets/file-jump-queue-DA-SdG__.js +1 -0
- package/src/ui/dist/assets/file-socket-Cu4Qln7Y.js +1 -0
- package/src/ui/dist/assets/git-commit-horizontal-BUh6G52n.js +6 -0
- package/src/ui/dist/assets/image-B9HUUddG.js +6 -0
- package/src/ui/dist/assets/index-B2B1sg-M.js +1 -0
- package/src/ui/dist/assets/index-Cgla8biy.css +33 -0
- package/src/ui/dist/assets/index-DRyx7vAc.js +1 -0
- package/src/ui/dist/assets/index-Gbl53BNp.js +2496 -0
- package/src/ui/dist/assets/index-wQ7RIIRd.js +11 -0
- package/src/ui/dist/assets/monaco-CiHMMNH_.js +1 -0
- package/src/ui/dist/assets/pdf-effect-queue-ZtnHFCAi.js +6 -0
- package/src/ui/dist/assets/plugin-monaco-C8UgLomw.js +19 -0
- package/src/ui/dist/assets/plugin-notebook-HbW2K-1c.js +169 -0
- package/src/ui/dist/assets/plugin-pdf-CR8hgQBV.js +357 -0
- package/src/ui/dist/assets/plugin-terminal-MXFIPun8.js +227 -0
- package/src/ui/dist/assets/popover-DL6h35vr.js +1 -0
- package/src/ui/dist/assets/project-sync-CsX08Qno.js +1 -0
- package/src/ui/dist/assets/select-DvmXt1yY.js +11 -0
- package/src/ui/dist/assets/sigma-7jpXazui.js +6 -0
- package/src/ui/dist/assets/trash-xA7kFt8i.js +11 -0
- package/src/ui/dist/assets/useCliAccess-DsMwDjOp.js +1 -0
- package/src/ui/dist/assets/useFileDiffOverlay-FuhcnKiw.js +1 -0
- package/src/ui/dist/assets/wrap-text-CwMn-iqb.js +11 -0
- package/src/ui/dist/assets/zoom-out-R-GWEhzS.js +11 -0
- package/src/ui/dist/index.html +5 -2
- package/src/ui/dist/assets/AiManusChatView-DaF9Nge_.js +0 -26597
- package/src/ui/dist/assets/AnalysisPlugin-BSVx6dXE.js +0 -123
- package/src/ui/dist/assets/CliPlugin-C9gzJX41.js +0 -5905
- package/src/ui/dist/assets/CodeEditorPlugin-DU9G0Tox.js +0 -427
- package/src/ui/dist/assets/CodeViewerPlugin-DoX_fI9l.js +0 -905
- package/src/ui/dist/assets/DocViewerPlugin-C4FWIXuU.js +0 -278
- package/src/ui/dist/assets/GitDiffViewerPlugin-BgfFMgtf.js +0 -2661
- package/src/ui/dist/assets/ImageViewerPlugin-tcPkfY_x.js +0 -500
- package/src/ui/dist/assets/LabCopilotPanel-_dKV60Bf.js +0 -4104
- package/src/ui/dist/assets/LabPlugin-Bje0ayoC.js +0 -2677
- package/src/ui/dist/assets/LatexPlugin-CVsBzAln.js +0 -1792
- package/src/ui/dist/assets/MarkdownViewerPlugin-xjmrqv_8.js +0 -308
- package/src/ui/dist/assets/MarketplacePlugin-mMM2A8wP.js +0 -413
- package/src/ui/dist/assets/NotebookEditor-3kVDSOBo.js +0 -4214
- package/src/ui/dist/assets/NotebookEditor-C3VQ7ylN.css +0 -1405
- package/src/ui/dist/assets/NotebookEditor-SoJ8X-MO.js +0 -84873
- package/src/ui/dist/assets/PdfLoader-C-Y707R3.css +0 -49
- package/src/ui/dist/assets/PdfLoader-DElVuHl9.js +0 -25468
- package/src/ui/dist/assets/PdfMarkdownPlugin-Bq88XT4G.js +0 -409
- package/src/ui/dist/assets/PdfViewerPlugin-CsCXMo9S.js +0 -3095
- package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +0 -3627
- package/src/ui/dist/assets/SearchPlugin-DDMrGDkh.css +0 -379
- package/src/ui/dist/assets/SearchPlugin-oUPvy19k.js +0 -741
- package/src/ui/dist/assets/TextViewerPlugin-CRkT9yNy.js +0 -472
- package/src/ui/dist/assets/VNCViewer-BgbuvWhR.js +0 -18821
- package/src/ui/dist/assets/awareness-C0NPR2Dj.js +0 -292
- package/src/ui/dist/assets/bot-v_RASACv.js +0 -21
- package/src/ui/dist/assets/browser-BAcuE0Xj.js +0 -2895
- package/src/ui/dist/assets/code-5hC9d0VH.js +0 -17
- package/src/ui/dist/assets/file-content-D1PxfOrp.js +0 -377
- package/src/ui/dist/assets/file-diff-panel-DG1oT_Hj.js +0 -92
- package/src/ui/dist/assets/file-jump-queue-r5XKgJEV.js +0 -16
- package/src/ui/dist/assets/file-socket-BmdFYQlk.js +0 -58
- package/src/ui/dist/assets/function-B5QZkkHC.js +0 -1895
- package/src/ui/dist/assets/image-Dqe2X2tW.js +0 -18
- package/src/ui/dist/assets/index-BQG-1s2o.css +0 -12553
- package/src/ui/dist/assets/index-DVsMKK_y.js +0 -25
- package/src/ui/dist/assets/index-Duvz8Ip0.js +0 -159
- package/src/ui/dist/assets/index-Nt9hS4ck.js +0 -244829
- package/src/ui/dist/assets/index-RDlNXXx1.js +0 -120
- package/src/ui/dist/assets/monaco-DIXge1CP.js +0 -623
- package/src/ui/dist/assets/pdf-effect-queue-BBTTQaO-.js +0 -47
- package/src/ui/dist/assets/pdf_viewer-e0g1is2C.js +0 -8206
- package/src/ui/dist/assets/popover-BWlolyxo.js +0 -476
- package/src/ui/dist/assets/project-sync-BM5PkFH4.js +0 -297
- package/src/ui/dist/assets/select-D4dAtrA8.js +0 -1690
- package/src/ui/dist/assets/sigma-CKbE5jJT.js +0 -22
- package/src/ui/dist/assets/square-check-big-CZNGMgiB.js +0 -17
- package/src/ui/dist/assets/trash-DaB37xAz.js +0 -32
- package/src/ui/dist/assets/useCliAccess-C2OmAcWe.js +0 -957
- package/src/ui/dist/assets/useFileDiffOverlay-Dowd1Ij4.js +0 -53
- package/src/ui/dist/assets/wrap-text-BGjAhAUq.js +0 -35
- package/src/ui/dist/assets/yjs-DncrqiZ8.js +0 -11243
- package/src/ui/dist/assets/zoom-out-dMZQMXzc.js +0 -34
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Nt9hS4ck.js","assets/index-BQG-1s2o.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import { u as useI18n, a as useWorkspaceSurfaceStore, r as reactExports, R as React, a7 as getQuestMarkdownContextFromFileId, c as copyToClipboard, j as jsxRuntimeExports, L as LoaderCircle, C as CircleAlert, a8 as MARKDOWN_VIEWER_STYLES, k as FileText, E as Eye, b as cn, d as Check, e as Copy, M as MarkdownRenderer, _ as __vitePreload } from './index-Nt9hS4ck.js';
|
|
3
|
-
import { C as Code } from './code-5hC9d0VH.js';
|
|
4
|
-
|
|
5
|
-
function isMdxDocument(fileName) {
|
|
6
|
-
if (!fileName) return false;
|
|
7
|
-
return /\.mdx$/i.test(fileName.trim());
|
|
8
|
-
}
|
|
9
|
-
function stripFrontmatter(content) {
|
|
10
|
-
if (!content.startsWith("---")) return content;
|
|
11
|
-
const match = content.match(/^---\s*\n[\s\S]*?\n---\s*\n?/);
|
|
12
|
-
return match ? content.slice(match[0].length) : content;
|
|
13
|
-
}
|
|
14
|
-
function preprocessMarkdownDocument(content, options = {}) {
|
|
15
|
-
if (!options.isMdx) return content;
|
|
16
|
-
const withoutFrontmatter = stripFrontmatter(content);
|
|
17
|
-
const lines = withoutFrontmatter.split(/\r?\n/);
|
|
18
|
-
const nextLines = [];
|
|
19
|
-
let inFence = false;
|
|
20
|
-
let contentStarted = false;
|
|
21
|
-
for (const line of lines) {
|
|
22
|
-
const trimmed = line.trim();
|
|
23
|
-
if (/^(```|~~~)/.test(trimmed)) {
|
|
24
|
-
inFence = !inFence;
|
|
25
|
-
contentStarted = true;
|
|
26
|
-
nextLines.push(line);
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
if (inFence) {
|
|
30
|
-
nextLines.push(line);
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
if (!contentStarted) {
|
|
34
|
-
if (!trimmed) {
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
if (/^(import|export)\s/.test(trimmed)) {
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
if (/^\{\/\*.*\*\/\}$/.test(trimmed)) {
|
|
41
|
-
continue;
|
|
42
|
-
}
|
|
43
|
-
contentStarted = true;
|
|
44
|
-
}
|
|
45
|
-
if (/^\{\/\*.*\*\/\}$/.test(trimmed)) {
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
nextLines.push(line);
|
|
49
|
-
}
|
|
50
|
-
return nextLines.join("\n");
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const DEMO_MARKDOWN = `# DeepScientist Markdown Viewer
|
|
54
|
-
|
|
55
|
-
Welcome to the **Markdown Viewer** plugin. This viewer supports [GitHub Flavored Markdown](https://github.github.com/gfm/) with additional features.
|
|
56
|
-
|
|
57
|
-
## Features
|
|
58
|
-
|
|
59
|
-
### Text Formatting
|
|
60
|
-
|
|
61
|
-
- **Bold text** using \`**bold**\`
|
|
62
|
-
- *Italic text* using \`*italic*\`
|
|
63
|
-
- ***Bold and italic*** using \`***combined***\`
|
|
64
|
-
- ~~Strikethrough~~ using \`~~text~~\`
|
|
65
|
-
- \`Inline code\` using backticks
|
|
66
|
-
|
|
67
|
-
### Code Blocks
|
|
68
|
-
|
|
69
|
-
\`\`\`typescript
|
|
70
|
-
interface Document {
|
|
71
|
-
id: string;
|
|
72
|
-
title: string;
|
|
73
|
-
content: string;
|
|
74
|
-
tags: string[];
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
async function fetchDocument(id: string): Promise<Document> {
|
|
78
|
-
const response = await fetch(\`/api/documents/\${id}\`);
|
|
79
|
-
return response.json();
|
|
80
|
-
}
|
|
81
|
-
\`\`\`
|
|
82
|
-
|
|
83
|
-
### Math Support
|
|
84
|
-
|
|
85
|
-
Inline math: $E = mc^2$
|
|
86
|
-
|
|
87
|
-
Display math:
|
|
88
|
-
|
|
89
|
-
$$
|
|
90
|
-
\\int_{-\\infty}^{\\infty} e^{-x^2} dx = \\sqrt{\\pi}
|
|
91
|
-
$$
|
|
92
|
-
|
|
93
|
-
### Tables (GFM)
|
|
94
|
-
|
|
95
|
-
| Feature | Status | Priority |
|
|
96
|
-
|---------|--------|----------|
|
|
97
|
-
| Markdown rendering | Done | High |
|
|
98
|
-
| Code highlighting | Done | High |
|
|
99
|
-
| Math formulas | Done | Medium |
|
|
100
|
-
| Export to PDF | Planned | Low |
|
|
101
|
-
|
|
102
|
-
### Task Lists (GFM)
|
|
103
|
-
|
|
104
|
-
- [x] Implement markdown parser
|
|
105
|
-
- [x] Add code highlighting
|
|
106
|
-
- [ ] Add export functionality
|
|
107
|
-
- [ ] Implement search
|
|
108
|
-
|
|
109
|
-
### Blockquotes
|
|
110
|
-
|
|
111
|
-
> This is a blockquote.
|
|
112
|
-
> It can span multiple lines.
|
|
113
|
-
>
|
|
114
|
-
> Use it for citations or important notes.
|
|
115
|
-
|
|
116
|
-
### Images
|
|
117
|
-
|
|
118
|
-
Images are loaded lazily for better performance:
|
|
119
|
-
|
|
120
|
-

|
|
121
|
-
|
|
122
|
-
### Links
|
|
123
|
-
|
|
124
|
-
- [Visit our website](https://example.com)
|
|
125
|
-
- [GitHub Repository](https://github.com/example/deepscientist)
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## Getting Started
|
|
130
|
-
|
|
131
|
-
1. Open a markdown file
|
|
132
|
-
2. The viewer will render it automatically
|
|
133
|
-
3. Use the toolbar to toggle between rendered and source view
|
|
134
|
-
4. Copy the source using the copy button
|
|
135
|
-
|
|
136
|
-
Happy writing! :rocket:
|
|
137
|
-
`;
|
|
138
|
-
const DEMO_MARKDOWN_ZH = `# DeepScientist Markdown 查看器
|
|
139
|
-
|
|
140
|
-
欢迎使用 **Markdown 查看器** 插件。该查看器支持 [GitHub Flavored Markdown](https://github.github.com/gfm/) 及更多增强能力。
|
|
141
|
-
|
|
142
|
-
## 功能特性
|
|
143
|
-
|
|
144
|
-
### 文本格式
|
|
145
|
-
|
|
146
|
-
- 使用 \`**粗体**\` 显示 **粗体**
|
|
147
|
-
- 使用 \`*斜体*\` 显示 *斜体*
|
|
148
|
-
- 使用 \`***加粗斜体***\` 显示 ***加粗斜体***
|
|
149
|
-
- 使用 \`~~删除线~~\` 显示 ~~删除线~~
|
|
150
|
-
- 使用反引号显示 \`行内代码\`
|
|
151
|
-
|
|
152
|
-
### 数学公式
|
|
153
|
-
|
|
154
|
-
行内公式:$E = mc^2$
|
|
155
|
-
|
|
156
|
-
块级公式:
|
|
157
|
-
|
|
158
|
-
$$
|
|
159
|
-
\\int_{-\\infty}^{\\infty} e^{-x^2} dx = \\sqrt{\\pi}
|
|
160
|
-
$$
|
|
161
|
-
|
|
162
|
-
### 表格
|
|
163
|
-
|
|
164
|
-
| 功能 | 状态 | 优先级 |
|
|
165
|
-
|------|------|--------|
|
|
166
|
-
| Markdown 渲染 | 已完成 | 高 |
|
|
167
|
-
| 代码高亮 | 已完成 | 高 |
|
|
168
|
-
| 数学公式 | 已完成 | 中 |
|
|
169
|
-
| 导出 PDF | 规划中 | 低 |
|
|
170
|
-
|
|
171
|
-
### 开始使用
|
|
172
|
-
|
|
173
|
-
1. 打开一个 Markdown 文件
|
|
174
|
-
2. 查看器会自动完成渲染
|
|
175
|
-
3. 使用顶部工具栏在渲染视图和源码视图之间切换
|
|
176
|
-
4. 使用复制按钮复制源内容
|
|
177
|
-
|
|
178
|
-
祝你写作顺利!:rocket:
|
|
179
|
-
`;
|
|
180
|
-
function MarkdownViewerPlugin({
|
|
181
|
-
context,
|
|
182
|
-
tabId,
|
|
183
|
-
setDirty,
|
|
184
|
-
setTitle
|
|
185
|
-
}) {
|
|
186
|
-
const { t, language } = useI18n("markdown_viewer");
|
|
187
|
-
const updateWorkspaceTabState = useWorkspaceSurfaceStore((state) => state.updateTabState);
|
|
188
|
-
const [content, setContent] = reactExports.useState("");
|
|
189
|
-
const [loading, setLoading] = reactExports.useState(true);
|
|
190
|
-
const [error, setError] = reactExports.useState(null);
|
|
191
|
-
const [copied, setCopied] = reactExports.useState(false);
|
|
192
|
-
const [viewMode, setViewMode] = reactExports.useState("rendered");
|
|
193
|
-
const fileName = context.resourceName || context.resourcePath || "Untitled.md";
|
|
194
|
-
const isMdx = isMdxDocument(fileName);
|
|
195
|
-
const renderedContent = preprocessMarkdownDocument(content, { isMdx });
|
|
196
|
-
const questContext = React.useMemo(
|
|
197
|
-
() => getQuestMarkdownContextFromFileId(context.resourceId),
|
|
198
|
-
[context.resourceId]
|
|
199
|
-
);
|
|
200
|
-
reactExports.useEffect(() => {
|
|
201
|
-
setTitle(fileName);
|
|
202
|
-
}, [fileName, setTitle]);
|
|
203
|
-
reactExports.useEffect(() => {
|
|
204
|
-
updateWorkspaceTabState(tabId, {
|
|
205
|
-
contentKind: isMdx ? "mdx" : "markdown",
|
|
206
|
-
documentMode: viewMode,
|
|
207
|
-
isReadOnly: true
|
|
208
|
-
});
|
|
209
|
-
}, [isMdx, tabId, updateWorkspaceTabState, viewMode]);
|
|
210
|
-
reactExports.useEffect(() => {
|
|
211
|
-
const loadContent = async () => {
|
|
212
|
-
setLoading(true);
|
|
213
|
-
setError(null);
|
|
214
|
-
try {
|
|
215
|
-
if (!context.resourceId) {
|
|
216
|
-
setContent(language === "zh-CN" ? DEMO_MARKDOWN_ZH : DEMO_MARKDOWN);
|
|
217
|
-
setLoading(false);
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
const { getFileContent } = await __vitePreload(async () => { const { getFileContent } = await import('./index-Nt9hS4ck.js').then(n => n.el);return { getFileContent }},true?__vite__mapDeps([0,1]):void 0);
|
|
221
|
-
const text = await getFileContent(context.resourceId);
|
|
222
|
-
setContent(text);
|
|
223
|
-
} catch (err) {
|
|
224
|
-
setError(err instanceof Error ? err.message : t("load_failed"));
|
|
225
|
-
} finally {
|
|
226
|
-
setLoading(false);
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
loadContent();
|
|
230
|
-
}, [context.resourceId, language, t]);
|
|
231
|
-
const handleCopy = reactExports.useCallback(async () => {
|
|
232
|
-
const ok = await copyToClipboard(content);
|
|
233
|
-
if (ok) {
|
|
234
|
-
setCopied(true);
|
|
235
|
-
setTimeout(() => setCopied(false), 2e3);
|
|
236
|
-
}
|
|
237
|
-
}, [content]);
|
|
238
|
-
if (loading) {
|
|
239
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-3 text-muted-foreground", children: [
|
|
240
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "w-8 h-8 animate-spin" }),
|
|
241
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: t("loading") })
|
|
242
|
-
] }) });
|
|
243
|
-
}
|
|
244
|
-
if (error) {
|
|
245
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-3 text-destructive", children: [
|
|
246
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { className: "w-8 h-8" }),
|
|
247
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: error }),
|
|
248
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
249
|
-
"button",
|
|
250
|
-
{
|
|
251
|
-
className: "px-4 py-2 text-sm bg-destructive/10 hover:bg-destructive/20 rounded-lg transition-colors",
|
|
252
|
-
onClick: () => window.location.reload(),
|
|
253
|
-
children: t("retry")
|
|
254
|
-
}
|
|
255
|
-
)
|
|
256
|
-
] }) });
|
|
257
|
-
}
|
|
258
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col h-full bg-background text-foreground", children: [
|
|
259
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("style", { dangerouslySetInnerHTML: { __html: MARKDOWN_VIEWER_STYLES } }),
|
|
260
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b border-border bg-muted/30", children: [
|
|
261
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
262
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(FileText, { className: "w-4 h-4 text-muted-foreground" }),
|
|
263
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm text-foreground", children: fileName }),
|
|
264
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs px-2 py-0.5 rounded bg-muted text-muted-foreground", children: isMdx ? "MDX" : "Markdown" })
|
|
265
|
-
] }),
|
|
266
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
267
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center border border-border rounded-md mr-2", children: [
|
|
268
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
269
|
-
"button",
|
|
270
|
-
{
|
|
271
|
-
onClick: () => setViewMode("rendered"),
|
|
272
|
-
className: cn(
|
|
273
|
-
"p-2 rounded-l-md transition-colors",
|
|
274
|
-
viewMode === "rendered" ? "bg-primary text-primary-foreground" : "hover:bg-accent text-muted-foreground"
|
|
275
|
-
),
|
|
276
|
-
title: t("rendered_view"),
|
|
277
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Eye, { className: "w-4 h-4" })
|
|
278
|
-
}
|
|
279
|
-
),
|
|
280
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
281
|
-
"button",
|
|
282
|
-
{
|
|
283
|
-
onClick: () => setViewMode("source"),
|
|
284
|
-
className: cn(
|
|
285
|
-
"p-2 rounded-r-md transition-colors",
|
|
286
|
-
viewMode === "source" ? "bg-primary text-primary-foreground" : "hover:bg-accent text-muted-foreground"
|
|
287
|
-
),
|
|
288
|
-
title: t("source_view"),
|
|
289
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Code, { className: "w-4 h-4" })
|
|
290
|
-
}
|
|
291
|
-
)
|
|
292
|
-
] }),
|
|
293
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
294
|
-
"button",
|
|
295
|
-
{
|
|
296
|
-
onClick: handleCopy,
|
|
297
|
-
className: "p-2 rounded hover:bg-accent transition-colors text-muted-foreground hover:text-foreground",
|
|
298
|
-
title: t("copy_source"),
|
|
299
|
-
children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "w-4 h-4 text-green-500" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { className: "w-4 h-4" })
|
|
300
|
-
}
|
|
301
|
-
)
|
|
302
|
-
] })
|
|
303
|
-
] }),
|
|
304
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-auto", children: viewMode === "rendered" ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-4xl mx-auto p-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MarkdownRenderer, { content: renderedContent, questContext }) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "p-4 font-mono text-sm whitespace-pre-wrap", children: content }) })
|
|
305
|
-
] });
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
export { MarkdownViewerPlugin as default };
|