@researai/deepscientist 1.5.13 → 1.5.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/assets/branding/logo-raster.png +0 -0
- package/bin/ds.js +134 -49
- package/docs/en/00_QUICK_START.md +2 -2
- package/docs/en/01_SETTINGS_REFERENCE.md +20 -4
- package/docs/en/03_QQ_CONNECTOR_GUIDE.md +19 -0
- package/docs/en/05_TUI_GUIDE.md +466 -96
- package/docs/en/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
- package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +2 -0
- package/docs/en/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
- package/docs/en/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
- package/docs/en/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
- package/docs/en/README.md +8 -0
- package/docs/zh/00_QUICK_START.md +2 -2
- package/docs/zh/01_SETTINGS_REFERENCE.md +20 -4
- package/docs/zh/03_QQ_CONNECTOR_GUIDE.md +19 -0
- package/docs/zh/05_TUI_GUIDE.md +465 -82
- package/docs/zh/10_WEIXIN_CONNECTOR_GUIDE.md +20 -0
- package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +2 -0
- package/docs/zh/16_TELEGRAM_CONNECTOR_GUIDE.md +134 -0
- package/docs/zh/17_WHATSAPP_CONNECTOR_GUIDE.md +126 -0
- package/docs/zh/18_FEISHU_CONNECTOR_GUIDE.md +136 -0
- package/docs/zh/README.md +8 -0
- package/install.sh +2 -0
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/src/deepscientist/__init__.py +1 -1
- package/src/deepscientist/artifact/charts.py +567 -0
- package/src/deepscientist/artifact/guidance.py +50 -10
- package/src/deepscientist/artifact/metrics.py +228 -5
- package/src/deepscientist/artifact/schemas.py +3 -0
- package/src/deepscientist/artifact/service.py +4004 -538
- package/src/deepscientist/bash_exec/models.py +23 -0
- package/src/deepscientist/bash_exec/monitor.py +147 -67
- package/src/deepscientist/bash_exec/runtime.py +218 -156
- package/src/deepscientist/bash_exec/service.py +79 -64
- package/src/deepscientist/bash_exec/shells.py +87 -0
- package/src/deepscientist/bridges/connectors.py +51 -2
- package/src/deepscientist/config/models.py +6 -3
- package/src/deepscientist/config/service.py +7 -2
- package/src/deepscientist/connector/lingzhu_support.py +23 -4
- package/src/deepscientist/connector/weixin_support.py +122 -1
- package/src/deepscientist/daemon/api/handlers.py +75 -4
- package/src/deepscientist/daemon/api/router.py +1 -0
- package/src/deepscientist/daemon/app.py +869 -236
- package/src/deepscientist/doctor.py +51 -0
- package/src/deepscientist/file_lock.py +48 -0
- package/src/deepscientist/gitops/diff.py +167 -1
- package/src/deepscientist/mcp/server.py +331 -21
- package/src/deepscientist/process_control.py +161 -0
- package/src/deepscientist/prompts/builder.py +275 -491
- package/src/deepscientist/quest/service.py +2336 -145
- package/src/deepscientist/quest/stage_views.py +305 -29
- package/src/deepscientist/runners/base.py +2 -0
- package/src/deepscientist/runners/codex.py +88 -5
- package/src/deepscientist/runners/runtime_overrides.py +17 -1
- package/src/deepscientist/shared.py +6 -1
- package/src/prompts/contracts/shared_interaction.md +13 -4
- package/src/prompts/system.md +984 -1985
- package/src/skills/analysis-campaign/SKILL.md +31 -2
- package/src/skills/analysis-campaign/references/artifact-orchestration.md +1 -1
- package/src/skills/analysis-campaign/references/writing-facing-slice-examples.md +65 -0
- package/src/skills/baseline/SKILL.md +267 -994
- package/src/skills/baseline/references/baseline-checklist-template.md +21 -32
- package/src/skills/baseline/references/baseline-plan-template.md +41 -57
- package/src/skills/decision/SKILL.md +19 -2
- package/src/skills/experiment/SKILL.md +8 -2
- package/src/skills/finalize/SKILL.md +18 -0
- package/src/skills/idea/SKILL.md +78 -0
- package/src/skills/idea/references/idea-generation-playbook.md +100 -0
- package/src/skills/idea/references/outline-seeding-example.md +60 -0
- package/src/skills/intake-audit/SKILL.md +1 -1
- package/src/skills/optimize/SKILL.md +1644 -0
- package/src/skills/rebuttal/SKILL.md +2 -1
- package/src/skills/review/SKILL.md +2 -1
- package/src/skills/write/SKILL.md +80 -12
- package/src/skills/write/references/outline-evidence-contract-example.md +107 -0
- package/src/tui/dist/app/AppContainer.js +1445 -52
- package/src/tui/dist/components/Composer.js +1 -1
- package/src/tui/dist/components/ConfigScreen.js +190 -36
- package/src/tui/dist/components/GradientStatusText.js +1 -20
- package/src/tui/dist/components/InputPrompt.js +41 -32
- package/src/tui/dist/components/LoadingIndicator.js +1 -1
- package/src/tui/dist/components/Logo.js +61 -38
- package/src/tui/dist/components/MainContent.js +10 -3
- package/src/tui/dist/components/WelcomePanel.js +4 -12
- package/src/tui/dist/components/messages/AssistantMessage.js +1 -1
- package/src/tui/dist/components/messages/BashExecOperationMessage.js +3 -3
- package/src/tui/dist/components/messages/OperationMessage.js +1 -1
- package/src/tui/dist/index.js +28 -1
- package/src/tui/dist/layouts/DefaultAppLayout.js +3 -3
- package/src/tui/dist/lib/api.js +17 -0
- package/src/tui/dist/lib/connectors.js +261 -0
- package/src/tui/dist/semantic-colors.js +29 -19
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/{AiManusChatView-CnJcXynW.js → AiManusChatView-DDjbFnbt.js} +12 -12
- package/src/ui/dist/assets/{AnalysisPlugin-DeyzPEhV.js → AnalysisPlugin-Yb5IdmaU.js} +1 -1
- package/src/ui/dist/assets/CliPlugin-e64sreyu.js +31037 -0
- package/src/ui/dist/assets/{CodeEditorPlugin-B-xicq1e.js → CodeEditorPlugin-C4D2TIkU.js} +8 -8
- package/src/ui/dist/assets/{CodeViewerPlugin-DT54ysXa.js → CodeViewerPlugin-BVoNZIvC.js} +5 -5
- package/src/ui/dist/assets/{DocViewerPlugin-DQtKT-VD.js → DocViewerPlugin-CLChbllo.js} +3 -3
- package/src/ui/dist/assets/{GitDiffViewerPlugin-hqHbCfnv.js → GitDiffViewerPlugin-C4xeFyFQ.js} +20 -20
- package/src/ui/dist/assets/{ImageViewerPlugin-OcVo33jV.js → ImageViewerPlugin-OiMUAcLi.js} +5 -5
- package/src/ui/dist/assets/{LabCopilotPanel-DdGwhEUV.js → LabCopilotPanel-BjD2ThQF.js} +11 -11
- package/src/ui/dist/assets/{LabPlugin-Ciz1gDaX.js → LabPlugin-DQPg-NrB.js} +2 -2
- package/src/ui/dist/assets/{LatexPlugin-BhmjNQRC.js → LatexPlugin-CI05XAV9.js} +7 -7
- package/src/ui/dist/assets/{MarkdownViewerPlugin-BzdVH9Bx.js → MarkdownViewerPlugin-DpeBLYZf.js} +4 -4
- package/src/ui/dist/assets/{MarketplacePlugin-DmyHspXt.js → MarketplacePlugin-DolE58Q2.js} +3 -3
- package/src/ui/dist/assets/{NotebookEditor-BTVYRGkm.js → NotebookEditor-7Qm2rSWD.js} +11 -11
- package/src/ui/dist/assets/{NotebookEditor-BMXKrDRk.js → NotebookEditor-C1kWaxKi.js} +1 -1
- package/src/ui/dist/assets/{PdfLoader-CvcjJHXv.js → PdfLoader-BfOHw8Zw.js} +1 -1
- package/src/ui/dist/assets/{PdfMarkdownPlugin-DW2ej8Vk.js → PdfMarkdownPlugin-BulDREv1.js} +2 -2
- package/src/ui/dist/assets/{PdfViewerPlugin-CmlDxbhU.js → PdfViewerPlugin-C-daaOaL.js} +10 -10
- package/src/ui/dist/assets/{SearchPlugin-DAjQZPSv.js → SearchPlugin-CjpaiJ3A.js} +1 -1
- package/src/ui/dist/assets/{TextViewerPlugin-C-nVAZb_.js → TextViewerPlugin-BxIyqPQC.js} +5 -5
- package/src/ui/dist/assets/{VNCViewer-D7-dIYon.js → VNCViewer-HAg9mF7M.js} +10 -10
- package/src/ui/dist/assets/{bot-C_G4WtNI.js → bot-0DYntytV.js} +1 -1
- package/src/ui/dist/assets/{code-Cd7WfiWq.js → code-B20Slj_w.js} +1 -1
- package/src/ui/dist/assets/{file-content-B57zsL9y.js → file-content-DT24KFma.js} +1 -1
- package/src/ui/dist/assets/{file-diff-panel-DVoheLFq.js → file-diff-panel-DK13YPql.js} +1 -1
- package/src/ui/dist/assets/{file-socket-B5kXFxZP.js → file-socket-B4T2o4nR.js} +1 -1
- package/src/ui/dist/assets/{image-LLOjkMHF.js → image-DSeR_sDS.js} +1 -1
- package/src/ui/dist/assets/{index-hOUOWbW2.js → index-BrFje2Uk.js} +2 -2
- package/src/ui/dist/assets/{index-Dxa2eYMY.js → index-BwRJaoTl.js} +1 -1
- package/src/ui/dist/assets/{index-CLQauncb.js → index-D_E4281X.js} +5418 -28620
- package/src/ui/dist/assets/{index-C3r2iGrp.js → index-DnYB3xb1.js} +12 -12
- package/src/ui/dist/assets/{index-BQG-1s2o.css → index-G7AcWcMu.css} +43 -2
- package/src/ui/dist/assets/{monaco-BGGAEii3.js → monaco-LExaAN3Y.js} +1 -1
- package/src/ui/dist/assets/{pdf-effect-queue-DlEr1_y5.js → pdf-effect-queue-BJk5okWJ.js} +1 -1
- package/src/ui/dist/assets/{popover-CWJbJuYY.js → popover-D3Gg_FoV.js} +1 -1
- package/src/ui/dist/assets/{project-sync-CRJiucYO.js → project-sync-C_ygLlVU.js} +1 -1
- package/src/ui/dist/assets/{select-CoHB7pvH.js → select-CpAK6uWm.js} +2 -2
- package/src/ui/dist/assets/{sigma-D5aJWR8J.js → sigma-DEccaSgk.js} +1 -1
- package/src/ui/dist/assets/{square-check-big-DUK_mnkS.js → square-check-big-uUfyVsbD.js} +1 -1
- package/src/ui/dist/assets/{trash-ChU3SEE3.js → trash-CXvwwSe8.js} +1 -1
- package/src/ui/dist/assets/{useCliAccess-BrJBV3tY.js → useCliAccess-Bnop4mgR.js} +1 -1
- package/src/ui/dist/assets/{useFileDiffOverlay-C2OQaVWc.js → useFileDiffOverlay-B8eUAX0I.js} +1 -1
- package/src/ui/dist/assets/{wrap-text-C7Qqh-om.js → wrap-text-9vbOBpkW.js} +1 -1
- package/src/ui/dist/assets/{zoom-out-rtX0FKya.js → zoom-out-BgVMmOW4.js} +1 -1
- package/src/ui/dist/index.html +2 -2
- package/uv.lock +1 -1
- package/src/ui/dist/assets/CliPlugin-CB1YODQn.js +0 -5905
|
@@ -403,11 +403,11 @@ export const BashExecOperationMessage = ({ label, content, toolName, toolCallId,
|
|
|
403
403
|
: [];
|
|
404
404
|
return (React.createElement(Box, { flexDirection: "row", width: width },
|
|
405
405
|
React.createElement(Box, { width: prefixWidth },
|
|
406
|
-
React.createElement(Text, { color:
|
|
406
|
+
React.createElement(Text, { color: theme.text.response }, BULLET_PREFIX)),
|
|
407
407
|
React.createElement(Box, { flexGrow: 1, flexDirection: "column", width: contentWidth },
|
|
408
408
|
React.createElement(Text, { color: theme.text.link, bold: true }, header),
|
|
409
|
-
React.createElement(Text, { color:
|
|
409
|
+
React.createElement(Text, { color: theme.text.response }, visibleCommand),
|
|
410
410
|
metaParts.length > 0 ? (React.createElement(Box, { marginTop: 1 },
|
|
411
411
|
React.createElement(Text, { color: theme.text.secondary }, metaParts.join(' · ')))) : null,
|
|
412
|
-
renderedLogLines.length > 0 ? (React.createElement(Box, { marginTop: 1, flexDirection: "column" }, renderedLogLines.map((line, index) => (React.createElement(Text, { key: `${toolCallId || bashId || 'bash'}:${index}`, color:
|
|
412
|
+
renderedLogLines.length > 0 ? (React.createElement(Box, { marginTop: 1, flexDirection: "column" }, renderedLogLines.map((line, index) => (React.createElement(Text, { key: `${toolCallId || bashId || 'bash'}:${index}`, color: theme.text.response }, line))))) : null)));
|
|
413
413
|
};
|
|
@@ -19,7 +19,7 @@ const buildHeading = (content) => {
|
|
|
19
19
|
export const OperationMessage = ({ label, content, toolName, toolCallId, status, subject, args, output, width = 80, }) => {
|
|
20
20
|
const prefix = '• ';
|
|
21
21
|
const prefixWidth = prefix.length;
|
|
22
|
-
const contentColor =
|
|
22
|
+
const contentColor = theme.text.response;
|
|
23
23
|
const keywordColor = theme.text.link;
|
|
24
24
|
const contentWidth = Math.max(1, width - prefixWidth);
|
|
25
25
|
const heading = buildHeading(content);
|
package/src/tui/dist/index.js
CHANGED
|
@@ -3,6 +3,8 @@ import { render } from 'ink';
|
|
|
3
3
|
import { AppContainer } from './app/AppContainer.js';
|
|
4
4
|
import { isAlternateBufferEnabled, isIncrementalRenderingEnabled } from './utils/terminal.js';
|
|
5
5
|
const CLEAR_TO_END = '\x1b[0K';
|
|
6
|
+
const BRACKETED_PASTE_ENABLE = '\x1b[?2004h';
|
|
7
|
+
const BRACKETED_PASTE_DISABLE = '\x1b[?2004l';
|
|
6
8
|
const withLineClearing = (stdout) => {
|
|
7
9
|
const transform = (chunk) => {
|
|
8
10
|
const text = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
|
|
@@ -31,7 +33,28 @@ const baseUrl = parseArg('--base-url') ?? 'http://0.0.0.0:20999';
|
|
|
31
33
|
const questId = parseArg('--quest-id');
|
|
32
34
|
const useAlternateBuffer = isAlternateBufferEnabled();
|
|
33
35
|
const useIncrementalRendering = isIncrementalRenderingEnabled();
|
|
34
|
-
|
|
36
|
+
const setBracketedPasteMode = (enabled) => {
|
|
37
|
+
if (!process.stdout.isTTY) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
process.stdout.write(enabled ? BRACKETED_PASTE_ENABLE : BRACKETED_PASTE_DISABLE);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Ignore terminal write failures during startup or shutdown.
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
let bracketedPasteClosed = false;
|
|
48
|
+
const closeBracketedPasteMode = () => {
|
|
49
|
+
if (bracketedPasteClosed) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
bracketedPasteClosed = true;
|
|
53
|
+
setBracketedPasteMode(false);
|
|
54
|
+
};
|
|
55
|
+
setBracketedPasteMode(true);
|
|
56
|
+
process.once('exit', closeBracketedPasteMode);
|
|
57
|
+
const instance = render(React.createElement(AppContainer, { baseUrl: baseUrl, initialQuestId: questId }), {
|
|
35
58
|
stdout: withLineClearing(process.stdout),
|
|
36
59
|
stderr: process.stderr,
|
|
37
60
|
stdin: process.stdin,
|
|
@@ -40,3 +63,7 @@ render(React.createElement(AppContainer, { baseUrl: baseUrl, initialQuestId: que
|
|
|
40
63
|
alternateBuffer: useAlternateBuffer,
|
|
41
64
|
incrementalRendering: useIncrementalRendering,
|
|
42
65
|
});
|
|
66
|
+
void instance.waitUntilExit().finally(() => {
|
|
67
|
+
closeBracketedPasteMode();
|
|
68
|
+
process.off('exit', closeBracketedPasteMode);
|
|
69
|
+
});
|
|
@@ -13,7 +13,7 @@ const estimateWrappedRows = (value, width) => {
|
|
|
13
13
|
return count + Math.max(1, Math.ceil(measured / safeWidth));
|
|
14
14
|
}, 0);
|
|
15
15
|
};
|
|
16
|
-
export const DefaultAppLayout = ({ baseUrl, quests, activeQuestId, browseQuestId, configMode,
|
|
16
|
+
export const DefaultAppLayout = ({ baseUrl, quests, activeQuestId, browseQuestId, configMode, configPanel, questPanelMode, questPanelQuests, questPanelIndex, snapshot, session, connectors, history, pendingHistoryItems, input, connectionState, statusLine, suggestions = [], onChange, onSubmit, onCancel, onQuestPanelMove, onQuestPanelConfirm, onQuestPanelCancel, }) => {
|
|
17
17
|
const { columns, rows } = useTerminalSize();
|
|
18
18
|
const composerRef = useRef(null);
|
|
19
19
|
const [composerHeight, setComposerHeight] = useState(0);
|
|
@@ -49,7 +49,7 @@ export const DefaultAppLayout = ({ baseUrl, quests, activeQuestId, browseQuestId
|
|
|
49
49
|
: undefined;
|
|
50
50
|
return (React.createElement(Box, { flexDirection: "column", width: columns, height: useAlternateBuffer ? safeRows : undefined },
|
|
51
51
|
React.createElement(Box, { flexGrow: useAlternateBuffer ? 1 : 0, height: mainHeight, overflow: useAlternateBuffer ? 'hidden' : undefined },
|
|
52
|
-
React.createElement(MainContent, { quests: quests, browseQuestId: browseQuestId, configMode: configMode,
|
|
52
|
+
React.createElement(MainContent, { quests: quests, browseQuestId: browseQuestId, configMode: configMode, configPanel: configPanel, questPanelMode: questPanelMode, questPanelQuests: questPanelQuests, questPanelIndex: questPanelIndex, snapshot: snapshot, connectors: connectors, session: session, history: history, pendingHistoryItems: pendingHistoryItems, baseUrl: baseUrl, connectionState: connectionState, availableHeight: mainHeight, onQuestPanelMove: onQuestPanelMove, onQuestPanelConfirm: onQuestPanelConfirm, onQuestPanelCancel: onQuestPanelCancel })),
|
|
53
53
|
gap > 0 ? React.createElement(Box, { height: gap, flexShrink: 0 }) : null,
|
|
54
54
|
React.createElement(Box, { ref: composerRef, flexShrink: 0 },
|
|
55
55
|
React.createElement(Composer, { input: input, statusLine: statusLine, suggestions: suggestions, configMode: configMode, selectionMode: questPanelMode, mode: activeQuestId ? 'quest' : 'home', activeQuestId: activeQuestId, connectionState: connectionState, isRunning: String(snapshot?.status || '') === 'running', questRoot: session?.snapshot?.quest_root || snapshot?.quest_root, modelLabel: typeof session?.snapshot?.runner === 'string'
|
|
@@ -57,7 +57,7 @@ export const DefaultAppLayout = ({ baseUrl, quests, activeQuestId, browseQuestId
|
|
|
57
57
|
: undefined, sessionId: session?.acp_session?.session_id, onChange: onChange, onSubmit: onSubmit, onCancel: onCancel, placeholder: configMode === 'edit'
|
|
58
58
|
? 'Edit the config content, then press Enter to save'
|
|
59
59
|
: configMode === 'browse'
|
|
60
|
-
? 'Use arrows to choose a config
|
|
60
|
+
? 'Use arrows to choose a config item, then press Enter'
|
|
61
61
|
: questPanelMode
|
|
62
62
|
? 'Use arrows to choose a quest, then press Enter'
|
|
63
63
|
: activeQuestId
|
package/src/tui/dist/lib/api.js
CHANGED
|
@@ -44,6 +44,15 @@ export const client = {
|
|
|
44
44
|
body: JSON.stringify({ source: 'tui-ink' }),
|
|
45
45
|
}),
|
|
46
46
|
connectors: (baseUrl) => api(baseUrl, '/api/connectors'),
|
|
47
|
+
connectorsAvailability: (baseUrl) => api(baseUrl, '/api/connectors/availability'),
|
|
48
|
+
startWeixinQrLogin: (baseUrl, force = false) => api(baseUrl, '/api/connectors/weixin/login/qr/start', {
|
|
49
|
+
method: 'POST',
|
|
50
|
+
body: JSON.stringify({ force }),
|
|
51
|
+
}),
|
|
52
|
+
waitWeixinQrLogin: (baseUrl, sessionKey, timeoutMs = 1500) => api(baseUrl, '/api/connectors/weixin/login/qr/wait', {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
body: JSON.stringify({ session_key: sessionKey, timeout_ms: timeoutMs }),
|
|
55
|
+
}),
|
|
47
56
|
session: (baseUrl, questId) => api(baseUrl, `/api/quests/${questId}/session`),
|
|
48
57
|
openDocument: (baseUrl, questId, documentId) => api(baseUrl, `/api/quests/${questId}/documents/open`, {
|
|
49
58
|
method: 'POST',
|
|
@@ -188,4 +197,12 @@ export const client = {
|
|
|
188
197
|
method: 'PUT',
|
|
189
198
|
body: JSON.stringify({ content, revision }),
|
|
190
199
|
}),
|
|
200
|
+
saveStructuredConfig: (baseUrl, name, structured, revision) => api(baseUrl, `/api/config/${name}`, {
|
|
201
|
+
method: 'PUT',
|
|
202
|
+
body: JSON.stringify({ structured, revision }),
|
|
203
|
+
}),
|
|
204
|
+
updateQuestBindings: (baseUrl, questId, payload) => api(baseUrl, `/api/quests/${questId}/bindings`, {
|
|
205
|
+
method: Array.isArray(payload.bindings) ? 'PUT' : 'POST',
|
|
206
|
+
body: JSON.stringify(payload),
|
|
207
|
+
}),
|
|
191
208
|
};
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
const CONNECTOR_PROFILE_CHAT_ID_SEPARATOR = '::';
|
|
2
|
+
function defaultConversationLabel(chatType, chatId) {
|
|
3
|
+
return `${String(chatType || '').trim()} · ${String(chatId || '').trim()}`.trim();
|
|
4
|
+
}
|
|
5
|
+
function stripRepeatedProfilePrefix(profileLabel, label) {
|
|
6
|
+
const normalizedProfileLabel = String(profileLabel || '').trim();
|
|
7
|
+
let normalizedLabel = String(label || '').trim();
|
|
8
|
+
if (!normalizedProfileLabel || !normalizedLabel) {
|
|
9
|
+
return normalizedLabel;
|
|
10
|
+
}
|
|
11
|
+
const prefixed = `${normalizedProfileLabel} · `;
|
|
12
|
+
while (normalizedLabel === normalizedProfileLabel || normalizedLabel.startsWith(prefixed)) {
|
|
13
|
+
if (normalizedLabel === normalizedProfileLabel) {
|
|
14
|
+
return normalizedProfileLabel;
|
|
15
|
+
}
|
|
16
|
+
normalizedLabel = normalizedLabel.slice(prefixed.length).trim();
|
|
17
|
+
}
|
|
18
|
+
return normalizedLabel;
|
|
19
|
+
}
|
|
20
|
+
function baseTargetLabel(target) {
|
|
21
|
+
if (!target)
|
|
22
|
+
return '';
|
|
23
|
+
const fallback = defaultConversationLabel(target.chat_type, target.chat_id) || String(target.conversation_id || '').trim();
|
|
24
|
+
return stripRepeatedProfilePrefix(target.profile_label, target.label) || fallback;
|
|
25
|
+
}
|
|
26
|
+
function baseRecentConversationLabel(item) {
|
|
27
|
+
if (!item)
|
|
28
|
+
return '';
|
|
29
|
+
return stripRepeatedProfilePrefix(item.profile_label, item.label) || defaultConversationLabel(item.chat_type, item.chat_id);
|
|
30
|
+
}
|
|
31
|
+
function withProfileLabel(profileLabel, label) {
|
|
32
|
+
const normalizedProfileLabel = String(profileLabel || '').trim();
|
|
33
|
+
const normalizedLabel = stripRepeatedProfilePrefix(profileLabel, label);
|
|
34
|
+
if (!normalizedProfileLabel)
|
|
35
|
+
return normalizedLabel;
|
|
36
|
+
if (!normalizedLabel)
|
|
37
|
+
return normalizedProfileLabel;
|
|
38
|
+
if (normalizedLabel === normalizedProfileLabel)
|
|
39
|
+
return normalizedProfileLabel;
|
|
40
|
+
return `${normalizedProfileLabel} · ${normalizedLabel}`;
|
|
41
|
+
}
|
|
42
|
+
export function parseConversationId(value) {
|
|
43
|
+
const raw = String(value || '').trim();
|
|
44
|
+
const firstSeparator = raw.indexOf(':');
|
|
45
|
+
if (firstSeparator < 0)
|
|
46
|
+
return null;
|
|
47
|
+
const secondSeparator = raw.indexOf(':', firstSeparator + 1);
|
|
48
|
+
if (secondSeparator < 0)
|
|
49
|
+
return null;
|
|
50
|
+
const connector = raw.slice(0, firstSeparator);
|
|
51
|
+
const chatType = raw.slice(firstSeparator + 1, secondSeparator);
|
|
52
|
+
const chatId = raw.slice(secondSeparator + 1);
|
|
53
|
+
if (!connector || !chatType || !chatId)
|
|
54
|
+
return null;
|
|
55
|
+
const separatorIndex = chatId.indexOf(CONNECTOR_PROFILE_CHAT_ID_SEPARATOR);
|
|
56
|
+
const profileId = separatorIndex >= 0 ? chatId.slice(0, separatorIndex).trim() : '';
|
|
57
|
+
const resolvedChatId = separatorIndex >= 0 ? chatId.slice(separatorIndex + CONNECTOR_PROFILE_CHAT_ID_SEPARATOR.length).trim() : chatId;
|
|
58
|
+
return {
|
|
59
|
+
conversation_id: raw,
|
|
60
|
+
connector: connector.toLowerCase(),
|
|
61
|
+
chat_type: chatType.toLowerCase(),
|
|
62
|
+
chat_id: resolvedChatId,
|
|
63
|
+
chat_id_raw: chatId,
|
|
64
|
+
profile_id: profileId,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function conversationIdentityKey(value) {
|
|
68
|
+
const parsed = parseConversationId(value);
|
|
69
|
+
if (!parsed)
|
|
70
|
+
return String(value || '').trim().toLowerCase();
|
|
71
|
+
return [parsed.connector, parsed.profile_id || '', parsed.chat_type, parsed.chat_id.toLowerCase()].filter(Boolean).join(':');
|
|
72
|
+
}
|
|
73
|
+
export function connectorTargetLabel(target) {
|
|
74
|
+
if (!target)
|
|
75
|
+
return '';
|
|
76
|
+
return withProfileLabel(target.profile_label, baseTargetLabel(target));
|
|
77
|
+
}
|
|
78
|
+
function sortTargets(left, right) {
|
|
79
|
+
const leftDefault = left.is_default ? 0 : 1;
|
|
80
|
+
const rightDefault = right.is_default ? 0 : 1;
|
|
81
|
+
if (leftDefault !== rightDefault)
|
|
82
|
+
return leftDefault - rightDefault;
|
|
83
|
+
const leftDirect = String(left.chat_type || '') === 'direct' ? 0 : 1;
|
|
84
|
+
const rightDirect = String(right.chat_type || '') === 'direct' ? 0 : 1;
|
|
85
|
+
if (leftDirect !== rightDirect)
|
|
86
|
+
return leftDirect - rightDirect;
|
|
87
|
+
const updatedCompare = String(right.updated_at || '').localeCompare(String(left.updated_at || ''));
|
|
88
|
+
if (updatedCompare !== 0)
|
|
89
|
+
return updatedCompare;
|
|
90
|
+
return String(left.conversation_id || '').localeCompare(String(right.conversation_id || ''));
|
|
91
|
+
}
|
|
92
|
+
function targetFromConversationId(conversationId, patch = {}) {
|
|
93
|
+
const parsed = parseConversationId(conversationId);
|
|
94
|
+
if (!parsed)
|
|
95
|
+
return null;
|
|
96
|
+
return {
|
|
97
|
+
...parsed,
|
|
98
|
+
...patch,
|
|
99
|
+
conversation_id: parsed.conversation_id,
|
|
100
|
+
connector: parsed.connector,
|
|
101
|
+
chat_type: parsed.chat_type,
|
|
102
|
+
chat_id: parsed.chat_id,
|
|
103
|
+
chat_id_raw: parsed.chat_id_raw,
|
|
104
|
+
profile_id: parsed.profile_id || null,
|
|
105
|
+
label: patch.label || `${parsed.chat_type} · ${parsed.chat_id}`,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function normalizeBindingTarget(binding) {
|
|
109
|
+
return targetFromConversationId(binding.conversation_id, {
|
|
110
|
+
source: 'quest_binding',
|
|
111
|
+
sources: ['quest_binding'],
|
|
112
|
+
profile_id: binding.profile_id || null,
|
|
113
|
+
profile_label: binding.profile_label || null,
|
|
114
|
+
bound_quest_id: binding.quest_id || null,
|
|
115
|
+
bound_quest_title: binding.quest_title || null,
|
|
116
|
+
is_bound: Boolean(binding.quest_id),
|
|
117
|
+
warning: binding.quest_id ? `Currently bound to ${binding.quest_id}` : null,
|
|
118
|
+
updated_at: binding.updated_at || null,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
function normalizeRecentConversationTarget(item) {
|
|
122
|
+
return targetFromConversationId(item.conversation_id, {
|
|
123
|
+
source: item.source || 'recent_activity',
|
|
124
|
+
sources: [String(item.source || 'recent_activity')],
|
|
125
|
+
profile_id: item.profile_id || null,
|
|
126
|
+
profile_label: item.profile_label || null,
|
|
127
|
+
label: baseRecentConversationLabel(item),
|
|
128
|
+
updated_at: item.updated_at || null,
|
|
129
|
+
quest_id: item.quest_id || null,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
function normalizeKnownTarget(target) {
|
|
133
|
+
const source = String(target.source || '').trim() || 'known_target';
|
|
134
|
+
const sources = Array.from(new Set([...(target.sources || []), source].map((item) => String(item || '').trim()).filter(Boolean)));
|
|
135
|
+
const boundQuestId = String(target.bound_quest_id || '').trim() || null;
|
|
136
|
+
return {
|
|
137
|
+
...target,
|
|
138
|
+
source,
|
|
139
|
+
sources,
|
|
140
|
+
is_bound: Boolean(boundQuestId),
|
|
141
|
+
warning: boundQuestId ? target.warning || null : null,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function mergeTargetEntry(merged, target, options) {
|
|
145
|
+
if (!target?.conversation_id)
|
|
146
|
+
return;
|
|
147
|
+
const { defaultConversationId } = options;
|
|
148
|
+
const normalizedTarget = {
|
|
149
|
+
...target,
|
|
150
|
+
label: baseTargetLabel(target),
|
|
151
|
+
selectable: target.selectable ?? true,
|
|
152
|
+
is_default: target.is_default || conversationIdentityKey(target.conversation_id) === conversationIdentityKey(defaultConversationId),
|
|
153
|
+
};
|
|
154
|
+
const key = conversationIdentityKey(normalizedTarget.conversation_id);
|
|
155
|
+
const existing = merged.get(key);
|
|
156
|
+
const normalizedBoundQuestId = String(normalizedTarget.bound_quest_id || '').trim() || null;
|
|
157
|
+
const normalizedBoundQuestTitle = normalizedBoundQuestId && String(normalizedTarget.bound_quest_title || '').trim()
|
|
158
|
+
? String(normalizedTarget.bound_quest_title || '').trim()
|
|
159
|
+
: null;
|
|
160
|
+
const normalizedWarning = normalizedBoundQuestId && String(normalizedTarget.warning || '').trim() ? String(normalizedTarget.warning || '').trim() : null;
|
|
161
|
+
if (!existing) {
|
|
162
|
+
merged.set(key, {
|
|
163
|
+
...normalizedTarget,
|
|
164
|
+
bound_quest_id: normalizedBoundQuestId,
|
|
165
|
+
bound_quest_title: normalizedBoundQuestTitle,
|
|
166
|
+
is_bound: Boolean(normalizedBoundQuestId),
|
|
167
|
+
warning: normalizedWarning,
|
|
168
|
+
});
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const nextSources = Array.from(new Set([...(existing.sources || []), ...(normalizedTarget.sources || []), existing.source, normalizedTarget.source].filter((item) => Boolean(item))));
|
|
172
|
+
const resolvedBoundQuestId = String(normalizedTarget.bound_quest_id || existing.bound_quest_id || '').trim() || null;
|
|
173
|
+
const resolvedBoundQuestTitle = resolvedBoundQuestId && String(normalizedTarget.bound_quest_title || existing.bound_quest_title || '').trim()
|
|
174
|
+
? String(normalizedTarget.bound_quest_title || existing.bound_quest_title || '').trim()
|
|
175
|
+
: null;
|
|
176
|
+
const resolvedWarning = resolvedBoundQuestId && String(normalizedTarget.warning || existing.warning || '').trim()
|
|
177
|
+
? String(normalizedTarget.warning || existing.warning || '').trim()
|
|
178
|
+
: null;
|
|
179
|
+
merged.set(key, {
|
|
180
|
+
...existing,
|
|
181
|
+
...normalizedTarget,
|
|
182
|
+
label: baseTargetLabel(existing) === defaultConversationLabel(existing.chat_type, existing.chat_id) && baseTargetLabel(normalizedTarget)
|
|
183
|
+
? baseTargetLabel(normalizedTarget)
|
|
184
|
+
: baseTargetLabel(existing) || baseTargetLabel(normalizedTarget),
|
|
185
|
+
sources: nextSources.length ? nextSources : undefined,
|
|
186
|
+
is_default: Boolean(existing.is_default || normalizedTarget.is_default),
|
|
187
|
+
selectable: existing.selectable ?? normalizedTarget.selectable ?? true,
|
|
188
|
+
bound_quest_id: resolvedBoundQuestId,
|
|
189
|
+
bound_quest_title: resolvedBoundQuestTitle,
|
|
190
|
+
is_bound: Boolean(resolvedBoundQuestId),
|
|
191
|
+
warning: resolvedWarning,
|
|
192
|
+
updated_at: String(normalizedTarget.updated_at || '') >= String(existing.updated_at || '')
|
|
193
|
+
? normalizedTarget.updated_at || existing.updated_at
|
|
194
|
+
: existing.updated_at || normalizedTarget.updated_at,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
export function normalizeConnectorTargets(snapshot) {
|
|
198
|
+
const merged = new Map();
|
|
199
|
+
const defaultConversationId = String(snapshot.default_target?.conversation_id || '').trim() ||
|
|
200
|
+
(snapshot.name === 'qq' && String(snapshot.main_chat_id || '').trim() ? `qq:direct:${String(snapshot.main_chat_id || '').trim()}` : '') ||
|
|
201
|
+
'';
|
|
202
|
+
for (const target of snapshot.known_targets || []) {
|
|
203
|
+
mergeTargetEntry(merged, normalizeKnownTarget(target), { defaultConversationId });
|
|
204
|
+
}
|
|
205
|
+
for (const target of snapshot.discovered_targets || []) {
|
|
206
|
+
mergeTargetEntry(merged, target, { defaultConversationId });
|
|
207
|
+
}
|
|
208
|
+
mergeTargetEntry(merged, snapshot.default_target || null, { defaultConversationId });
|
|
209
|
+
for (const binding of snapshot.bindings || []) {
|
|
210
|
+
mergeTargetEntry(merged, normalizeBindingTarget(binding), { defaultConversationId });
|
|
211
|
+
}
|
|
212
|
+
for (const item of snapshot.recent_conversations || []) {
|
|
213
|
+
mergeTargetEntry(merged, normalizeRecentConversationTarget(item), { defaultConversationId });
|
|
214
|
+
}
|
|
215
|
+
if (snapshot.last_conversation_id) {
|
|
216
|
+
mergeTargetEntry(merged, targetFromConversationId(snapshot.last_conversation_id, {
|
|
217
|
+
source: 'last_conversation',
|
|
218
|
+
sources: ['last_conversation'],
|
|
219
|
+
}), { defaultConversationId });
|
|
220
|
+
}
|
|
221
|
+
if (snapshot.name === 'qq' && snapshot.main_chat_id) {
|
|
222
|
+
mergeTargetEntry(merged, targetFromConversationId(`qq:direct:${snapshot.main_chat_id}`, {
|
|
223
|
+
source: 'saved_main_chat',
|
|
224
|
+
sources: ['saved_main_chat'],
|
|
225
|
+
is_default: true,
|
|
226
|
+
}), { defaultConversationId });
|
|
227
|
+
}
|
|
228
|
+
return Array.from(merged.values()).sort(sortTargets);
|
|
229
|
+
}
|
|
230
|
+
export function qqProfileDisplayLabel(profile, snapshot) {
|
|
231
|
+
const snapshotLabel = String(snapshot?.label || '').trim();
|
|
232
|
+
if (snapshotLabel) {
|
|
233
|
+
return snapshotLabel;
|
|
234
|
+
}
|
|
235
|
+
const botName = String(profile.bot_name || '').trim();
|
|
236
|
+
const appId = String(profile.app_id || '').trim();
|
|
237
|
+
if (botName && appId) {
|
|
238
|
+
return `${botName} · ${appId}`;
|
|
239
|
+
}
|
|
240
|
+
return botName || appId || String(profile.profile_id || '').trim() || 'QQ';
|
|
241
|
+
}
|
|
242
|
+
export function selectQqProfileTarget(targets, mainChatId) {
|
|
243
|
+
const normalizedMainChatId = String(mainChatId || '').trim();
|
|
244
|
+
return (targets.find((item) => String(item.bound_quest_id || '').trim()) ||
|
|
245
|
+
(normalizedMainChatId
|
|
246
|
+
? targets.find((item) => String(item.chat_id || '').trim() === normalizedMainChatId)
|
|
247
|
+
: undefined) ||
|
|
248
|
+
targets[0] ||
|
|
249
|
+
null);
|
|
250
|
+
}
|
|
251
|
+
export function qqProfileStatus(profileSnapshot, targets, mainChatId) {
|
|
252
|
+
const hasBinding = Number(profileSnapshot?.binding_count || 0) > 0 ||
|
|
253
|
+
targets.some((item) => Boolean(String(item.bound_quest_id || '').trim()));
|
|
254
|
+
if (hasBinding) {
|
|
255
|
+
return 'bound';
|
|
256
|
+
}
|
|
257
|
+
const hasDetectedTarget = Boolean(String(mainChatId || profileSnapshot?.main_chat_id || '').trim()) ||
|
|
258
|
+
Boolean(String(profileSnapshot?.last_conversation_id || '').trim()) ||
|
|
259
|
+
targets.length > 0;
|
|
260
|
+
return hasDetectedTarget ? 'ready' : 'waiting';
|
|
261
|
+
}
|
|
@@ -1,33 +1,43 @@
|
|
|
1
1
|
export const theme = {
|
|
2
2
|
text: {
|
|
3
|
-
primary: '#
|
|
4
|
-
secondary: '#
|
|
5
|
-
link: '#
|
|
6
|
-
accent: '#
|
|
7
|
-
mention: '#
|
|
8
|
-
response: '#
|
|
9
|
-
user: '#
|
|
3
|
+
primary: '#E8EEF9',
|
|
4
|
+
secondary: '#8B9AB4',
|
|
5
|
+
link: '#A7C4FF',
|
|
6
|
+
accent: '#7FA9FF',
|
|
7
|
+
mention: '#9DBBFF',
|
|
8
|
+
response: '#E8EEF9',
|
|
9
|
+
user: '#B9D1FF',
|
|
10
10
|
},
|
|
11
11
|
background: {
|
|
12
|
-
primary: '#
|
|
12
|
+
primary: '#0F172A',
|
|
13
13
|
diff: {
|
|
14
|
-
added: '#
|
|
15
|
-
removed: '#
|
|
14
|
+
added: '#12263C',
|
|
15
|
+
removed: '#1C2338',
|
|
16
16
|
},
|
|
17
17
|
},
|
|
18
18
|
border: {
|
|
19
|
-
default: '#
|
|
20
|
-
focused: '#
|
|
19
|
+
default: '#41516D',
|
|
20
|
+
focused: '#7FA9FF',
|
|
21
21
|
},
|
|
22
22
|
ui: {
|
|
23
|
-
comment: '#
|
|
24
|
-
symbol: '#
|
|
25
|
-
dark: '#
|
|
26
|
-
gradient: ['#
|
|
23
|
+
comment: '#6D7F9B',
|
|
24
|
+
symbol: '#6D7F9B',
|
|
25
|
+
dark: '#22304B',
|
|
26
|
+
gradient: ['#6D90F5', '#8BAEFF', '#B6D1FF'],
|
|
27
|
+
brand: {
|
|
28
|
+
strong: '#6D90F5',
|
|
29
|
+
medium: '#8BAEFF',
|
|
30
|
+
soft: '#B6D1FF',
|
|
31
|
+
subtle: '#5B7097',
|
|
32
|
+
},
|
|
33
|
+
cursor: {
|
|
34
|
+
background: '#8BAEFF',
|
|
35
|
+
text: '#0F172A',
|
|
36
|
+
},
|
|
27
37
|
},
|
|
28
38
|
status: {
|
|
29
|
-
error: '#
|
|
30
|
-
success: '#
|
|
31
|
-
warning: '#
|
|
39
|
+
error: '#6E85B7',
|
|
40
|
+
success: '#9FC5FF',
|
|
41
|
+
warning: '#83A8F2',
|
|
32
42
|
},
|
|
33
43
|
};
|
package/src/tui/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-
|
|
2
|
-
import { w as createLucideIcon, r as reactExports,
|
|
3
|
-
import { u as useFileContentStore } from './file-content-
|
|
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-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BrFje2Uk.js","assets/index-D_E4281X.js","assets/index-G7AcWcMu.css","assets/useCliAccess-Bnop4mgR.js","assets/VNCViewer-HAg9mF7M.js","assets/file-content-DT24KFma.js","assets/select-CpAK6uWm.js","assets/index-BwRJaoTl.js","assets/file-jump-queue-r5XKgJEV.js","assets/pdf-effect-queue-BJk5okWJ.js","assets/file-diff-panel-DK13YPql.js","assets/bot-0DYntytV.js","assets/NotebookEditor-C1kWaxKi.js","assets/NotebookEditor-C3VQ7ylN.css","assets/trash-CXvwwSe8.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import { w as createLucideIcon, r as reactExports, cg as useIsomorphicLayoutEffect, ch as frame_1, ci as LayoutGroupContext, cj as nodeGroup_1, j as jsxRuntimeExports, ck as useConstant, t as apiClient, bE as isQuestRuntimeSurface, cl as shouldUseQuestProject, bF as getApiBaseUrl, cm as deriveMcpIdentity, cn as supportsProductApis, co as axios, cp as getCachedValue, cq as setCachedValue, cr as recordRequestEvent, cs as redactSensitive, ct as sanitizeUrl, cu as refreshAccessToken, aV as useChatSessionStore, cv as getMyToken, bG as redirectToLanding, Q as create$1, aA as useLabCopilotStore, bH as useCliStore, cw as EXPLORER_REFRESH_EVENT, n as useTabsStore, cx as buildCliFileId, cy as getCliFileName, cz as toCliResourcePath, aM as getPluginIdFromExtension, v as BUILTIN_PLUGINS, b as cn, cA as GripVertical, f as useFileTreeStore, W as toFilesResourcePath, aL as getPluginIdFromMimeType, T as TriangleAlert, cB as resolveMcpIdentity, cC as getToolArgsRecord, cD as getToolResultRecord, cE as getToolResultValue, cF as asString$2, cG as asRecord$4, cH as asStringArray, cI as extractPathEntries, cJ as BookOpenText, cK as Clock3, cL as truncateText, cM as ArrowUpRight, l as Search, cN as Database, cO as ArrowRightLeft, N as Sparkles, k as FileText, by as GitBranch, cP as asBoolean, cQ as asNumber, cR as BASH_CARRIAGE_RETURN_PREFIX, aN as useQuery, br as CircleHelp, cS as Activity, bt as Clock, cT as truncateText$1, cU as listLabPendingQuestions, cV as listLabQuestionHistory, af as BookOpen, cW as ExternalLink, u as useI18n, cX as GraduationCap, cY as normalizeWebSearchPayload, cZ as WebSearchQueryPills, c_ as WebSearchResults, P as EnhancedTerminal, h as dynamic, _ as __vitePreload, c$ as BashToolView, ac as Terminal, o as useToast, d0 as getMimeTypeFromExtension, d1 as getFileTextPreview, c2 as createFileObjectUrl, c as copyToClipboard, d2 as ChevronLeft, d3 as Folder, m as ChevronDown, X as X$1, L as LoaderCircle, aJ as FileIcon, d4 as formatFileSize, E as Eye, e as Copy, ba as Dialog, bb as DialogContent, d5 as ChevronRight, d6 as ConfirmModal, d7 as RotatingText, d as Check, aS as useReducedMotion, d8 as useTokenStream, d9 as McpBashExecView, da as PngIcon, db as Brain, dc as BRAND_LOGO_SMALL_SRC, dd as BRAND_LOGO_SMALL_SRC_INVERTED, de as CircleX, b0 as motion, bd as DialogTitle, df as DialogDescription, bT as DropdownMenu, bU as DropdownMenuTrigger, b8 as Ellipsis, bV as DropdownMenuContent, bX as DropdownMenuItem, dg as DropdownMenuSeparator, dh as GlareHover, di as SpotlightCard, dj as Noise, b9 as Plus, ai as Info, a2 as Play, dk as getWorkspaceContentTone, a$ as AnimatePresence, ab as useOpenFile, a as useWorkspaceSurfaceStore, z as useAuthStore, dl as useSearchParams, dm as useAgentRegistryStore, dn as PanelLeft, dp as parseCliFileId, c0 as getFile, bL as getProject, dq as refreshCliServerStatus, dr as COPILOT_FILES_ENABLED, a0 as listLatexBuilds, a6 as getLatexBuildLogText, $ as compileLatex, ds as ThinkingIndicator, dt as assetUrl, du as VariableSizeList, bs as OrbitLogoStatus, aR as reactDomExports, dv as ChatScrollProvider, bc as DialogHeader, be as DialogFooter } from './index-D_E4281X.js';
|
|
3
|
+
import { u as useFileContentStore } from './file-content-DT24KFma.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-CpAK6uWm.js';
|
|
5
5
|
import { q as queueFileJumpEffect } from './file-jump-queue-r5XKgJEV.js';
|
|
6
|
-
import { q as queuePdfEffect, M as MessageSquare } from './pdf-effect-queue-
|
|
7
|
-
import { F as FileDiffPanel } from './file-diff-panel-
|
|
8
|
-
import { B as Bot } from './bot-
|
|
9
|
-
import { C as ChevronUp } from './index-
|
|
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-
|
|
11
|
-
import { T as Trash, A as ArrowDown } from './trash-
|
|
6
|
+
import { q as queuePdfEffect, M as MessageSquare } from './pdf-effect-queue-BJk5okWJ.js';
|
|
7
|
+
import { F as FileDiffPanel } from './file-diff-panel-DK13YPql.js';
|
|
8
|
+
import { B as Bot } from './bot-0DYntytV.js';
|
|
9
|
+
import { C as ChevronUp } from './index-BwRJaoTl.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-C1kWaxKi.js';
|
|
11
|
+
import { T as Trash, A as ArrowDown } from './trash-CXvwwSe8.js';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* @license lucide-react v0.511.0 - ISC
|
|
@@ -11538,7 +11538,7 @@ function SearchToolView({ toolContent, panelMode }) {
|
|
|
11538
11538
|
}
|
|
11539
11539
|
|
|
11540
11540
|
const CliToolTerminal = dynamic(
|
|
11541
|
-
() => __vitePreload(() => import('./index-
|
|
11541
|
+
() => __vitePreload(() => import('./index-BrFje2Uk.js'),true?__vite__mapDeps([0,1,2,3]):void 0).then((mod) => mod.CliToolTerminal),
|
|
11542
11542
|
{
|
|
11543
11543
|
loading: () => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full items-center justify-center text-xs text-[var(--text-tertiary)]", children: "Loading terminal..." })
|
|
11544
11544
|
}
|
|
@@ -18501,7 +18501,7 @@ function pickGreetingTemplate() {
|
|
|
18501
18501
|
return GREETING_TEMPLATES[index];
|
|
18502
18502
|
}
|
|
18503
18503
|
const VNCViewer = dynamic(
|
|
18504
|
-
() => __vitePreload(() => import('./VNCViewer-
|
|
18504
|
+
() => __vitePreload(() => import('./VNCViewer-HAg9mF7M.js'),true?__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14]):void 0).then((mod) => mod.VNCViewer),
|
|
18505
18505
|
{
|
|
18506
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..." })
|
|
18507
18507
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
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-
|
|
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-D_E4281X.js';
|
|
2
2
|
|
|
3
3
|
const actions = [
|
|
4
4
|
{
|