@researai/deepscientist 1.5.9 → 1.5.12

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 (165) hide show
  1. package/README.md +112 -99
  2. package/assets/branding/connector-qq.png +0 -0
  3. package/assets/branding/connector-rokid.png +0 -0
  4. package/assets/branding/connector-weixin.png +0 -0
  5. package/assets/branding/projects.png +0 -0
  6. package/bin/ds.js +519 -63
  7. package/docs/assets/branding/projects.png +0 -0
  8. package/docs/en/00_QUICK_START.md +338 -68
  9. package/docs/en/01_SETTINGS_REFERENCE.md +14 -0
  10. package/docs/en/02_START_RESEARCH_GUIDE.md +180 -4
  11. package/docs/en/04_LINGZHU_CONNECTOR_GUIDE.md +62 -179
  12. package/docs/en/09_DOCTOR.md +66 -5
  13. package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +137 -0
  14. package/docs/en/11_LICENSE_AND_RISK.md +256 -0
  15. package/docs/en/12_GUIDED_WORKFLOW_TOUR.md +446 -0
  16. package/docs/en/13_CORE_ARCHITECTURE_GUIDE.md +297 -0
  17. package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
  18. package/docs/en/15_CODEX_PROVIDER_SETUP.md +284 -0
  19. package/docs/en/99_ACKNOWLEDGEMENTS.md +4 -1
  20. package/docs/en/README.md +83 -0
  21. package/docs/images/lingzhu/rokid-agent-platform-create.png +0 -0
  22. package/docs/images/weixin/weixin-plugin-entry.png +0 -0
  23. package/docs/images/weixin/weixin-plugin-entry.svg +33 -0
  24. package/docs/images/weixin/weixin-qr-confirm.svg +30 -0
  25. package/docs/images/weixin/weixin-quest-media-flow.svg +44 -0
  26. package/docs/images/weixin/weixin-settings-bind.svg +57 -0
  27. package/docs/zh/00_QUICK_START.md +345 -72
  28. package/docs/zh/01_SETTINGS_REFERENCE.md +14 -0
  29. package/docs/zh/02_START_RESEARCH_GUIDE.md +181 -3
  30. package/docs/zh/04_LINGZHU_CONNECTOR_GUIDE.md +62 -193
  31. package/docs/zh/09_DOCTOR.md +68 -5
  32. package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +144 -0
  33. package/docs/zh/11_LICENSE_AND_RISK.md +256 -0
  34. package/docs/zh/12_GUIDED_WORKFLOW_TOUR.md +442 -0
  35. package/docs/zh/13_CORE_ARCHITECTURE_GUIDE.md +296 -0
  36. package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +506 -0
  37. package/docs/zh/15_CODEX_PROVIDER_SETUP.md +285 -0
  38. package/docs/zh/99_ACKNOWLEDGEMENTS.md +4 -1
  39. package/docs/zh/README.md +129 -0
  40. package/install.sh +0 -34
  41. package/package.json +2 -2
  42. package/pyproject.toml +1 -1
  43. package/src/deepscientist/__init__.py +1 -1
  44. package/src/deepscientist/annotations.py +343 -0
  45. package/src/deepscientist/artifact/arxiv.py +484 -37
  46. package/src/deepscientist/artifact/service.py +574 -108
  47. package/src/deepscientist/arxiv_library.py +275 -0
  48. package/src/deepscientist/bash_exec/monitor.py +7 -5
  49. package/src/deepscientist/bash_exec/service.py +93 -21
  50. package/src/deepscientist/bridges/builtins.py +2 -0
  51. package/src/deepscientist/bridges/connectors.py +447 -0
  52. package/src/deepscientist/channels/__init__.py +2 -0
  53. package/src/deepscientist/channels/builtins.py +3 -1
  54. package/src/deepscientist/channels/local.py +3 -3
  55. package/src/deepscientist/channels/qq.py +8 -8
  56. package/src/deepscientist/channels/qq_gateway.py +1 -1
  57. package/src/deepscientist/channels/relay.py +14 -8
  58. package/src/deepscientist/channels/weixin.py +59 -0
  59. package/src/deepscientist/channels/weixin_ilink.py +388 -0
  60. package/src/deepscientist/config/models.py +23 -2
  61. package/src/deepscientist/config/service.py +539 -67
  62. package/src/deepscientist/connector/__init__.py +4 -0
  63. package/src/deepscientist/connector/connector_profiles.py +481 -0
  64. package/src/deepscientist/connector/lingzhu_support.py +668 -0
  65. package/src/deepscientist/connector/qq_profiles.py +206 -0
  66. package/src/deepscientist/connector/weixin_support.py +663 -0
  67. package/src/deepscientist/connector_profiles.py +1 -374
  68. package/src/deepscientist/connector_runtime.py +2 -0
  69. package/src/deepscientist/daemon/api/handlers.py +165 -5
  70. package/src/deepscientist/daemon/api/router.py +13 -1
  71. package/src/deepscientist/daemon/app.py +1444 -67
  72. package/src/deepscientist/doctor.py +4 -5
  73. package/src/deepscientist/gitops/diff.py +120 -29
  74. package/src/deepscientist/lingzhu_support.py +1 -182
  75. package/src/deepscientist/mcp/server.py +135 -7
  76. package/src/deepscientist/prompts/builder.py +128 -11
  77. package/src/deepscientist/qq_profiles.py +1 -196
  78. package/src/deepscientist/quest/node_traces.py +23 -0
  79. package/src/deepscientist/quest/service.py +359 -74
  80. package/src/deepscientist/quest/stage_views.py +71 -5
  81. package/src/deepscientist/runners/codex.py +170 -19
  82. package/src/deepscientist/runners/runtime_overrides.py +6 -0
  83. package/src/deepscientist/shared.py +33 -14
  84. package/src/deepscientist/weixin_support.py +1 -0
  85. package/src/prompts/connectors/lingzhu.md +3 -1
  86. package/src/prompts/connectors/qq.md +2 -1
  87. package/src/prompts/connectors/weixin.md +231 -0
  88. package/src/prompts/contracts/shared_interaction.md +4 -1
  89. package/src/prompts/system.md +61 -9
  90. package/src/skills/analysis-campaign/SKILL.md +46 -6
  91. package/src/skills/analysis-campaign/references/campaign-plan-template.md +21 -8
  92. package/src/skills/baseline/SKILL.md +1 -1
  93. package/src/skills/decision/SKILL.md +1 -1
  94. package/src/skills/experiment/SKILL.md +1 -1
  95. package/src/skills/finalize/SKILL.md +1 -1
  96. package/src/skills/idea/SKILL.md +1 -1
  97. package/src/skills/intake-audit/SKILL.md +1 -1
  98. package/src/skills/rebuttal/SKILL.md +74 -1
  99. package/src/skills/rebuttal/references/response-letter-template.md +55 -11
  100. package/src/skills/review/SKILL.md +118 -1
  101. package/src/skills/review/references/experiment-todo-template.md +23 -0
  102. package/src/skills/review/references/review-report-template.md +16 -0
  103. package/src/skills/review/references/revision-log-template.md +4 -0
  104. package/src/skills/scout/SKILL.md +1 -1
  105. package/src/skills/write/SKILL.md +168 -7
  106. package/src/skills/write/references/paper-experiment-matrix-template.md +131 -0
  107. package/src/tui/package.json +1 -1
  108. package/src/ui/dist/assets/{AiManusChatView-BKZ103sn.js → AiManusChatView-CnJcXynW.js} +156 -48
  109. package/src/ui/dist/assets/{AnalysisPlugin-mTTzGAlK.js → AnalysisPlugin-DeyzPEhV.js} +1 -1
  110. package/src/ui/dist/assets/{CliPlugin-BH58n3GY.js → CliPlugin-CB1YODQn.js} +164 -9
  111. package/src/ui/dist/assets/{CodeEditorPlugin-BKGRUH7e.js → CodeEditorPlugin-B-xicq1e.js} +8 -8
  112. package/src/ui/dist/assets/{CodeViewerPlugin-BMADwFWJ.js → CodeViewerPlugin-DT54ysXa.js} +5 -5
  113. package/src/ui/dist/assets/{DocViewerPlugin-ZOnTIHLN.js → DocViewerPlugin-DQtKT-VD.js} +3 -3
  114. package/src/ui/dist/assets/{GitDiffViewerPlugin-CQ7h1Djm.js → GitDiffViewerPlugin-hqHbCfnv.js} +20 -21
  115. package/src/ui/dist/assets/{ImageViewerPlugin-GVS5MsnC.js → ImageViewerPlugin-OcVo33jV.js} +5 -5
  116. package/src/ui/dist/assets/{LabCopilotPanel-BZNv1JML.js → LabCopilotPanel-DdGwhEUV.js} +11 -11
  117. package/src/ui/dist/assets/{LabPlugin-TWcJsdQA.js → LabPlugin-Ciz1gDaX.js} +2 -1
  118. package/src/ui/dist/assets/{LatexPlugin-DIjHiR2x.js → LatexPlugin-BhmjNQRC.js} +37 -11
  119. package/src/ui/dist/assets/{MarkdownViewerPlugin-D3ooGAH0.js → MarkdownViewerPlugin-BzdVH9Bx.js} +4 -4
  120. package/src/ui/dist/assets/{MarketplacePlugin-DfVfE9hN.js → MarketplacePlugin-DmyHspXt.js} +3 -3
  121. package/src/ui/dist/assets/{NotebookEditor-DDl0_Mc0.js → NotebookEditor-BMXKrDRk.js} +1 -1
  122. package/src/ui/dist/assets/{NotebookEditor-s8JhzuX1.js → NotebookEditor-BTVYRGkm.js} +12 -12
  123. package/src/ui/dist/assets/{PdfLoader-C2Sf6SJM.js → PdfLoader-CvcjJHXv.js} +14 -7
  124. package/src/ui/dist/assets/{PdfMarkdownPlugin-CXFLoIsa.js → PdfMarkdownPlugin-DW2ej8Vk.js} +73 -6
  125. package/src/ui/dist/assets/{PdfViewerPlugin-BYTmz2fK.js → PdfViewerPlugin-CmlDxbhU.js} +103 -34
  126. package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +3627 -0
  127. package/src/ui/dist/assets/{SearchPlugin-CjWBI1O9.js → SearchPlugin-DAjQZPSv.js} +1 -1
  128. package/src/ui/dist/assets/{TextViewerPlugin-DdOBU3-S.js → TextViewerPlugin-C-nVAZb_.js} +5 -4
  129. package/src/ui/dist/assets/{VNCViewer-B8HGgLwQ.js → VNCViewer-D7-dIYon.js} +10 -10
  130. package/src/ui/dist/assets/bot-C_G4WtNI.js +21 -0
  131. package/src/ui/dist/assets/branding/logo-rokid.png +0 -0
  132. package/src/ui/dist/assets/browser-BAcuE0Xj.js +2895 -0
  133. package/src/ui/dist/assets/{code-BWAY76JP.js → code-Cd7WfiWq.js} +1 -1
  134. package/src/ui/dist/assets/{file-content-C1NwU5oQ.js → file-content-B57zsL9y.js} +1 -1
  135. package/src/ui/dist/assets/{file-diff-panel-CywslwB9.js → file-diff-panel-DVoheLFq.js} +1 -1
  136. package/src/ui/dist/assets/{file-socket-B4kzuOBQ.js → file-socket-B5kXFxZP.js} +1 -1
  137. package/src/ui/dist/assets/{image-D-NZM-6P.js → image-LLOjkMHF.js} +1 -1
  138. package/src/ui/dist/assets/{index-DGIYDuTv.css → index-BQG-1s2o.css} +40 -13
  139. package/src/ui/dist/assets/{index-DHZJ_0TI.js → index-C3r2iGrp.js} +12 -12
  140. package/src/ui/dist/assets/{index-7Chr1g9c.js → index-CLQauncb.js} +15050 -9561
  141. package/src/ui/dist/assets/index-Dxa2eYMY.js +25 -0
  142. package/src/ui/dist/assets/{index-BdM1Gqfr.js → index-hOUOWbW2.js} +2 -2
  143. package/src/ui/dist/assets/{monaco-Cb2uKKe6.js → monaco-BGGAEii3.js} +1 -1
  144. package/src/ui/dist/assets/{pdf-effect-queue-DSw_D3RV.js → pdf-effect-queue-DlEr1_y5.js} +16 -1
  145. package/src/ui/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
  146. package/src/ui/dist/assets/{popover-Bg72DGgT.js → popover-CWJbJuYY.js} +1 -1
  147. package/src/ui/dist/assets/{project-sync-Ce_0BglY.js → project-sync-CRJiucYO.js} +18 -77
  148. package/src/ui/dist/assets/select-CoHB7pvH.js +1690 -0
  149. package/src/ui/dist/assets/{sigma-DPaACDrh.js → sigma-D5aJWR8J.js} +1 -1
  150. package/src/ui/dist/assets/{index-CDxNdQdz.js → square-check-big-DUK_mnkS.js} +2 -13
  151. package/src/ui/dist/assets/{trash-BvTgE5__.js → trash-ChU3SEE3.js} +1 -1
  152. package/src/ui/dist/assets/{useCliAccess-CgPeMOwP.js → useCliAccess-BrJBV3tY.js} +1 -1
  153. package/src/ui/dist/assets/{useFileDiffOverlay-xPhz7P5B.js → useFileDiffOverlay-C2OQaVWc.js} +1 -1
  154. package/src/ui/dist/assets/{wrap-text-C3Un3YQr.js → wrap-text-C7Qqh-om.js} +1 -1
  155. package/src/ui/dist/assets/{zoom-out-BgxLa0Ri.js → zoom-out-rtX0FKya.js} +1 -1
  156. package/src/ui/dist/index.html +2 -2
  157. package/src/ui/dist/assets/AutoFigurePlugin-BGxN8Umr.css +0 -3056
  158. package/src/ui/dist/assets/AutoFigurePlugin-C_wWw4AP.js +0 -8149
  159. package/src/ui/dist/assets/PdfViewerPlugin-BJXtIwj_.css +0 -260
  160. package/src/ui/dist/assets/Stepper-B0Dd8CxK.js +0 -158
  161. package/src/ui/dist/assets/bibtex-CKaefIN2.js +0 -189
  162. package/src/ui/dist/assets/file-utils-H2fjA46S.js +0 -109
  163. package/src/ui/dist/assets/message-square-BzjLiXir.js +0 -16
  164. package/src/ui/dist/assets/pdfjs-DU1YE8WO.js +0 -3
  165. package/src/ui/dist/assets/tooltip-C_mA6R0w.js +0 -108
