@researai/deepscientist 1.5.5 → 1.5.7

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 (77) hide show
  1. package/README.md +28 -0
  2. package/bin/ds.js +54 -13
  3. package/package.json +1 -1
  4. package/pyproject.toml +1 -1
  5. package/src/deepscientist/__init__.py +1 -1
  6. package/src/deepscientist/cli.py +1 -1
  7. package/src/deepscientist/config/models.py +6 -6
  8. package/src/deepscientist/config/service.py +5 -0
  9. package/src/deepscientist/connector_profiles.py +34 -6
  10. package/src/deepscientist/daemon/api/handlers.py +6 -1
  11. package/src/deepscientist/daemon/api/router.py +1 -0
  12. package/src/deepscientist/daemon/app.py +230 -3
  13. package/src/deepscientist/prompts/builder.py +21 -5
  14. package/src/deepscientist/qq_profiles.py +19 -9
  15. package/src/deepscientist/quest/layout.py +1 -0
  16. package/src/deepscientist/quest/service.py +2 -2
  17. package/src/deepscientist/runners/codex.py +31 -13
  18. package/src/deepscientist/runners/runtime_overrides.py +46 -0
  19. package/src/deepscientist/skills/installer.py +7 -0
  20. package/src/prompts/connectors/qq.md +3 -0
  21. package/src/prompts/system.md +32 -1
  22. package/src/skills/analysis-campaign/SKILL.md +30 -0
  23. package/src/skills/analysis-campaign/references/campaign-checklist-template.md +41 -0
  24. package/src/skills/analysis-campaign/references/campaign-plan-template.md +68 -0
  25. package/src/skills/baseline/SKILL.md +105 -5
  26. package/src/skills/baseline/references/baseline-checklist-template.md +57 -0
  27. package/src/skills/baseline/references/baseline-plan-template.md +103 -0
  28. package/src/skills/experiment/SKILL.md +30 -0
  29. package/src/skills/experiment/references/main-experiment-checklist-template.md +52 -0
  30. package/src/skills/experiment/references/main-experiment-plan-template.md +77 -0
  31. package/src/tui/package.json +1 -1
  32. package/src/ui/dist/assets/{AiManusChatView-BGLArZRn.js → AiManusChatView-BS3V4ZOk.js} +11 -11
  33. package/src/ui/dist/assets/{AnalysisPlugin-BgDGSigG.js → AnalysisPlugin-DLPXQsmr.js} +1 -1
  34. package/src/ui/dist/assets/{AutoFigurePlugin-B65HD7L4.js → AutoFigurePlugin-C-Fr9knQ.js} +5 -5
  35. package/src/ui/dist/assets/{CliPlugin-CUqgsFHC.js → CliPlugin-Dd8AHzFg.js} +9 -9
  36. package/src/ui/dist/assets/{CodeEditorPlugin-CF5EdvaS.js → CodeEditorPlugin-Dg-RepTl.js} +8 -8
  37. package/src/ui/dist/assets/{CodeViewerPlugin-DEeU063D.js → CodeViewerPlugin-D2J_3nyt.js} +5 -5
  38. package/src/ui/dist/assets/{DocViewerPlugin-Df-FuDlZ.js → DocViewerPlugin-ChRLLKNb.js} +3 -3
  39. package/src/ui/dist/assets/{GitDiffViewerPlugin-RAnNaRxM.js → GitDiffViewerPlugin-DgHfcved.js} +1 -1
  40. package/src/ui/dist/assets/{ImageViewerPlugin-DXJ0ZJGg.js → ImageViewerPlugin-C89GZMBy.js} +5 -5
  41. package/src/ui/dist/assets/{LabCopilotPanel-BlO-sKsj.js → LabCopilotPanel-BUfIwUcb.js} +10 -10
  42. package/src/ui/dist/assets/{LabPlugin-BajPZW5v.js → LabPlugin-zvUmQUMq.js} +1 -1
  43. package/src/ui/dist/assets/{LatexPlugin-F1OEol8D.js → LatexPlugin-C1SSNuWp.js} +7 -7
  44. package/src/ui/dist/assets/{MarkdownViewerPlugin-MhUupqwT.js → MarkdownViewerPlugin-D2Mf5tU5.js} +4 -4
  45. package/src/ui/dist/assets/{MarketplacePlugin-DxhIEsv0.js → MarketplacePlugin-CF4LgiS2.js} +3 -3
  46. package/src/ui/dist/assets/{NotebookEditor-q7TkhewC.js → NotebookEditor-BM7Bgwlv.js} +1 -1
  47. package/src/ui/dist/assets/{PdfLoader-B8ZOTKFc.js → PdfLoader-Bc5qfD-Z.js} +1 -1
  48. package/src/ui/dist/assets/{PdfMarkdownPlugin-xFPvzvWh.js → PdfMarkdownPlugin-sh1-IRcp.js} +3 -3
  49. package/src/ui/dist/assets/{PdfViewerPlugin-EjEcsIB8.js → PdfViewerPlugin-C_a7CpWG.js} +10 -10
  50. package/src/ui/dist/assets/{SearchPlugin-ixY-1lgW.js → SearchPlugin-L4z3HcLf.js} +1 -1
  51. package/src/ui/dist/assets/{Stepper-gYFK2Pgz.js → Stepper-Dk4aQ3fN.js} +1 -1
  52. package/src/ui/dist/assets/{TextViewerPlugin-Cym6pv_n.js → TextViewerPlugin-BsNtlKVo.js} +4 -4
  53. package/src/ui/dist/assets/{VNCViewer-BPmIHcmK.js → VNCViewer-BpeDcZ5_.js} +9 -9
  54. package/src/ui/dist/assets/{bibtex-Btv6Wi7f.js → bibtex-C4QI-bbj.js} +1 -1
  55. package/src/ui/dist/assets/{code-BlG7g85c.js → code-DuMINRsg.js} +1 -1
  56. package/src/ui/dist/assets/{file-content-DBT5OfTZ.js → file-content-C3N-432K.js} +1 -1
  57. package/src/ui/dist/assets/{file-diff-panel-BWXYzqHk.js → file-diff-panel-CffQ4ZMg.js} +1 -1
  58. package/src/ui/dist/assets/{file-socket-wDlx6byM.js → file-socket-CRH59PCO.js} +1 -1
  59. package/src/ui/dist/assets/{file-utils-Ba3nJmH0.js → file-utils-vYGtW2mI.js} +1 -1
  60. package/src/ui/dist/assets/{image-BwtCyguk.js → image-DBVGaooo.js} +1 -1
  61. package/src/ui/dist/assets/{index-Bz5AaWL7.js → index-B1P6hQRJ.js} +166 -32
  62. package/src/ui/dist/assets/{index-B-2scqCJ.js → index-Be0NAmh8.js} +11 -11
  63. package/src/ui/dist/assets/{index-DcqvKzeJ.js → index-BpjYH9Vg.js} +1 -1
  64. package/src/ui/dist/assets/{index-CfRpE209.js → index-DjSFDmgB.js} +2 -2
  65. package/src/ui/dist/assets/{index-DpMZw8aM.css → index-Do9N28uB.css} +1 -1
  66. package/src/ui/dist/assets/{message-square-BnlyWVH0.js → message-square-BsPDBhiY.js} +1 -1
  67. package/src/ui/dist/assets/{monaco-CXe0pAVe.js → monaco-BTkdPojV.js} +1 -1
  68. package/src/ui/dist/assets/{popover-BCHmVhHj.js → popover-cWjCk-vc.js} +1 -1
  69. package/src/ui/dist/assets/{project-sync-Brk6kaOD.js → project-sync-CXn530xb.js} +1 -1
  70. package/src/ui/dist/assets/{sigma-D72eSUep.js → sigma-04Jr12jg.js} +1 -1
  71. package/src/ui/dist/assets/{tooltip-BMWd0dqX.js → tooltip-BdVDl0G5.js} +1 -1
  72. package/src/ui/dist/assets/{trash-BIt_eWIS.js → trash-CB_GlQyC.js} +1 -1
  73. package/src/ui/dist/assets/{useCliAccess-N1hkTRrR.js → useCliAccess-BL932NwS.js} +1 -1
  74. package/src/ui/dist/assets/{useFileDiffOverlay-DPRPv6rv.js → useFileDiffOverlay-B2WK7Tvq.js} +1 -1
  75. package/src/ui/dist/assets/{wrap-text-E5-UheyP.js → wrap-text-YC68g12z.js} +1 -1
  76. package/src/ui/dist/assets/{zoom-out-D4TR-ZZ_.js → zoom-out-C0RJvFiJ.js} +1 -1
  77. package/src/ui/dist/index.html +2 -2
