@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.
Files changed (232) hide show
  1. package/cli.cjs +6 -11
  2. package/dist/assets/{arc-De_WjPJ3.js → arc-CbOXL0l9.js} +1 -1
  3. package/dist/assets/{blockDiagram-c4efeb88-C4aR2zTE.js → blockDiagram-c4efeb88-CqxINvsS.js} +1 -1
  4. package/dist/assets/{c4Diagram-c83219d4-BZH3rq_m.js → c4Diagram-c83219d4-BKazU0hb.js} +1 -1
  5. package/dist/assets/channel-Dnopc5A6.js +1 -0
  6. package/dist/assets/{classDiagram-beda092f-BzJgBrIK.js → classDiagram-beda092f-fAFX5BpB.js} +1 -1
  7. package/dist/assets/{classDiagram-v2-2358418a-5ZtXcnT3.js → classDiagram-v2-2358418a-w1VkNGJj.js} +1 -1
  8. package/dist/assets/clone-sQthahUA.js +1 -0
  9. package/dist/assets/{createText-1719965b-DUVvEtmR.js → createText-1719965b-CEinakVP.js} +1 -1
  10. package/dist/assets/{cssMode-GoTNjuXX.js → cssMode-DPqRki4y.js} +1 -1
  11. package/dist/assets/{edges-96097737-Dd7m4Cvs.js → edges-96097737-Cb0F1_3K.js} +1 -1
  12. package/dist/assets/{erDiagram-0228fc6a-DxqFlG_f.js → erDiagram-0228fc6a-C-N2fx-J.js} +1 -1
  13. package/dist/assets/{flowDb-c6c81e3f-DU0C5kCI.js → flowDb-c6c81e3f-D1Xz_8Gf.js} +1 -1
  14. package/dist/assets/{flowDiagram-50d868cf-Di1uDa_X.js → flowDiagram-50d868cf-DyPSZyAj.js} +1 -1
  15. package/dist/assets/flowDiagram-v2-4f6560a1-OazrdWQO.js +1 -0
  16. package/dist/assets/{flowchart-elk-definition-6af322e1-CwG8aty5.js → flowchart-elk-definition-6af322e1-Dr1DDXwE.js} +1 -1
  17. package/dist/assets/{freemarker2-j39cqTlI.js → freemarker2-C3DvPFaK.js} +1 -1
  18. package/dist/assets/{ganttDiagram-a2739b55-baO_lzL-.js → ganttDiagram-a2739b55-DmvY1GRj.js} +1 -1
  19. package/dist/assets/{gitGraphDiagram-82fe8481-COoHjYMf.js → gitGraphDiagram-82fe8481-CoXfPYYi.js} +1 -1
  20. package/dist/assets/{graph-KxESr4M5.js → graph-BkDQy7Qt.js} +1 -1
  21. package/dist/assets/{handlebars-BgjdZO8G.js → handlebars-BcTFdqjl.js} +1 -1
  22. package/dist/assets/{html-Ba7tYObe.js → html-Dg-O6XFr.js} +1 -1
  23. package/dist/assets/{htmlMode-Bztvbig1.js → htmlMode-B_wqYWvn.js} +1 -1
  24. package/dist/assets/{index-5325376f-BMTAx2mL.js → index-5325376f-kxPTR3_e.js} +1 -1
  25. package/dist/assets/index-o93dlo92.css +32 -0
  26. package/dist/assets/{index-Pm_kLJvG.js → index-wkhI4dr6.js} +350 -329
  27. package/dist/assets/{infoDiagram-8eee0895-CC74qbHY.js → infoDiagram-8eee0895-BEvqkwPI.js} +1 -1
  28. package/dist/assets/{javascript-C1e1cllX.js → javascript-DhlOH8_z.js} +1 -1
  29. package/dist/assets/{journeyDiagram-c64418c1-C4MyOdE6.js → journeyDiagram-c64418c1-gKtLYmmp.js} +1 -1
  30. package/dist/assets/{jsonMode-BC98AlvF.js → jsonMode-DxTbF9OD.js} +1 -1
  31. package/dist/assets/{layout-CxAyTlr7.js → layout-CDaZEk6E.js} +1 -1
  32. package/dist/assets/{line-DhaUfI71.js → line-DNRQu8iq.js} +1 -1
  33. package/dist/assets/{linear-MYukzldK.js → linear-Cph9Z6_j.js} +1 -1
  34. package/dist/assets/{liquid-DahfJEYl.js → liquid-ByZ6JgRG.js} +1 -1
  35. package/dist/assets/{lspLanguageFeatures-BWDJcswW.js → lspLanguageFeatures-DzvhkgnM.js} +1 -1
  36. package/dist/assets/{mdx-BELlF_FD.js → mdx-D8RGHTl6.js} +1 -1
  37. package/dist/assets/{mermaid.core-BrQnSGSY.js → mermaid.core-BgcryF__.js} +4 -4
  38. package/dist/assets/{mindmap-definition-8da855dc-B0FoxTiy.js → mindmap-definition-8da855dc-WrxK0FcB.js} +1 -1
  39. package/dist/assets/{pieDiagram-a8764435-Ddr2cjSL.js → pieDiagram-a8764435-VsZBsiQy.js} +1 -1
  40. package/dist/assets/{python--C9if_AD.js → python-CXVtk_cg.js} +1 -1
  41. package/dist/assets/{quadrantDiagram-1e28029f-BlEs7Mrl.js → quadrantDiagram-1e28029f-BVlgwOvU.js} +1 -1
  42. package/dist/assets/{razor-B9U9JxKn.js → razor-0tind7h2.js} +1 -1
  43. package/dist/assets/{requirementDiagram-08caed73-kEFOAu2v.js → requirementDiagram-08caed73-CpPMPoYp.js} +1 -1
  44. package/dist/assets/{sankeyDiagram-a04cb91d-BBghez8I.js → sankeyDiagram-a04cb91d-Cm5nnRmc.js} +1 -1
  45. package/dist/assets/{sequenceDiagram-c5b8d532-CJqgzdUE.js → sequenceDiagram-c5b8d532-DpMlJvJB.js} +1 -1
  46. package/dist/assets/{stateDiagram-1ecb1508-BER4XEI6.js → stateDiagram-1ecb1508-DU1zc7vq.js} +1 -1
  47. package/dist/assets/{stateDiagram-v2-c2b004d7-EBV2vSks.js → stateDiagram-v2-c2b004d7-D-0RgmAp.js} +1 -1
  48. package/dist/assets/{styles-b4e223ce-k0eswZsE.js → styles-b4e223ce-BSO-yNWV.js} +1 -1
  49. package/dist/assets/{styles-ca3715f6-Ckr7GA-0.js → styles-ca3715f6-CHnsn2Ro.js} +1 -1
  50. package/dist/assets/{styles-d45a18b0-C1bpSwV3.js → styles-d45a18b0-B-rVGjEq.js} +1 -1
  51. package/dist/assets/{svgDrawCommon-b86b1483-CDtKpGvy.js → svgDrawCommon-b86b1483-CA3Pl89f.js} +1 -1
  52. package/dist/assets/{timeline-definition-faaaa080-BeGR-vua.js → timeline-definition-faaaa080-BcihLR6s.js} +1 -1
  53. package/dist/assets/{tsMode-D_gJXIy3.js → tsMode-D9GGa5Ur.js} +1 -1
  54. package/dist/assets/{typescript-BoKcNXkN.js → typescript-BT9CK_EL.js} +1 -1
  55. package/dist/assets/{xml-DZvURlJ-.js → xml-DNO75J-T.js} +1 -1
  56. package/dist/assets/{xychartDiagram-f5964ef8-DxfeLuYV.js → xychartDiagram-f5964ef8-DJTwe32X.js} +1 -1
  57. package/dist/assets/{yaml-CTC8PAGY.js → yaml-7CVzhiP2.js} +1 -1
  58. package/dist/index.html +2 -2
  59. package/package.json +13 -10
  60. package/src/api/git.ts +12 -0
  61. package/src/api/sessions.ts +131 -4
  62. package/src/api/types.ts +2 -1
  63. package/src/api.ts +13 -0
  64. package/src/components/ArchiveView.scss +143 -54
  65. package/src/components/ArchiveView.tsx +181 -167
  66. package/src/components/CodeBlock.scss +5 -0
  67. package/src/components/ConfigView.scss +142 -31
  68. package/src/components/ConfigView.tsx +161 -86
  69. package/src/components/MarkdownContent.tsx +7 -0
  70. package/src/components/NavRail.scss +248 -0
  71. package/src/components/NavRail.tsx +80 -107
  72. package/src/components/NavRailCompact.tsx +107 -0
  73. package/src/components/NavRailCompactMoreSheet.tsx +141 -0
  74. package/src/components/ShortcutTooltip.tsx +4 -2
  75. package/src/components/Sidebar.scss +51 -0
  76. package/src/components/Sidebar.tsx +43 -16
  77. package/src/components/automation-view/RuleFormPanel.scss +40 -13
  78. package/src/components/automation-view/RuleSidebar.scss +73 -47
  79. package/src/components/automation-view/RuleSidebar.tsx +9 -13
  80. package/src/components/automation-view/RunHistoryPanel.scss +141 -13
  81. package/src/components/automation-view/RunHistoryPanel.tsx +203 -161
  82. package/src/components/automation-view/TaskList.scss +44 -13
  83. package/src/components/automation-view/TriggerList.scss +46 -14
  84. package/src/components/automation-view/index.scss +82 -10
  85. package/src/components/automation-view/index.tsx +108 -55
  86. package/src/components/benchmark-view/BenchmarkCasePanel.scss +36 -16
  87. package/src/components/benchmark-view/BenchmarkSidebar.scss +44 -22
  88. package/src/components/benchmark-view/BenchmarkSidebar.tsx +0 -6
  89. package/src/components/benchmark-view/BenchmarkView.scss +63 -20
  90. package/src/components/benchmark-view/index.tsx +71 -34
  91. package/src/components/chat/AGENTS.md +14 -2
  92. package/src/components/chat/ChatComposerCard.scss +77 -0
  93. package/src/components/chat/ChatComposerCard.tsx +59 -0
  94. package/src/components/chat/ChatHeader.scss +187 -0
  95. package/src/components/chat/ChatHeader.tsx +209 -57
  96. package/src/components/chat/ChatHistoryView.tsx +279 -52
  97. package/src/components/chat/ChatTimelineView.scss +94 -1
  98. package/src/components/chat/ChatTimelineView.tsx +42 -0
  99. package/src/components/chat/CurrentTodoList.scss +210 -200
  100. package/src/components/chat/CurrentTodoList.tsx +116 -48
  101. package/src/components/chat/NewSessionGuide.scss +139 -1
  102. package/src/components/chat/NewSessionGuide.tsx +57 -100
  103. package/src/components/chat/NewSessionGuideCompactPanel.tsx +130 -0
  104. package/src/components/chat/NewSessionGuideGrid.tsx +141 -0
  105. package/src/components/chat/QueuedMessagesCard.scss +195 -0
  106. package/src/components/chat/QueuedMessagesCard.tsx +170 -0
  107. package/src/components/chat/git-controls/BranchSwitcherDropdown.tsx +61 -56
  108. package/src/components/chat/git-controls/BranchSwitcherResults.tsx +167 -0
  109. package/src/components/chat/git-controls/BranchTreeEntries.tsx +99 -0
  110. package/src/components/chat/git-controls/ChatGitControls.scss +437 -5
  111. package/src/components/chat/git-controls/ChatGitControls.tsx +136 -109
  112. package/src/components/chat/git-controls/DraftGitControls.tsx +91 -0
  113. package/src/components/chat/git-controls/GitOperationsDropdown.tsx +10 -2
  114. package/src/components/chat/git-controls/GitWorktreeDropdown.tsx +301 -28
  115. package/src/components/chat/git-controls/git-branch-tree.ts +148 -0
  116. package/src/components/chat/git-controls/use-chat-draft-git-controls.ts +168 -0
  117. package/src/components/chat/git-controls/use-chat-git-controls.ts +76 -3
  118. package/src/components/chat/messages/MessageContextMenu.tsx +3 -1
  119. package/src/components/chat/messages/MessageItem.scss +78 -4
  120. package/src/components/chat/messages/MessageItem.tsx +47 -3
  121. package/src/components/chat/sender/@components/adapter-select/AdapterSelectControl.scss +23 -0
  122. package/src/components/chat/sender/@components/reference-actions/ReferenceActionsControl.scss +17 -0
  123. package/src/components/chat/sender/@components/reference-actions/ReferencePermissionActionsPopover.tsx +4 -1
  124. package/src/components/chat/sender/@components/sender-attachments/SenderAttachments.scss +167 -30
  125. package/src/components/chat/sender/@components/sender-attachments/SenderAttachments.tsx +95 -23
  126. package/src/components/chat/sender/@components/sender-body/SenderBody.tsx +10 -0
  127. package/src/components/chat/sender/@components/sender-interaction-panel/SenderInteractionPanel.scss +161 -45
  128. package/src/components/chat/sender/@components/sender-interaction-panel/SenderInteractionPanel.tsx +310 -71
  129. package/src/components/chat/sender/@components/sender-monaco-editor/SenderMonacoEditor.tsx +18 -0
  130. package/src/components/chat/sender/@components/sender-monaco-editor/use-sender-monaco-editor.ts +86 -9
  131. package/src/components/chat/sender/@components/sender-monaco-editor/use-sender-monaco-theme.ts +52 -3
  132. package/src/components/chat/sender/@components/sender-submit-action/SenderSubmitAction.scss +110 -1
  133. package/src/components/chat/sender/@components/sender-submit-action/SenderSubmitAction.tsx +137 -17
  134. package/src/components/chat/sender/@components/sender-toolbar/SenderSelectBase.scss +21 -0
  135. package/src/components/chat/sender/@components/sender-toolbar/SenderSelectShared.scss +21 -0
  136. package/src/components/chat/sender/@components/sender-toolbar/SenderToolbar.scss +63 -0
  137. package/src/components/chat/sender/@components/sender-toolbar/SenderToolbar.tsx +12 -6
  138. package/src/components/chat/sender/@core/build-sender-controller-result.ts +6 -0
  139. package/src/components/chat/sender/@core/build-sender-toolbar.ts +25 -2
  140. package/src/components/chat/sender/@core/create-sender-toolbar-handlers.ts +9 -2
  141. package/src/components/chat/sender/@core/get-sender-runtime-state.ts +1 -1
  142. package/src/components/chat/sender/@core/interaction-request.ts +2 -2
  143. package/src/components/chat/sender/@core/sender-toolbar-bindings.ts +28 -4
  144. package/src/components/chat/sender/@hooks/use-model-select-browser.tsx +4 -2
  145. package/src/components/chat/sender/@hooks/use-sender-controller.ts +56 -11
  146. package/src/components/chat/sender/@hooks/use-sender-keydown.ts +64 -0
  147. package/src/components/chat/sender/@hooks/use-sender-shortcuts.ts +16 -1
  148. package/src/components/chat/sender/@hooks/use-sender-submit.ts +16 -8
  149. package/src/components/chat/sender/@types/sender-props.ts +20 -3
  150. package/src/components/chat/sender/@types/sender-toolbar-types.ts +12 -1
  151. package/src/components/chat/sender/Sender.scss +4 -1
  152. package/src/components/chat/sender/Sender.tsx +3 -12
  153. package/src/components/chat/session-timeline-panel/EventList.scss +88 -0
  154. package/src/components/chat/session-timeline-panel/EventList.tsx +99 -47
  155. package/src/components/chat/session-timeline-panel/gantt.ts +23 -7
  156. package/src/components/chat/session-timeline-panel/git-graph.ts +6 -1
  157. package/src/components/chat/session-timeline-panel/index.scss +14 -1
  158. package/src/components/chat/session-timeline-panel/index.tsx +86 -10
  159. package/src/components/chat/session-timeline-panel/types.ts +4 -0
  160. package/src/components/chat/status-bar/ChatStatusBar.scss +27 -0
  161. package/src/components/chat/status-bar/ChatStatusBar.tsx +39 -0
  162. package/src/components/chat/terminal/ChatTerminalView.tsx +6 -0
  163. package/src/components/chat/tools/core/ToolCallBox.scss +19 -0
  164. package/src/components/chat/tools/core/ToolGroup.scss +32 -0
  165. package/src/components/chat/tools/task/components/TaskToolCard.scss +59 -1
  166. package/src/components/config/ConfigEditors.scss +20 -6
  167. package/src/components/config/ConfigFieldRow.scss +57 -17
  168. package/src/components/config/ConfigSectionForm.scss +10 -4
  169. package/src/components/config/ConfigSectionPanel.tsx +18 -11
  170. package/src/components/config/configSchema.ts +1 -0
  171. package/src/components/config/record-editors/RecordEditors.scss +42 -9
  172. package/src/components/dock-panel/DockPanel.scss +6 -2
  173. package/src/components/dock-panel/DockPanel.tsx +12 -16
  174. package/src/components/knowledge-base/KnowledgeBaseView.scss +180 -6
  175. package/src/components/knowledge-base/KnowledgeBaseView.tsx +98 -26
  176. package/src/components/knowledge-base/components/ActionButton.scss +4 -0
  177. package/src/components/knowledge-base/components/EmptyState.scss +5 -8
  178. package/src/components/knowledge-base/components/EntitiesTab.tsx +8 -2
  179. package/src/components/knowledge-base/components/EntityItem.scss +10 -3
  180. package/src/components/knowledge-base/components/FilterBar.scss +13 -2
  181. package/src/components/knowledge-base/components/FlowsTab.tsx +8 -2
  182. package/src/components/knowledge-base/components/KnowledgeBaseHeader.scss +2 -23
  183. package/src/components/knowledge-base/components/KnowledgeBaseHeader.tsx +0 -5
  184. package/src/components/knowledge-base/components/KnowledgeList.scss +15 -6
  185. package/src/components/knowledge-base/components/LoadingState.scss +4 -0
  186. package/src/components/knowledge-base/components/RuleItem.scss +86 -0
  187. package/src/components/knowledge-base/components/RuleItem.tsx +2 -0
  188. package/src/components/knowledge-base/components/RulesTab.tsx +8 -2
  189. package/src/components/knowledge-base/components/SectionHeader.scss +3 -18
  190. package/src/components/knowledge-base/components/SectionHeader.tsx +3 -7
  191. package/src/components/knowledge-base/components/SkillsTab.tsx +8 -3
  192. package/src/components/knowledge-base/components/SpecItem.scss +16 -7
  193. package/src/components/layout/@hooks/use-mobile-sidebar-modal.ts +190 -0
  194. package/src/components/layout/AppShell.scss +106 -6
  195. package/src/components/layout/AppShell.tsx +118 -10
  196. package/src/components/layout/PageShell.scss +41 -0
  197. package/src/components/layout/PageShell.tsx +32 -0
  198. package/src/components/layout/mobile-sidebar-constants.ts +1 -0
  199. package/src/components/nav-rail-compact-config.ts +114 -0
  200. package/src/components/nav-rail-items.tsx +181 -0
  201. package/src/components/sidebar/SessionContextMenu.tsx +3 -1
  202. package/src/components/sidebar/SessionItem.scss +62 -0
  203. package/src/components/sidebar/SessionItem.tsx +97 -52
  204. package/src/components/sidebar/SessionList.tsx +6 -0
  205. package/src/components/sidebar/SidebarHeader.scss +49 -0
  206. package/src/components/sidebar/SidebarHeader.tsx +27 -5
  207. package/src/components/sidebar/SidebarHeaderBatchActions.tsx +8 -4
  208. package/src/components/sidebar/SidebarHeaderSearchActions.tsx +6 -3
  209. package/src/components/sidebar/SidebarUtilityFooter.tsx +69 -0
  210. package/src/components/workspace/ContextFilePicker.tsx +12 -4
  211. package/src/hooks/chat/chat-session-workspace-draft.ts +25 -0
  212. package/src/hooks/chat/session-view-cache.ts +4 -1
  213. package/src/hooks/chat/use-chat-adapter.ts +5 -1
  214. package/src/hooks/chat/use-chat-model-adapter-selection.tsx +5 -1
  215. package/src/hooks/chat/use-chat-scroll.ts +24 -7
  216. package/src/hooks/chat/use-chat-session-actions.ts +118 -6
  217. package/src/hooks/chat/use-chat-session-messages.ts +20 -1
  218. package/src/hooks/chat/use-chat-session.ts +2 -0
  219. package/src/hooks/use-responsive-layout.ts +115 -0
  220. package/src/main.tsx +8 -0
  221. package/src/resources/adapters.ts +15 -0
  222. package/src/resources/locales/en.json +84 -1
  223. package/src/resources/locales/zh.json +84 -1
  224. package/src/routes/ChatRoute.scss +152 -9
  225. package/src/routes/ChatRoute.tsx +31 -34
  226. package/src/store/index.ts +2 -0
  227. package/dist/assets/channel-BvERb8WU.js +0 -1
  228. package/dist/assets/clone-B9_0v-6Y.js +0 -1
  229. package/dist/assets/flowDiagram-v2-4f6560a1-LpS8Kb00.js +0 -1
  230. package/dist/assets/index-C1oh0w9H.css +0 -32
  231. package/src/components/chat/ThinkingStatus.scss +0 -70
  232. 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
- box-shadow: 0 8px 24px rgba(59, 130, 246, .08);
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: 24px;
294
+ bottom: max(16px, env(safe-area-inset-bottom));
243
295
  left: 100%;
244
- transform: translateX(-40px);
245
- width: 32px;
246
- height: 32px;
247
- border-radius: 50%;
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: 0 4px 6px -1px rgba(0, 0, 0, .1);
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: 20px 24px 24px;
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
+ }
@@ -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(shouldShowTerminal)
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.id}
125
- sessionTitle={session.title}
126
- isStarred={session.isStarred}
127
- isArchived={session.isArchived}
128
- tags={session.tags}
129
- lastMessage={session.lastMessage}
130
- lastUserMessage={session.lastUserMessage}
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 === 'timeline' && (
177
- <ChatTimelineView messages={messages} />
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
  }
@@ -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};