@@ -1,14 +1,14 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BdM1Gqfr.js","assets/index-7Chr1g9c.js","assets/index-DGIYDuTv.css","assets/useCliAccess-CgPeMOwP.js","assets/VNCViewer-B8HGgLwQ.js","assets/file-content-C1NwU5oQ.js","assets/file-utils-H2fjA46S.js","assets/file-jump-queue-r5XKgJEV.js","assets/pdf-effect-queue-DSw_D3RV.js","assets/file-diff-panel-CywslwB9.js","assets/message-square-BzjLiXir.js","assets/NotebookEditor-DDl0_Mc0.js","assets/NotebookEditor-C3VQ7ylN.css","assets/tooltip-C_mA6R0w.js","assets/trash-BvTgE5__.js"])))=>i.map(i=>d[i]);
2
- import { z as createLucideIcon, r as reactExports, cl as useIsomorphicLayoutEffect, cn as frame_1, da as LayoutGroupContext, db as nodeGroup_1, j as jsxRuntimeExports, cq as useConstant, s as apiClient, bH as isQuestRuntimeSurface, dc as shouldUseQuestProject, bI as getApiBaseUrl, dd as deriveMcpIdentity, de as supportsProductApis, cX as axios, df as getCachedValue, dg as setCachedValue, dh as recordRequestEvent, di as redactSensitive, dj as sanitizeUrl, dk as refreshAccessToken, aS as useChatSessionStore, cH as getMyToken, bJ as redirectToLanding, I as create$1, ay as useLabCopilotStore, bK as useCliStore, dl as EXPLORER_REFRESH_EVENT, o as useTabsStore, cZ as buildCliFileId, dm as getCliFileName, c_ as toCliResourcePath, aK as getPluginIdFromExtension, t as BUILTIN_PLUGINS, b as cn, dn as GripVertical, f as useFileTreeStore, N as toFilesResourcePath, aJ as getPluginIdFromMimeType, T as TriangleAlert, dp as resolveMcpIdentity, dq as getToolArgsRecord, dr as getToolResultRecord, ds as getToolResultValue, dt as asString$2, du as asRecord$4, dv as asStringArray, dw as extractPathEntries, dx as BookOpenText, dy as Clock3, dz as truncateText, dA as ArrowUpRight, l as Search, dB as Database, dC as ArrowRightLeft, D as Sparkles, k as FileText, bA as GitBranch, dD as asBoolean, bB as Bot, dE as asNumber, dF as BASH_CARRIAGE_RETURN_PREFIX, aL as useQuery, bt as CircleHelp, dG as Activity, bv as Clock, dH as truncateText$1, dI as listLabPendingQuestions, dJ as listLabQuestionHistory, aa as BookOpen, ae as ExternalLink, u as useI18n, dK as normalizeWebSearchPayload, dL as WebSearchQueryPills, dM as WebSearchResults, H as EnhancedTerminal, h as dynamic, _ as __vitePreload, dN as BashToolView, a7 as Terminal, p as useToast, dO as getMimeTypeFromExtension, dP as getFileTextPreview, dQ as createFileObjectUrl, c as copyToClipboard, c6 as ChevronLeft, cw as Folder, m as ChevronUp, n as ChevronDown, X as X$1, L as LoaderCircle, aH as FileIcon, dR as formatFileSize, E as Eye, e as Copy, bc as Dialog, bd as DialogContent, c9 as ChevronRight, dS as ConfirmModal, dT as RotatingText, d as Check, aP as useReducedMotion, dU as useTokenStream, dV as McpBashExecView, dW as PngIcon, dX as Brain, dY as BRAND_LOGO_SMALL_SRC, dZ as BRAND_LOGO_SMALL_SRC_INVERTED, d_ as CircleX, aZ as motion, bf as DialogTitle, ca as DialogDescription, bS as DropdownMenu, bT as DropdownMenuTrigger, b5 as Ellipsis, bU as DropdownMenuContent, bW as DropdownMenuItem, cD as DropdownMenuSeparator, cv as GlareHover, cC as SpotlightCard, d6 as Noise, b6 as Plus, ag as Info, W as Play, d$ as getWorkspaceContentTone, aY as AnimatePresence, a6 as useOpenFile, a as useWorkspaceSurfaceStore, x as useAuthStore, e0 as useSearchParams, e1 as useAgentRegistryStore, e2 as PanelLeft, e3 as parseCliFileId, bZ as getFile, bO as getProject, cK as refreshCliServerStatus, e4 as COPILOT_FILES_ENABLED, U as listLatexBuilds, a0 as getLatexBuildLogText, Q as compileLatex, e5 as ThinkingIndicator, b7 as Select, b8 as SelectTrigger, ba as SelectContent, bb as SelectItem, e6 as assetUrl, e7 as VariableSizeList, bu as OrbitLogoStatus, aO as reactDomExports, e8 as ChatScrollProvider, be as DialogHeader, bg as DialogFooter } from './index-7Chr1g9c.js';
3
- import { u as useFileContentStore } from './file-content-C1NwU5oQ.js';
4
- import { n as normalizePath$1, j as joinPath, s as splitPath, S as Server, L as Layers } from './file-utils-H2fjA46S.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-hOUOWbW2.js","assets/index-CLQauncb.js","assets/index-BQG-1s2o.css","assets/useCliAccess-BrJBV3tY.js","assets/VNCViewer-D7-dIYon.js","assets/file-content-B57zsL9y.js","assets/select-CoHB7pvH.js","assets/index-Dxa2eYMY.js","assets/file-jump-queue-r5XKgJEV.js","assets/pdf-effect-queue-DlEr1_y5.js","assets/file-diff-panel-DVoheLFq.js","assets/bot-C_G4WtNI.js","assets/NotebookEditor-BMXKrDRk.js","assets/NotebookEditor-C3VQ7ylN.css","assets/trash-ChU3SEE3.js"])))=>i.map(i=>d[i]);
2
+ import { w as createLucideIcon, r as reactExports, ce as useIsomorphicLayoutEffect, cg as frame_1, d8 as LayoutGroupContext, d9 as nodeGroup_1, j as jsxRuntimeExports, cj as useConstant, t as apiClient, bE as isQuestRuntimeSurface, da as shouldUseQuestProject, bF as getApiBaseUrl, db as deriveMcpIdentity, dc as supportsProductApis, cV as axios, dd as getCachedValue, de as setCachedValue, df as recordRequestEvent, dg as redactSensitive, dh as sanitizeUrl, di as refreshAccessToken, aV as useChatSessionStore, cF as getMyToken, bG as redirectToLanding, Q as create$1, aA as useLabCopilotStore, bH as useCliStore, dj as EXPLORER_REFRESH_EVENT, n as useTabsStore, cX as buildCliFileId, dk as getCliFileName, cY as toCliResourcePath, aM as getPluginIdFromExtension, v as BUILTIN_PLUGINS, b as cn, dl as GripVertical, f as useFileTreeStore, W as toFilesResourcePath, aL as getPluginIdFromMimeType, T as TriangleAlert, dm as resolveMcpIdentity, dn as getToolArgsRecord, dp as getToolResultRecord, dq as getToolResultValue, dr as asString$2, ds as asRecord$4, dt as asStringArray, du as extractPathEntries, dv as BookOpenText, dw as Clock3, dx as truncateText, dy as ArrowUpRight, l as Search, dz as Database, dA as ArrowRightLeft, N as Sparkles, k as FileText, by as GitBranch, dB as asBoolean, dC as asNumber, dD as BASH_CARRIAGE_RETURN_PREFIX, aN as useQuery, br as CircleHelp, dE as Activity, bt as Clock, dF as truncateText$1, dG as listLabPendingQuestions, dH as listLabQuestionHistory, af as BookOpen, dI as ExternalLink, u as useI18n, dJ as GraduationCap, dK as normalizeWebSearchPayload, dL as WebSearchQueryPills, dM as WebSearchResults, P as EnhancedTerminal, h as dynamic, _ as __vitePreload, dN as BashToolView, ac as Terminal, o as useToast, dO as getMimeTypeFromExtension, dP as getFileTextPreview, c2 as createFileObjectUrl, c as copyToClipboard, cp as ChevronLeft, cs as Folder, m as ChevronDown, X as X$1, L as LoaderCircle, aJ as FileIcon, dQ as formatFileSize, E as Eye, e as Copy, ba as Dialog, bb as DialogContent, co as ChevronRight, dR as ConfirmModal, dS as RotatingText, d as Check, aS as useReducedMotion, dT as useTokenStream, dU as McpBashExecView, dV as PngIcon, dW as Brain, dX as BRAND_LOGO_SMALL_SRC, dY as BRAND_LOGO_SMALL_SRC_INVERTED, dZ as CircleX, b0 as motion, bd as DialogTitle, ct as DialogDescription, bT as DropdownMenu, bU as DropdownMenuTrigger, b8 as Ellipsis, bV as DropdownMenuContent, bX as DropdownMenuItem, cB as DropdownMenuSeparator, cq as GlareHover, cA as SpotlightCard, d4 as Noise, b9 as Plus, ai as Info, a2 as Play, d_ as getWorkspaceContentTone, a$ as AnimatePresence, ab as useOpenFile, a as useWorkspaceSurfaceStore, z as useAuthStore, d$ as useSearchParams, e0 as useAgentRegistryStore, e1 as PanelLeft, e2 as parseCliFileId, c0 as getFile, bL as getProject, cI as refreshCliServerStatus, e3 as COPILOT_FILES_ENABLED, a0 as listLatexBuilds, a6 as getLatexBuildLogText, $ as compileLatex, e4 as ThinkingIndicator, e5 as assetUrl, e6 as VariableSizeList, bs as OrbitLogoStatus, aR as reactDomExports, e7 as ChatScrollProvider, bc as DialogHeader, be as DialogFooter } from './index-CLQauncb.js';
3
+ import { u as useFileContentStore } from './file-content-B57zsL9y.js';
4
+ import { n as normalizePath$1, j as joinPath, s as splitPath, e as Server, L as Layers, S as Select, a as SelectTrigger, c as SelectContent, d as SelectItem } from './select-CoHB7pvH.js';
5
5
  import { q as queueFileJumpEffect } from './file-jump-queue-r5XKgJEV.js';
