@vibe-forge/client 0.11.2 → 1.0.0
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/cli.cjs +6 -11
- package/dist/assets/{arc-De_WjPJ3.js → arc-CbOXL0l9.js} +1 -1
- package/dist/assets/{blockDiagram-c4efeb88-C4aR2zTE.js → blockDiagram-c4efeb88-CqxINvsS.js} +1 -1
- package/dist/assets/{c4Diagram-c83219d4-BZH3rq_m.js → c4Diagram-c83219d4-BKazU0hb.js} +1 -1
- package/dist/assets/channel-Dnopc5A6.js +1 -0
- package/dist/assets/{classDiagram-beda092f-BzJgBrIK.js → classDiagram-beda092f-fAFX5BpB.js} +1 -1
- package/dist/assets/{classDiagram-v2-2358418a-5ZtXcnT3.js → classDiagram-v2-2358418a-w1VkNGJj.js} +1 -1
- package/dist/assets/clone-sQthahUA.js +1 -0
- package/dist/assets/{createText-1719965b-DUVvEtmR.js → createText-1719965b-CEinakVP.js} +1 -1
- package/dist/assets/{cssMode-GoTNjuXX.js → cssMode-DPqRki4y.js} +1 -1
- package/dist/assets/{edges-96097737-Dd7m4Cvs.js → edges-96097737-Cb0F1_3K.js} +1 -1
- package/dist/assets/{erDiagram-0228fc6a-DxqFlG_f.js → erDiagram-0228fc6a-C-N2fx-J.js} +1 -1
- package/dist/assets/{flowDb-c6c81e3f-DU0C5kCI.js → flowDb-c6c81e3f-D1Xz_8Gf.js} +1 -1
- package/dist/assets/{flowDiagram-50d868cf-Di1uDa_X.js → flowDiagram-50d868cf-DyPSZyAj.js} +1 -1
- package/dist/assets/flowDiagram-v2-4f6560a1-OazrdWQO.js +1 -0
- package/dist/assets/{flowchart-elk-definition-6af322e1-CwG8aty5.js → flowchart-elk-definition-6af322e1-Dr1DDXwE.js} +1 -1
- package/dist/assets/{freemarker2-j39cqTlI.js → freemarker2-C3DvPFaK.js} +1 -1
- package/dist/assets/{ganttDiagram-a2739b55-baO_lzL-.js → ganttDiagram-a2739b55-DmvY1GRj.js} +1 -1
- package/dist/assets/{gitGraphDiagram-82fe8481-COoHjYMf.js → gitGraphDiagram-82fe8481-CoXfPYYi.js} +1 -1
- package/dist/assets/{graph-KxESr4M5.js → graph-BkDQy7Qt.js} +1 -1
- package/dist/assets/{handlebars-BgjdZO8G.js → handlebars-BcTFdqjl.js} +1 -1
- package/dist/assets/{html-Ba7tYObe.js → html-Dg-O6XFr.js} +1 -1
- package/dist/assets/{htmlMode-Bztvbig1.js → htmlMode-B_wqYWvn.js} +1 -1
- package/dist/assets/{index-5325376f-BMTAx2mL.js → index-5325376f-kxPTR3_e.js} +1 -1
- package/dist/assets/index-o93dlo92.css +32 -0
- package/dist/assets/{index-Pm_kLJvG.js → index-wkhI4dr6.js} +350 -329
- package/dist/assets/{infoDiagram-8eee0895-CC74qbHY.js → infoDiagram-8eee0895-BEvqkwPI.js} +1 -1
- package/dist/assets/{javascript-C1e1cllX.js → javascript-DhlOH8_z.js} +1 -1
- package/dist/assets/{journeyDiagram-c64418c1-C4MyOdE6.js → journeyDiagram-c64418c1-gKtLYmmp.js} +1 -1
- package/dist/assets/{jsonMode-BC98AlvF.js → jsonMode-DxTbF9OD.js} +1 -1
- package/dist/assets/{layout-CxAyTlr7.js → layout-CDaZEk6E.js} +1 -1
- package/dist/assets/{line-DhaUfI71.js → line-DNRQu8iq.js} +1 -1
- package/dist/assets/{linear-MYukzldK.js → linear-Cph9Z6_j.js} +1 -1
- package/dist/assets/{liquid-DahfJEYl.js → liquid-ByZ6JgRG.js} +1 -1
- package/dist/assets/{lspLanguageFeatures-BWDJcswW.js → lspLanguageFeatures-DzvhkgnM.js} +1 -1
- package/dist/assets/{mdx-BELlF_FD.js → mdx-D8RGHTl6.js} +1 -1
- package/dist/assets/{mermaid.core-BrQnSGSY.js → mermaid.core-BgcryF__.js} +4 -4
- package/dist/assets/{mindmap-definition-8da855dc-B0FoxTiy.js → mindmap-definition-8da855dc-WrxK0FcB.js} +1 -1
- package/dist/assets/{pieDiagram-a8764435-Ddr2cjSL.js → pieDiagram-a8764435-VsZBsiQy.js} +1 -1
- package/dist/assets/{python--C9if_AD.js → python-CXVtk_cg.js} +1 -1
- package/dist/assets/{quadrantDiagram-1e28029f-BlEs7Mrl.js → quadrantDiagram-1e28029f-BVlgwOvU.js} +1 -1
- package/dist/assets/{razor-B9U9JxKn.js → razor-0tind7h2.js} +1 -1
- package/dist/assets/{requirementDiagram-08caed73-kEFOAu2v.js → requirementDiagram-08caed73-CpPMPoYp.js} +1 -1
- package/dist/assets/{sankeyDiagram-a04cb91d-BBghez8I.js → sankeyDiagram-a04cb91d-Cm5nnRmc.js} +1 -1
- package/dist/assets/{sequenceDiagram-c5b8d532-CJqgzdUE.js → sequenceDiagram-c5b8d532-DpMlJvJB.js} +1 -1
- package/dist/assets/{stateDiagram-1ecb1508-BER4XEI6.js → stateDiagram-1ecb1508-DU1zc7vq.js} +1 -1
- package/dist/assets/{stateDiagram-v2-c2b004d7-EBV2vSks.js → stateDiagram-v2-c2b004d7-D-0RgmAp.js} +1 -1
- package/dist/assets/{styles-b4e223ce-k0eswZsE.js → styles-b4e223ce-BSO-yNWV.js} +1 -1
- package/dist/assets/{styles-ca3715f6-Ckr7GA-0.js → styles-ca3715f6-CHnsn2Ro.js} +1 -1
- package/dist/assets/{styles-d45a18b0-C1bpSwV3.js → styles-d45a18b0-B-rVGjEq.js} +1 -1
- package/dist/assets/{svgDrawCommon-b86b1483-CDtKpGvy.js → svgDrawCommon-b86b1483-CA3Pl89f.js} +1 -1
- package/dist/assets/{timeline-definition-faaaa080-BeGR-vua.js → timeline-definition-faaaa080-BcihLR6s.js} +1 -1
- package/dist/assets/{tsMode-D_gJXIy3.js → tsMode-D9GGa5Ur.js} +1 -1
- package/dist/assets/{typescript-BoKcNXkN.js → typescript-BT9CK_EL.js} +1 -1
- package/dist/assets/{xml-DZvURlJ-.js → xml-DNO75J-T.js} +1 -1
- package/dist/assets/{xychartDiagram-f5964ef8-DxfeLuYV.js → xychartDiagram-f5964ef8-DJTwe32X.js} +1 -1
- package/dist/assets/{yaml-CTC8PAGY.js → yaml-7CVzhiP2.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +13 -10
- package/src/api/git.ts +12 -0
- package/src/api/sessions.ts +131 -4
- package/src/api/types.ts +2 -1
- package/src/api.ts +13 -0
- package/src/components/ArchiveView.scss +143 -54
- package/src/components/ArchiveView.tsx +181 -167
- package/src/components/CodeBlock.scss +5 -0
- package/src/components/ConfigView.scss +142 -31
- package/src/components/ConfigView.tsx +161 -86
- package/src/components/MarkdownContent.tsx +7 -0
- package/src/components/NavRail.scss +248 -0
- package/src/components/NavRail.tsx +80 -107
- package/src/components/NavRailCompact.tsx +107 -0
- package/src/components/NavRailCompactMoreSheet.tsx +141 -0
- package/src/components/ShortcutTooltip.tsx +4 -2
- package/src/components/Sidebar.scss +51 -0
- package/src/components/Sidebar.tsx +43 -16
- package/src/components/automation-view/RuleFormPanel.scss +40 -13
- package/src/components/automation-view/RuleSidebar.scss +73 -47
- package/src/components/automation-view/RuleSidebar.tsx +9 -13
- package/src/components/automation-view/RunHistoryPanel.scss +141 -13
- package/src/components/automation-view/RunHistoryPanel.tsx +203 -161
- package/src/components/automation-view/TaskList.scss +44 -13
- package/src/components/automation-view/TriggerList.scss +46 -14
- package/src/components/automation-view/index.scss +82 -10
- package/src/components/automation-view/index.tsx +108 -55
- package/src/components/benchmark-view/BenchmarkCasePanel.scss +36 -16
- package/src/components/benchmark-view/BenchmarkSidebar.scss +44 -22
- package/src/components/benchmark-view/BenchmarkSidebar.tsx +0 -6
- package/src/components/benchmark-view/BenchmarkView.scss +63 -20
- package/src/components/benchmark-view/index.tsx +71 -34
- package/src/components/chat/AGENTS.md +14 -2
- package/src/components/chat/ChatComposerCard.scss +77 -0
- package/src/components/chat/ChatComposerCard.tsx +59 -0
- package/src/components/chat/ChatHeader.scss +187 -0
- package/src/components/chat/ChatHeader.tsx +209 -57
- package/src/components/chat/ChatHistoryView.tsx +279 -52
- package/src/components/chat/ChatTimelineView.scss +94 -1
- package/src/components/chat/ChatTimelineView.tsx +42 -0
- package/src/components/chat/CurrentTodoList.scss +210 -200
- package/src/components/chat/CurrentTodoList.tsx +116 -48
- package/src/components/chat/NewSessionGuide.scss +139 -1
- package/src/components/chat/NewSessionGuide.tsx +57 -100
- package/src/components/chat/NewSessionGuideCompactPanel.tsx +130 -0
- package/src/components/chat/NewSessionGuideGrid.tsx +141 -0
- package/src/components/chat/QueuedMessagesCard.scss +195 -0
- package/src/components/chat/QueuedMessagesCard.tsx +170 -0
- package/src/components/chat/git-controls/BranchSwitcherDropdown.tsx +61 -56
- package/src/components/chat/git-controls/BranchSwitcherResults.tsx +167 -0
- package/src/components/chat/git-controls/BranchTreeEntries.tsx +99 -0
- package/src/components/chat/git-controls/ChatGitControls.scss +437 -5
- package/src/components/chat/git-controls/ChatGitControls.tsx +136 -109
- package/src/components/chat/git-controls/DraftGitControls.tsx +91 -0
- package/src/components/chat/git-controls/GitOperationsDropdown.tsx +10 -2
- package/src/components/chat/git-controls/GitWorktreeDropdown.tsx +301 -28
- package/src/components/chat/git-controls/git-branch-tree.ts +148 -0
- package/src/components/chat/git-controls/use-chat-draft-git-controls.ts +168 -0
- package/src/components/chat/git-controls/use-chat-git-controls.ts +76 -3
- package/src/components/chat/messages/MessageContextMenu.tsx +3 -1
- package/src/components/chat/messages/MessageItem.scss +78 -4
- package/src/components/chat/messages/MessageItem.tsx +47 -3
- package/src/components/chat/sender/@components/adapter-select/AdapterSelectControl.scss +23 -0
- package/src/components/chat/sender/@components/reference-actions/ReferenceActionsControl.scss +17 -0
- package/src/components/chat/sender/@components/reference-actions/ReferencePermissionActionsPopover.tsx +4 -1
- package/src/components/chat/sender/@components/sender-attachments/SenderAttachments.scss +167 -30
- package/src/components/chat/sender/@components/sender-attachments/SenderAttachments.tsx +95 -23
- package/src/components/chat/sender/@components/sender-body/SenderBody.tsx +10 -0
- package/src/components/chat/sender/@components/sender-interaction-panel/SenderInteractionPanel.scss +161 -45
- package/src/components/chat/sender/@components/sender-interaction-panel/SenderInteractionPanel.tsx +310 -71
- package/src/components/chat/sender/@components/sender-monaco-editor/SenderMonacoEditor.tsx +18 -0
- package/src/components/chat/sender/@components/sender-monaco-editor/use-sender-monaco-editor.ts +86 -9
- package/src/components/chat/sender/@components/sender-monaco-editor/use-sender-monaco-theme.ts +52 -3
- package/src/components/chat/sender/@components/sender-submit-action/SenderSubmitAction.scss +110 -1
- package/src/components/chat/sender/@components/sender-submit-action/SenderSubmitAction.tsx +137 -17
- package/src/components/chat/sender/@components/sender-toolbar/SenderSelectBase.scss +21 -0
- package/src/components/chat/sender/@components/sender-toolbar/SenderSelectShared.scss +21 -0
- package/src/components/chat/sender/@components/sender-toolbar/SenderToolbar.scss +63 -0
- package/src/components/chat/sender/@components/sender-toolbar/SenderToolbar.tsx +12 -6
- package/src/components/chat/sender/@core/build-sender-controller-result.ts +6 -0
- package/src/components/chat/sender/@core/build-sender-toolbar.ts +25 -2
- package/src/components/chat/sender/@core/create-sender-toolbar-handlers.ts +9 -2
- package/src/components/chat/sender/@core/get-sender-runtime-state.ts +1 -1
- package/src/components/chat/sender/@core/interaction-request.ts +2 -2
- package/src/components/chat/sender/@core/sender-toolbar-bindings.ts +28 -4
- package/src/components/chat/sender/@hooks/use-model-select-browser.tsx +4 -2
- package/src/components/chat/sender/@hooks/use-sender-controller.ts +56 -11
- package/src/components/chat/sender/@hooks/use-sender-keydown.ts +64 -0
- package/src/components/chat/sender/@hooks/use-sender-shortcuts.ts +16 -1
- package/src/components/chat/sender/@hooks/use-sender-submit.ts +16 -8
- package/src/components/chat/sender/@types/sender-props.ts +20 -3
- package/src/components/chat/sender/@types/sender-toolbar-types.ts +12 -1
- package/src/components/chat/sender/Sender.scss +4 -1
- package/src/components/chat/sender/Sender.tsx +3 -12
- package/src/components/chat/session-timeline-panel/EventList.scss +88 -0
- package/src/components/chat/session-timeline-panel/EventList.tsx +99 -47
- package/src/components/chat/session-timeline-panel/gantt.ts +23 -7
- package/src/components/chat/session-timeline-panel/git-graph.ts +6 -1
- package/src/components/chat/session-timeline-panel/index.scss +14 -1
- package/src/components/chat/session-timeline-panel/index.tsx +86 -10
- package/src/components/chat/session-timeline-panel/types.ts +4 -0
- package/src/components/chat/status-bar/ChatStatusBar.scss +27 -0
- package/src/components/chat/status-bar/ChatStatusBar.tsx +39 -0
- package/src/components/chat/terminal/ChatTerminalView.tsx +6 -0
- package/src/components/chat/tools/core/ToolCallBox.scss +19 -0
- package/src/components/chat/tools/core/ToolGroup.scss +32 -0
- package/src/components/chat/tools/task/components/TaskToolCard.scss +59 -1
- package/src/components/config/ConfigEditors.scss +20 -6
- package/src/components/config/ConfigFieldRow.scss +57 -17
- package/src/components/config/ConfigSectionForm.scss +10 -4
- package/src/components/config/ConfigSectionPanel.tsx +18 -11
- package/src/components/config/configSchema.ts +1 -0
- package/src/components/config/record-editors/RecordEditors.scss +42 -9
- package/src/components/dock-panel/DockPanel.scss +6 -2
- package/src/components/dock-panel/DockPanel.tsx +12 -16
- package/src/components/knowledge-base/KnowledgeBaseView.scss +180 -6
- package/src/components/knowledge-base/KnowledgeBaseView.tsx +98 -26
- package/src/components/knowledge-base/components/ActionButton.scss +4 -0
- package/src/components/knowledge-base/components/EmptyState.scss +5 -8
- package/src/components/knowledge-base/components/EntitiesTab.tsx +8 -2
- package/src/components/knowledge-base/components/EntityItem.scss +10 -3
- package/src/components/knowledge-base/components/FilterBar.scss +13 -2
- package/src/components/knowledge-base/components/FlowsTab.tsx +8 -2
- package/src/components/knowledge-base/components/KnowledgeBaseHeader.scss +2 -23
- package/src/components/knowledge-base/components/KnowledgeBaseHeader.tsx +0 -5
- package/src/components/knowledge-base/components/KnowledgeList.scss +15 -6
- package/src/components/knowledge-base/components/LoadingState.scss +4 -0
- package/src/components/knowledge-base/components/RuleItem.scss +86 -0
- package/src/components/knowledge-base/components/RuleItem.tsx +2 -0
- package/src/components/knowledge-base/components/RulesTab.tsx +8 -2
- package/src/components/knowledge-base/components/SectionHeader.scss +3 -18
- package/src/components/knowledge-base/components/SectionHeader.tsx +3 -7
- package/src/components/knowledge-base/components/SkillsTab.tsx +8 -3
- package/src/components/knowledge-base/components/SpecItem.scss +16 -7
- package/src/components/layout/@hooks/use-mobile-sidebar-modal.ts +190 -0
- package/src/components/layout/AppShell.scss +106 -6
- package/src/components/layout/AppShell.tsx +118 -10
- package/src/components/layout/PageShell.scss +41 -0
- package/src/components/layout/PageShell.tsx +32 -0
- package/src/components/layout/mobile-sidebar-constants.ts +1 -0
- package/src/components/nav-rail-compact-config.ts +114 -0
- package/src/components/nav-rail-items.tsx +181 -0
- package/src/components/sidebar/SessionContextMenu.tsx +3 -1
- package/src/components/sidebar/SessionItem.scss +62 -0
- package/src/components/sidebar/SessionItem.tsx +97 -52
- package/src/components/sidebar/SessionList.tsx +6 -0
- package/src/components/sidebar/SidebarHeader.scss +49 -0
- package/src/components/sidebar/SidebarHeader.tsx +27 -5
- package/src/components/sidebar/SidebarHeaderBatchActions.tsx +8 -4
- package/src/components/sidebar/SidebarHeaderSearchActions.tsx +6 -3
- package/src/components/sidebar/SidebarUtilityFooter.tsx +69 -0
- package/src/components/workspace/ContextFilePicker.tsx +12 -4
- package/src/hooks/chat/chat-session-workspace-draft.ts +25 -0
- package/src/hooks/chat/session-view-cache.ts +4 -1
- package/src/hooks/chat/use-chat-adapter.ts +5 -1
- package/src/hooks/chat/use-chat-model-adapter-selection.tsx +5 -1
- package/src/hooks/chat/use-chat-scroll.ts +24 -7
- package/src/hooks/chat/use-chat-session-actions.ts +118 -6
- package/src/hooks/chat/use-chat-session-messages.ts +20 -1
- package/src/hooks/chat/use-chat-session.ts +2 -0
- package/src/hooks/use-responsive-layout.ts +115 -0
- package/src/main.tsx +8 -0
- package/src/resources/adapters.ts +15 -0
- package/src/resources/locales/en.json +84 -1
- package/src/resources/locales/zh.json +84 -1
- package/src/routes/ChatRoute.scss +152 -9
- package/src/routes/ChatRoute.tsx +31 -34
- package/src/store/index.ts +2 -0
- package/dist/assets/channel-BvERb8WU.js +0 -1
- package/dist/assets/clone-B9_0v-6Y.js +0 -1
- package/dist/assets/flowDiagram-v2-4f6560a1-LpS8Kb00.js +0 -1
- package/dist/assets/index-C1oh0w9H.css +0 -32
- package/src/components/chat/ThinkingStatus.scss +0 -70
- package/src/components/chat/ThinkingStatus.tsx +0 -13
|
@@ -165,6 +165,8 @@
|
|
|
165
165
|
"lastRunAt": "Last run: {{time}}",
|
|
166
166
|
"noRunYet": "No runs yet",
|
|
167
167
|
"emptyRules": "No automation rules",
|
|
168
|
+
"mobileRules": "Rules",
|
|
169
|
+
"mobileDetails": "Details",
|
|
168
170
|
"selectRule": "Select an automation rule",
|
|
169
171
|
"ruleId": "Rule ID",
|
|
170
172
|
"createdAt": "Created At",
|
|
@@ -209,6 +211,8 @@
|
|
|
209
211
|
"caseId": "Case:",
|
|
210
212
|
"searchPlaceholder": "Search category, title, or summary",
|
|
211
213
|
"emptyCases": "No benchmark cases",
|
|
214
|
+
"mobileCases": "Cases",
|
|
215
|
+
"mobileDetails": "Details",
|
|
212
216
|
"noSummary": "No summary",
|
|
213
217
|
"configTitle": "Case Config",
|
|
214
218
|
"baseCommit": "Base Commit",
|
|
@@ -351,6 +355,13 @@
|
|
|
351
355
|
"permissionReasons": "Reasons",
|
|
352
356
|
"permissionExpandOptions": "Show more options",
|
|
353
357
|
"permissionCollapseOptions": "Show fewer options",
|
|
358
|
+
"permissionConfirmOption": "Confirm option",
|
|
359
|
+
"permissionConfirmOptionTooltip": "Confirm the currently highlighted permission option",
|
|
360
|
+
"permissionSendBlockedTooltip": "A permission choice is still pending. Confirm the option above first.",
|
|
361
|
+
"permissionSendBlockedError": "A permission choice is still pending, so sending is temporarily disabled.",
|
|
362
|
+
"interactionOptionNavigation": "Quick option navigation",
|
|
363
|
+
"interactionOptionPrevious": "Previous option",
|
|
364
|
+
"interactionOptionNext": "Next option",
|
|
354
365
|
"tooltipSlashCommands": "Slash commands",
|
|
355
366
|
"tooltipMentionAgents": "Mention agents",
|
|
356
367
|
"tooltipInjectContext": "Inject context",
|
|
@@ -363,6 +374,24 @@
|
|
|
363
374
|
"modelRemoveRecommendation": "Remove from recommended models",
|
|
364
375
|
"effortShortcutTooltip": "Switch reasoning effort",
|
|
365
376
|
"sendShortcutTooltip": "Send message",
|
|
377
|
+
"queue": {
|
|
378
|
+
"steerTitle": "Send After Current Turn",
|
|
379
|
+
"nextTitle": "Send At Next Safe Point",
|
|
380
|
+
"count": "{{count}} queued",
|
|
381
|
+
"sendAfterTurn": "After turn",
|
|
382
|
+
"sendNext": "Next safe point",
|
|
383
|
+
"steerShortcutTooltip": "Queue the message until the current turn finishes",
|
|
384
|
+
"nextShortcutTooltip": "Queue the message and send it at the next safe point",
|
|
385
|
+
"attachmentsOnly": "Contains queued images or references",
|
|
386
|
+
"hasImage": "Contains images",
|
|
387
|
+
"hasReference": "Contains references",
|
|
388
|
+
"moveToSteer": "Move to send after current turn",
|
|
389
|
+
"moveToNext": "Move to send at next safe point",
|
|
390
|
+
"requeueMessage": "Re-queue message",
|
|
391
|
+
"stopCurrentRun": "Stop current run",
|
|
392
|
+
"stopShortcutTooltip": "Press Esc twice to stop the current run",
|
|
393
|
+
"stopShortcutConfirm": "Press Esc again to stop the current run"
|
|
394
|
+
},
|
|
366
395
|
"adapterLockedTooltip": "Adapters are locked after a session is created",
|
|
367
396
|
"referenceActionsShort": "More",
|
|
368
397
|
"referenceActionsTitle": "More",
|
|
@@ -442,8 +471,51 @@
|
|
|
442
471
|
"gitBranchSwitcher": "Switch branch",
|
|
443
472
|
"gitOperations": "Git actions",
|
|
444
473
|
"gitWorktree": "Worktree",
|
|
474
|
+
"statusBarTitle": "Session status",
|
|
475
|
+
"statusBarSessionSubtitle": "Track the current session workspace and git context here.",
|
|
476
|
+
"statusBarDraftSubtitle": "Set up the next session workspace before sending the first message.",
|
|
477
|
+
"sessionWorkspace": "Session workspace",
|
|
478
|
+
"sessionWorkspaceManaged": "Managed worktree",
|
|
479
|
+
"sessionWorkspaceShared": "Shared workspace",
|
|
480
|
+
"sessionWorkspaceExternal": "External workspace",
|
|
481
|
+
"sessionWorkspaceDraftCreateWorktree": "Create worktree",
|
|
482
|
+
"sessionWorkspaceDraftStrategyLocal": "Local",
|
|
483
|
+
"sessionWorkspaceDraftStrategyManaged": "New worktree",
|
|
484
|
+
"sessionWorkspaceMenuCurrentWorktree": "Current worktree",
|
|
485
|
+
"sessionWorkspaceMenuWorktreeList": "Worktree list",
|
|
486
|
+
"sessionWorkspaceMenuLaunchInWorktree": "Start in worktree mode",
|
|
487
|
+
"sessionWorkspaceMenuTransferToLocal": "Transfer to local",
|
|
488
|
+
"sessionWorkspaceMenuCreateWorktree": "Create worktree",
|
|
489
|
+
"sessionWorkspaceDraftCreateWorktreeEnabled": "New sessions get an isolated managed worktree.",
|
|
490
|
+
"sessionWorkspaceDraftCreateWorktreeDisabled": "New sessions reuse the shared workspace directly.",
|
|
491
|
+
"sessionWorkspaceDraftCreateBranchLabel": "New branch: {{branch}}",
|
|
492
|
+
"sessionWorkspaceDraftGitUnavailable": "Git is unavailable for the current workspace.",
|
|
493
|
+
"sessionWorkspaceSearchWorktrees": "Search worktrees",
|
|
494
|
+
"sessionWorkspaceNoWorktrees": "No worktrees",
|
|
495
|
+
"sessionWorkspaceMode": "Mode",
|
|
496
|
+
"sessionWorkspaceState": "State",
|
|
497
|
+
"sessionWorkspaceBranch": "Branch",
|
|
498
|
+
"sessionWorkspacePath": "Path",
|
|
499
|
+
"sessionWorkspaceCleanup": "Cleanup",
|
|
500
|
+
"sessionWorkspaceCleanupDelete": "Deletes with session",
|
|
501
|
+
"sessionWorkspaceCleanupRetain": "Retained on delete",
|
|
502
|
+
"sessionWorkspaceBaseRef": "Base ref",
|
|
503
|
+
"sessionWorkspaceCurrentSession": "Current session",
|
|
504
|
+
"sessionWorkspaceRepositoryWorktrees": "Repository worktrees",
|
|
505
|
+
"sessionWorkspaceStateReady": "Ready",
|
|
506
|
+
"sessionWorkspaceStateProvisioning": "Provisioning",
|
|
507
|
+
"sessionWorkspaceStateDeleting": "Deleting",
|
|
508
|
+
"sessionWorkspaceStateDeleted": "Deleted",
|
|
509
|
+
"sessionWorkspaceStateBroken": "Broken",
|
|
510
|
+
"sessionWorkspaceCreateWorktreeSuccess": "Created a managed worktree for this session.",
|
|
511
|
+
"sessionWorkspaceTransferToLocalSuccess": "This worktree is now retained locally.",
|
|
512
|
+
"sessionWorkspaceForceDeleteTitle": "Delete dirty workspace?",
|
|
513
|
+
"sessionWorkspaceForceDeleteDescription": "This session workspace has uncommitted changes. Force delete the session and remove its bound worktree anyway?",
|
|
445
514
|
"gitDetachedHead": "DETACHED",
|
|
446
515
|
"gitSearchBranches": "Search local or remote branches",
|
|
516
|
+
"gitBranchViewMode": "Branch view mode",
|
|
517
|
+
"gitBranchViewTree": "Tree",
|
|
518
|
+
"gitBranchViewFlat": "Flat",
|
|
447
519
|
"gitBranchesLocal": "Local branches",
|
|
448
520
|
"gitBranchesWorktrees": "Other worktrees",
|
|
449
521
|
"gitBranchesRemote": "Remote branches",
|
|
@@ -586,6 +658,7 @@
|
|
|
586
658
|
"announcements": {
|
|
587
659
|
"title": "Announcements"
|
|
588
660
|
},
|
|
661
|
+
"moreCount": "{{count}} more",
|
|
589
662
|
"specs": {
|
|
590
663
|
"title": "Existing Flows",
|
|
591
664
|
"params": "{{count}} params",
|
|
@@ -607,9 +680,15 @@
|
|
|
607
680
|
"footer": "Add usage guidance to flow descriptions when needed"
|
|
608
681
|
}
|
|
609
682
|
},
|
|
683
|
+
"attachments": {
|
|
684
|
+
"pastedImage": "Pasted image"
|
|
685
|
+
},
|
|
610
686
|
"todo": {
|
|
611
687
|
"noTasks": "No tasks planned",
|
|
612
|
-
"progress": "Progress: {{completed}}/{{total}} completed"
|
|
688
|
+
"progress": "Progress: {{completed}}/{{total}} completed",
|
|
689
|
+
"pendingCount": "{{count}} todo",
|
|
690
|
+
"inProgressCount": "{{count}} doing",
|
|
691
|
+
"completedCount": "{{count}} done"
|
|
613
692
|
},
|
|
614
693
|
"tools": {
|
|
615
694
|
"read": "Read File",
|
|
@@ -958,6 +1037,10 @@
|
|
|
958
1037
|
"label": "Conversation Style",
|
|
959
1038
|
"desc": "Controls the assistant’s interaction style"
|
|
960
1039
|
},
|
|
1040
|
+
"createSessionWorktree": {
|
|
1041
|
+
"label": "Create worktree for new sessions",
|
|
1042
|
+
"desc": "Use a managed worktree by default when creating a new session"
|
|
1043
|
+
},
|
|
961
1044
|
"customInstructions": {
|
|
962
1045
|
"label": "Custom Instructions",
|
|
963
1046
|
"desc": "Additional guidance for the assistant"
|
|
@@ -166,6 +166,8 @@
|
|
|
166
166
|
"lastRunAt": "最近运行:{{time}}",
|
|
167
167
|
"noRunYet": "暂无运行记录",
|
|
168
168
|
"emptyRules": "暂无自动化任务",
|
|
169
|
+
"mobileRules": "规则",
|
|
170
|
+
"mobileDetails": "详情",
|
|
169
171
|
"selectRule": "请选择一个自动化任务",
|
|
170
172
|
"ruleId": "规则 ID",
|
|
171
173
|
"createdAt": "创建时间",
|
|
@@ -210,6 +212,8 @@
|
|
|
210
212
|
"caseId": "用例:",
|
|
211
213
|
"searchPlaceholder": "搜索分类、标题或摘要",
|
|
212
214
|
"emptyCases": "暂无 benchmark 用例",
|
|
215
|
+
"mobileCases": "用例",
|
|
216
|
+
"mobileDetails": "详情",
|
|
213
217
|
"noSummary": "暂无摘要",
|
|
214
218
|
"configTitle": "用例配置",
|
|
215
219
|
"baseCommit": "基线 Commit",
|
|
@@ -352,6 +356,13 @@
|
|
|
352
356
|
"permissionReasons": "原因",
|
|
353
357
|
"permissionExpandOptions": "展开更多选项",
|
|
354
358
|
"permissionCollapseOptions": "收起更多选项",
|
|
359
|
+
"permissionConfirmOption": "确认选项",
|
|
360
|
+
"permissionConfirmOptionTooltip": "确认当前高亮的权限选项",
|
|
361
|
+
"permissionSendBlockedTooltip": "当前正在等待权限选项确认,请先确认上方选项",
|
|
362
|
+
"permissionSendBlockedError": "当前正在等待权限选项确认,暂时不能发送消息",
|
|
363
|
+
"interactionOptionNavigation": "选项快速切换",
|
|
364
|
+
"interactionOptionPrevious": "上一个选项",
|
|
365
|
+
"interactionOptionNext": "下一个选项",
|
|
355
366
|
"tooltipSlashCommands": "快捷指令",
|
|
356
367
|
"tooltipMentionAgents": "提及代理",
|
|
357
368
|
"tooltipInjectContext": "注入上下文",
|
|
@@ -364,6 +375,24 @@
|
|
|
364
375
|
"modelRemoveRecommendation": "从推荐模型中移除",
|
|
365
376
|
"effortShortcutTooltip": "切换推理强度",
|
|
366
377
|
"sendShortcutTooltip": "发送消息",
|
|
378
|
+
"queue": {
|
|
379
|
+
"steerTitle": "等待当前轮结束后发送",
|
|
380
|
+
"nextTitle": "合适时机发送",
|
|
381
|
+
"count": "{{count}} 条待发送",
|
|
382
|
+
"sendAfterTurn": "等待结束后发",
|
|
383
|
+
"sendNext": "下一轮发",
|
|
384
|
+
"steerShortcutTooltip": "等待当前轮结束后发送",
|
|
385
|
+
"nextShortcutTooltip": "在下一个合适时机发送",
|
|
386
|
+
"attachmentsOnly": "包含待发送的图片或引用",
|
|
387
|
+
"hasImage": "包含图片",
|
|
388
|
+
"hasReference": "包含引用",
|
|
389
|
+
"moveToSteer": "移动到等待当前轮结束后发送",
|
|
390
|
+
"moveToNext": "移动到合适时机发送",
|
|
391
|
+
"requeueMessage": "重新入队",
|
|
392
|
+
"stopCurrentRun": "停止当前执行",
|
|
393
|
+
"stopShortcutTooltip": "按两次 Esc 停止当前执行",
|
|
394
|
+
"stopShortcutConfirm": "再按一次 Esc 停止当前执行"
|
|
395
|
+
},
|
|
367
396
|
"adapterLockedTooltip": "创建会话后适配器会锁定",
|
|
368
397
|
"referenceActionsShort": "更多",
|
|
369
398
|
"referenceActionsTitle": "更多",
|
|
@@ -443,8 +472,51 @@
|
|
|
443
472
|
"gitBranchSwitcher": "切换分支",
|
|
444
473
|
"gitOperations": "Git 操作",
|
|
445
474
|
"gitWorktree": "Worktree",
|
|
475
|
+
"statusBarTitle": "会话状态",
|
|
476
|
+
"statusBarSessionSubtitle": "这里统一展示当前会话绑定的工作区和 Git 上下文。",
|
|
477
|
+
"statusBarDraftSubtitle": "发送第一条消息前,先把新会话的工作区准备好。",
|
|
478
|
+
"sessionWorkspace": "会话工作区",
|
|
479
|
+
"sessionWorkspaceManaged": "托管 worktree",
|
|
480
|
+
"sessionWorkspaceShared": "共享工作区",
|
|
481
|
+
"sessionWorkspaceExternal": "外部工作区",
|
|
482
|
+
"sessionWorkspaceDraftCreateWorktree": "创建工作树",
|
|
483
|
+
"sessionWorkspaceDraftStrategyLocal": "本地",
|
|
484
|
+
"sessionWorkspaceDraftStrategyManaged": "新工作树",
|
|
485
|
+
"sessionWorkspaceMenuCurrentWorktree": "当前工作树",
|
|
486
|
+
"sessionWorkspaceMenuWorktreeList": "工作树列表",
|
|
487
|
+
"sessionWorkspaceMenuLaunchInWorktree": "以工作树模式启动",
|
|
488
|
+
"sessionWorkspaceMenuTransferToLocal": "转移到本地",
|
|
489
|
+
"sessionWorkspaceMenuCreateWorktree": "创建工作树",
|
|
490
|
+
"sessionWorkspaceDraftCreateWorktreeEnabled": "新会话会自动拿到一个隔离的托管 worktree。",
|
|
491
|
+
"sessionWorkspaceDraftCreateWorktreeDisabled": "新会话会直接复用当前共享工作区。",
|
|
492
|
+
"sessionWorkspaceDraftCreateBranchLabel": "新分支:{{branch}}",
|
|
493
|
+
"sessionWorkspaceDraftGitUnavailable": "当前工作区不可用 Git。",
|
|
494
|
+
"sessionWorkspaceSearchWorktrees": "搜索工作树",
|
|
495
|
+
"sessionWorkspaceNoWorktrees": "暂无工作树",
|
|
496
|
+
"sessionWorkspaceMode": "模式",
|
|
497
|
+
"sessionWorkspaceState": "状态",
|
|
498
|
+
"sessionWorkspaceBranch": "分支",
|
|
499
|
+
"sessionWorkspacePath": "路径",
|
|
500
|
+
"sessionWorkspaceCleanup": "清理策略",
|
|
501
|
+
"sessionWorkspaceCleanupDelete": "删除会话时一并删除",
|
|
502
|
+
"sessionWorkspaceCleanupRetain": "删除会话时保留",
|
|
503
|
+
"sessionWorkspaceBaseRef": "基线引用",
|
|
504
|
+
"sessionWorkspaceCurrentSession": "当前会话",
|
|
505
|
+
"sessionWorkspaceRepositoryWorktrees": "仓库 worktree",
|
|
506
|
+
"sessionWorkspaceStateReady": "就绪",
|
|
507
|
+
"sessionWorkspaceStateProvisioning": "创建中",
|
|
508
|
+
"sessionWorkspaceStateDeleting": "删除中",
|
|
509
|
+
"sessionWorkspaceStateDeleted": "已删除",
|
|
510
|
+
"sessionWorkspaceStateBroken": "异常",
|
|
511
|
+
"sessionWorkspaceCreateWorktreeSuccess": "已为当前会话创建托管工作树。",
|
|
512
|
+
"sessionWorkspaceTransferToLocalSuccess": "当前工作树已转为本地保留。",
|
|
513
|
+
"sessionWorkspaceForceDeleteTitle": "删除有改动的工作区?",
|
|
514
|
+
"sessionWorkspaceForceDeleteDescription": "这个会话工作区里还有未提交的改动。是否仍然强制删除会话,并移除它绑定的 worktree?",
|
|
446
515
|
"gitDetachedHead": "DETACHED",
|
|
447
516
|
"gitSearchBranches": "搜索本地或远程分支",
|
|
517
|
+
"gitBranchViewMode": "分支展示模式",
|
|
518
|
+
"gitBranchViewTree": "树状",
|
|
519
|
+
"gitBranchViewFlat": "平铺",
|
|
448
520
|
"gitBranchesLocal": "本地分支",
|
|
449
521
|
"gitBranchesWorktrees": "其他 worktree",
|
|
450
522
|
"gitBranchesRemote": "远程分支",
|
|
@@ -587,6 +659,7 @@
|
|
|
587
659
|
"announcements": {
|
|
588
660
|
"title": "最新公告"
|
|
589
661
|
},
|
|
662
|
+
"moreCount": "还有 {{count}} 项",
|
|
590
663
|
"specs": {
|
|
591
664
|
"title": "已有流程",
|
|
592
665
|
"params": "{{count}} 个参数",
|
|
@@ -608,9 +681,15 @@
|
|
|
608
681
|
"footer": "需要更多引导时,可在流程描述中写明使用方式"
|
|
609
682
|
}
|
|
610
683
|
},
|
|
684
|
+
"attachments": {
|
|
685
|
+
"pastedImage": "粘贴图片"
|
|
686
|
+
},
|
|
611
687
|
"todo": {
|
|
612
688
|
"noTasks": "未规划任务",
|
|
613
|
-
"progress": "任务进度: {{completed}}/{{total}} 已完成"
|
|
689
|
+
"progress": "任务进度: {{completed}}/{{total}} 已完成",
|
|
690
|
+
"pendingCount": "{{count}} 待办",
|
|
691
|
+
"inProgressCount": "{{count}} 进行中",
|
|
692
|
+
"completedCount": "{{count}} 已完成"
|
|
614
693
|
},
|
|
615
694
|
"tools": {
|
|
616
695
|
"read": "读取文件",
|
|
@@ -959,6 +1038,10 @@
|
|
|
959
1038
|
"label": "对话风格",
|
|
960
1039
|
"desc": "控制助手的对话风格"
|
|
961
1040
|
},
|
|
1041
|
+
"createSessionWorktree": {
|
|
1042
|
+
"label": "新建会话时创建工作树",
|
|
1043
|
+
"desc": "默认给新会话分配一个托管 worktree"
|
|
1044
|
+
},
|
|
962
1045
|
"customInstructions": {
|
|
963
1046
|
"label": "自定义指令",
|
|
964
1047
|
"desc": "为对话提供额外的提示与约束"
|
|
@@ -30,11 +30,18 @@
|
|
|
30
30
|
.new-session-guide-wrapper {
|
|
31
31
|
display: flex;
|
|
32
32
|
justify-content: center;
|
|
33
|
+
width: 100%;
|
|
34
|
+
min-width: 0;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
.chat-messages {
|
|
36
38
|
flex: 1;
|
|
39
|
+
min-width: 0;
|
|
40
|
+
min-height: 0;
|
|
37
41
|
overflow-y: auto;
|
|
42
|
+
overscroll-behavior-y: contain;
|
|
43
|
+
-webkit-overflow-scrolling: touch;
|
|
44
|
+
scrollbar-gutter: stable both-edges;
|
|
38
45
|
padding: 6px 12px 0;
|
|
39
46
|
position: relative;
|
|
40
47
|
opacity: 0;
|
|
@@ -50,7 +57,9 @@
|
|
|
50
57
|
display: flex;
|
|
51
58
|
flex-direction: column;
|
|
52
59
|
gap: 6px;
|
|
60
|
+
min-width: 0;
|
|
53
61
|
min-height: 100%;
|
|
62
|
+
padding-bottom: 8px;
|
|
54
63
|
}
|
|
55
64
|
|
|
56
65
|
.chat-turn {
|
|
@@ -206,6 +215,7 @@
|
|
|
206
215
|
align-self: center;
|
|
207
216
|
display: inline-flex;
|
|
208
217
|
align-items: center;
|
|
218
|
+
flex-wrap: wrap;
|
|
209
219
|
gap: 8px;
|
|
210
220
|
margin: 0 auto;
|
|
211
221
|
padding: 8px 14px;
|
|
@@ -219,7 +229,10 @@
|
|
|
219
229
|
color: #2563eb;
|
|
220
230
|
font-size: 13px;
|
|
221
231
|
font-weight: 500;
|
|
222
|
-
|
|
232
|
+
line-height: 1.4;
|
|
233
|
+
max-width: 100%;
|
|
234
|
+
text-align: center;
|
|
235
|
+
box-shadow: none;
|
|
223
236
|
|
|
224
237
|
.material-symbols-rounded {
|
|
225
238
|
font-size: 16px;
|
|
@@ -230,29 +243,69 @@
|
|
|
230
243
|
flex: 0;
|
|
231
244
|
display: flex;
|
|
232
245
|
flex-direction: column;
|
|
246
|
+
gap: 8px;
|
|
247
|
+
min-width: 0;
|
|
233
248
|
justify-content: flex-end;
|
|
234
|
-
padding: 0 12px 12px;
|
|
235
249
|
transition:
|
|
236
250
|
flex .4s cubic-bezier(.4, 0, .2, 1),
|
|
237
251
|
padding-bottom .4s cubic-bezier(.4, 0, .2, 1);
|
|
238
252
|
}
|
|
239
253
|
|
|
254
|
+
.chat-composer-stack {
|
|
255
|
+
flex: 0;
|
|
256
|
+
min-width: 0;
|
|
257
|
+
padding: 0 12px max(8px, env(safe-area-inset-bottom));
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.chat-composer-stack__inner {
|
|
261
|
+
width: 100%;
|
|
262
|
+
display: flex;
|
|
263
|
+
flex-direction: column;
|
|
264
|
+
min-width: 0;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.chat-composer-stack__inner > * {
|
|
268
|
+
width: 100%;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.chat-composer-stack__inner > :not(:first-child).chat-composer-card,
|
|
272
|
+
.chat-composer-stack__inner > :not(:first-child) .chat-composer-card {
|
|
273
|
+
border-top-left-radius: 0;
|
|
274
|
+
border-top-right-radius: 0;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
.chat-composer-stack__inner > :not(:last-child).chat-composer-card,
|
|
278
|
+
.chat-composer-stack__inner > :not(:last-child) .chat-composer-card {
|
|
279
|
+
margin-bottom: -1px;
|
|
280
|
+
border-bottom-left-radius: 0;
|
|
281
|
+
border-bottom-right-radius: 0;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.chat-composer-stack__inner
|
|
285
|
+
> :not(:first-child):not(:last-child).chat-composer-card,
|
|
286
|
+
.chat-composer-stack__inner
|
|
287
|
+
> :not(:first-child):not(:last-child)
|
|
288
|
+
.chat-composer-card {
|
|
289
|
+
border-radius: 0;
|
|
290
|
+
}
|
|
291
|
+
|
|
240
292
|
.scroll-bottom-btn {
|
|
241
293
|
position: sticky;
|
|
242
|
-
bottom:
|
|
294
|
+
bottom: max(16px, env(safe-area-inset-bottom));
|
|
243
295
|
left: 100%;
|
|
244
|
-
transform: translateX(-
|
|
245
|
-
width:
|
|
246
|
-
height:
|
|
247
|
-
border-radius:
|
|
296
|
+
transform: translateX(-44px);
|
|
297
|
+
width: 36px;
|
|
298
|
+
height: 36px;
|
|
299
|
+
border-radius: 8px;
|
|
248
300
|
background-color: var(--bg-color);
|
|
249
301
|
border: 1px solid var(--border-color);
|
|
250
|
-
box-shadow:
|
|
302
|
+
box-shadow: none;
|
|
251
303
|
display: flex;
|
|
252
304
|
align-items: center;
|
|
253
305
|
justify-content: center;
|
|
254
306
|
cursor: pointer;
|
|
255
307
|
color: var(--sub-text-color, #6b7280);
|
|
308
|
+
touch-action: manipulation;
|
|
256
309
|
z-index: 10;
|
|
257
310
|
|
|
258
311
|
&:hover {
|
|
@@ -267,8 +320,16 @@
|
|
|
267
320
|
|
|
268
321
|
.chat-settings-panel {
|
|
269
322
|
flex: 1;
|
|
323
|
+
min-height: 0;
|
|
324
|
+
display: flex;
|
|
325
|
+
flex-direction: column;
|
|
270
326
|
overflow: auto;
|
|
271
|
-
padding:
|
|
327
|
+
padding: 6px 12px 12px;
|
|
328
|
+
box-sizing: border-box;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.chat-settings-panel > .session-settings-drawer {
|
|
332
|
+
width: 100%;
|
|
272
333
|
}
|
|
273
334
|
|
|
274
335
|
.chat-route__empty-state {
|
|
@@ -281,3 +342,85 @@
|
|
|
281
342
|
align-content: center;
|
|
282
343
|
gap: 16px;
|
|
283
344
|
}
|
|
345
|
+
|
|
346
|
+
@media (max-width: 768px) {
|
|
347
|
+
.chat-container.is-new-session {
|
|
348
|
+
.new-session-guide-wrapper.is-compact-layout {
|
|
349
|
+
flex: 1;
|
|
350
|
+
min-height: 0;
|
|
351
|
+
align-items: stretch;
|
|
352
|
+
justify-content: flex-start;
|
|
353
|
+
overflow-y: auto;
|
|
354
|
+
overscroll-behavior-y: contain;
|
|
355
|
+
-webkit-overflow-scrolling: touch;
|
|
356
|
+
padding: max(8px, env(safe-area-inset-top))
|
|
357
|
+
max(12px, env(safe-area-inset-right)) 12px
|
|
358
|
+
max(12px, env(safe-area-inset-left));
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.chat-composer-stack {
|
|
362
|
+
padding-top: 0;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.chat-messages {
|
|
367
|
+
padding: 6px max(12px, env(safe-area-inset-right)) 0
|
|
368
|
+
max(12px, env(safe-area-inset-left));
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.chat-turn-summary {
|
|
372
|
+
gap: 8px;
|
|
373
|
+
font-size: 12px;
|
|
374
|
+
|
|
375
|
+
&::before,
|
|
376
|
+
&::after {
|
|
377
|
+
min-width: 18px;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
.chat-turn-summary__content {
|
|
382
|
+
flex: 1;
|
|
383
|
+
justify-content: center;
|
|
384
|
+
flex-wrap: wrap;
|
|
385
|
+
row-gap: 4px;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.chat-turn-summary__meta {
|
|
389
|
+
flex-wrap: wrap;
|
|
390
|
+
justify-content: center;
|
|
391
|
+
row-gap: 2px;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.chat-turn-summary__time,
|
|
395
|
+
.chat-turn-summary__count {
|
|
396
|
+
white-space: normal;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
.chat-turn-summary__count::before {
|
|
400
|
+
margin-right: 6px;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
.chat-pending-session-banner {
|
|
404
|
+
width: min(100%, 320px);
|
|
405
|
+
padding: 8px 12px;
|
|
406
|
+
border-radius: 8px;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
.chat-composer-stack {
|
|
410
|
+
padding: 0 max(12px, env(safe-area-inset-right))
|
|
411
|
+
max(8px, env(safe-area-inset-bottom))
|
|
412
|
+
max(12px, env(safe-area-inset-left));
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
.chat-settings-panel {
|
|
416
|
+
padding: 12px max(12px, env(safe-area-inset-right))
|
|
417
|
+
calc(16px + env(safe-area-inset-bottom))
|
|
418
|
+
max(12px, env(safe-area-inset-left));
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
.scroll-bottom-btn {
|
|
422
|
+
transform: translateX(-48px);
|
|
423
|
+
width: 40px;
|
|
424
|
+
height: 40px;
|
|
425
|
+
}
|
|
426
|
+
}
|
package/src/routes/ChatRoute.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import './ChatRoute.scss'
|
|
2
2
|
|
|
3
3
|
import { Button, Empty } from 'antd'
|
|
4
|
+
import { useSetAtom } from 'jotai'
|
|
4
5
|
import { useEffect, useMemo, useRef } from 'react'
|
|
5
6
|
import { useTranslation } from 'react-i18next'
|
|
6
7
|
import { useNavigate, useParams, useSearchParams } from 'react-router-dom'
|
|
@@ -17,6 +18,8 @@ import { buildChatHistoryStatusNotices } from '#~/components/chat/messages/build
|
|
|
17
18
|
import { ChatTerminalView } from '#~/components/chat/terminal/ChatTerminalView.js'
|
|
18
19
|
import { useChatSession } from '#~/hooks/chat/use-chat-session'
|
|
19
20
|
import { useTerminalDockVisibility } from '#~/hooks/chat/use-terminal-dock-visibility'
|
|
21
|
+
import { useResponsiveLayout } from '#~/hooks/use-responsive-layout'
|
|
22
|
+
import { isMobileSidebarOpenAtom } from '#~/store/index'
|
|
20
23
|
|
|
21
24
|
export function ChatRoute() {
|
|
22
25
|
const { t } = useTranslation()
|
|
@@ -27,9 +30,7 @@ export function ChatRoute() {
|
|
|
27
30
|
() => listSessions('active')
|
|
28
31
|
)
|
|
29
32
|
const session = sessionId == null ? undefined : sessionsRes?.sessions.find(item => item.id === sessionId)
|
|
30
|
-
|
|
31
33
|
if (sessionId != null && isLoading) return null
|
|
32
|
-
|
|
33
34
|
if (sessionId != null && session == null) {
|
|
34
35
|
return (
|
|
35
36
|
<div className='chat-route__empty-state'>
|
|
@@ -45,9 +46,13 @@ export function ChatRoute() {
|
|
|
45
46
|
function ChatRouteView({ session }: { session?: Session }) {
|
|
46
47
|
const { t } = useTranslation()
|
|
47
48
|
const [searchParams] = useSearchParams()
|
|
49
|
+
const navigate = useNavigate()
|
|
50
|
+
const { isCompactLayout } = useResponsiveLayout()
|
|
51
|
+
const setIsMobileSidebarOpen = useSetAtom(isMobileSidebarOpenAtom)
|
|
48
52
|
const {
|
|
49
53
|
messages,
|
|
50
54
|
sessionInfo,
|
|
55
|
+
queuedMessages,
|
|
51
56
|
interactionRequest,
|
|
52
57
|
isReady,
|
|
53
58
|
errorState,
|
|
@@ -98,9 +103,10 @@ function ChatRouteView({ session }: { session?: Session }) {
|
|
|
98
103
|
const isEmptyNewSession = !session?.id && messages.length === 0 && historyStatusNotices.length === 0
|
|
99
104
|
const resolvedActiveView = session?.id != null ? activeView : 'history'
|
|
100
105
|
const shouldShowTerminal = session?.id != null && isTerminalOpen
|
|
101
|
-
const { isRendered: isTerminalRendered, isVisible: isTerminalVisible } = useTerminalDockVisibility(
|
|
106
|
+
const { isRendered: isTerminalRendered, isVisible: isTerminalVisible } = useTerminalDockVisibility(
|
|
107
|
+
shouldShowTerminal
|
|
108
|
+
)
|
|
102
109
|
const handledDeepLinkTargetRef = useRef('')
|
|
103
|
-
|
|
104
110
|
useEffect(() => {
|
|
105
111
|
if (deepLinkTargetKey === '') {
|
|
106
112
|
handledDeepLinkTargetRef.current = ''
|
|
@@ -111,30 +117,35 @@ function ChatRouteView({ session }: { session?: Session }) {
|
|
|
111
117
|
}
|
|
112
118
|
}
|
|
113
119
|
}, [activeView, deepLinkTargetKey, setActiveView])
|
|
114
|
-
|
|
115
120
|
return (
|
|
116
121
|
<div
|
|
117
122
|
className={`chat-container ${isReady ? 'ready' : ''} ${isEmptyNewSession ? 'is-new-session' : ''} ${
|
|
118
123
|
shouldShowTerminal ? 'has-terminal' : ''
|
|
119
124
|
}`}
|
|
120
125
|
>
|
|
121
|
-
{session?.id && (
|
|
126
|
+
{(session?.id != null || isCompactLayout) && (
|
|
122
127
|
<ChatHeader
|
|
123
128
|
sessionInfo={sessionInfo}
|
|
124
|
-
sessionId={session
|
|
125
|
-
sessionTitle={session
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
sessionId={session?.id}
|
|
130
|
+
sessionTitle={session?.title}
|
|
131
|
+
sessionStatus={session?.status}
|
|
132
|
+
isStarred={session?.isStarred}
|
|
133
|
+
isArchived={session?.isArchived}
|
|
134
|
+
tags={session?.tags}
|
|
135
|
+
lastMessage={session?.lastMessage}
|
|
136
|
+
lastUserMessage={session?.lastUserMessage}
|
|
131
137
|
activeView={resolvedActiveView}
|
|
132
138
|
isTerminalOpen={isTerminalOpen}
|
|
139
|
+
onCreateSession={() => {
|
|
140
|
+
void navigate('/')
|
|
141
|
+
}}
|
|
142
|
+
onOpenSidebar={() => {
|
|
143
|
+
setIsMobileSidebarOpen(true)
|
|
144
|
+
}}
|
|
133
145
|
onViewChange={setActiveView}
|
|
134
146
|
onToggleTerminal={() => setIsTerminalOpen(!isTerminalOpen)}
|
|
135
147
|
/>
|
|
136
148
|
)}
|
|
137
|
-
|
|
138
149
|
{resolvedActiveView === 'history' && (
|
|
139
150
|
<ChatHistoryView
|
|
140
151
|
isReady={isReady}
|
|
@@ -144,6 +155,7 @@ function ChatRouteView({ session }: { session?: Session }) {
|
|
|
144
155
|
targetToolUseId={targetToolUseId}
|
|
145
156
|
sessionInfo={sessionInfo}
|
|
146
157
|
historyStatusNotices={historyStatusNotices}
|
|
158
|
+
queuedMessages={queuedMessages}
|
|
147
159
|
onRetryConnection={retryConnection}
|
|
148
160
|
interactionRequest={interactionRequest}
|
|
149
161
|
onInteractionResponse={handleInteractionResponse}
|
|
@@ -172,26 +184,11 @@ function ChatRouteView({ session }: { session?: Session }) {
|
|
|
172
184
|
hasAvailableModels={hasAvailableModels}
|
|
173
185
|
/>
|
|
174
186
|
)}
|
|
175
|
-
|
|
176
|
-
{resolvedActiveView === '
|
|
177
|
-
<
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
{resolvedActiveView === 'settings' && session?.id && (
|
|
181
|
-
<ChatSettingsView
|
|
182
|
-
session={session}
|
|
183
|
-
sessionInfo={sessionInfo}
|
|
184
|
-
onClose={() => setActiveView('history')}
|
|
185
|
-
/>
|
|
186
|
-
)}
|
|
187
|
-
|
|
188
|
-
{isTerminalRendered && session?.id && (
|
|
189
|
-
<ChatTerminalView
|
|
190
|
-
isOpen={isTerminalVisible}
|
|
191
|
-
sessionId={session.id}
|
|
192
|
-
onClose={() => setIsTerminalOpen(false)}
|
|
193
|
-
/>
|
|
194
|
-
)}
|
|
187
|
+
{resolvedActiveView === 'timeline' && <ChatTimelineView messages={messages} />}
|
|
188
|
+
{resolvedActiveView === 'settings' && session?.id &&
|
|
189
|
+
<ChatSettingsView session={session} sessionInfo={sessionInfo} onClose={() => setActiveView('history')} />}
|
|
190
|
+
{isTerminalRendered && session?.id &&
|
|
191
|
+
<ChatTerminalView isOpen={isTerminalVisible} sessionId={session.id} onClose={() => setIsTerminalOpen(false)} />}
|
|
195
192
|
</div>
|
|
196
193
|
)
|
|
197
194
|
}
|
package/src/store/index.ts
CHANGED
|
@@ -11,6 +11,8 @@ export const isSidebarResizingAtom = atom<boolean>(false)
|
|
|
11
11
|
// 侧边栏是否折叠
|
|
12
12
|
export const isSidebarCollapsedAtom = atom(false)
|
|
13
13
|
|
|
14
|
+
export const isMobileSidebarOpenAtom = atom(false)
|
|
15
|
+
|
|
14
16
|
// 当前选中的会话 ID (全局 UI 状态,用于控制高亮等)
|
|
15
17
|
export const activeSessionIdAtom = atom<string | undefined>(undefined)
|
|
16
18
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{al as o,am as n}from"./mermaid.core-BrQnSGSY.js";const l=(a,r)=>o.lang.round(n.parse(a)[r]);export{l as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as r}from"./graph-KxESr4M5.js";var a=4;function n(o){return r(o,a)}export{n as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as o,p as e}from"./flowDb-c6c81e3f-DU0C5kCI.js";import{f as a,g as t}from"./styles-d45a18b0-C1bpSwV3.js";import{ar as i}from"./mermaid.core-BrQnSGSY.js";import"./graph-KxESr4M5.js";import"./layout-CxAyTlr7.js";import"./index-Pm_kLJvG.js";import"./index-5325376f-BMTAx2mL.js";import"./clone-B9_0v-6Y.js";import"./edges-96097737-Dd7m4Cvs.js";import"./createText-1719965b-DUVvEtmR.js";import"./line-DhaUfI71.js";import"./array-BKyUJesY.js";import"./path-CbwjOpE9.js";import"./channel-BvERb8WU.js";const n={parser:e,db:o,renderer:t,styles:a,init:r=>{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,i({flowchart:{arrowMarkerAbsolute:r.arrowMarkerAbsolute}}),t.setConf(r.flowchart),o.clear(),o.setGen("gen-2")}};export{n as diagram};
|