@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.
- package/README.md +385 -104
- package/bin/ds.js +1241 -110
- package/docs/en/00_QUICK_START.md +100 -19
- package/docs/en/01_SETTINGS_REFERENCE.md +34 -1
- package/docs/en/02_START_RESEARCH_GUIDE.md +7 -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 +25 -8
- package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +63 -13
- package/docs/en/15_CODEX_PROVIDER_SETUP.md +37 -11
- 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/21_LOCAL_MODEL_BACKENDS_GUIDE.md +283 -0
- package/docs/en/91_DEVELOPMENT.md +237 -0
- package/docs/en/README.md +24 -2
- package/docs/zh/00_QUICK_START.md +89 -19
- package/docs/zh/01_SETTINGS_REFERENCE.md +34 -1
- package/docs/zh/02_START_RESEARCH_GUIDE.md +7 -0
- package/docs/zh/05_TUI_GUIDE.md +6 -0
- package/docs/zh/09_DOCTOR.md +26 -9
- package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +63 -13
- package/docs/zh/15_CODEX_PROVIDER_SETUP.md +37 -11
- 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/21_LOCAL_MODEL_BACKENDS_GUIDE.md +281 -0
- package/docs/zh/README.md +24 -2
- package/install.sh +46 -4
- package/package.json +2 -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/service.py +647 -22
- package/src/deepscientist/bash_exec/service.py +234 -9
- package/src/deepscientist/bridges/connectors.py +8 -2
- package/src/deepscientist/cli.py +115 -19
- package/src/deepscientist/codex_cli_compat.py +367 -22
- package/src/deepscientist/config/models.py +2 -1
- package/src/deepscientist/config/service.py +183 -13
- package/src/deepscientist/daemon/api/handlers.py +255 -31
- package/src/deepscientist/daemon/api/router.py +9 -0
- package/src/deepscientist/daemon/app.py +1146 -105
- package/src/deepscientist/diagnostics/__init__.py +6 -0
- package/src/deepscientist/diagnostics/runner_failures.py +130 -0
- package/src/deepscientist/doctor.py +207 -3
- package/src/deepscientist/gitops/__init__.py +10 -1
- package/src/deepscientist/gitops/diff.py +129 -0
- package/src/deepscientist/gitops/service.py +4 -1
- package/src/deepscientist/mcp/server.py +39 -0
- package/src/deepscientist/prompts/builder.py +275 -34
- package/src/deepscientist/quest/layout.py +15 -2
- package/src/deepscientist/quest/service.py +707 -55
- package/src/deepscientist/quest/stage_views.py +6 -1
- package/src/deepscientist/runners/codex.py +143 -43
- package/src/deepscientist/shared.py +19 -0
- 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 +14 -2
- package/src/prompts/system.md +23 -5
- package/src/prompts/system_copilot.md +56 -0
- package/src/skills/analysis-campaign/SKILL.md +1 -0
- package/src/skills/baseline/SKILL.md +8 -0
- package/src/skills/decision/SKILL.md +8 -0
- package/src/skills/experiment/SKILL.md +8 -0
- package/src/skills/figure-polish/SKILL.md +1 -0
- package/src/skills/finalize/SKILL.md +1 -0
- package/src/skills/idea/SKILL.md +1 -0
- package/src/skills/intake-audit/SKILL.md +8 -0
- 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 +1 -0
- package/src/skills/rebuttal/SKILL.md +1 -0
- package/src/skills/review/SKILL.md +1 -0
- package/src/skills/scout/SKILL.md +8 -0
- package/src/skills/write/SKILL.md +1 -0
- package/src/tui/dist/app/AppContainer.js +19 -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-Bv-Z8YpU.js +204 -0
- package/src/ui/dist/assets/AnalysisPlugin-BCKAfjba.js +1 -0
- package/src/ui/dist/assets/CliPlugin-BCKcpc35.js +109 -0
- package/src/ui/dist/assets/CodeEditorPlugin-DbOfSJ8K.js +2 -0
- package/src/ui/dist/assets/CodeViewerPlugin-CbaFRrUU.js +270 -0
- package/src/ui/dist/assets/DocViewerPlugin-DAjLVeQD.js +7 -0
- package/src/ui/dist/assets/GitCommitViewerPlugin-CIUqbUDO.js +1 -0
- package/src/ui/dist/assets/GitDiffViewerPlugin-CQACjoAA.js +6 -0
- package/src/ui/dist/assets/GitSnapshotViewer-0r4nLPke.js +30 -0
- package/src/ui/dist/assets/ImageViewerPlugin-nBOmI2v_.js +26 -0
- package/src/ui/dist/assets/LabCopilotPanel-BHxOxF4z.js +14 -0
- package/src/ui/dist/assets/LabPlugin-BKoZGs95.js +22 -0
- package/src/ui/dist/assets/LatexPlugin-ZwtV8pIp.js +25 -0
- package/src/ui/dist/assets/MarkdownViewerPlugin-DKqVfKyW.js +128 -0
- package/src/ui/dist/assets/MarketplacePlugin-BwxStZ9D.js +13 -0
- package/src/ui/dist/assets/NotebookEditor-BEQhaQbt.js +81 -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-DB9N_T9q.js +361 -0
- package/src/ui/dist/assets/PdfLoader-Cy5jtWrr.css +1 -0
- package/src/ui/dist/assets/PdfLoader-eWBONbQP.js +16 -0
- package/src/ui/dist/assets/PdfMarkdownPlugin-D22YOZL3.js +1 -0
- package/src/ui/dist/assets/PdfViewerPlugin-c-RK9DLM.js +17 -0
- package/src/ui/dist/assets/PdfViewerPlugin-nwwE-fjJ.css +1 -0
- package/src/ui/dist/assets/SearchPlugin-CxF9ytAx.js +16 -0
- package/src/ui/dist/assets/SearchPlugin-DA4en4hK.css +1 -0
- package/src/ui/dist/assets/TextViewerPlugin-C5xqeeUH.js +54 -0
- package/src/ui/dist/assets/VNCViewer-BoLGLnHz.js +11 -0
- package/src/ui/dist/assets/bot-DREQOxzP.js +6 -0
- package/src/ui/dist/assets/browser-CTB2jwNe.js +8 -0
- package/src/ui/dist/assets/chevron-up-C9Qpx4DE.js +6 -0
- package/src/ui/dist/assets/code-WlFHE7z_.js +6 -0
- package/src/ui/dist/assets/file-content-BZMz3RYp.js +1 -0
- package/src/ui/dist/assets/file-diff-panel-CQhw0jS2.js +1 -0
- package/src/ui/dist/assets/file-jump-queue-DA-SdG__.js +1 -0
- package/src/ui/dist/assets/file-socket-CfQPKQKj.js +1 -0
- package/src/ui/dist/assets/git-commit-horizontal-DxZ8DCZh.js +6 -0
- package/src/ui/dist/assets/image-Bgl4VIyx.js +6 -0
- package/src/ui/dist/assets/index-BpV6lusQ.css +33 -0
- package/src/ui/dist/assets/index-CBNVuWcP.js +2496 -0
- package/src/ui/dist/assets/index-CwNu1aH4.js +11 -0
- package/src/ui/dist/assets/index-DrUnlf6K.js +1 -0
- package/src/ui/dist/assets/index-NW-h8VzN.js +1 -0
- package/src/ui/dist/assets/monaco-CiHMMNH_.js +1 -0
- package/src/ui/dist/assets/pdf-effect-queue-J8OnM0jE.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-CLc0pPP8.js +1 -0
- package/src/ui/dist/assets/project-sync-C9IdzdZW.js +1 -0
- package/src/ui/dist/assets/select-Cs2PmzwL.js +11 -0
- package/src/ui/dist/assets/sigma-ClKcHAXm.js +6 -0
- package/src/ui/dist/assets/trash-DwpbFr3w.js +11 -0
- package/src/ui/dist/assets/useCliAccess-NQ8m0Let.js +1 -0
- package/src/ui/dist/assets/useFileDiffOverlay-FuhcnKiw.js +1 -0
- package/src/ui/dist/assets/wrap-text-BC-Hltpd.js +11 -0
- package/src/ui/dist/assets/zoom-out-E_gaeAxL.js +11 -0
- package/src/ui/dist/index.html +5 -2
- package/src/ui/dist/assets/AiManusChatView-DDjbFnbt.js +0 -26597
- package/src/ui/dist/assets/AnalysisPlugin-Yb5IdmaU.js +0 -123
- package/src/ui/dist/assets/CliPlugin-e64sreyu.js +0 -31037
- package/src/ui/dist/assets/CodeEditorPlugin-C4D2TIkU.js +0 -427
- package/src/ui/dist/assets/CodeViewerPlugin-BVoNZIvC.js +0 -905
- package/src/ui/dist/assets/DocViewerPlugin-CLChbllo.js +0 -278
- package/src/ui/dist/assets/GitDiffViewerPlugin-C4xeFyFQ.js +0 -2661
- package/src/ui/dist/assets/ImageViewerPlugin-OiMUAcLi.js +0 -500
- package/src/ui/dist/assets/LabCopilotPanel-BjD2ThQF.js +0 -4104
- package/src/ui/dist/assets/LabPlugin-DQPg-NrB.js +0 -2677
- package/src/ui/dist/assets/LatexPlugin-CI05XAV9.js +0 -1792
- package/src/ui/dist/assets/MarkdownViewerPlugin-DpeBLYZf.js +0 -308
- package/src/ui/dist/assets/MarketplacePlugin-DolE58Q2.js +0 -413
- package/src/ui/dist/assets/NotebookEditor-7Qm2rSWD.js +0 -4214
- package/src/ui/dist/assets/NotebookEditor-C1kWaxKi.js +0 -84873
- package/src/ui/dist/assets/NotebookEditor-C3VQ7ylN.css +0 -1405
- package/src/ui/dist/assets/PdfLoader-BfOHw8Zw.js +0 -25468
- package/src/ui/dist/assets/PdfLoader-C-Y707R3.css +0 -49
- package/src/ui/dist/assets/PdfMarkdownPlugin-BulDREv1.js +0 -409
- package/src/ui/dist/assets/PdfViewerPlugin-C-daaOaL.js +0 -3095
- package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +0 -3627
- package/src/ui/dist/assets/SearchPlugin-CjpaiJ3A.js +0 -741
- package/src/ui/dist/assets/SearchPlugin-DDMrGDkh.css +0 -379
- package/src/ui/dist/assets/TextViewerPlugin-BxIyqPQC.js +0 -472
- package/src/ui/dist/assets/VNCViewer-HAg9mF7M.js +0 -18821
- package/src/ui/dist/assets/awareness-C0NPR2Dj.js +0 -292
- package/src/ui/dist/assets/bot-0DYntytV.js +0 -21
- package/src/ui/dist/assets/browser-BAcuE0Xj.js +0 -2895
- package/src/ui/dist/assets/code-B20Slj_w.js +0 -17
- package/src/ui/dist/assets/file-content-DT24KFma.js +0 -377
- package/src/ui/dist/assets/file-diff-panel-DK13YPql.js +0 -92
- package/src/ui/dist/assets/file-jump-queue-r5XKgJEV.js +0 -16
- package/src/ui/dist/assets/file-socket-B4T2o4nR.js +0 -58
- package/src/ui/dist/assets/function-B5QZkkHC.js +0 -1895
- package/src/ui/dist/assets/image-DSeR_sDS.js +0 -18
- package/src/ui/dist/assets/index-BrFje2Uk.js +0 -120
- package/src/ui/dist/assets/index-BwRJaoTl.js +0 -25
- package/src/ui/dist/assets/index-D_E4281X.js +0 -221322
- package/src/ui/dist/assets/index-DnYB3xb1.js +0 -159
- package/src/ui/dist/assets/index-G7AcWcMu.css +0 -12594
- package/src/ui/dist/assets/monaco-LExaAN3Y.js +0 -623
- package/src/ui/dist/assets/pdf-effect-queue-BJk5okWJ.js +0 -47
- package/src/ui/dist/assets/pdf_viewer-e0g1is2C.js +0 -8206
- package/src/ui/dist/assets/popover-D3Gg_FoV.js +0 -476
- package/src/ui/dist/assets/project-sync-C_ygLlVU.js +0 -297
- package/src/ui/dist/assets/select-CpAK6uWm.js +0 -1690
- package/src/ui/dist/assets/sigma-DEccaSgk.js +0 -22
- package/src/ui/dist/assets/square-check-big-uUfyVsbD.js +0 -17
- package/src/ui/dist/assets/trash-CXvwwSe8.js +0 -32
- package/src/ui/dist/assets/useCliAccess-Bnop4mgR.js +0 -957
- package/src/ui/dist/assets/useFileDiffOverlay-B8eUAX0I.js +0 -53
- package/src/ui/dist/assets/wrap-text-9vbOBpkW.js +0 -35
- package/src/ui/dist/assets/yjs-DncrqiZ8.js +0 -11243
- package/src/ui/dist/assets/zoom-out-BgVMmOW4.js +0 -34
|
@@ -1,413 +0,0 @@
|
|
|
1
|
-
import { w as createLucideIcon, r as reactExports, aa as useNavigate, n as useTabsStore, ab as useOpenFile, f as useFileTreeStore, v as BUILTIN_PLUGINS, j as jsxRuntimeExports, l as Search, N as Sparkles, ac as Terminal, ad as Settings, ae as Puzzle, af as BookOpen, k as FileText, ag as FileCode2, b as cn } from './index-D_E4281X.js';
|
|
2
|
-
import { S as Sigma } from './sigma-DEccaSgk.js';
|
|
3
|
-
import { I as Image } from './image-DSeR_sDS.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @license lucide-react v0.511.0 - ISC
|
|
7
|
-
*
|
|
8
|
-
* This source code is licensed under the ISC license.
|
|
9
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const __iconNode$1 = [
|
|
14
|
-
["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
|
|
15
|
-
["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
|
|
16
|
-
["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
|
|
17
|
-
];
|
|
18
|
-
const CodeXml = createLucideIcon("code-xml", __iconNode$1);
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @license lucide-react v0.511.0 - ISC
|
|
22
|
-
*
|
|
23
|
-
* This source code is licensed under the ISC license.
|
|
24
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const __iconNode = [
|
|
29
|
-
["path", { d: "M15 12h-5", key: "r7krc0" }],
|
|
30
|
-
["path", { d: "M15 8h-5", key: "1khuty" }],
|
|
31
|
-
["path", { d: "M19 17V5a2 2 0 0 0-2-2H4", key: "zz82l3" }],
|
|
32
|
-
[
|
|
33
|
-
"path",
|
|
34
|
-
{
|
|
35
|
-
d: "M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",
|
|
36
|
-
key: "1ph1d7"
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
];
|
|
40
|
-
const ScrollText = createLucideIcon("scroll-text", __iconNode);
|
|
41
|
-
|
|
42
|
-
function getProjectIdFromContext(context) {
|
|
43
|
-
const projectId = context.customData?.projectId;
|
|
44
|
-
return typeof projectId === "string" ? projectId : null;
|
|
45
|
-
}
|
|
46
|
-
function ensureExtension(fileName, ext) {
|
|
47
|
-
const trimmed = fileName.trim();
|
|
48
|
-
if (!trimmed) return trimmed;
|
|
49
|
-
if (trimmed.includes(".")) return trimmed;
|
|
50
|
-
return `${trimmed}${ext}`;
|
|
51
|
-
}
|
|
52
|
-
function buildNotebookSeedFile(name) {
|
|
53
|
-
const finalName = ensureExtension(name, ".md");
|
|
54
|
-
const title = finalName.replace(/\.md$/i, "");
|
|
55
|
-
const content = `# ${title}
|
|
56
|
-
|
|
57
|
-
`;
|
|
58
|
-
return new File([content], finalName, { type: "text/markdown" });
|
|
59
|
-
}
|
|
60
|
-
function buildSeedName(prefix) {
|
|
61
|
-
const stamp = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
62
|
-
const suffix = Math.random().toString(36).slice(2, 6);
|
|
63
|
-
return `${prefix}-${stamp}-${suffix}`;
|
|
64
|
-
}
|
|
65
|
-
const workspaceTools = [
|
|
66
|
-
{
|
|
67
|
-
id: BUILTIN_PLUGINS.SEARCH,
|
|
68
|
-
title: "Search",
|
|
69
|
-
description: "Find files by name or path.",
|
|
70
|
-
icon: Search,
|
|
71
|
-
badge: "tool",
|
|
72
|
-
requiresProject: true
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
id: "@ds/plugin-analysis",
|
|
76
|
-
title: "Analysis",
|
|
77
|
-
description: "Reusable prompts and analysis recipes.",
|
|
78
|
-
icon: Sparkles,
|
|
79
|
-
badge: "tool",
|
|
80
|
-
requiresProject: true
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
id: BUILTIN_PLUGINS.CLI,
|
|
84
|
-
title: "CLI",
|
|
85
|
-
description: "Remote CLI sessions and agent tooling.",
|
|
86
|
-
icon: Terminal,
|
|
87
|
-
badge: "tool",
|
|
88
|
-
requiresProject: true
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
id: BUILTIN_PLUGINS.SETTINGS,
|
|
92
|
-
title: "Settings",
|
|
93
|
-
description: "Quest-focused settings and workspace preferences.",
|
|
94
|
-
icon: Settings,
|
|
95
|
-
badge: "system"
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
id: "@ds/plugin-marketplace",
|
|
99
|
-
title: "Plugin Marketplace",
|
|
100
|
-
description: "Browse and organize installed plugins.",
|
|
101
|
-
icon: Puzzle,
|
|
102
|
-
badge: "system"
|
|
103
|
-
}
|
|
104
|
-
];
|
|
105
|
-
const authoringTools = [
|
|
106
|
-
{
|
|
107
|
-
id: BUILTIN_PLUGINS.NOTEBOOK,
|
|
108
|
-
title: "Notebook",
|
|
109
|
-
description: "Create a new markdown notebook file.",
|
|
110
|
-
icon: BookOpen,
|
|
111
|
-
badge: "authoring",
|
|
112
|
-
requiresProject: true,
|
|
113
|
-
openLabel: "New"
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
id: BUILTIN_PLUGINS.LATEX,
|
|
117
|
-
title: "LaTeX",
|
|
118
|
-
description: "Create a new LaTeX project folder.",
|
|
119
|
-
icon: Sigma,
|
|
120
|
-
badge: "authoring",
|
|
121
|
-
requiresProject: true,
|
|
122
|
-
openLabel: "New"
|
|
123
|
-
}
|
|
124
|
-
];
|
|
125
|
-
const pdfTools = [
|
|
126
|
-
{
|
|
127
|
-
id: BUILTIN_PLUGINS.PDF_VIEWER,
|
|
128
|
-
title: "PDF Viewer",
|
|
129
|
-
description: "View and annotate PDFs with highlights.",
|
|
130
|
-
icon: FileText,
|
|
131
|
-
badge: "pdf",
|
|
132
|
-
openMode: "disabled",
|
|
133
|
-
openLabel: "Auto",
|
|
134
|
-
disabledReason: "Opens when you select a PDF file."
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
id: BUILTIN_PLUGINS.PDF_MARKDOWN,
|
|
138
|
-
title: "PDF Markdown",
|
|
139
|
-
description: "Read MinerU Markdown output from PDFs.",
|
|
140
|
-
icon: FileCode2,
|
|
141
|
-
badge: "pdf",
|
|
142
|
-
openMode: "disabled",
|
|
143
|
-
openLabel: "Auto",
|
|
144
|
-
disabledReason: "Opens after selecting a PDF and switching to Markdown view."
|
|
145
|
-
}
|
|
146
|
-
];
|
|
147
|
-
const fileViewers = [
|
|
148
|
-
{
|
|
149
|
-
id: BUILTIN_PLUGINS.CODE_EDITOR,
|
|
150
|
-
title: "Code Editor",
|
|
151
|
-
description: "Monaco editor with autosave.",
|
|
152
|
-
icon: CodeXml,
|
|
153
|
-
badge: "viewer",
|
|
154
|
-
openMode: "disabled",
|
|
155
|
-
openLabel: "Auto",
|
|
156
|
-
disabledReason: "Opens when you select a code file."
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
id: BUILTIN_PLUGINS.CODE_VIEWER,
|
|
160
|
-
title: "Code Viewer",
|
|
161
|
-
description: "Read-only viewer with syntax highlighting.",
|
|
162
|
-
icon: CodeXml,
|
|
163
|
-
badge: "viewer",
|
|
164
|
-
openMode: "disabled",
|
|
165
|
-
openLabel: "Auto",
|
|
166
|
-
disabledReason: "Opens when you select a supported code file."
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
id: BUILTIN_PLUGINS.MARKDOWN_VIEWER,
|
|
170
|
-
title: "Markdown Viewer",
|
|
171
|
-
description: "Render Markdown with GFM + math.",
|
|
172
|
-
icon: ScrollText,
|
|
173
|
-
badge: "viewer",
|
|
174
|
-
openMode: "disabled",
|
|
175
|
-
openLabel: "Auto",
|
|
176
|
-
disabledReason: "Opens when you select a Markdown file."
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
id: BUILTIN_PLUGINS.TEXT_VIEWER,
|
|
180
|
-
title: "Text Viewer",
|
|
181
|
-
description: "Plain text viewer with search tools.",
|
|
182
|
-
icon: FileText,
|
|
183
|
-
badge: "viewer",
|
|
184
|
-
openMode: "disabled",
|
|
185
|
-
openLabel: "Auto",
|
|
186
|
-
disabledReason: "Opens when you select a text file."
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
id: BUILTIN_PLUGINS.IMAGE_VIEWER,
|
|
190
|
-
title: "Image Viewer",
|
|
191
|
-
description: "Zoom, pan, and inspect images.",
|
|
192
|
-
icon: Image,
|
|
193
|
-
badge: "viewer",
|
|
194
|
-
openMode: "disabled",
|
|
195
|
-
openLabel: "Auto",
|
|
196
|
-
disabledReason: "Opens when you select an image file."
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
id: "@ds/plugin-doc-viewer",
|
|
200
|
-
title: "Document Viewer",
|
|
201
|
-
description: "Preview Word, Excel, and PowerPoint files.",
|
|
202
|
-
icon: FileText,
|
|
203
|
-
badge: "viewer",
|
|
204
|
-
openMode: "disabled",
|
|
205
|
-
openLabel: "Auto",
|
|
206
|
-
disabledReason: "Opens when you select a document file."
|
|
207
|
-
}
|
|
208
|
-
];
|
|
209
|
-
const integrations = [
|
|
210
|
-
{
|
|
211
|
-
id: "panel:arxiv",
|
|
212
|
-
title: "ArXiv Import",
|
|
213
|
-
description: "Import papers from arXiv into your workspace.",
|
|
214
|
-
icon: BookOpen,
|
|
215
|
-
badge: "integration",
|
|
216
|
-
openMode: "disabled",
|
|
217
|
-
openLabel: "Use sidebar",
|
|
218
|
-
disabledReason: "Use the ArXiv panel in the left sidebar."
|
|
219
|
-
}
|
|
220
|
-
];
|
|
221
|
-
const pluginSections = [
|
|
222
|
-
{
|
|
223
|
-
id: "workspace-tools",
|
|
224
|
-
title: "Workspace tools",
|
|
225
|
-
subtitle: "Openable as tabs",
|
|
226
|
-
plugins: workspaceTools
|
|
227
|
-
},
|
|
228
|
-
{
|
|
229
|
-
id: "authoring",
|
|
230
|
-
title: "Authoring",
|
|
231
|
-
subtitle: "Notes and documents",
|
|
232
|
-
plugins: authoringTools
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
id: "pdf-tools",
|
|
236
|
-
title: "PDF workflow",
|
|
237
|
-
subtitle: "View, extract, and publish",
|
|
238
|
-
plugins: pdfTools
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
id: "file-viewers",
|
|
242
|
-
title: "Viewers & editors",
|
|
243
|
-
subtitle: "Auto-picked based on file type",
|
|
244
|
-
plugins: fileViewers
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
id: "integrations",
|
|
248
|
-
title: "Integrations",
|
|
249
|
-
subtitle: "External sources",
|
|
250
|
-
plugins: integrations
|
|
251
|
-
}
|
|
252
|
-
];
|
|
253
|
-
function MarketplacePlugin({ context, setTitle }) {
|
|
254
|
-
reactExports.useEffect(() => setTitle("Plugin Marketplace"), [setTitle]);
|
|
255
|
-
const navigate = useNavigate();
|
|
256
|
-
const openTab = useTabsStore((s) => s.openTab);
|
|
257
|
-
const { openFileInTab } = useOpenFile();
|
|
258
|
-
const storeProjectId = useFileTreeStore((s) => s.projectId);
|
|
259
|
-
const loadFiles = useFileTreeStore((s) => s.loadFiles);
|
|
260
|
-
const upload = useFileTreeStore((s) => s.upload);
|
|
261
|
-
const createLatexProject = useFileTreeStore((s) => s.createLatexProject);
|
|
262
|
-
const highlightFile = useFileTreeStore((s) => s.highlightFile);
|
|
263
|
-
const projectId = getProjectIdFromContext(context);
|
|
264
|
-
const ensureProjectReady = reactExports.useCallback(async () => {
|
|
265
|
-
if (!projectId) return false;
|
|
266
|
-
if (storeProjectId !== projectId) {
|
|
267
|
-
await loadFiles(projectId);
|
|
268
|
-
}
|
|
269
|
-
return true;
|
|
270
|
-
}, [loadFiles, projectId, storeProjectId]);
|
|
271
|
-
const handleOpen = reactExports.useCallback(
|
|
272
|
-
async (card) => {
|
|
273
|
-
if (card.openMode === "disabled") return;
|
|
274
|
-
if (card.requiresProject && !projectId) return;
|
|
275
|
-
if (card.id === BUILTIN_PLUGINS.SETTINGS) {
|
|
276
|
-
navigate("/settings");
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
if (card.id === BUILTIN_PLUGINS.NOTEBOOK) {
|
|
280
|
-
try {
|
|
281
|
-
const ready = await ensureProjectReady();
|
|
282
|
-
if (!ready || !projectId) return;
|
|
283
|
-
const fileName = buildSeedName("Notebook");
|
|
284
|
-
const file = buildNotebookSeedFile(fileName);
|
|
285
|
-
const created = await upload(null, [file]);
|
|
286
|
-
const createdFile = created.find((node) => node.type === "file") || created[0];
|
|
287
|
-
if (createdFile) {
|
|
288
|
-
highlightFile(createdFile.id);
|
|
289
|
-
await openFileInTab(createdFile, { customData: { projectId } });
|
|
290
|
-
}
|
|
291
|
-
} catch (error) {
|
|
292
|
-
console.error("[MarketplacePlugin] Failed to create notebook file:", error);
|
|
293
|
-
}
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
if (card.id === BUILTIN_PLUGINS.LATEX) {
|
|
297
|
-
try {
|
|
298
|
-
const ready = await ensureProjectReady();
|
|
299
|
-
if (!ready || !projectId) return;
|
|
300
|
-
const folderName = buildSeedName("LaTeX");
|
|
301
|
-
const folder = await createLatexProject(null, folderName);
|
|
302
|
-
highlightFile(folder.id);
|
|
303
|
-
openTab({
|
|
304
|
-
pluginId: card.id,
|
|
305
|
-
context: {
|
|
306
|
-
type: "custom",
|
|
307
|
-
resourceId: folder.id,
|
|
308
|
-
resourceName: folder.name,
|
|
309
|
-
customData: {
|
|
310
|
-
projectId,
|
|
311
|
-
latexFolderId: folder.id,
|
|
312
|
-
mainFileId: folder.latex?.mainFileId ?? null
|
|
313
|
-
}
|
|
314
|
-
},
|
|
315
|
-
title: folder.name
|
|
316
|
-
});
|
|
317
|
-
} catch (error) {
|
|
318
|
-
console.error("[MarketplacePlugin] Failed to create LaTeX project:", error);
|
|
319
|
-
}
|
|
320
|
-
return;
|
|
321
|
-
}
|
|
322
|
-
const contextData = {
|
|
323
|
-
type: card.contextType ?? "custom",
|
|
324
|
-
resourceName: card.resourceName ?? card.title,
|
|
325
|
-
resourcePath: card.resourcePath,
|
|
326
|
-
mimeType: card.mimeType,
|
|
327
|
-
customData: projectId ? { projectId, ...card.customData ?? {} } : card.customData
|
|
328
|
-
};
|
|
329
|
-
openTab({
|
|
330
|
-
pluginId: card.id,
|
|
331
|
-
context: contextData,
|
|
332
|
-
title: card.tabTitle ?? card.resourceName ?? card.title
|
|
333
|
-
});
|
|
334
|
-
},
|
|
335
|
-
[
|
|
336
|
-
createLatexProject,
|
|
337
|
-
ensureProjectReady,
|
|
338
|
-
highlightFile,
|
|
339
|
-
openFileInTab,
|
|
340
|
-
openTab,
|
|
341
|
-
projectId,
|
|
342
|
-
upload,
|
|
343
|
-
navigate
|
|
344
|
-
]
|
|
345
|
-
);
|
|
346
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-full", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-5xl", children: [
|
|
347
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between gap-4", children: [
|
|
348
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
349
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-2xl font-semibold tracking-tight text-foreground", children: "Plugin Marketplace" }),
|
|
350
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: "Browse built-in plugins and jump straight in. File-based viewers open automatically when you select a file." })
|
|
351
|
-
] }),
|
|
352
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "hidden sm:flex items-center gap-2 text-xs text-muted-foreground", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "px-2 py-1 rounded-full border border-border bg-muted/30", children: "Built-in" }) })
|
|
353
|
-
] }),
|
|
354
|
-
pluginSections.map((section) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-8", children: [
|
|
355
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
356
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-sm font-semibold text-foreground", children: section.title }),
|
|
357
|
-
section.subtitle ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: section.subtitle }) : null
|
|
358
|
-
] }),
|
|
359
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-3 grid grid-cols-1 md:grid-cols-2 gap-4", children: section.plugins.map((plugin) => {
|
|
360
|
-
const Icon = plugin.icon;
|
|
361
|
-
const isCurrent = plugin.id === "@ds/plugin-marketplace";
|
|
362
|
-
const missingProject = plugin.requiresProject && !projectId;
|
|
363
|
-
const showButton = plugin.openMode !== "disabled" || missingProject;
|
|
364
|
-
const isDisabled = isCurrent || missingProject;
|
|
365
|
-
const buttonLabel = isCurrent ? "You're here" : missingProject ? "Requires project" : plugin.openLabel ?? "Open";
|
|
366
|
-
const helperText = missingProject ? "Open a project to use this plugin." : plugin.disabledReason;
|
|
367
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
368
|
-
"div",
|
|
369
|
-
{
|
|
370
|
-
className: cn(
|
|
371
|
-
"rounded-2xl border border-border bg-card/90 backdrop-blur p-5",
|
|
372
|
-
"shadow-sm hover:shadow-md transition-shadow"
|
|
373
|
-
),
|
|
374
|
-
children: [
|
|
375
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between gap-4", children: [
|
|
376
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-3 min-w-0", children: [
|
|
377
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-flex h-10 w-10 items-center justify-center rounded-xl bg-muted text-foreground", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { className: "h-5 w-5" }) }),
|
|
378
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-w-0", children: [
|
|
379
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm font-semibold text-foreground", children: plugin.title }),
|
|
380
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-0.5 text-xs text-muted-foreground", children: plugin.description }),
|
|
381
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2 text-[11px] font-mono text-muted-foreground truncate", children: plugin.id })
|
|
382
|
-
] })
|
|
383
|
-
] }),
|
|
384
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 px-2 py-1 rounded-full border border-border bg-muted/30 text-[10px] text-muted-foreground", children: plugin.badge ?? "built-in" })
|
|
385
|
-
] }),
|
|
386
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4", children: [
|
|
387
|
-
showButton ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
388
|
-
"button",
|
|
389
|
-
{
|
|
390
|
-
type: "button",
|
|
391
|
-
onClick: () => void handleOpen(plugin),
|
|
392
|
-
disabled: isDisabled,
|
|
393
|
-
className: cn(
|
|
394
|
-
"inline-flex items-center justify-center px-3 py-1.5 rounded-xl text-sm",
|
|
395
|
-
"border border-border bg-background hover:bg-accent/40 transition-colors text-foreground",
|
|
396
|
-
isDisabled && "opacity-50 cursor-not-allowed"
|
|
397
|
-
),
|
|
398
|
-
children: buttonLabel
|
|
399
|
-
}
|
|
400
|
-
) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-flex items-center px-3 py-1.5 rounded-xl text-xs border border-border bg-muted/30 text-muted-foreground", children: plugin.openLabel ?? "Auto" }),
|
|
401
|
-
helperText ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2 text-[11px] text-muted-foreground", children: helperText }) : null
|
|
402
|
-
] })
|
|
403
|
-
]
|
|
404
|
-
},
|
|
405
|
-
plugin.id
|
|
406
|
-
);
|
|
407
|
-
}) })
|
|
408
|
-
] }, section.id)),
|
|
409
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-8 text-xs text-muted-foreground", children: "Want external plugins? That's next: sandboxing, permissions, and a loader that can fetch + verify bundles." })
|
|
410
|
-
] }) });
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
export { MarketplacePlugin as default };
|