6
- import { q as queuePdfEffect } from './pdf-effect-queue-DSw_D3RV.js';
7
- import { F as FileDiffPanel } from './file-diff-panel-CywslwB9.js';
8
- import { M as MessageSquare } from './message-square-BzjLiXir.js';
9
- import { v as ve$2, d as defaultExtensions, g as getEditorMarkdown, s as setEditorMarkdown, U as U$2, I as I$1 } from './NotebookEditor-DDl0_Mc0.js';
10
- import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip-C_mA6R0w.js';
11
- import { T as Trash, A as ArrowDown } from './trash-BvTgE5__.js';
6
+ import { q as queuePdfEffect, M as MessageSquare } from './pdf-effect-queue-DlEr1_y5.js';
7
+ import { F as FileDiffPanel } from './file-diff-panel-DVoheLFq.js';
8
+ import { B as Bot } from './bot-C_G4WtNI.js';
9
+ import { C as ChevronUp } from './index-Dxa2eYMY.js';
10
+ import { v as ve$2, d as defaultExtensions, g as getEditorMarkdown, s as setEditorMarkdown, U as U$2, I as I$1 } from './NotebookEditor-BMXKrDRk.js';
11
+ import { T as Trash, A as ArrowDown } from './trash-ChU3SEE3.js';
12
12
 