@@ -67,6 +67,17 @@ Use `references/evidence-ladder.md` when deciding whether the current package is
67
67
  Completing one main run is not quest completion.
68
68
  After reporting the run, keep moving to iterate, analyze, write, or finalize unless a genuine blocking decision remains.
69
69
 
70
+ ## Quick workflow
71
+
72
+ 1. Restate the selected idea in `1-2` sentences and confirm the baseline comparison contract.
73
+ 2. Before substantial code edits or the real main run, create `PLAN.md` and `CHECKLIST.md`.
74
+ 3. Use `PLAN.md` to map the idea into concrete code touchpoints, smoke and full-run commands, fallback paths, and monitoring rules.
75
+ 4. Use `CHECKLIST.md` as the living control surface while planning, implementing, pilot testing, running, and validating.
76
+ 5. Run a bounded smoke test or pilot before the real long run.
77
+ 6. Launch the real run with durable logging and monitor it through `bash_exec`.
78
+ 7. Revise the plan if implementation, comparability, runtime, or route assumptions change materially.
79
+ 8. Close each real main-run milestone with a concise `1-2` sentence summary that says what was tested, whether performance improved / worsened / stayed mixed, and the exact next action.
80
+
70
81
  ## Non-negotiable rules
71
82
 
72
83
  - Do not fabricate metrics, logs, claims, or improvement narratives.
@@ -119,6 +130,17 @@ Before a main run starts, confirm:
119
130
 
120
131
  If any of these are materially unknown, stop and resolve them through `decision`.
121
132
 
133
+ ## Required plan and checklist
134
+
135
+ Before substantial implementation work or a real main run, create a quest-visible `PLAN.md` and `CHECKLIST.md`.
136
+
137
+ - Use `references/main-experiment-plan-template.md` as the canonical structure for `PLAN.md`.
138
+ - Use `references/main-experiment-checklist-template.md` as the canonical structure for `CHECKLIST.md`.
139
+ - `PLAN.md` should lead with the selected idea summarized in `1-2` sentences and then make the run contract concrete: baseline and comparability rules, code touchpoints, minimal code-change map, smoke / pilot path, full-run path, fallback options, monitoring and sleep rules, expected outputs, and a revision log.
140
+ - `CHECKLIST.md` is the living execution list; update it during planning, implementation, smoke testing, main execution, validation, and every material route change.
141
+ - If the code path, comparability contract, runtime strategy, or execution route changes materially, revise `PLAN.md` before spending more code or compute.
142
+ - The later `RUN.md`, `summary.md`, and artifact payloads remain required outputs, but `PLAN.md` and `CHECKLIST.md` are the canonical planning-and-control surface before and during execution.
143
+
122
144
  ## Working-boundary rules
123
145
 
124
146
  Only modify the active quest workspace for this experiment line.
@@ -214,6 +236,8 @@ Before implementation or execution, state:
214
236
  - strongest alternative hypothesis
215
237
  - exact metric keys that will decide success or failure
216
238
 
239
+ Prefer to write this contract first in `PLAN.md` using `references/main-experiment-plan-template.md`, then keep the current execution state visible in `CHECKLIST.md` using `references/main-experiment-checklist-template.md`.
240
+
217
241
  For substantial runs, also record the following seven experiment fields early and keep them updated during execution:
218
242
 
219
243
  1. research question
@@ -364,6 +388,7 @@ Incremental-recording rule:
364
388
  - pilot validation
365
389
  - full execution checkpoints
366
390
  - post-run analysis
391
+ - update `CHECKLIST.md` alongside those durable notes so the current execution frontier is obvious without replaying the whole log
367
392
  - include timestamps when they materially help reconstruction
368
393
  - preserve failed attempts, anomalies, and partial outcomes rather than overwriting them
369
394
 
@@ -393,6 +418,10 @@ For commands that may run longer than a few minutes:
393
418
  - wait about `1800s`, then inspect logs
394
419
  - then keep checking about every `1800s` while the run is still active
395
420
  - if needed, use an explicit bounded wait such as `bash_exec(command='sleep 60', mode='await', timeout_seconds=70)` or `bash_exec(mode='await', id=..., timeout_seconds=...)` between checks
421
+ - canonical sleep choice:
422
+ - if you only need wall-clock waiting between checks, use `bash_exec(command='sleep N', mode='await', timeout_seconds=N+buffer, ...)`
423
+ - keep a real buffer on that sleep timeout; do not set `timeout_seconds` exactly equal to `N`
424
+ - if you are waiting on an already running managed session, prefer `bash_exec(mode='await', id=..., timeout_seconds=...)` instead of starting a new sleep command
396
425
  - after every completed sleep / await cycle, inspect logs and send `artifact.interact(kind='progress', ...)` with the latest real status, latest evidence, the next checkpoint, and the estimated next reply time
397
426
  - after the first meaningful signal and then at real checkpoints (e.g., completion, or roughly every ~30 minutes if still running), keep those progress updates going rather than waiting silently
398
427
  - if the run is clearly invalid, wedged, or superseded, stop it with `bash_exec(mode='kill', id=..., wait=true, timeout_seconds=...)`; if it must die immediately, add `force=true`, record the reason, fix the issue, and relaunch cleanly
@@ -496,6 +525,7 @@ Interpret the measured result first, then either:
496
525
  - compare candidate foundations and create the next child research branch
497
526
 
498
527
  When `artifact.record_main_experiment(...)` succeeds, send a richer threaded `artifact.interact(kind='milestone', ...)` update rather than a generic one-line progress ping.
528
+ Lead that milestone with a concise `1-2` sentence outcome summary before expanding into more detail.
499
529
  That milestone should state:
500
530
 
501
531
  - the research question that was tested
