@researai/deepscientist 1.5.15 → 1.5.17

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.
Files changed (202) hide show
  1. package/README.md +385 -104
  2. package/bin/ds.js +1241 -110
  3. package/docs/en/00_QUICK_START.md +100 -19
  4. package/docs/en/01_SETTINGS_REFERENCE.md +34 -1
  5. package/docs/en/02_START_RESEARCH_GUIDE.md +7 -0
  6. package/docs/en/05_TUI_GUIDE.md +6 -0
  7. package/docs/en/06_RUNTIME_AND_CANVAS.md +4 -3
  8. package/docs/en/09_DOCTOR.md +25 -8
  9. package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +63 -13
  10. package/docs/en/15_CODEX_PROVIDER_SETUP.md +37 -11
  11. package/docs/en/19_EXTERNAL_CONTROLLER_GUIDE.md +226 -0
  12. package/docs/en/19_LOCAL_BROWSER_AUTH.md +70 -0
  13. package/docs/en/20_WORKSPACE_MODES_GUIDE.md +250 -0
  14. package/docs/en/21_LOCAL_MODEL_BACKENDS_GUIDE.md +283 -0
  15. package/docs/en/91_DEVELOPMENT.md +237 -0
  16. package/docs/en/README.md +24 -2
  17. package/docs/zh/00_QUICK_START.md +89 -19
  18. package/docs/zh/01_SETTINGS_REFERENCE.md +34 -1
  19. package/docs/zh/02_START_RESEARCH_GUIDE.md +7 -0
  20. package/docs/zh/05_TUI_GUIDE.md +6 -0
  21. package/docs/zh/09_DOCTOR.md +26 -9
  22. package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +63 -13
  23. package/docs/zh/15_CODEX_PROVIDER_SETUP.md +37 -11
  24. package/docs/zh/19_EXTERNAL_CONTROLLER_GUIDE.md +226 -0
  25. package/docs/zh/19_LOCAL_BROWSER_AUTH.md +68 -0
  26. package/docs/zh/20_WORKSPACE_MODES_GUIDE.md +251 -0
  27. package/docs/zh/21_LOCAL_MODEL_BACKENDS_GUIDE.md +281 -0
  28. package/docs/zh/README.md +24 -2
  29. package/install.sh +46 -4
  30. package/package.json +2 -1
  31. package/pyproject.toml +1 -1
  32. package/src/deepscientist/__init__.py +1 -1
  33. package/src/deepscientist/acp/envelope.py +6 -0
  34. package/src/deepscientist/artifact/service.py +647 -22
  35. package/src/deepscientist/bash_exec/service.py +234 -9
  36. package/src/deepscientist/bridges/connectors.py +8 -2
  37. package/src/deepscientist/cli.py +115 -19
  38. package/src/deepscientist/codex_cli_compat.py +367 -22
  39. package/src/deepscientist/config/models.py +2 -1
  40. package/src/deepscientist/config/service.py +183 -13
  41. package/src/deepscientist/daemon/api/handlers.py +255 -31
  42. package/src/deepscientist/daemon/api/router.py +9 -0
  43. package/src/deepscientist/daemon/app.py +1146 -105
  44. package/src/deepscientist/diagnostics/__init__.py +6 -0
  45. package/src/deepscientist/diagnostics/runner_failures.py +130 -0
  46. package/src/deepscientist/doctor.py +207 -3
  47. package/src/deepscientist/gitops/__init__.py +10 -1
  48. package/src/deepscientist/gitops/diff.py +129 -0
  49. package/src/deepscientist/gitops/service.py +4 -1
  50. package/src/deepscientist/mcp/server.py +39 -0
  51. package/src/deepscientist/prompts/builder.py +275 -34
  52. package/src/deepscientist/quest/layout.py +15 -2
  53. package/src/deepscientist/quest/service.py +707 -55
  54. package/src/deepscientist/quest/stage_views.py +6 -1
  55. package/src/deepscientist/runners/codex.py +143 -43
  56. package/src/deepscientist/shared.py +19 -0
  57. package/src/deepscientist/skills/__init__.py +2 -2
  58. package/src/deepscientist/skills/installer.py +196 -5
  59. package/src/deepscientist/skills/registry.py +66 -0
  60. package/src/prompts/connectors/qq.md +18 -8
  61. package/src/prompts/connectors/weixin.md +16 -6
  62. package/src/prompts/contracts/shared_interaction.md +14 -2
  63. package/src/prompts/system.md +23 -5
  64. package/src/prompts/system_copilot.md +56 -0
  65. package/src/skills/analysis-campaign/SKILL.md +1 -0
  66. package/src/skills/baseline/SKILL.md +8 -0
  67. package/src/skills/decision/SKILL.md +8 -0
  68. package/src/skills/experiment/SKILL.md +8 -0
  69. package/src/skills/figure-polish/SKILL.md +1 -0
  70. package/src/skills/finalize/SKILL.md +1 -0
  71. package/src/skills/idea/SKILL.md +1 -0
  72. package/src/skills/intake-audit/SKILL.md +8 -0
  73. package/src/skills/mentor/SKILL.md +217 -0
  74. package/src/skills/mentor/references/correction-rules.md +210 -0
  75. package/src/skills/mentor/references/knowledge-profile.md +91 -0
  76. package/src/skills/mentor/references/persona-profile.md +138 -0
  77. package/src/skills/mentor/references/taste-profile.md +128 -0
  78. package/src/skills/mentor/references/thought-style-profile.md +138 -0
  79. package/src/skills/mentor/references/work-profile.md +289 -0
  80. package/src/skills/mentor/references/workflow-profile.md +240 -0
  81. package/src/skills/optimize/SKILL.md +1 -0
  82. package/src/skills/rebuttal/SKILL.md +1 -0
  83. package/src/skills/review/SKILL.md +1 -0
  84. package/src/skills/scout/SKILL.md +8 -0
  85. package/src/skills/write/SKILL.md +1 -0
  86. package/src/tui/dist/app/AppContainer.js +19 -11
  87. package/src/tui/dist/index.js +4 -1
  88. package/src/tui/dist/lib/api.js +33 -3
  89. package/src/tui/package.json +1 -1
  90. package/src/ui/dist/assets/AiManusChatView-Bv-Z8YpU.js +204 -0
  91. package/src/ui/dist/assets/AnalysisPlugin-BCKAfjba.js +1 -0
  92. package/src/ui/dist/assets/CliPlugin-BCKcpc35.js +109 -0
  93. package/src/ui/dist/assets/CodeEditorPlugin-DbOfSJ8K.js +2 -0
  94. package/src/ui/dist/assets/CodeViewerPlugin-CbaFRrUU.js +270 -0
  95. package/src/ui/dist/assets/DocViewerPlugin-DAjLVeQD.js +7 -0
  96. package/src/ui/dist/assets/GitCommitViewerPlugin-CIUqbUDO.js +1 -0
  97. package/src/ui/dist/assets/GitDiffViewerPlugin-CQACjoAA.js +6 -0
  98. package/src/ui/dist/assets/GitSnapshotViewer-0r4nLPke.js +30 -0
  99. package/src/ui/dist/assets/ImageViewerPlugin-nBOmI2v_.js +26 -0
  100. package/src/ui/dist/assets/LabCopilotPanel-BHxOxF4z.js +14 -0
  101. package/src/ui/dist/assets/LabPlugin-BKoZGs95.js +22 -0
  102. package/src/ui/dist/assets/LatexPlugin-ZwtV8pIp.js +25 -0
  103. package/src/ui/dist/assets/MarkdownViewerPlugin-DKqVfKyW.js +128 -0
  104. package/src/ui/dist/assets/MarketplacePlugin-BwxStZ9D.js +13 -0
  105. package/src/ui/dist/assets/NotebookEditor-BEQhaQbt.js +81 -0
  106. package/src/ui/dist/assets/{NotebookEditor-CccQYZjX.css → NotebookEditor-BHH8rdGj.css} +1 -1
  107. package/src/ui/dist/assets/NotebookEditor-BOr3x3Ej.css +1 -0
  108. package/src/ui/dist/assets/NotebookEditor-DB9N_T9q.js +361 -0
  109. package/src/ui/dist/assets/PdfLoader-Cy5jtWrr.css +1 -0
  110. package/src/ui/dist/assets/PdfLoader-eWBONbQP.js +16 -0
  111. package/src/ui/dist/assets/PdfMarkdownPlugin-D22YOZL3.js +1 -0
  112. package/src/ui/dist/assets/PdfViewerPlugin-c-RK9DLM.js +17 -0
  113. package/src/ui/dist/assets/PdfViewerPlugin-nwwE-fjJ.css +1 -0
  114. package/src/ui/dist/assets/SearchPlugin-CxF9ytAx.js +16 -0
  115. package/src/ui/dist/assets/SearchPlugin-DA4en4hK.css +1 -0
  116. package/src/ui/dist/assets/TextViewerPlugin-C5xqeeUH.js +54 -0
  117. package/src/ui/dist/assets/VNCViewer-BoLGLnHz.js +11 -0
  118. package/src/ui/dist/assets/bot-DREQOxzP.js +6 -0
  119. package/src/ui/dist/assets/browser-CTB2jwNe.js +8 -0
  120. package/src/ui/dist/assets/chevron-up-C9Qpx4DE.js +6 -0
  121. package/src/ui/dist/assets/code-WlFHE7z_.js +6 -0
  122. package/src/ui/dist/assets/file-content-BZMz3RYp.js +1 -0
  123. package/src/ui/dist/assets/file-diff-panel-CQhw0jS2.js +1 -0
  124. package/src/ui/dist/assets/file-jump-queue-DA-SdG__.js +1 -0
  125. package/src/ui/dist/assets/file-socket-CfQPKQKj.js +1 -0
  126. package/src/ui/dist/assets/git-commit-horizontal-DxZ8DCZh.js +6 -0
  127. package/src/ui/dist/assets/image-Bgl4VIyx.js +6 -0
  128. package/src/ui/dist/assets/index-BpV6lusQ.css +33 -0
  129. package/src/ui/dist/assets/index-CBNVuWcP.js +2496 -0
  130. package/src/ui/dist/assets/index-CwNu1aH4.js +11 -0
  131. package/src/ui/dist/assets/index-DrUnlf6K.js +1 -0
  132. package/src/ui/dist/assets/index-NW-h8VzN.js +1 -0
  133. package/src/ui/dist/assets/monaco-CiHMMNH_.js +1 -0
  134. package/src/ui/dist/assets/pdf-effect-queue-J8OnM0jE.js +6 -0
  135. package/src/ui/dist/assets/plugin-monaco-C8UgLomw.js +19 -0
  136. package/src/ui/dist/assets/plugin-notebook-HbW2K-1c.js +169 -0
  137. package/src/ui/dist/assets/plugin-pdf-CR8hgQBV.js +357 -0
  138. package/src/ui/dist/assets/plugin-terminal-MXFIPun8.js +227 -0
  139. package/src/ui/dist/assets/popover-CLc0pPP8.js +1 -0
  140. package/src/ui/dist/assets/project-sync-C9IdzdZW.js +1 -0
  141. package/src/ui/dist/assets/select-Cs2PmzwL.js +11 -0
  142. package/src/ui/dist/assets/sigma-ClKcHAXm.js +6 -0
  143. package/src/ui/dist/assets/trash-DwpbFr3w.js +11 -0
  144. package/src/ui/dist/assets/useCliAccess-NQ8m0Let.js +1 -0
  145. package/src/ui/dist/assets/useFileDiffOverlay-FuhcnKiw.js +1 -0
  146. package/src/ui/dist/assets/wrap-text-BC-Hltpd.js +11 -0
  147. package/src/ui/dist/assets/zoom-out-E_gaeAxL.js +11 -0
  148. package/src/ui/dist/index.html +5 -2
  149. package/src/ui/dist/assets/AiManusChatView-DDjbFnbt.js +0 -26597
  150. package/src/ui/dist/assets/AnalysisPlugin-Yb5IdmaU.js +0 -123
  151. package/src/ui/dist/assets/CliPlugin-e64sreyu.js +0 -31037
  152. package/src/ui/dist/assets/CodeEditorPlugin-C4D2TIkU.js +0 -427
  153. package/src/ui/dist/assets/CodeViewerPlugin-BVoNZIvC.js +0 -905
  154. package/src/ui/dist/assets/DocViewerPlugin-CLChbllo.js +0 -278
  155. package/src/ui/dist/assets/GitDiffViewerPlugin-C4xeFyFQ.js +0 -2661
  156. package/src/ui/dist/assets/ImageViewerPlugin-OiMUAcLi.js +0 -500
  157. package/src/ui/dist/assets/LabCopilotPanel-BjD2ThQF.js +0 -4104
  158. package/src/ui/dist/assets/LabPlugin-DQPg-NrB.js +0 -2677
  159. package/src/ui/dist/assets/LatexPlugin-CI05XAV9.js +0 -1792
  160. package/src/ui/dist/assets/MarkdownViewerPlugin-DpeBLYZf.js +0 -308
  161. package/src/ui/dist/assets/MarketplacePlugin-DolE58Q2.js +0 -413
  162. package/src/ui/dist/assets/NotebookEditor-7Qm2rSWD.js +0 -4214
  163. package/src/ui/dist/assets/NotebookEditor-C1kWaxKi.js +0 -84873
  164. package/src/ui/dist/assets/NotebookEditor-C3VQ7ylN.css +0 -1405
  165. package/src/ui/dist/assets/PdfLoader-BfOHw8Zw.js +0 -25468
  166. package/src/ui/dist/assets/PdfLoader-C-Y707R3.css +0 -49
  167. package/src/ui/dist/assets/PdfMarkdownPlugin-BulDREv1.js +0 -409
  168. package/src/ui/dist/assets/PdfViewerPlugin-C-daaOaL.js +0 -3095
  169. package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +0 -3627
  170. package/src/ui/dist/assets/SearchPlugin-CjpaiJ3A.js +0 -741
  171. package/src/ui/dist/assets/SearchPlugin-DDMrGDkh.css +0 -379
  172. package/src/ui/dist/assets/TextViewerPlugin-BxIyqPQC.js +0 -472
  173. package/src/ui/dist/assets/VNCViewer-HAg9mF7M.js +0 -18821
  174. package/src/ui/dist/assets/awareness-C0NPR2Dj.js +0 -292
  175. package/src/ui/dist/assets/bot-0DYntytV.js +0 -21
  176. package/src/ui/dist/assets/browser-BAcuE0Xj.js +0 -2895
  177. package/src/ui/dist/assets/code-B20Slj_w.js +0 -17
  178. package/src/ui/dist/assets/file-content-DT24KFma.js +0 -377
  179. package/src/ui/dist/assets/file-diff-panel-DK13YPql.js +0 -92
  180. package/src/ui/dist/assets/file-jump-queue-r5XKgJEV.js +0 -16
  181. package/src/ui/dist/assets/file-socket-B4T2o4nR.js +0 -58
  182. package/src/ui/dist/assets/function-B5QZkkHC.js +0 -1895
  183. package/src/ui/dist/assets/image-DSeR_sDS.js +0 -18
  184. package/src/ui/dist/assets/index-BrFje2Uk.js +0 -120
  185. package/src/ui/dist/assets/index-BwRJaoTl.js +0 -25
  186. package/src/ui/dist/assets/index-D_E4281X.js +0 -221322
  187. package/src/ui/dist/assets/index-DnYB3xb1.js +0 -159
  188. package/src/ui/dist/assets/index-G7AcWcMu.css +0 -12594
  189. package/src/ui/dist/assets/monaco-LExaAN3Y.js +0 -623
  190. package/src/ui/dist/assets/pdf-effect-queue-BJk5okWJ.js +0 -47
  191. package/src/ui/dist/assets/pdf_viewer-e0g1is2C.js +0 -8206
  192. package/src/ui/dist/assets/popover-D3Gg_FoV.js +0 -476
  193. package/src/ui/dist/assets/project-sync-C_ygLlVU.js +0 -297
  194. package/src/ui/dist/assets/select-CpAK6uWm.js +0 -1690
  195. package/src/ui/dist/assets/sigma-DEccaSgk.js +0 -22
  196. package/src/ui/dist/assets/square-check-big-uUfyVsbD.js +0 -17
  197. package/src/ui/dist/assets/trash-CXvwwSe8.js +0 -32
  198. package/src/ui/dist/assets/useCliAccess-Bnop4mgR.js +0 -957
  199. package/src/ui/dist/assets/useFileDiffOverlay-B8eUAX0I.js +0 -53
  200. package/src/ui/dist/assets/wrap-text-9vbOBpkW.js +0 -35
  201. package/src/ui/dist/assets/yjs-DncrqiZ8.js +0 -11243
  202. package/src/ui/dist/assets/zoom-out-BgVMmOW4.js +0 -34
@@ -1,308 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-D_E4281X.js","assets/index-G7AcWcMu.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-D_E4281X.js';
3
- import { C as Code } from './code-B20Slj_w.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
- ![DeepScientist Logo](https://via.placeholder.com/400x200?text=DeepScientist)
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-D_E4281X.js').then(n => n.ep);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 };