13
13
  /**
14
14
  * @license lucide-react v0.511.0 - ISC
@@ -18,12 +18,12 @@ import { T as Trash, A as ArrowDown } from './trash-BvTgE5__.js';
18
18
  */
19
19
 
20
20
 
21
- const __iconNode$k = [
21
+ const __iconNode$j = [
22
22
  ["rect", { width: "20", height: "5", x: "2", y: "3", rx: "1", key: "1wp1u1" }],
23
23
  ["path", { d: "M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8", key: "1s80jp" }],
24
24
  ["path", { d: "M10 12h4", key: "a56b0p" }]
25
25
  ];
26
- const Archive = createLucideIcon("archive", __iconNode$k);
26
+ const Archive = createLucideIcon("archive", __iconNode$j);
27
27
 
28
28
  /**
29
29
  * @license lucide-react v0.511.0 - ISC
@@ -33,11 +33,11 @@ const Archive = createLucideIcon("archive", __iconNode$k);
33
33
  */
34
34
 
35
35
 
36
- const __iconNode$j = [
36
+ const __iconNode$i = [
37
37
  ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
38
38
  ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
39
39
  ];
40
- const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$j);
40
+ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$i);
41
41
 
42
42
  /**
43
43
  * @license lucide-react v0.511.0 - ISC
@@ -47,12 +47,12 @@ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$j);
47
47
  */
48
48
 
49
49
 