@@ -0,0 +1,52 @@
1
+ # Main Experiment Checklist Template
2
+
3
+ Update this while planning, modifying code, running pilots, monitoring the full run, and validating the result.
4
+
5
+ ## Identity
6
+
7
+ - run id:
8
+ - idea id:
9
+ - stage:
10
+
11
+ ## Planning
12
+
13
+ - [ ] selected idea summarized in `1-2` sentences
14
+ - [ ] baseline and comparability contract confirmed
15
+ - [ ] code touchpoints listed
16
+ - [ ] smoke plan written
17
+ - [ ] full run plan written
18
+ - [ ] fallback options written
19
+
20
+ ## Implementation
21
+
22
+ - [ ] intended files modified
23
+ - [ ] unrelated changes avoided or justified
24
+ - [ ] risky logic guarded or sanity-checked
25
+ - [ ] plan updated if the implementation route changed
26
+
27
+ ## Pilot / Smoke
28
+
29
+ - [ ] smoke command executed
30
+ - [ ] outputs look valid
31
+ - [ ] metrics / logs are interpretable
32
+ - [ ] comparability still holds
33
+
34
+ ## Main Run
35
+
36
+ - [ ] real run launched
37
+ - [ ] monitoring cadence started
38
+ - [ ] health signals confirmed
39
+ - [ ] major runtime deviations reflected in `PLAN.md`
40
+
41
+ ## Validation
42
+
43
+ - [ ] outputs exist
44
+ - [ ] metrics are complete
45
+ - [ ] baseline delta is comparable
46
+ - [ ] main claim is classified as supported / refuted / inconclusive
47
+ - [ ] result recorded durably
48
+
49
+ ## Closeout
50
+
51
+ - [ ] main experiment summarized in `1-2` sentences
52
+ - [ ] next action is explicit
@@ -0,0 +1,77 @@
1
+ # Main Experiment Plan Template
2
+
3
+ Use this before substantial code edits or the real main run.
4
+ Treat it as the implementation-and-execution plan for the selected idea, not just a metadata form.
5
+
6
+ ## 1. Objective
7
+
8
+ - run id:
9
+ - selected idea in `1-2` sentences:
10
+ - user's core requirements:
11
+ - research question:
12
+ - null hypothesis:
13
+ - alternative hypothesis:
14
+
15
+ ## 2. Baseline And Comparability
16
+
17
+ - baseline id:
18
+ - baseline variant:
19
+ - dataset / split:
20
+ - primary metric:
21
+ - required metric keys:
22
+ - comparability risks:
23
+
24
+ ## 3. Code Translation Plan
25
+
26
+ Map the idea into concrete code changes.
27
+
28
+ | Path | Current role | Planned change | Why this is needed | Risk |
29
+ |---|---|---|---|---|
30
+ | | | | | |
31
+
32
+ ## 4. Execution Design
33
+
34
+ - minimal experiment:
35
+ - smoke / pilot plan:
36
+ - full run plan:
37
+ - expected outputs:
38
+ - stop condition:
39
+ - abandonment condition:
40
+ - strongest alternative hypothesis:
41
+
42
+ ## 5. Runtime Strategy
43
+
44
+ - command for smoke:
45
+ - command for main run:
46
+ - expected runtime / budget:
47
+ - log / artifact locations:
48
+ - how existing tooling will be used efficiently:
49
+
50
+ Monitoring and sleep plan:
51
+
52
+ - wait cadence:
53
+ - `60s`
54
+ - `120s`
55
+ - `300s`
56
+ - `600s`
57
+ - `1800s`
58
+ - health signals that justify continuing to monitor:
59
+ - conditions that trigger kill / relaunch:
60
+
61
+ ## 6. Fallbacks And Recovery
62
+
63
+ - if the intended model / endpoint / download path fails:
64
+ - if hardware or memory is tighter than expected:
65
+ - if the code path is wrong after smoke:
66
+ - if the first full run becomes non-comparable:
67
+
68
+ ## 7. Checklist Link
69
+
70
+ - checklist path:
71
+ - next unchecked item:
72
+
73
+ ## 8. Revision Log
74
+
75
+ | Time | What changed | Why it changed | Impact on comparability or runtime |
76
+ |---|---|---|---|
77
+ | | | | |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepscientist-tui",
3
- "version": "1.5.5",
3
+ "version": "1.5.7",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,14 +1,14 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CfRpE209.js","assets/index-Bz5AaWL7.js","assets/index-DpMZw8aM.css","assets/useCliAccess-N1hkTRrR.js","assets/VNCViewer-BPmIHcmK.js","assets/file-content-DBT5OfTZ.js","assets/file-utils-Ba3nJmH0.js","assets/file-jump-queue-r5XKgJEV.js","assets/pdf-effect-queue-DSw_D3RV.js","assets/file-diff-panel-BWXYzqHk.js","assets/message-square-BnlyWVH0.js","assets/NotebookEditor-q7TkhewC.js","assets/NotebookEditor-C3VQ7ylN.css","assets/tooltip-BMWd0dqX.js","assets/trash-BIt_eWIS.js"])))=>i.map(i=>d[i]);
2
- import { z as createLucideIcon, r as reactExports, cb as useIsomorphicLayoutEffect, cd as frame_1, d8 as LayoutGroupContext, d9 as nodeGroup_1, j as jsxRuntimeExports, cg as useConstant, x as apiClient, bD as isQuestRuntimeSurface, da as shouldUseQuestProject, bE as getApiBaseUrl, db as deriveMcpIdentity, dc as supportsProductApis, cO as axios, dd as getCachedValue, de as setCachedValue, df as recordRequestEvent, dg as redactSensitive, dh as sanitizeUrl, di as refreshAccessToken, aO as useChatSessionStore, cx as getMyToken, bF as redirectToLanding, I as create$1, aA as useLabCopilotStore, bG as useCliStore, dj as EXPLORER_REFRESH_EVENT, t as useTabsStore, cS as buildCliFileId, dk as getCliFileName, cT as toCliResourcePath, cP as getPluginIdFromExtension, y as BUILTIN_PLUGINS, b as cn, dl as GripVertical, f as useFileTreeStore, P as toFilesResourcePath, cQ 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, D as Sparkles, k as FileText, bw as GitBranch, dB as asBoolean, bx as Bot, dC as BASH_CARRIAGE_RETURN_PREFIX, af as useQuery, bp as CircleHelp, dD as Activity, br as Clock, dE as truncateText$1, dF as listLabPendingQuestions, dG as listLabQuestionHistory, aa as BookOpen, ae as ExternalLink, u as useI18n, dH as normalizeWebSearchPayload, dI as WebSearchQueryPills, dJ as WebSearchResults, H as EnhancedTerminal, h as dynamic, _ as __vitePreload, dK as BashToolView, a7 as Terminal, v as useToast, dL as getMimeTypeFromExtension, dM as getFileTextPreview, dN as createFileObjectUrl, c as copyToClipboard, c2 as ChevronLeft, cm as Folder, m as ChevronUp, n as ChevronDown, X as X$1, L as LoaderCircle, aJ as FileIcon, dO as formatFileSize, E as Eye, e as Copy, b8 as Dialog, b9 as DialogContent, c5 as ChevronRight, dP as ConfirmModal, dQ as RotatingText, d as Check, aL as useReducedMotion, dR as useTokenStream, dS as McpBashExecView, dT as PngIcon, dU as Brain, dV as BRAND_LOGO_SMALL_SRC, dW as BRAND_LOGO_SMALL_SRC_INVERTED, dX as CircleX, aV as motion, bb as DialogTitle, c6 as DialogDescription, bO as DropdownMenu, bP as DropdownMenuTrigger, b1 as Ellipsis, bQ as DropdownMenuContent, bS as DropdownMenuItem, ct as DropdownMenuSeparator, cl as GlareHover, cs as SpotlightCard, c$ as Noise, b2 as Plus, ai as Info, Z as Play, dY as getWorkspaceContentTone, aU as AnimatePresence, a6 as useOpenFile, a as useWorkspaceSurfaceStore, p as useAuthStore, dZ as useSearchParams, d_ as useAgentRegistryStore, d$ as PanelLeft, e0 as parseCliFileId, bV as getFile, bK as getProject, cB as refreshCliServerStatus, e1 as COPILOT_FILES_ENABLED, W as listLatexBuilds, a2 as getLatexBuildLogText, V as compileLatex, e2 as ThinkingIndicator, b3 as Select, b4 as SelectTrigger, b6 as SelectContent, b7 as SelectItem, e3 as assetUrl, e4 as VariableSizeList, bq as OrbitLogoStatus, aK as reactDomExports, e5 as ChatScrollProvider, ba as DialogHeader, bc as DialogFooter } from './index-Bz5AaWL7.js';
3
- import { u as useFileContentStore } from './file-content-DBT5OfTZ.js';
4
- import { n as normalizePath$1, j as joinPath, s as splitPath, S as Server, L as Layers } from './file-utils-Ba3nJmH0.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DjSFDmgB.js","assets/index-B1P6hQRJ.js","assets/index-Do9N28uB.css","assets/useCliAccess-BL932NwS.js","assets/VNCViewer-BpeDcZ5_.js","assets/file-content-C3N-432K.js","assets/file-utils-vYGtW2mI.js","assets/file-jump-queue-r5XKgJEV.js","assets/pdf-effect-queue-DSw_D3RV.js","assets/file-diff-panel-CffQ4ZMg.js","assets/message-square-BsPDBhiY.js","assets/NotebookEditor-BM7Bgwlv.js","assets/NotebookEditor-C3VQ7ylN.css","assets/tooltip-BdVDl0G5.js","assets/trash-CB_GlQyC.js"])))=>i.map(i=>d[i]);
2
+ import { z as createLucideIcon, r as reactExports, cb as useIsomorphicLayoutEffect, cd as frame_1, d8 as LayoutGroupContext, d9 as nodeGroup_1, j as jsxRuntimeExports, cg as useConstant, x as apiClient, bD as isQuestRuntimeSurface, da as shouldUseQuestProject, bE as getApiBaseUrl, db as deriveMcpIdentity, dc as supportsProductApis, cO as axios, dd as getCachedValue, de as setCachedValue, df as recordRequestEvent, dg as redactSensitive, dh as sanitizeUrl, di as refreshAccessToken, aO as useChatSessionStore, cx as getMyToken, bF as redirectToLanding, I as create$1, aA as useLabCopilotStore, bG as useCliStore, dj as EXPLORER_REFRESH_EVENT, t as useTabsStore, cS as buildCliFileId, dk as getCliFileName, cT as toCliResourcePath, cP as getPluginIdFromExtension, y as BUILTIN_PLUGINS, b as cn, dl as GripVertical, f as useFileTreeStore, P as toFilesResourcePath, cQ 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, D as Sparkles, k as FileText, bw as GitBranch, dB as asBoolean, bx as Bot, dC as BASH_CARRIAGE_RETURN_PREFIX, af as useQuery, bp as CircleHelp, dD as Activity, br as Clock, dE as truncateText$1, dF as listLabPendingQuestions, dG as listLabQuestionHistory, aa as BookOpen, ae as ExternalLink, u as useI18n, dH as normalizeWebSearchPayload, dI as WebSearchQueryPills, dJ as WebSearchResults, H as EnhancedTerminal, h as dynamic, _ as __vitePreload, dK as BashToolView, a7 as Terminal, v as useToast, dL as getMimeTypeFromExtension, dM as getFileTextPreview, dN as createFileObjectUrl, c as copyToClipboard, c2 as ChevronLeft, cm as Folder, m as ChevronUp, n as ChevronDown, X as X$1, L as LoaderCircle, aJ as FileIcon, dO as formatFileSize, E as Eye, e as Copy, b8 as Dialog, b9 as DialogContent, c5 as ChevronRight, dP as ConfirmModal, dQ as RotatingText, d as Check, aL as useReducedMotion, dR as useTokenStream, dS as McpBashExecView, dT as PngIcon, dU as Brain, dV as BRAND_LOGO_SMALL_SRC, dW as BRAND_LOGO_SMALL_SRC_INVERTED, dX as CircleX, aV as motion, bb as DialogTitle, c6 as DialogDescription, bO as DropdownMenu, bP as DropdownMenuTrigger, b1 as Ellipsis, bQ as DropdownMenuContent, bS as DropdownMenuItem, ct as DropdownMenuSeparator, cl as GlareHover, cs as SpotlightCard, c$ as Noise, b2 as Plus, ai as Info, Z as Play, dY as getWorkspaceContentTone, aU as AnimatePresence, a6 as useOpenFile, a as useWorkspaceSurfaceStore, p as useAuthStore, dZ as useSearchParams, d_ as useAgentRegistryStore, d$ as PanelLeft, e0 as parseCliFileId, bV as getFile, bK as getProject, cB as refreshCliServerStatus, e1 as COPILOT_FILES_ENABLED, W as listLatexBuilds, a2 as getLatexBuildLogText, V as compileLatex, e2 as ThinkingIndicator, b3 as Select, b4 as SelectTrigger, b6 as SelectContent, b7 as SelectItem, e3 as assetUrl, e4 as VariableSizeList, bq as OrbitLogoStatus, aK as reactDomExports, e5 as ChatScrollProvider, ba as DialogHeader, bc as DialogFooter } from './index-B1P6hQRJ.js';
3
+ import { u as useFileContentStore } from './file-content-C3N-432K.js';
4
+ import { n as normalizePath$1, j as joinPath, s as splitPath, S as Server, L as Layers } from './file-utils-vYGtW2mI.js';
5
5
  import { q as queueFileJumpEffect } from './file-jump-queue-r5XKgJEV.js';