50
- const __iconNode$i = [
50
+ const __iconNode$h = [
51
51
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
52
52
  ["line", { x1: "10", x2: "10", y1: "15", y2: "9", key: "c1nkhi" }],
53
53
  ["line", { x1: "14", x2: "14", y1: "15", y2: "9", key: "h65svq" }]
54
54
  ];
55
- const CirclePause = createLucideIcon("circle-pause", __iconNode$i);
55
+ const CirclePause = createLucideIcon("circle-pause", __iconNode$h);
56
56
 
57
57
  /**
58
58
  * @license lucide-react v0.511.0 - ISC
@@ -62,13 +62,13 @@ const CirclePause = createLucideIcon("circle-pause", __iconNode$i);
62
62
  */
63
63
 
64
64
 
65
- const __iconNode$h = [
65
+ const __iconNode$g = [
66
66
  [
67
67
  "path",
68
68
  { d: "M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3", key: "11bfej" }
69
69
  ]
70
70
  ];
71
- const Command = createLucideIcon("command", __iconNode$h);
71
+ const Command = createLucideIcon("command", __iconNode$g);
72
72
 
73
73
  /**
74
74
  * @license lucide-react v0.511.0 - ISC
@@ -78,7 +78,7 @@ const Command = createLucideIcon("command", __iconNode$h);
78
78
  */
79
79
 
80
80
 
81
- const __iconNode$g = [
81
+ const __iconNode$f = [
82
82
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
83
83
  [
84
84
  "path",
@@ -87,7 +87,7 @@ const __iconNode$g = [
87
87
  ["path", { d: "m9 18-1.5-1.5", key: "1j6qii" }],
88
88
  ["circle", { cx: "5", cy: "14", r: "3", key: "ufru5t" }]
89
89
  ];
90
- const FileSearch = createLucideIcon("file-search", __iconNode$g);
90
+ const FileSearch = createLucideIcon("file-search", __iconNode$f);
91
91
 
92
92
  /**
93
93
  * @license lucide-react v0.511.0 - ISC
@@ -97,12 +97,12 @@ const FileSearch = createLucideIcon("file-search", __iconNode$g);
97
97
  */
98
98
 
99
99
 
100
- const __iconNode$f = [
100
+ const __iconNode$e = [
101
101
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }],
102
102
  ["line", { x1: "3", x2: "9", y1: "12", y2: "12", key: "1dyftd" }],
103
103
  ["line", { x1: "15", x2: "21", y1: "12", y2: "12", key: "oup4p8" }]
104
104
  ];
105
- const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode$f);
105
+ const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode$e);
106
106
 
107
107
  /**
108
108
  * @license lucide-react v0.511.0 - ISC
@@ -112,33 +112,12 @@ const GitCommitHorizontal = createLucideIcon("git-commit-horizontal", __iconNode
112
112
  */
113
113
 
114
114
 
115
- const __iconNode$e = [
115
+ const __iconNode$d = [
116
116
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
117
117
  ["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
118
118
  ["path", { d: "M2 12h20", key: "9i4pu4" }]
119
119
  ];
120
- const Globe = createLucideIcon("globe", __iconNode$e);
121
-
122
- /**
123
- * @license lucide-react v0.511.0 - ISC
124
- *
125
- * This source code is licensed under the ISC license.
126
- * See the LICENSE file in the root directory of this source tree.
127
- */
128
-
129
-
130
- const __iconNode$d = [
131
- [
132
- "path",
133
- {
134
- d: "M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z",
135
- key: "j76jl0"
136
- }
137
- ],
138
- ["path", { d: "M22 10v6", key: "1lu8f3" }],
139
- ["path", { d: "M6 12.5V16a6 3 0 0 0 12 0v-3.5", key: "1r8lef" }]
140
- ];
141
- const GraduationCap = createLucideIcon("graduation-cap", __iconNode$d);
120
+ const Globe = createLucideIcon("globe", __iconNode$d);
142
121
 
143
122
  /**
144
123
  * @license lucide-react v0.511.0 - ISC
@@ -9557,6 +9536,29 @@ function renderAttachBaseline(resultRecord) {
9557
9536
  ] }) });
9558
9537
  }
9559
9538
  function renderArxiv(resultRecord, args) {
9539
+ const mode = asString$2(resultRecord?.mode) || asString$2(args.mode) || "read";
9540
+ if (mode === "list") {
9541
+ const items = Array.isArray(resultRecord?.items) ? resultRecord.items.map((entry) => asRecord$4(entry)).filter((entry) => Boolean(entry)) : [];
9542
+ const count = typeof resultRecord?.count === "number" ? resultRecord.count : items.length;
9543
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(DsToolSection, { title: "Saved arXiv papers", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2 text-[12px] leading-6 text-[var(--text-secondary)]", children: [
9544
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
9545
+ "Count: ",
9546
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-[var(--text-primary)]", children: count })
9547
+ ] }),
9548
+ items.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "No saved arXiv papers yet." }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-2", children: items.map((item, index) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
9549
+ "div",
9550
+ {
9551
+ className: "rounded-[12px] border border-[var(--border-light)] bg-[rgba(255,255,255,0.76)] px-3 py-3",
9552
+ children: [
9553
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[12px] font-medium text-[var(--text-primary)]", children: asString$2(item.title) || asString$2(item.arxiv_id) || `Paper ${index + 1}` }),
9554
+ asString$2(item.arxiv_id) ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-1 text-[11px] font-mono text-[var(--text-tertiary)]", children: asString$2(item.arxiv_id) }) : null,
9555
+ asString$2(item.abstract) ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-2 text-[12px] leading-6 text-[var(--text-secondary)]", children: truncateText(asString$2(item.abstract), 320) }) : null
9556
+ ]
9557
+ },
9558
+ `${asString$2(item.arxiv_id) || index}`
9559
+ )) })
9560
+ ] }) }) });
9561
+ }
9560
9562
  const paperId = asString$2(resultRecord?.paper_id) || asString$2(args.paper_id);
9561
9563
  const title = asString$2(resultRecord?.title) || paperId || "arXiv paper";
9562
9564
  const source = asString$2(resultRecord?.source);
@@ -9729,6 +9731,7 @@ function McpArtifactToolView({ toolContent }) {
9729
9731
  const resultValue = getToolResultValue(toolContent);
9730
9732
  const error = asString$2(toolContent.content?.error) || asString$2(resultRecord?.error);
9731
9733
  const active = toolContent.status === "calling";
9734
+ const arxivMode = asString$2(resultRecord?.mode) || asString$2(args.mode) || "read";
9732
9735
  const titleMap = {
9733
9736
  record: active ? "DeepScientist is recording artifact..." : "DeepScientist recorded artifact.",
9734
9737
  checkpoint: active ? "DeepScientist is creating checkpoint..." : "DeepScientist created checkpoint.",
@@ -9761,7 +9764,7 @@ function McpArtifactToolView({ toolContent }) {
9761
9764
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-3", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
9762
9765
  DsToolFrame,
9763
9766
  {
9764
- title: titleMap[toolLabel] || (active ? "DeepScientist is updating artifact..." : "DeepScientist updated artifact."),
9767
+ title: toolLabel === "arxiv" && arxivMode === "list" ? active ? "DeepScientist is listing saved arXiv papers..." : "DeepScientist listed the saved arXiv papers." : titleMap[toolLabel] || (active ? "DeepScientist is updating artifact..." : "DeepScientist updated artifact."),
9765
9768
  subtitle: recordSummary || subtitleMap[toolLabel] || "Artifact tools persist branch, report, baseline, and interaction state.",
9766
9769
  accent,
9767
9770
  meta: /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
@@ -11535,7 +11538,7 @@ function SearchToolView({ toolContent, panelMode }) {
11535
11538
  }
11536
11539
 
11537
11540
  const CliToolTerminal = dynamic(
11538
- () => __vitePreload(() => import('./index-BdM1Gqfr.js'),true?__vite__mapDeps([0,1,2,3]):void 0).then((mod) => mod.CliToolTerminal),
11541
+ () => __vitePreload(() => import('./index-hOUOWbW2.js'),true?__vite__mapDeps([0,1,2,3]):void 0).then((mod) => mod.CliToolTerminal),
11539
11542
  {
11540
11543
  loading: () => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center text-xs text-[var(--text-tertiary)]", children: "Loading terminal..." })
11541
11544
  }
@@ -16875,6 +16878,111 @@ const ChatMessage = reactExports.memo(ChatMessageBase, (prev, next) => {
16875
16878
  });
16876
16879
  ChatMessage.displayName = "ChatMessage";
16877
16880
 
16881
+ const TooltipContext = reactExports.createContext(null);
16882
+ const TooltipProvider = ({
16883
+ children,
16884
+ // These props are accepted for compatibility but not used in this simple implementation
16885
+ delayDuration: _delayDuration,
16886
+ skipDelayDuration: _skipDelayDuration
16887
+ }) => {
16888
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children });
16889
+ };
16890
+ const Tooltip = ({
16891
+ children,
16892
+ delayDuration = 200
16893
+ }) => {
16894
+ const [open, setOpen] = reactExports.useState(false);
16895
+ const timeoutRef = reactExports.useRef();
16896
+ const handleOpen = reactExports.useCallback(() => {
16897
+ timeoutRef.current = setTimeout(() => {
16898
+ setOpen(true);
16899
+ }, delayDuration);
16900
+ }, [delayDuration]);
16901
+ const handleClose = reactExports.useCallback(() => {
16902
+ if (timeoutRef.current) {
16903
+ clearTimeout(timeoutRef.current);
16904
+ }
16905
+ setOpen(false);
16906
+ }, []);
16907
+ reactExports.useEffect(() => {
16908
+ return () => {
16909
+ if (timeoutRef.current) {
16910
+ clearTimeout(timeoutRef.current);
16911
+ }
16912
+ };
16913
+ }, []);
16914
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
16915
+ TooltipContext.Provider,
16916
+ {
16917
+ value: {
16918
+ open,
16919
+ setOpen: (value) => {
16920
+ if (value) {
16921
+ handleOpen();
16922
+ } else {
16923
+ handleClose();
16924
+ }
16925
+ }
16926
+ },
16927
+ children
16928
+ }
16929
+ );
16930
+ };
16931
+ const TooltipTrigger = reactExports.forwardRef(
16932
+ ({ className, children, asChild, ...props }, ref) => {
16933
+ const context = reactExports.useContext(TooltipContext);
16934
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
16935
+ "div",
16936
+ {
16937
+ ref,
16938
+ className: cn("inline-flex", className),
16939
+ onMouseEnter: () => context?.setOpen(true),
16940
+ onMouseLeave: () => context?.setOpen(false),
16941
+ onFocus: () => context?.setOpen(true),
16942
+ onBlur: () => context?.setOpen(false),
16943
+ ...props,
16944
+ children
16945
+ }
16946
+ );
16947
+ }
16948
+ );
16949
+ TooltipTrigger.displayName = "TooltipTrigger";
16950
+ const TooltipContent = reactExports.forwardRef(
16951
+ ({ className, side = "top", sideOffset = 4, children, ...props }, ref) => {
16952
+ const context = reactExports.useContext(TooltipContext);
16953
+ if (!context?.open) {
16954
+ return null;
16955
+ }
16956
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
16957
+ "div",
16958
+ {
16959
+ ref,
16960
+ className: cn(
16961
+ "absolute z-[10002] overflow-hidden rounded-soft-sm px-3 py-1.5",
16962
+ "bg-soft-bg-elevated text-soft-text-primary text-sm",
16963
+ "shadow-soft-sm border border-soft-border",
16964
+ "animate-in fade-in-0 zoom-in-95",
16965
+ // Position based on side
16966
+ side === "top" && "bottom-full mb-2",
16967
+ side === "bottom" && "top-full mt-2",
16968
+ side === "left" && "right-full mr-2",
16969
+ side === "right" && "left-full ml-2",
16970
+ className
16971
+ ),
16972
+ style: {
16973
+ marginTop: side === "bottom" ? sideOffset : void 0,
16974
+ marginBottom: side === "top" ? sideOffset : void 0,
16975
+ marginLeft: side === "right" ? sideOffset : void 0,
16976
+ marginRight: side === "left" ? sideOffset : void 0
16977
+ },
16978
+ ...props,
16979
+ children
16980
+ }
16981
+ );
16982
+ }
16983
+ );
16984
+ TooltipContent.displayName = "TooltipContent";
16985
+
16878
16986
  function PlanPanel({
16879
16987
  plan,
16880
16988
  sessionId,
@@ -18393,7 +18501,7 @@ function pickGreetingTemplate() {
18393
18501
  return GREETING_TEMPLATES[index];
18394
18502
  }
18395
18503
  const VNCViewer = dynamic(
18396
- () => __vitePreload(() => import('./VNCViewer-B8HGgLwQ.js'),true?__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14]):void 0).then((mod) => mod.VNCViewer),
18504
+ () => __vitePreload(() => import('./VNCViewer-D7-dIYon.js'),true?__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14]):void 0).then((mod) => mod.VNCViewer),
18397
18505
  {
18398
18506
  loading: () => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full w-full items-center justify-center text-sm text-[var(--text-tertiary)]", children: "Loading sandbox view..." })
18399
18507
  }
@@ -1,4 +1,4 @@
1
- import { r as reactExports, c as copyToClipboard, j as jsxRuntimeExports, k as FileText, l as Search, A as ChartColumn, D as Sparkles, d as Check, e as Copy, b as cn } from './index-7Chr1g9c.js';
1
+ import { r as reactExports, c as copyToClipboard, j as jsxRuntimeExports, k as FileText, l as Search, K as ChartColumn, N as Sparkles, d as Check, e as Copy, b as cn } from './index-CLQauncb.js';
2
2
 
3
3
  const actions = [
4
4
  {
@@ -1,9 +1,24 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CDxNdQdz.js","assets/index-7Chr1g9c.js","assets/index-DGIYDuTv.css"])))=>i.map(i=>d[i]);
2
- import { z as createLucideIcon, ck as useMotionValue, cl as useIsomorphicLayoutEffect, cm as cancelFrame_1, cn as frame_1, co as collectMotionValues_1, cp as transform_1, cq as useConstant, r as reactExports, cr as MotionConfigContext, cs as attachFollow_1, ct as isMotionValue_1, cu as useInView, j as jsxRuntimeExports, b as cn, u as useI18n, bK as useCliStore, _ as __vitePreload, c9 as ChevronRight, g as RefreshCw, b6 as Plus, b1 as ScrollArea, c6 as ChevronLeft, cv as GlareHover, a3 as Button, cb as Input, l as Search, k as FileText, cw as Folder, a7 as Terminal, D as Sparkles, bc as Dialog, bd as DialogContent, be as DialogHeader, bf as DialogTitle, ca as DialogDescription, bg as DialogFooter, cx as useTerminal, b7 as Select, b8 as SelectTrigger, b9 as SelectValue, ba as SelectContent, bb as SelectItem, cy as uploadCliFile, bY as Textarea, cz as CircleCheck, I as create, cc as persist, p as useToast, cA as unbindCliServer, G as ConnectionState, cB as updateCliSession, cC as SpotlightCard, bS as DropdownMenu, bT as DropdownMenuTrigger, bU as DropdownMenuContent, bW as DropdownMenuItem, W as Play, cD as DropdownMenuSeparator, X, cE as Pencil, H as EnhancedTerminal, cF as listCliSessions, cG as FadeContent, s as apiClient, cH as getMyToken, c as copyToClipboard, cI as Bell, cg as Trash2, d as Check, cJ as getCliServerMetrics, cK as refreshCliServerStatus, cL as ResponsiveContainer, cM as LineChart, cN as XAxis, cO as YAxis, cP as Tooltip, cQ as Line, cR as getCliHealth, cS as Cpu, cT as listCliFiles, cU as readCliFile, cV as writeCliFile, cW as deleteCliFile, cX as axios, Y as Download, o as useTabsStore, aK as getPluginIdFromExtension, t as BUILTIN_PLUGINS, aJ as getPluginIdFromMimeType, cY as downloadCliFile, cZ as buildCliFileId, c_ as toCliResourcePath, c$ as Upload, L as LoaderCircle, d0 as listCliLogs, d1 as getCliLogObject, d2 as listCliTasks, T as TriangleAlert, d3 as listCliFindings, d4 as listCliMethods, d5 as createCliMethod, bP as useMaxEntitlement, d6 as Noise } from './index-7Chr1g9c.js';
3
- import { S as Server, L as Layers, n as normalizePath, f as formatFileSize, s as splitPath, j as joinPath, a as findSensitiveMarker, D as DOWNLOAD_MAX_BYTES, T as TEXT_PREVIEW_MAX_BYTES } from './file-utils-H2fjA46S.js';
4
- import { S as SquareCheckBig } from './index-CDxNdQdz.js';
5
- import { w as wrapEnvelope, g as getCliClientId, c as acquireCliSocket, n as nextSeq, d as unwrapPayload, a as useCliSocket, e as buildDefaultSessionId, f as buildConversationSessionId, u as useCliAccess } from './useCliAccess-CgPeMOwP.js';
6
- import { C as CloudUpload, S as Stepper, a as Step } from './Stepper-B0Dd8CxK.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Dxa2eYMY.js","assets/index-CLQauncb.js","assets/index-BQG-1s2o.css"])))=>i.map(i=>d[i]);
2
+ import { w as createLucideIcon, cd as useMotionValue, ce as useIsomorphicLayoutEffect, cf as cancelFrame_1, cg as frame_1, ch as collectMotionValues_1, ci as transform_1, cj as useConstant, r as reactExports, ck as MotionConfigContext, cl as attachFollow_1, cm as isMotionValue_1, cn as useInView, j as jsxRuntimeExports, d as Check, b as cn, aO as Button, u as useI18n, bH as useCliStore, _ as __vitePreload, co as ChevronRight, g as RefreshCw, b9 as Plus, b4 as ScrollArea, cp as ChevronLeft, cq as GlareHover, cr as Input, l as Search, k as FileText, cs as Folder, ac as Terminal, N as Sparkles, ba as Dialog, bb as DialogContent, bc as DialogHeader, bd as DialogTitle, ct as DialogDescription, be as DialogFooter, cu as useTerminal, cv as uploadCliFile, bZ as Textarea, cw as CircleCheck, Q as create, cx as persist, o as useToast, cy as unbindCliServer, O as ConnectionState, cz as updateCliSession, cA as SpotlightCard, bT as DropdownMenu, bU as DropdownMenuTrigger, bV as DropdownMenuContent, bX as DropdownMenuItem, a2 as Play, cB as DropdownMenuSeparator, X, cC as Pencil, P as EnhancedTerminal, cD as listCliSessions, cE as FadeContent, t as apiClient, cF as getMyToken, c as copyToClipboard, cG as Bell, c9 as Trash2, cH as getCliServerMetrics, cI as refreshCliServerStatus, cJ as ResponsiveContainer, cK as LineChart, cL as XAxis, cM as YAxis, cN as Tooltip, cO as Line, cP as getCliHealth, cQ as Cpu, cR as listCliFiles, cS as readCliFile, cT as writeCliFile, cU as deleteCliFile, cV as axios, a3 as Download, n as useTabsStore, aM as getPluginIdFromExtension, v as BUILTIN_PLUGINS, aL as getPluginIdFromMimeType, cW as downloadCliFile, cX as buildCliFileId, cY as toCliResourcePath, cZ as Upload, L as LoaderCircle, c_ as listCliLogs, c$ as getCliLogObject, d0 as listCliTasks, T as TriangleAlert, d1 as listCliFindings, d2 as listCliMethods, d3 as createCliMethod, bM as useMaxEntitlement, d4 as Noise } from './index-CLQauncb.js';
3
+ import { e as Server, S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem, L as Layers, n as normalizePath, f as formatFileSize, s as splitPath, j as joinPath, g as findSensitiveMarker, D as DOWNLOAD_MAX_BYTES, T as TEXT_PREVIEW_MAX_BYTES } from './select-CoHB7pvH.js';
4
+ import { S as SquareCheckBig } from './square-check-big-DUK_mnkS.js';
5
+ import { w as wrapEnvelope, g as getCliClientId, c as acquireCliSocket, n as nextSeq, d as unwrapPayload, a as useCliSocket, e as buildDefaultSessionId, f as buildConversationSessionId, u as useCliAccess } from './useCliAccess-BrJBV3tY.js';
6
+ import './index-Dxa2eYMY.js';
7
+
8
+ /**
9
+ * @license lucide-react v0.511.0 - ISC
10
+ *
11
+ * This source code is licensed under the ISC license.
12
+ * See the LICENSE file in the root directory of this source tree.
13
+ */
14
+
15
+
16
+ const __iconNode$9 = [
17
+ ["path", { d: "M12 13v8", key: "1l5pq0" }],
18
+ ["path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242", key: "1pljnt" }],
19
+ ["path", { d: "m8 17 4-4 4 4", key: "1quai1" }]
20
+ ];
21
+ const CloudUpload = createLucideIcon("cloud-upload", __iconNode$9);
7
22
 
8
23
  /**
9
24
  * @license lucide-react v0.511.0 - ISC
@@ -365,6 +380,146 @@ function CountUp({
365
380
  return /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className, ref });
366
381
  }
367
382
 
383
+ function Step({ children }) {
384
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children });
385
+ }
386
+ const clampStep = (step, totalSteps) => {
387
+ if (totalSteps <= 0) return 1;
388
+ return Math.min(Math.max(step, 1), totalSteps);
389
+ };
390
+ function Stepper({
391
+ initialStep = 1,
392
+ onStepChange,
393
+ onFinalStepCompleted,
394
+ backButtonText = "Previous",
395
+ nextButtonText = "Next",
396
+ nextDisabled,
397
+ backDisabled,
398
+ contentAnimation = false,
399
+ className,
400
+ children
401
+ }) {
402
+ const steps = reactExports.useMemo(
403
+ () => reactExports.Children.toArray(children).filter((child) => reactExports.isValidElement(child)),
404
+ [children]
405
+ );
406
+ const totalSteps = steps.length;
407
+ const [currentStep, setCurrentStep] = reactExports.useState(() => clampStep(initialStep, totalSteps));
408
+ const previousStepRef = reactExports.useRef(currentStep);
409
+ reactExports.useEffect(() => {
410
+ setCurrentStep(clampStep(initialStep, totalSteps));
411
+ }, [initialStep, totalSteps]);
412
+ reactExports.useEffect(() => {
413
+ onStepChange?.(currentStep);
414
+ }, [currentStep, onStepChange]);
415
+ reactExports.useEffect(() => {
416
+ previousStepRef.current = currentStep;
417
+ }, [currentStep]);
418
+ const resolveDisabled = (value, step, total) => {
419
+ if (typeof value === "function") return value(step, total);
420
+ return Boolean(value);
421
+ };
422
+ const isFinalStep = currentStep >= totalSteps;
423
+ const isNextDisabled = resolveDisabled(nextDisabled, currentStep, totalSteps);
424
+ const isBackDisabled = resolveDisabled(backDisabled, currentStep, totalSteps);
425
+ const canGoBack = currentStep > 1 && !isBackDisabled;
426
+ const nextLabel = typeof nextButtonText === "function" ? nextButtonText(currentStep, totalSteps) : nextButtonText;
427
+ const handleNext = () => {
428
+ if (isFinalStep) {
429
+ if (!isNextDisabled) {
430
+ onFinalStepCompleted?.();
431
+ }
432
+ return;
433
+ }
434
+ if (isNextDisabled) return;
435
+ setCurrentStep((prev) => clampStep(prev + 1, totalSteps));
436
+ };
437
+ const handleBack = () => {
438
+ if (!canGoBack) return;
439
+ setCurrentStep((prev) => clampStep(prev - 1, totalSteps));
440
+ };
441
+ if (totalSteps === 0) {
442
+ return null;
443
+ }
444
+ const activeStep = steps[currentStep - 1];
445
+ const activeTitle = activeStep?.props?.title ?? `Step ${currentStep}`;
446
+ const activeDescription = activeStep?.props?.description;
447
+ const stepDirection = currentStep >= previousStepRef.current ? "forward" : "back";
448
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: cn("stepper-root flex flex-col gap-5", className), children: [
449
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "stepper-header flex flex-wrap items-center justify-between gap-3", children: [
450
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap items-center gap-3", children: steps.map((step, index) => {
451
+ const stepNumber = index + 1;
452
+ const isComplete = stepNumber < currentStep;
453
+ const isActive = stepNumber === currentStep;
454
+ const title = step.props.title ?? `Step ${stepNumber}`;
455
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
456
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
457
+ "div",
458
+ {
459
+ className: cn(
460
+ "stepper-dot flex h-8 w-8 items-center justify-center rounded-full border text-xs font-semibold transition",
461
+ isComplete && "border-transparent bg-[var(--cli-accent-olive)] text-[var(--cli-ink-0)]",
462
+ isActive && "border-[var(--cli-accent-olive)] bg-white/90 text-[var(--cli-ink-1)]",
463
+ !isComplete && !isActive && "border-white/60 bg-white/60 text-[var(--cli-muted-1)]"
464
+ ),
465
+ "data-state": isComplete ? "complete" : isActive ? "active" : "upcoming",
466
+ children: isComplete ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "h-4 w-4" }) : stepNumber
467
+ }
468
+ ),
469
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [
470
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[10px] uppercase tracking-wide text-[var(--cli-muted-1)]", children: [
471
+ "Step ",
472
+ stepNumber
473
+ ] }),
474
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
475
+ "span",
476
+ {
477
+ className: cn(
478
+ "text-xs font-semibold",
479
+ isActive ? "text-[var(--cli-ink-1)]" : "text-[var(--cli-muted-1)]"
480
+ ),
481
+ children: title
482
+ }
483
+ )
484
+ ] }),
485
+ index < totalSteps - 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-px w-8 bg-white/60", "aria-hidden": "true" }) : null
486
+ ] }, `${title}-${stepNumber}`);
487
+ }) }),
488
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-full border border-white/50 bg-white/80 px-3 py-1 text-[10px] uppercase tracking-wide text-[var(--cli-muted-1)]", children: [
489
+ currentStep,
490
+ " / ",
491
+ totalSteps
492
+ ] })
493
+ ] }),
494
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
495
+ "div",
496
+ {
497
+ className: "stepper-content rounded-xl border border-white/40 bg-white/80 p-4",
498
+ "data-step": currentStep,
499
+ "data-direction": stepDirection,
500
+ children: [
501
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-2", children: [
502
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
503
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm font-semibold text-[var(--cli-ink-1)]", children: activeTitle }),
504
+ activeDescription ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-[var(--cli-muted-1)]", children: activeDescription }) : null
505
+ ] }),
506
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "rounded-full border border-white/60 bg-white/70 px-2 py-1 text-[10px] uppercase tracking-wide text-[var(--cli-muted-1)]", children: [
507
+ "Step ",
508
+ currentStep
509
+ ] })
510
+ ] }),
511
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-4", children: activeStep })
512
+ ]
513
+ },
514
+ contentAnimation ? `step-${currentStep}` : "step-static"
515
+ ),
516
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "stepper-actions flex flex-wrap items-center justify-between gap-3", children: [
517
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "secondary", onClick: handleBack, disabled: !canGoBack, children: backButtonText }),
518
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { onClick: handleNext, disabled: isNextDisabled, children: nextLabel })
519
+ ] })
520
+ ] });
521
+ }
522
+
368
523
  const statusClasses$1 = {
369
524
  online: "bg-[var(--cli-status-online)]",
370
525
  offline: "bg-[var(--cli-status-offline)]",
@@ -523,7 +678,7 @@ function ServerList({
523
678
  const container = listRef.current;
524
679
  const targets = container.querySelectorAll("[data-cli-server-card]");
525
680
  if (targets.length === 0) return;
526
- __vitePreload(async () => { const {default: anime} = await import('./index-CDxNdQdz.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
681
+ __vitePreload(async () => { const {default: anime} = await import('./index-Dxa2eYMY.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
527
682
  if (cancelled) return;
528
683
  anime({
529
684
  targets,
@@ -4919,7 +5074,7 @@ function TasksPanel({ projectId, serverId }) {
4919
5074
  let cancelled = false;
4920
5075
  const targets = listRef.current.querySelectorAll("[data-cli-task-item]");
4921
5076
  if (targets.length === 0) return;
4922
- __vitePreload(async () => { const {default: anime} = await import('./index-CDxNdQdz.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
5077
+ __vitePreload(async () => { const {default: anime} = await import('./index-Dxa2eYMY.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
4923
5078
  if (cancelled) return;
4924
5079
  anime({
4925
5080
  targets,
@@ -5046,7 +5201,7 @@ function FindingsPanel({ projectId, serverId }) {
5046
5201
  let cancelled = false;
5047
5202
  const targets = listRef.current.querySelectorAll("[data-cli-finding-item]");
5048
5203
  if (targets.length === 0) return;
5049
- __vitePreload(async () => { const {default: anime} = await import('./index-CDxNdQdz.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
5204
+ __vitePreload(async () => { const {default: anime} = await import('./index-Dxa2eYMY.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
5050
5205
  if (cancelled) return;
5051
5206
  anime({
5052
5207
  targets,
@@ -1,12 +1,12 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-Cb2uKKe6.js","assets/index-7Chr1g9c.js","assets/index-DGIYDuTv.css"])))=>i.map(i=>d[i]);
2
- import { i as isCliFileId, R as React, f as useFileTreeStore, j as jsxRuntimeExports, b as cn, L as LoaderCircle, S as Save, B as Braces, g as RefreshCw, h as dynamic, _ as __vitePreload } from './index-7Chr1g9c.js';
3
- import { u as useFileContentStore, a as useFileContentLoading } from './file-content-C1NwU5oQ.js';
4
- import { a as acquireFileSocket } from './file-socket-B4kzuOBQ.js';
5
- import { c as configureMonacoLoader } from './monaco-Cb2uKKe6.js';
6
- import { u as useFileDiffOverlay } from './useFileDiffOverlay-xPhz7P5B.js';
7
- import { F as FileDiffPanel } from './file-diff-panel-CywslwB9.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-BGGAEii3.js","assets/index-CLQauncb.js","assets/index-BQG-1s2o.css"])))=>i.map(i=>d[i]);
2
+ import { i as isCliFileId, R as React, f as useFileTreeStore, j as jsxRuntimeExports, b as cn, L as LoaderCircle, S as Save, B as Braces, g as RefreshCw, h as dynamic, _ as __vitePreload } from './index-CLQauncb.js';
3
+ import { u as useFileContentStore, a as useFileContentLoading } from './file-content-B57zsL9y.js';
4
+ import { a as acquireFileSocket } from './file-socket-B5kXFxZP.js';
5
+ import { c as configureMonacoLoader } from './monaco-BGGAEii3.js';
6
+ import { u as useFileDiffOverlay } from './useFileDiffOverlay-C2OQaVWc.js';
7
+ import { F as FileDiffPanel } from './file-diff-panel-DVoheLFq.js';
8
8
 
9
- const MonacoEditor = dynamic(() => __vitePreload(() => import('./monaco-Cb2uKKe6.js').then(n => n.i),true?__vite__mapDeps([0,1,2]):void 0), { });
9
+ const MonacoEditor = dynamic(() => __vitePreload(() => import('./monaco-BGGAEii3.js').then(n => n.i),true?__vite__mapDeps([0,1,2]):void 0), { });
10
10
  configureMonacoLoader();
11
11
  function getLanguageFromName(name) {
12
12
  const lower = name.toLowerCase();
@@ -1,8 +1,8 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-7Chr1g9c.js","assets/index-DGIYDuTv.css"])))=>i.map(i=>d[i]);
2
- import { u as useI18n, a as useWorkspaceSurfaceStore, r as reactExports, c as copyToClipboard, j as jsxRuntimeExports, L as LoaderCircle, C as CircleAlert, F as FileCode, E as Eye, b as cn, d as Check, e as Copy, _ as __vitePreload } from './index-7Chr1g9c.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CLQauncb.js","assets/index-BQG-1s2o.css"])))=>i.map(i=>d[i]);
2
+ import { u as useI18n, a as useWorkspaceSurfaceStore, r as reactExports, c as copyToClipboard, j as jsxRuntimeExports, L as LoaderCircle, C as CircleAlert, F as FileCode, E as Eye, b as cn, d as Check, e as Copy, _ as __vitePreload } from './index-CLQauncb.js';
3
3
  import { c as consumeFileJumpEffects } from './file-jump-queue-r5XKgJEV.js';
4
- import { C as Code } from './code-BWAY76JP.js';
5
- import { H as Hash, W as WrapText } from './wrap-text-C3Un3YQr.js';
4
+ import { C as Code } from './code-Cd7WfiWq.js';
5
+ import { H as Hash, W as WrapText } from './wrap-text-C7Qqh-om.js';
6
6
 
7
7
  const EXTENSION_TO_LANGUAGE = {
8
8
  // JavaScript/TypeScript
@@ -416,7 +416,7 @@ function CodeViewerPlugin({
416
416
  setLoading(false);
417
417
  return;
418
418
  }
419
- const { getFileContent } = await __vitePreload(async () => { const { getFileContent } = await import('./index-7Chr1g9c.js').then(n => n.el);return { getFileContent }},true?__vite__mapDeps([0,1]):void 0);
419
+ const { getFileContent } = await __vitePreload(async () => { const { getFileContent } = await import('./index-CLQauncb.js').then(n => n.el);return { getFileContent }},true?__vite__mapDeps([0,1]):void 0);
420
420
  const text = await getFileContent(context.resourceId);
421
421
  setContent(text);
422
422
  } catch (err) {
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-7Chr1g9c.js","assets/index-DGIYDuTv.css"])))=>i.map(i=>d[i]);
2
- import { z as createLucideIcon, u as useI18n, r as reactExports, j as jsxRuntimeExports, L as LoaderCircle, b as cn, T as TriangleAlert, Y as Download, _ as __vitePreload, a4 as FileSpreadsheet, k as FileText } from './index-7Chr1g9c.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CLQauncb.js","assets/index-BQG-1s2o.css"])))=>i.map(i=>d[i]);
2
+ import { w as createLucideIcon, u as useI18n, r as reactExports, j as jsxRuntimeExports, L as LoaderCircle, b as cn, T as TriangleAlert, a3 as Download, _ as __vitePreload, a9 as FileSpreadsheet, k as FileText } from './index-CLQauncb.js';
3
3
 
4
4
  /**
5
5
  * @license lucide-react v0.511.0 - ISC
@@ -228,7 +228,7 @@ function DocViewerPlugin({
228
228
  if (!context.resourceId) return;
229
229
  (async () => {
230
230
  try {
231
- const { downloadFileById } = await __vitePreload(async () => { const { downloadFileById } = await import('./index-7Chr1g9c.js').then(n => n.el);return { downloadFileById }},true?__vite__mapDeps([0,1]):void 0);
231
+ const { downloadFileById } = await __vitePreload(async () => { const { downloadFileById } = await import('./index-CLQauncb.js').then(n => n.el);return { downloadFileById }},true?__vite__mapDeps([0,1]):void 0);
232
232
  await downloadFileById(context.resourceId, fileName);
233
233
  } catch (err) {
234
234
  console.error("Failed to download document:", err);