6
6
  import { q as queuePdfEffect } from './pdf-effect-queue-DSw_D3RV.js';
7
- import { F as FileDiffPanel } from './file-diff-panel-BWXYzqHk.js';
8
- import { M as MessageSquare } from './message-square-BnlyWVH0.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-q7TkhewC.js';
10
- import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip-BMWd0dqX.js';
11
- import { T as Trash, A as ArrowDown } from './trash-BIt_eWIS.js';
7
+ import { F as FileDiffPanel } from './file-diff-panel-CffQ4ZMg.js';
8
+ import { M as MessageSquare } from './message-square-BsPDBhiY.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-BM7Bgwlv.js';
10
+ import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip-BdVDl0G5.js';
11
+ import { T as Trash, A as ArrowDown } from './trash-CB_GlQyC.js';
12
12
 
13
13
  /**
14
14
  * @license lucide-react v0.511.0 - ISC
@@ -11444,7 +11444,7 @@ function SearchToolView({ toolContent, panelMode }) {
11444
11444
  }
11445
11445
 
11446
11446
  const CliToolTerminal = dynamic(
11447
- () => __vitePreload(() => import('./index-CfRpE209.js'),true?__vite__mapDeps([0,1,2,3]):void 0).then((mod) => mod.CliToolTerminal),
11447
+ () => __vitePreload(() => import('./index-DjSFDmgB.js'),true?__vite__mapDeps([0,1,2,3]):void 0).then((mod) => mod.CliToolTerminal),
11448
11448
  {
11449
11449
  loading: () => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center text-xs text-[var(--text-tertiary)]", children: "Loading terminal..." })
11450
11450
  }
@@ -18297,7 +18297,7 @@ function pickGreetingTemplate() {
18297
18297
  return GREETING_TEMPLATES[index];
18298
18298
  }
18299
18299
  const VNCViewer = dynamic(
18300
- () => __vitePreload(() => import('./VNCViewer-BPmIHcmK.js'),true?__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14]):void 0).then((mod) => mod.VNCViewer),
18300
+ () => __vitePreload(() => import('./VNCViewer-BpeDcZ5_.js'),true?__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14]):void 0).then((mod) => mod.VNCViewer),
18301
18301
  {
18302
18302
  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..." })
18303
18303
  }
@@ -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-Bz5AaWL7.js';
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-B1P6hQRJ.js';
2
2
 
3
3
  const actions = [
4
4
  {
@@ -1,8 +1,8 @@
1
- import { r as reactExports, j as jsxRuntimeExports, f as useFileTreeStore, J as updateFileContent, b_ as uploadFileAuto, b$ as deleteFiles, U as listFiles, c0 as createFolder, q as resolveApiBaseUrl, R as React, X, x as apiClient, af as useQuery, c1 as supportsPoints, aM as useQueryClient, v as useToast, c2 as ChevronLeft, c3 as Settings2, L as LoaderCircle, c4 as ArrowRight, c5 as ChevronRight, $ as Download, Z as Play, D as Sparkles, b8 as Dialog, b9 as DialogContent, ba as DialogHeader, bb as DialogTitle, c6 as DialogDescription, c7 as Input, bc as DialogFooter, a3 as Button, I as create, c8 as persist, _ as __vitePreload, p as useAuthStore, aZ as ScrollArea, b as cn, bT as SegmentedControl, bU as Textarea, k as FileText, b3 as Select, b4 as SelectTrigger, b5 as SelectValue, b6 as SelectContent, b7 as SelectItem, aK as reactDomExports, c9 as downloadFileById, bp as CircleHelp } from './index-Bz5AaWL7.js';
2
- import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip-BMWd0dqX.js';
3
- import { S as Stepper, a as Step, C as CloudUpload } from './Stepper-gYFK2Pgz.js';
4
- import { M as MessageSquare } from './message-square-BnlyWVH0.js';
5
- import { I as Image } from './image-BwtCyguk.js';
1
+ import { r as reactExports, j as jsxRuntimeExports, f as useFileTreeStore, J as updateFileContent, b_ as uploadFileAuto, b$ as deleteFiles, U as listFiles, c0 as createFolder, q as resolveApiBaseUrl, R as React, X, x as apiClient, af as useQuery, c1 as supportsPoints, aM as useQueryClient, v as useToast, c2 as ChevronLeft, c3 as Settings2, L as LoaderCircle, c4 as ArrowRight, c5 as ChevronRight, $ as Download, Z as Play, D as Sparkles, b8 as Dialog, b9 as DialogContent, ba as DialogHeader, bb as DialogTitle, c6 as DialogDescription, c7 as Input, bc as DialogFooter, a3 as Button, I as create, c8 as persist, _ as __vitePreload, p as useAuthStore, aZ as ScrollArea, b as cn, bT as SegmentedControl, bU as Textarea, k as FileText, b3 as Select, b4 as SelectTrigger, b5 as SelectValue, b6 as SelectContent, b7 as SelectItem, aK as reactDomExports, c9 as downloadFileById, bp as CircleHelp } from './index-B1P6hQRJ.js';
2
+ import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip-BdVDl0G5.js';
3
+ import { S as Stepper, a as Step, C as CloudUpload } from './Stepper-Dk4aQ3fN.js';
4
+ import { M as MessageSquare } from './message-square-BsPDBhiY.js';
5
+ import { I as Image } from './image-DBVGaooo.js';
6
6
 
7
7
  const ScrollStackItem = ({
8
8
  children,
@@ -1,9 +1,9 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DcqvKzeJ.js","assets/index-Bz5AaWL7.js","assets/index-DpMZw8aM.css"])))=>i.map(i=>d[i]);
2
- import { z as createLucideIcon, ca as useMotionValue, cb as useIsomorphicLayoutEffect, cc as cancelFrame_1, cd as frame_1, ce as collectMotionValues_1, cf as transform_1, cg as useConstant, r as reactExports, ch as MotionConfigContext, ci as attachFollow_1, cj as isMotionValue_1, ck as useInView, j as jsxRuntimeExports, b as cn, u as useI18n, bG as useCliStore, _ as __vitePreload, c5 as ChevronRight, g as RefreshCw, b2 as Plus, aZ as ScrollArea, c2 as ChevronLeft, cl as GlareHover, a3 as Button, c7 as Input, l as Search, k as FileText, cm as Folder, a7 as Terminal, D as Sparkles, b8 as Dialog, b9 as DialogContent, ba as DialogHeader, bb as DialogTitle, c6 as DialogDescription, bc as DialogFooter, cn as useTerminal, b3 as Select, b4 as SelectTrigger, b5 as SelectValue, b6 as SelectContent, b7 as SelectItem, co as uploadCliFile, bU as Textarea, cp as CircleCheck, I as create, c8 as persist, v as useToast, cq as unbindCliServer, G as ConnectionState, cr as updateCliSession, cs as SpotlightCard, bO as DropdownMenu, bP as DropdownMenuTrigger, bQ as DropdownMenuContent, bS as DropdownMenuItem, Z as Play, ct as DropdownMenuSeparator, X, cu as Pencil, H as EnhancedTerminal, cv as listCliSessions, cw as FadeContent, x as apiClient, cx as getMyToken, c as copyToClipboard, cy as Bell, cz as Trash2, d as Check, cA as getCliServerMetrics, cB as refreshCliServerStatus, cC as ResponsiveContainer, cD as LineChart, cE as XAxis, cF as YAxis, cG as Tooltip, cH as Line, cI as getCliHealth, cJ as Cpu, cK as listCliFiles, cL as readCliFile, cM as writeCliFile, cN as deleteCliFile, cO as axios, $ as Download, t as useTabsStore, cP as getPluginIdFromExtension, y as BUILTIN_PLUGINS, cQ as getPluginIdFromMimeType, cR as downloadCliFile, cS as buildCliFileId, cT as toCliResourcePath, cU as Upload, L as LoaderCircle, cV as listCliLogs, cW as getCliLogObject, cX as listCliTasks, T as TriangleAlert, cY as listCliFindings, cZ as listCliMethods, c_ as createCliMethod, bL as useMaxEntitlement, c$ as Noise } from './index-Bz5AaWL7.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-Ba3nJmH0.js';
4
- import { S as SquareCheckBig } from './index-DcqvKzeJ.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-N1hkTRrR.js';
6
- import { C as CloudUpload, S as Stepper, a as Step } from './Stepper-gYFK2Pgz.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BpjYH9Vg.js","assets/index-B1P6hQRJ.js","assets/index-Do9N28uB.css"])))=>i.map(i=>d[i]);
2
+ import { z as createLucideIcon, ca as useMotionValue, cb as useIsomorphicLayoutEffect, cc as cancelFrame_1, cd as frame_1, ce as collectMotionValues_1, cf as transform_1, cg as useConstant, r as reactExports, ch as MotionConfigContext, ci as attachFollow_1, cj as isMotionValue_1, ck as useInView, j as jsxRuntimeExports, b as cn, u as useI18n, bG as useCliStore, _ as __vitePreload, c5 as ChevronRight, g as RefreshCw, b2 as Plus, aZ as ScrollArea, c2 as ChevronLeft, cl as GlareHover, a3 as Button, c7 as Input, l as Search, k as FileText, cm as Folder, a7 as Terminal, D as Sparkles, b8 as Dialog, b9 as DialogContent, ba as DialogHeader, bb as DialogTitle, c6 as DialogDescription, bc as DialogFooter, cn as useTerminal, b3 as Select, b4 as SelectTrigger, b5 as SelectValue, b6 as SelectContent, b7 as SelectItem, co as uploadCliFile, bU as Textarea, cp as CircleCheck, I as create, c8 as persist, v as useToast, cq as unbindCliServer, G as ConnectionState, cr as updateCliSession, cs as SpotlightCard, bO as DropdownMenu, bP as DropdownMenuTrigger, bQ as DropdownMenuContent, bS as DropdownMenuItem, Z as Play, ct as DropdownMenuSeparator, X, cu as Pencil, H as EnhancedTerminal, cv as listCliSessions, cw as FadeContent, x as apiClient, cx as getMyToken, c as copyToClipboard, cy as Bell, cz as Trash2, d as Check, cA as getCliServerMetrics, cB as refreshCliServerStatus, cC as ResponsiveContainer, cD as LineChart, cE as XAxis, cF as YAxis, cG as Tooltip, cH as Line, cI as getCliHealth, cJ as Cpu, cK as listCliFiles, cL as readCliFile, cM as writeCliFile, cN as deleteCliFile, cO as axios, $ as Download, t as useTabsStore, cP as getPluginIdFromExtension, y as BUILTIN_PLUGINS, cQ as getPluginIdFromMimeType, cR as downloadCliFile, cS as buildCliFileId, cT as toCliResourcePath, cU as Upload, L as LoaderCircle, cV as listCliLogs, cW as getCliLogObject, cX as listCliTasks, T as TriangleAlert, cY as listCliFindings, cZ as listCliMethods, c_ as createCliMethod, bL as useMaxEntitlement, c$ as Noise } from './index-B1P6hQRJ.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-vYGtW2mI.js';
4
+ import { S as SquareCheckBig } from './index-BpjYH9Vg.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-BL932NwS.js';
6
+ import { C as CloudUpload, S as Stepper, a as Step } from './Stepper-Dk4aQ3fN.js';
7
7
 
8
8
  /**
9
9
  * @license lucide-react v0.511.0 - ISC
@@ -523,7 +523,7 @@ function ServerList({
523
523
  const container = listRef.current;
524
524
  const targets = container.querySelectorAll("[data-cli-server-card]");
525
525
  if (targets.length === 0) return;
526
- __vitePreload(async () => { const {default: anime} = await import('./index-DcqvKzeJ.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
526
+ __vitePreload(async () => { const {default: anime} = await import('./index-BpjYH9Vg.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
527
527
  if (cancelled) return;
528
528
  anime({
529
529
  targets,
@@ -4919,7 +4919,7 @@ function TasksPanel({ projectId, serverId }) {
4919
4919
  let cancelled = false;
4920
4920
  const targets = listRef.current.querySelectorAll("[data-cli-task-item]");
4921
4921
  if (targets.length === 0) return;
4922
- __vitePreload(async () => { const {default: anime} = await import('./index-DcqvKzeJ.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
4922
+ __vitePreload(async () => { const {default: anime} = await import('./index-BpjYH9Vg.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
4923
4923
  if (cancelled) return;
4924
4924
  anime({
4925
4925
  targets,
@@ -5046,7 +5046,7 @@ function FindingsPanel({ projectId, serverId }) {
5046
5046
  let cancelled = false;
5047
5047
  const targets = listRef.current.querySelectorAll("[data-cli-finding-item]");
5048
5048
  if (targets.length === 0) return;
5049
- __vitePreload(async () => { const {default: anime} = await import('./index-DcqvKzeJ.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
5049
+ __vitePreload(async () => { const {default: anime} = await import('./index-BpjYH9Vg.js').then(n => n.i);return { default: anime }},true?__vite__mapDeps([0,1,2]):void 0).then(({ default: anime }) => {
5050
5050
  if (cancelled) return;
5051
5051
  anime({
5052
5052
  targets,
@@ -1,12 +1,12 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-CXe0pAVe.js","assets/index-Bz5AaWL7.js","assets/index-DpMZw8aM.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-Bz5AaWL7.js';
3
- import { u as useFileContentStore, a as useFileContentLoading } from './file-content-DBT5OfTZ.js';
4
- import { a as acquireFileSocket } from './file-socket-wDlx6byM.js';
5
- import { c as configureMonacoLoader } from './monaco-CXe0pAVe.js';
6
- import { u as useFileDiffOverlay } from './useFileDiffOverlay-DPRPv6rv.js';
7
- import { F as FileDiffPanel } from './file-diff-panel-BWXYzqHk.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-BTkdPojV.js","assets/index-B1P6hQRJ.js","assets/index-Do9N28uB.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-B1P6hQRJ.js';
3
+ import { u as useFileContentStore, a as useFileContentLoading } from './file-content-C3N-432K.js';
4
+ import { a as acquireFileSocket } from './file-socket-CRH59PCO.js';
5
+ import { c as configureMonacoLoader } from './monaco-BTkdPojV.js';
6
+ import { u as useFileDiffOverlay } from './useFileDiffOverlay-B2WK7Tvq.js';
7
+ import { F as FileDiffPanel } from './file-diff-panel-CffQ4ZMg.js';
8
8
 
9
- const MonacoEditor = dynamic(() => __vitePreload(() => import('./monaco-CXe0pAVe.js').then(n => n.i),true?__vite__mapDeps([0,1,2]):void 0), { });
9
+ const MonacoEditor = dynamic(() => __vitePreload(() => import('./monaco-BTkdPojV.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-Bz5AaWL7.js","assets/index-DpMZw8aM.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-Bz5AaWL7.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-B1P6hQRJ.js","assets/index-Do9N28uB.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-B1P6hQRJ.js';
3
3
  import { c as consumeFileJumpEffects } from './file-jump-queue-r5XKgJEV.js';
4
- import { C as Code } from './code-BlG7g85c.js';
5
- import { H as Hash, W as WrapText } from './wrap-text-E5-UheyP.js';
4
+ import { C as Code } from './code-DuMINRsg.js';
5
+ import { H as Hash, W as WrapText } from './wrap-text-YC68g12z.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-Bz5AaWL7.js').then(n => n.ei);return { getFileContent }},true?__vite__mapDeps([0,1]):void 0);
419
+ const { getFileContent } = await __vitePreload(async () => { const { getFileContent } = await import('./index-B1P6hQRJ.js').then(n => n.ei);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-Bz5AaWL7.js","assets/index-DpMZw8aM.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, $ as Download, _ as __vitePreload, a4 as FileSpreadsheet, k as FileText } from './index-Bz5AaWL7.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-B1P6hQRJ.js","assets/index-Do9N28uB.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, $ as Download, _ as __vitePreload, a4 as FileSpreadsheet, k as FileText } from './index-B1P6hQRJ.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-Bz5AaWL7.js').then(n => n.ei);return { downloadFileById }},true?__vite__mapDeps([0,1]):void 0);
231
+ const { downloadFileById } = await __vitePreload(async () => { const { downloadFileById } = await import('./index-B1P6hQRJ.js').then(n => n.ei);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);
@@ -1,4 +1,4 @@
1
- import { z as createLucideIcon, r as reactExports, j as jsxRuntimeExports, b as cn, af as useQuery, a3 as Button, g as RefreshCw, ae as ExternalLink, ag as client } from './index-Bz5AaWL7.js';
1
+ import { z as createLucideIcon, r as reactExports, j as jsxRuntimeExports, b as cn, af as useQuery, a3 as Button, g as RefreshCw, ae as ExternalLink, ag as client } from './index-B1P6hQRJ.js';
2
2
 
3
3
  /**
4
4
  * @license lucide-react v0.511.0 - ISC
@@ -1,7 +1,7 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Bz5AaWL7.js","assets/index-DpMZw8aM.css"])))=>i.map(i=>d[i]);
2
- import { z as createLucideIcon, r as reactExports, j as jsxRuntimeExports, b as cn, ah as RotateCcw, ai as Info, $ as Download, L as LoaderCircle, _ as __vitePreload } from './index-Bz5AaWL7.js';
3
- import { I as Image } from './image-BwtCyguk.js';
4
- import { Z as ZoomOut, a as ZoomIn } from './zoom-out-D4TR-ZZ_.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-B1P6hQRJ.js","assets/index-Do9N28uB.css"])))=>i.map(i=>d[i]);
2
+ import { z as createLucideIcon, r as reactExports, j as jsxRuntimeExports, b as cn, ah as RotateCcw, ai as Info, $ as Download, L as LoaderCircle, _ as __vitePreload } from './index-B1P6hQRJ.js';
3
+ import { I as Image } from './image-DBVGaooo.js';
4
+ import { Z as ZoomOut, a as ZoomIn } from './zoom-out-C0RJvFiJ.js';
5
5
 
6
6
  /**
7
7
  * @license lucide-react v0.511.0 - ISC
@@ -280,7 +280,7 @@ function ImageViewerPlugin({
280
280
  }
281
281
  const loadImageUrl = async () => {
282
282
  try {
283
- const { createFileObjectUrl } = await __vitePreload(async () => { const { createFileObjectUrl } = await import('./index-Bz5AaWL7.js').then(n => n.ei);return { createFileObjectUrl }},true?__vite__mapDeps([0,1]):void 0);
283
+ const { createFileObjectUrl } = await __vitePreload(async () => { const { createFileObjectUrl } = await import('./index-B1P6hQRJ.js').then(n => n.ei);return { createFileObjectUrl }},true?__vite__mapDeps([0,1]):void 0);
284
284
  objectUrl = await createFileObjectUrl(context.resourceId);
285
285
  if (cancelled) {
286
286
  URL.revokeObjectURL(objectUrl);
@@ -1,15 +1,15 @@
1
- import { z as createLucideIcon, r as reactExports, aK as reactDomExports, aL as useReducedMotion, j as jsxRuntimeExports, aM as useQueryClient, v as useToast, u as useI18n, aA as useLabCopilotStore, aN as useLabGraphSelectionStore, aO as useChatSessionStore, aP as buildAvatarColorMap, aQ as isLabWorkingStatus, aR as getLabAgentDirectSession, aS as buildAgentDescriptor, aT as resolveAgentLogo, aF as resolveAgentDisplayName, aG as resolveAgentMentionLabel, aU as AnimatePresence, aV as motion, a3 as Button, aW as pickAvatarFrameColor, aH as resolveQuestLabel, d as Check, b as cn, p as useAuthStore, aX as useCopilotDockHeaderPortal, aY as assignLabAgent, aZ as ScrollArea, L as LoaderCircle, a_ as likeLabMoment, a$ as unlikeLabMoment, b0 as commentLabMoment, b1 as Ellipsis, b2 as Plus, l as Search, b3 as Select, b4 as SelectTrigger, b5 as SelectValue, b6 as SelectContent, b7 as SelectItem, b8 as Dialog, b9 as DialogContent, ba as DialogHeader, bb as DialogTitle, bc as DialogFooter, bd as getLabGroupSession, be as getLabFriendsSession } from './index-Bz5AaWL7.js';
2
- import { P as Popover, a as PopoverTrigger, b as PopoverContent } from './popover-BCHmVhHj.js';
3
- import { A as AiManusChatView, D as DEFAULT_AGENT_ID, C as ChatBox, a as applyChatEvent, u as useSSESession, b as ChatMessage, r as renderMarkdown } from './AiManusChatView-BGLArZRn.js';
4
- import './file-content-DBT5OfTZ.js';
5
- import './file-utils-Ba3nJmH0.js';
1
+ import { z as createLucideIcon, r as reactExports, aK as reactDomExports, aL as useReducedMotion, j as jsxRuntimeExports, aM as useQueryClient, v as useToast, u as useI18n, aA as useLabCopilotStore, aN as useLabGraphSelectionStore, aO as useChatSessionStore, aP as buildAvatarColorMap, aQ as isLabWorkingStatus, aR as getLabAgentDirectSession, aS as buildAgentDescriptor, aT as resolveAgentLogo, aF as resolveAgentDisplayName, aG as resolveAgentMentionLabel, aU as AnimatePresence, aV as motion, a3 as Button, aW as pickAvatarFrameColor, aH as resolveQuestLabel, d as Check, b as cn, p as useAuthStore, aX as useCopilotDockHeaderPortal, aY as assignLabAgent, aZ as ScrollArea, L as LoaderCircle, a_ as likeLabMoment, a$ as unlikeLabMoment, b0 as commentLabMoment, b1 as Ellipsis, b2 as Plus, l as Search, b3 as Select, b4 as SelectTrigger, b5 as SelectValue, b6 as SelectContent, b7 as SelectItem, b8 as Dialog, b9 as DialogContent, ba as DialogHeader, bb as DialogTitle, bc as DialogFooter, bd as getLabGroupSession, be as getLabFriendsSession } from './index-B1P6hQRJ.js';
2
+ import { P as Popover, a as PopoverTrigger, b as PopoverContent } from './popover-cWjCk-vc.js';
3
+ import { A as AiManusChatView, D as DEFAULT_AGENT_ID, C as ChatBox, a as applyChatEvent, u as useSSESession, b as ChatMessage, r as renderMarkdown } from './AiManusChatView-BS3V4ZOk.js';
4
+ import './file-content-C3N-432K.js';
5
+ import './file-utils-vYGtW2mI.js';
6
6
  import './file-jump-queue-r5XKgJEV.js';
7
7
  import './pdf-effect-queue-DSw_D3RV.js';
8
- import './file-diff-panel-BWXYzqHk.js';
9
- import './message-square-BnlyWVH0.js';
10
- import './NotebookEditor-q7TkhewC.js';
11
- import './tooltip-BMWd0dqX.js';
12
- import './trash-BIt_eWIS.js';
8
+ import './file-diff-panel-CffQ4ZMg.js';
9
+ import './message-square-BsPDBhiY.js';
10
+ import './NotebookEditor-BM7Bgwlv.js';
11
+ import './tooltip-BdVDl0G5.js';
12
+ import './trash-CB_GlQyC.js';
13
13
 
14
14
  /**
15
15
  * @license lucide-react v0.511.0 - ISC
@@ -1,4 +1,4 @@
1
- import { z as createLucideIcon, af as useQuery, r as reactExports, j as jsxRuntimeExports, bf as Skeleton, bg as Badge, ag as client, bh as ReactFlowProvider, u as useI18n, aF as resolveAgentDisplayName, aT as resolveAgentLogo, aW as pickAvatarFrameColor, aQ as isLabWorkingStatus, bi as normalizeLabStatus, bj as useNodesState, bk as useReactFlow, bl as index, bm as Background, b as cn, bn as Handle, bo as Position, bp as CircleHelp, bq as OrbitLogoStatus, br as Clock, bs as Moon, aI as formatRelativeTime, n as ChevronDown, aM as useQueryClient, aA as useLabCopilotStore, aN as useLabGraphSelectionStore, bt as resolveLabCanvasSelectionSemantic, a3 as Button, g as RefreshCw, bu as LabQuestGraphCanvas, bv as ArrowLeft, aZ as ScrollArea, D as Sparkles, bw as GitBranch, bx as Bot, by as LAB_CANVAS_SEMANTIC_TONE_META, bz as getLabQuest, bA as getLabQuestSummary, bB as getLabQuestEventPayload, bC as getLabQuestNodeTrace, bD as isQuestRuntimeSurface, bE as getApiBaseUrl, bF as redirectToLanding, bG as useCliStore, bH as useActiveTab, y as BUILTIN_PLUGINS, bI as listLabTemplates, aB as listLabAgents, aC as listLabQuests, bJ as getLabOverview, bK as getProject, bL as useMaxEntitlement } from './index-Bz5AaWL7.js';
1
+ import { z as createLucideIcon, af as useQuery, r as reactExports, j as jsxRuntimeExports, bf as Skeleton, bg as Badge, ag as client, bh as ReactFlowProvider, u as useI18n, aF as resolveAgentDisplayName, aT as resolveAgentLogo, aW as pickAvatarFrameColor, aQ as isLabWorkingStatus, bi as normalizeLabStatus, bj as useNodesState, bk as useReactFlow, bl as index, bm as Background, b as cn, bn as Handle, bo as Position, bp as CircleHelp, bq as OrbitLogoStatus, br as Clock, bs as Moon, aI as formatRelativeTime, n as ChevronDown, aM as useQueryClient, aA as useLabCopilotStore, aN as useLabGraphSelectionStore, bt as resolveLabCanvasSelectionSemantic, a3 as Button, g as RefreshCw, bu as LabQuestGraphCanvas, bv as ArrowLeft, aZ as ScrollArea, D as Sparkles, bw as GitBranch, bx as Bot, by as LAB_CANVAS_SEMANTIC_TONE_META, bz as getLabQuest, bA as getLabQuestSummary, bB as getLabQuestEventPayload, bC as getLabQuestNodeTrace, bD as isQuestRuntimeSurface, bE as getApiBaseUrl, bF as redirectToLanding, bG as useCliStore, bH as useActiveTab, y as BUILTIN_PLUGINS, bI as listLabTemplates, aB as listLabAgents, aC as listLabQuests, bJ as getLabOverview, bK as getProject, bL as useMaxEntitlement } from './index-B1P6hQRJ.js';
2
2
 
3
3
  /**
4
4
  * @license lucide-react v0.511.0 - ISC
@@ -1,9 +1,9 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-CXe0pAVe.js","assets/index-Bz5AaWL7.js","assets/index-DpMZw8aM.css","assets/yjs-DncrqiZ8.js","assets/function-B5QZkkHC.js","assets/awareness-C0NPR2Dj.js"])))=>i.map(i=>d[i]);
2
- import { z as createLucideIcon, p as useAuthStore, u as useI18n, a as useWorkspaceSurfaceStore, r as reactExports, f as useFileTreeStore, P as toFilesResourcePath, Q as checkProjectAccess, U as listFiles, K as getFileContent, _ as __vitePreload, J as updateFileContent, V as compileLatex, W as listLatexBuilds, j as jsxRuntimeExports, b as cn, k as FileText, Y as Link2, L as LoaderCircle, S as Save, Z as Play, T as TriangleAlert, $ as Download, a0 as getLatexBuild, a1 as getLatexBuildPdfBlob, a2 as getLatexBuildLogText, h as dynamic } from './index-Bz5AaWL7.js';
3
- import { P as ProjectSyncClient } from './project-sync-Brk6kaOD.js';
4
- import { c as configureMonacoLoader } from './monaco-CXe0pAVe.js';
5
- import { P as PAGE_DIMENSIONS, a as PdfLoader, b as PDF_CMAP_URL, c as PDF_WORKER_SRC, Z as ZOOM_LEVELS, d as PdfHighlighter } from './PdfLoader-B8ZOTKFc.js';
6
- import { Z as ZoomOut, a as ZoomIn } from './zoom-out-D4TR-ZZ_.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-BTkdPojV.js","assets/index-B1P6hQRJ.js","assets/index-Do9N28uB.css","assets/yjs-DncrqiZ8.js","assets/function-B5QZkkHC.js","assets/awareness-C0NPR2Dj.js"])))=>i.map(i=>d[i]);
2
+ import { z as createLucideIcon, p as useAuthStore, u as useI18n, a as useWorkspaceSurfaceStore, r as reactExports, f as useFileTreeStore, P as toFilesResourcePath, Q as checkProjectAccess, U as listFiles, K as getFileContent, _ as __vitePreload, J as updateFileContent, V as compileLatex, W as listLatexBuilds, j as jsxRuntimeExports, b as cn, k as FileText, Y as Link2, L as LoaderCircle, S as Save, Z as Play, T as TriangleAlert, $ as Download, a0 as getLatexBuild, a1 as getLatexBuildPdfBlob, a2 as getLatexBuildLogText, h as dynamic } from './index-B1P6hQRJ.js';
3
+ import { P as ProjectSyncClient } from './project-sync-CXn530xb.js';
4
+ import { c as configureMonacoLoader } from './monaco-BTkdPojV.js';
5
+ import { P as PAGE_DIMENSIONS, a as PdfLoader, b as PDF_CMAP_URL, c as PDF_WORKER_SRC, Z as ZOOM_LEVELS, d as PdfHighlighter } from './PdfLoader-Bc5qfD-Z.js';
6
+ import { Z as ZoomOut, a as ZoomIn } from './zoom-out-C0RJvFiJ.js';
7
7
 
8
8
  /**
9
9
  * @license lucide-react v0.511.0 - ISC
@@ -19,7 +19,7 @@ const __iconNode = [
19
19
  ];
20
20
  const AtSign = createLucideIcon("at-sign", __iconNode);
21
21
 
22
- const MonacoEditor = dynamic(() => __vitePreload(() => import('./monaco-CXe0pAVe.js').then(n => n.i),true?__vite__mapDeps([0,1,2]):void 0), { });
22
+ const MonacoEditor = dynamic(() => __vitePreload(() => import('./monaco-BTkdPojV.js').then(n => n.i),true?__vite__mapDeps([0,1,2]):void 0), { });
23
23
  configureMonacoLoader();
24
24
  function useIsDarkMode() {
25
25
  const [isDark, setIsDark] = reactExports.useState(() => {
@@ -1,6 +1,6 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Bz5AaWL7.js","assets/index-DpMZw8aM.css"])))=>i.map(i=>d[i]);
2
- import { u as useI18n, a as useWorkspaceSurfaceStore, r as reactExports, R as React, N as getQuestMarkdownContextFromFileId, c as copyToClipboard, j as jsxRuntimeExports, L as LoaderCircle, C as CircleAlert, O 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-Bz5AaWL7.js';
3
- import { C as Code } from './code-BlG7g85c.js';
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-B1P6hQRJ.js","assets/index-Do9N28uB.css"])))=>i.map(i=>d[i]);
2
+ import { u as useI18n, a as useWorkspaceSurfaceStore, r as reactExports, R as React, N as getQuestMarkdownContextFromFileId, c as copyToClipboard, j as jsxRuntimeExports, L as LoaderCircle, C as CircleAlert, O 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-B1P6hQRJ.js';
3
+ import { C as Code } from './code-DuMINRsg.js';
4
4
 
5
5
  function isMdxDocument(fileName) {
6
6
  if (!fileName) return false;
@@ -217,7 +217,7 @@ function MarkdownViewerPlugin({
217
217
  setLoading(false);
218
218
  return;
219
219
  }
220
- const { getFileContent } = await __vitePreload(async () => { const { getFileContent } = await import('./index-Bz5AaWL7.js').then(n => n.ei);return { getFileContent }},true?__vite__mapDeps([0,1]):void 0);
220
+ const { getFileContent } = await __vitePreload(async () => { const { getFileContent } = await import('./index-B1P6hQRJ.js').then(n => n.ei);return { getFileContent }},true?__vite__mapDeps([0,1]):void 0);
221
221
  const text = await getFileContent(context.resourceId);
222
222
  setContent(text);
223
223
  } catch (err) {
@@ -1,6 +1,6 @@
1
- import { z as createLucideIcon, r as reactExports, a5 as useNavigate, t as useTabsStore, a6 as useOpenFile, f as useFileTreeStore, y as BUILTIN_PLUGINS, j as jsxRuntimeExports, l as Search, D as Sparkles, a7 as Terminal, a8 as Settings, a9 as Puzzle, aa as BookOpen, k as FileText, ab as FileCode2, b as cn } from './index-Bz5AaWL7.js';
2
- import { S as Sigma } from './sigma-D72eSUep.js';
3
- import { I as Image } from './image-BwtCyguk.js';
1
+ import { z as createLucideIcon, r as reactExports, a5 as useNavigate, t as useTabsStore, a6 as useOpenFile, f as useFileTreeStore, y as BUILTIN_PLUGINS, j as jsxRuntimeExports, l as Search, D as Sparkles, a7 as Terminal, a8 as Settings, a9 as Puzzle, aa as BookOpen, k as FileText, ab as FileCode2, b as cn } from './index-B1P6hQRJ.js';
2
+ import { S as Sigma } from './sigma-04Jr12jg.js';
3
+ import { I as Image } from './image-DBVGaooo.js';
4
4
 
5
5
  /**
6
6
  * @license lucide-react v0.511.0 - ISC
@@ -1,4 +1,4 @@
1
- import { R as React, r as reactExports, aK as reactDomExports, e6 as ReactDOM, I as create, j as jsxRuntimeExports, e7 as createSlot, am as useId, e8 as Root, e9 as Portal, ea as Overlay, eb as Content, aj as composeRefs, d7 as getDefaultExportFromCjs$2, ec as clsx, ed as shimExports$1, ee as katex, ef as Slot, q as resolveApiBaseUrl, b_ as uploadFileAuto, eg as nanoid, eh as cx } from './index-Bz5AaWL7.js';
1
+ import { R as React, r as reactExports, aK as reactDomExports, e6 as ReactDOM, I as create, j as jsxRuntimeExports, e7 as createSlot, am as useId, e8 as Root, e9 as Portal, ea as Overlay, eb as Content, aj as composeRefs, d7 as getDefaultExportFromCjs$2, ec as clsx, ed as shimExports$1, ee as katex, ef as Slot, q as resolveApiBaseUrl, b_ as uploadFileAuto, eg as nanoid, eh as cx } from './index-B1P6hQRJ.js';
2
2
 
3
3
  // ::- Persistent data structure representing an ordered mapping from
4
4
  // strings to values, with some convenient update methods.
@@ -1,4 +1,4 @@
1
- import { j as jsxRuntimeExports, r as reactExports, R as React$1, _ as __vitePreload, d5 as createRoot, d6 as getAugmentedNamespace, aK as reactDomExports, d7 as getDefaultExportFromCjs } from './index-Bz5AaWL7.js';
1
+ import { j as jsxRuntimeExports, r as reactExports, R as React$1, _ as __vitePreload, d5 as createRoot, d6 as getAugmentedNamespace, aK as reactDomExports, d7 as getDefaultExportFromCjs } from './index-B1P6hQRJ.js';
2
2
 
3
3
  const PAGE_DIMENSIONS = {
4
4
  /** A4 width in points */
@@ -1,6 +1,6 @@
1
- import { t as useTabsStore, a as useWorkspaceSurfaceStore, v as useToast, w as useArxivStore, r as reactExports, c as copyToClipboard, x as apiClient, y as BUILTIN_PLUGINS, j as jsxRuntimeExports, k as FileText, b as cn, g as RefreshCw, M as MarkdownRenderer } from './index-Bz5AaWL7.js';
2
- import { d as defaultExtensions, s as setEditorMarkdown, U, I, r as resolveNotebookAssetUrl } from './NotebookEditor-q7TkhewC.js';
3
- import { g as generateBibTeX, I as InfoTriangleIcon, A as ArxivInfoModal } from './bibtex-Btv6Wi7f.js';
1
+ import { t as useTabsStore, a as useWorkspaceSurfaceStore, v as useToast, w as useArxivStore, r as reactExports, c as copyToClipboard, x as apiClient, y as BUILTIN_PLUGINS, j as jsxRuntimeExports, k as FileText, b as cn, g as RefreshCw, M as MarkdownRenderer } from './index-B1P6hQRJ.js';
2
+ import { d as defaultExtensions, s as setEditorMarkdown, U, I, r as resolveNotebookAssetUrl } from './NotebookEditor-BM7Bgwlv.js';
3
+ import { g as generateBibTeX, I as InfoTriangleIcon, A as ArxivInfoModal } from './bibtex-C4QI-bbj.js';
4
4
 
5
5
  function rewriteMarkdownImages(markdown, fileId) {
6
6
  if (!markdown) return markdown;