@vibe-forge/client 0.11.1 → 0.11.3
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 -1
- package/dist/assets/{arc-CSepokz3.js → arc-h39NrT24.js} +1 -1
- package/dist/assets/{blockDiagram-c4efeb88-D0ARcoNf.js → blockDiagram-c4efeb88-CaDg46I6.js} +1 -1
- package/dist/assets/{c4Diagram-c83219d4-BysYF9kP.js → c4Diagram-c83219d4-CDqjcF9U.js} +1 -1
- package/dist/assets/channel-CBULQbJz.js +1 -0
- package/dist/assets/{classDiagram-beda092f-BG1GhIOL.js → classDiagram-beda092f-BDnZm8nO.js} +1 -1
- package/dist/assets/{classDiagram-v2-2358418a-Dd08uGSH.js → classDiagram-v2-2358418a-BUi85KJW.js} +1 -1
- package/dist/assets/clone-dkS7LczW.js +1 -0
- package/dist/assets/{createText-1719965b-CigPEIEn.js → createText-1719965b-Ca5dEwfo.js} +1 -1
- package/dist/assets/{cssMode-MjflyEfm.js → cssMode-Ysz7NfYo.js} +1 -1
- package/dist/assets/{edges-96097737-DuTBJJRv.js → edges-96097737-CdSKqxZt.js} +1 -1
- package/dist/assets/{erDiagram-0228fc6a-Cp1bL7Y7.js → erDiagram-0228fc6a-B-veAUv_.js} +1 -1
- package/dist/assets/{flowDb-c6c81e3f-BfKbhiq5.js → flowDb-c6c81e3f-DD8Cx7_9.js} +1 -1
- package/dist/assets/{flowDiagram-50d868cf-m7gGc3PK.js → flowDiagram-50d868cf-9f-_x1ET.js} +1 -1
- package/dist/assets/flowDiagram-v2-4f6560a1-1miffU4x.js +1 -0
- package/dist/assets/{flowchart-elk-definition-6af322e1-EVeTDRRK.js → flowchart-elk-definition-6af322e1-5RhpQM4M.js} +1 -1
- package/dist/assets/{freemarker2-Bb3-QAIN.js → freemarker2-SgMdIXw4.js} +1 -1
- package/dist/assets/{ganttDiagram-a2739b55-DslB2U0R.js → ganttDiagram-a2739b55-DnxNghZA.js} +1 -1
- package/dist/assets/{gitGraphDiagram-82fe8481-C-KFWMXL.js → gitGraphDiagram-82fe8481-CBvS3Tf9.js} +1 -1
- package/dist/assets/{graph-CukaUc0o.js → graph-CkHF299-.js} +1 -1
- package/dist/assets/{handlebars-C4le-2Y6.js → handlebars-C57IyLUe.js} +1 -1
- package/dist/assets/{html-CjNiRs5S.js → html-YsDy5wvW.js} +1 -1
- package/dist/assets/{htmlMode-B73_3-We.js → htmlMode-7o_VDODD.js} +1 -1
- package/dist/assets/{index-5325376f-CVISZFPw.js → index-5325376f-BzOVQPu-.js} +1 -1
- package/dist/assets/{index-BZosmb5_.js → index-BHFpctk6.js} +320 -319
- package/dist/assets/index-D_XqxIvp.css +32 -0
- package/dist/assets/{infoDiagram-8eee0895-DoirLE1K.js → infoDiagram-8eee0895-DJ-UI1h4.js} +1 -1
- package/dist/assets/{javascript-BDjnqJFP.js → javascript-BHQ9NEZr.js} +1 -1
- package/dist/assets/{journeyDiagram-c64418c1-Ckn-p2CM.js → journeyDiagram-c64418c1-DwfykcG9.js} +1 -1
- package/dist/assets/{jsonMode-C-ftOc5j.js → jsonMode-3QjftkMM.js} +1 -1
- package/dist/assets/{layout-Z7yUG7hB.js → layout-CbViRb_b.js} +1 -1
- package/dist/assets/{line-DPG_cfAy.js → line-DBdBvv9D.js} +1 -1
- package/dist/assets/{linear--GSeVfMi.js → linear-BDAfhcjn.js} +1 -1
- package/dist/assets/{liquid-COiLZ9py.js → liquid-B0cPPzIR.js} +1 -1
- package/dist/assets/{lspLanguageFeatures-DGmhryFq.js → lspLanguageFeatures-IOxbobOz.js} +1 -1
- package/dist/assets/{mdx-BpL87Gej.js → mdx-Dma_RA8P.js} +1 -1
- package/dist/assets/{mermaid.core-Cg1CCDo6.js → mermaid.core-Cvn8Go4x.js} +4 -4
- package/dist/assets/{mindmap-definition-8da855dc-CKDof1lD.js → mindmap-definition-8da855dc-DEnYq0Lc.js} +1 -1
- package/dist/assets/{pieDiagram-a8764435-DwvCaZVE.js → pieDiagram-a8764435-ZC4j8sHU.js} +1 -1
- package/dist/assets/{python-63dBmWV_.js → python-Be0WX4q5.js} +1 -1
- package/dist/assets/{quadrantDiagram-1e28029f-CkzYBQpy.js → quadrantDiagram-1e28029f-DUaqHlIB.js} +1 -1
- package/dist/assets/{razor-C50tBqEZ.js → razor-Tjhny-uT.js} +1 -1
- package/dist/assets/{requirementDiagram-08caed73-Brgdjqf4.js → requirementDiagram-08caed73-DjSal3es.js} +1 -1
- package/dist/assets/{sankeyDiagram-a04cb91d-CGkYexrs.js → sankeyDiagram-a04cb91d-BMDXMrMz.js} +1 -1
- package/dist/assets/{sequenceDiagram-c5b8d532-D0wE-_J8.js → sequenceDiagram-c5b8d532-CQl9YUlH.js} +1 -1
- package/dist/assets/{stateDiagram-1ecb1508-BYb3NCXZ.js → stateDiagram-1ecb1508-DG7mU9jD.js} +1 -1
- package/dist/assets/{stateDiagram-v2-c2b004d7-DrPqi4Pt.js → stateDiagram-v2-c2b004d7-DTbR_azy.js} +1 -1
- package/dist/assets/{styles-b4e223ce-DD66TIO4.js → styles-b4e223ce-C9aS3zb8.js} +1 -1
- package/dist/assets/{styles-ca3715f6-iy02LHIV.js → styles-ca3715f6-Bh3keVTZ.js} +1 -1
- package/dist/assets/{styles-d45a18b0-BgqAgJyW.js → styles-d45a18b0-BDcLLa65.js} +1 -1
- package/dist/assets/{svgDrawCommon-b86b1483-CDq7ugnw.js → svgDrawCommon-b86b1483-B9H5ZS_9.js} +1 -1
- package/dist/assets/{timeline-definition-faaaa080-DzcLLjK0.js → timeline-definition-faaaa080-DCMYCBhK.js} +1 -1
- package/dist/assets/{tsMode-BFRFI4ct.js → tsMode-DVqLsn98.js} +1 -1
- package/dist/assets/{typescript-CBZQRAPv.js → typescript-wMVyXw7G.js} +1 -1
- package/dist/assets/{xml-BpWm6upt.js → xml-w0gzmn0c.js} +1 -1
- package/dist/assets/{xychartDiagram-f5964ef8-zBN8FmLQ.js → xychartDiagram-f5964ef8-CdxyD3K5.js} +1 -1
- package/dist/assets/{yaml-CqbJPiIP.js → yaml-C29TL1ed.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +9 -9
- package/src/api/sessions.ts +70 -1
- package/src/api/types.ts +2 -1
- package/src/api.ts +5 -0
- package/src/components/chat/AGENTS.md +14 -2
- package/src/components/chat/ChatComposerCard.scss +73 -0
- package/src/components/chat/ChatComposerCard.tsx +59 -0
- package/src/components/chat/ChatHeader.tsx +3 -1
- package/src/components/chat/ChatHistoryView.tsx +215 -49
- package/src/components/chat/CurrentTodoList.scss +210 -200
- package/src/components/chat/CurrentTodoList.tsx +116 -48
- package/src/components/chat/QueuedMessagesCard.scss +195 -0
- package/src/components/chat/QueuedMessagesCard.tsx +170 -0
- package/src/components/chat/sender/@components/adapter-select/AdapterSelectControl.scss +8 -0
- package/src/components/chat/sender/@components/sender-attachments/SenderAttachments.scss +152 -28
- package/src/components/chat/sender/@components/sender-attachments/SenderAttachments.tsx +95 -23
- package/src/components/chat/sender/@components/sender-body/SenderBody.tsx +7 -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-submit-action/SenderSubmitAction.scss +98 -1
- package/src/components/chat/sender/@components/sender-submit-action/SenderSubmitAction.tsx +137 -17
- 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/interaction-request.ts +2 -2
- package/src/components/chat/sender/@core/sender-toolbar-bindings.ts +28 -4
- 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 +19 -3
- package/src/components/chat/sender/@types/sender-toolbar-types.ts +12 -1
- package/src/components/chat/sender/Sender.scss +3 -0
- package/src/components/chat/sender/Sender.tsx +2 -12
- 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-session-actions.ts +99 -4
- package/src/hooks/chat/use-chat-session-messages.ts +20 -1
- package/src/hooks/chat/use-chat-session.ts +2 -0
- package/src/main.tsx +8 -0
- package/src/resources/locales/en.json +36 -5
- package/src/resources/locales/zh.json +36 -5
- package/src/routes/ChatRoute.scss +45 -1
- package/src/routes/ChatRoute.tsx +3 -0
- package/dist/assets/channel-CeKPk6Nd.js +0 -1
- package/dist/assets/clone-CrkD2PuD.js +0 -1
- package/dist/assets/flowDiagram-v2-4f6560a1-4ZU4bdp1.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
|
@@ -3,7 +3,7 @@ import type { SetStateAction } from 'react'
|
|
|
3
3
|
import { useTranslation } from 'react-i18next'
|
|
4
4
|
import { useSWRConfig } from 'swr'
|
|
5
5
|
|
|
6
|
-
import type { AskUserQuestionParams, ChatMessage, Session, WSEvent } from '@vibe-forge/core'
|
|
6
|
+
import type { AskUserQuestionParams, ChatMessage, Session, SessionMessageQueueState, WSEvent } from '@vibe-forge/core'
|
|
7
7
|
import type { SessionInfo } from '@vibe-forge/types'
|
|
8
8
|
|
|
9
9
|
import { getSessionMessages } from '#~/api.js'
|
|
@@ -25,6 +25,8 @@ import type { ChatSessionViewSnapshot } from './session-view-cache'
|
|
|
25
25
|
import type { ChatEffort } from './use-chat-effort'
|
|
26
26
|
import type { PermissionMode } from './use-chat-permission-mode'
|
|
27
27
|
|
|
28
|
+
const EMPTY_QUEUED_MESSAGES: SessionMessageQueueState = { steer: [], next: [] }
|
|
29
|
+
|
|
28
30
|
const applyMessageEvent = (currentMessages: ChatMessage[], data: WSEvent) => {
|
|
29
31
|
if (data.type !== 'message') return currentMessages
|
|
30
32
|
const exists = currentMessages.find((msg) => msg.id === data.message.id)
|
|
@@ -71,6 +73,7 @@ export function useChatSessionMessages({
|
|
|
71
73
|
const { mutate } = useSWRConfig()
|
|
72
74
|
const [messagesState, setMessagesState] = useState<ChatMessage[]>([])
|
|
73
75
|
const [sessionInfo, setSessionInfo] = useState<SessionInfo | null>(null)
|
|
76
|
+
const [queuedMessages, setQueuedMessages] = useState<SessionMessageQueueState>({ steer: [], next: [] })
|
|
74
77
|
const [isReady, setIsReady] = useState(false)
|
|
75
78
|
const [errorState, setErrorState] = useState<ChatErrorState | null>(null)
|
|
76
79
|
const [retryCount, setRetryCount] = useState(0)
|
|
@@ -94,6 +97,7 @@ export function useChatSessionMessages({
|
|
|
94
97
|
patch: Partial<{
|
|
95
98
|
messages: ChatMessage[]
|
|
96
99
|
sessionInfo: SessionInfo | null
|
|
100
|
+
queuedMessages: SessionMessageQueueState
|
|
97
101
|
errorState: ChatErrorState | null
|
|
98
102
|
interactionRequest: InteractionRequestState | null
|
|
99
103
|
isHydrated: boolean
|
|
@@ -174,9 +178,11 @@ export function useChatSessionMessages({
|
|
|
174
178
|
code: latestFatalError.code
|
|
175
179
|
}
|
|
176
180
|
: null
|
|
181
|
+
const nextQueuedMessages = res.queuedMessages ?? EMPTY_QUEUED_MESSAGES
|
|
177
182
|
|
|
178
183
|
interactionRequestRef.current = restoredInteraction
|
|
179
184
|
setInteractionRequest(restoredInteraction)
|
|
185
|
+
setQueuedMessages(nextQueuedMessages)
|
|
180
186
|
setErrorState(nextErrorState)
|
|
181
187
|
|
|
182
188
|
for (const data of events) {
|
|
@@ -192,6 +198,7 @@ export function useChatSessionMessages({
|
|
|
192
198
|
updateSessionViewCache(sessionId, {
|
|
193
199
|
messages: currentMessages,
|
|
194
200
|
sessionInfo: currentSessionInfo,
|
|
201
|
+
queuedMessages: nextQueuedMessages,
|
|
195
202
|
errorState: nextErrorState,
|
|
196
203
|
interactionRequest: restoredInteraction,
|
|
197
204
|
isHydrated: true
|
|
@@ -238,6 +245,7 @@ export function useChatSessionMessages({
|
|
|
238
245
|
if (session?.id == null || session.id === '') {
|
|
239
246
|
setMessagesState([])
|
|
240
247
|
setSessionInfo(null)
|
|
248
|
+
setQueuedMessages(EMPTY_QUEUED_MESSAGES)
|
|
241
249
|
setIsReady(true)
|
|
242
250
|
setErrorState(null)
|
|
243
251
|
setInteractionRequest(null)
|
|
@@ -255,12 +263,14 @@ export function useChatSessionMessages({
|
|
|
255
263
|
|
|
256
264
|
setMessagesState(restoredState.messages)
|
|
257
265
|
setSessionInfo(restoredState.sessionInfo)
|
|
266
|
+
setQueuedMessages(restoredState.queuedMessages)
|
|
258
267
|
setErrorState(restoredState.errorState)
|
|
259
268
|
setInteractionRequest(restoredState.interactionRequest)
|
|
260
269
|
interactionRequestRef.current = restoredState.interactionRequest
|
|
261
270
|
setIsReady(restoredState.isReady)
|
|
262
271
|
isInitialLoadRef.current = !restoredState.isReady
|
|
263
272
|
|
|
273
|
+
void refreshHistory()
|
|
264
274
|
void refreshHistory()
|
|
265
275
|
|
|
266
276
|
return () => {
|
|
@@ -414,6 +424,14 @@ export function useChatSessionMessages({
|
|
|
414
424
|
return
|
|
415
425
|
}
|
|
416
426
|
|
|
427
|
+
if (data.type === 'session_queue_updated') {
|
|
428
|
+
setQueuedMessages(data.queue)
|
|
429
|
+
updateSessionViewCache(session.id, {
|
|
430
|
+
queuedMessages: data.queue
|
|
431
|
+
})
|
|
432
|
+
return
|
|
433
|
+
}
|
|
434
|
+
|
|
417
435
|
if (data.type === 'message') {
|
|
418
436
|
setMessages((current) => applyMessageEvent(current, data))
|
|
419
437
|
return
|
|
@@ -513,6 +531,7 @@ export function useChatSessionMessages({
|
|
|
513
531
|
messages: messagesState,
|
|
514
532
|
setMessages,
|
|
515
533
|
sessionInfo,
|
|
534
|
+
queuedMessages,
|
|
516
535
|
isReady,
|
|
517
536
|
errorState,
|
|
518
537
|
retryConnection,
|
|
@@ -44,6 +44,7 @@ export function useChatSession({
|
|
|
44
44
|
messages,
|
|
45
45
|
setMessages,
|
|
46
46
|
sessionInfo,
|
|
47
|
+
queuedMessages,
|
|
47
48
|
isReady,
|
|
48
49
|
errorState,
|
|
49
50
|
retryConnection,
|
|
@@ -110,6 +111,7 @@ export function useChatSession({
|
|
|
110
111
|
return {
|
|
111
112
|
messages,
|
|
112
113
|
sessionInfo,
|
|
114
|
+
queuedMessages,
|
|
113
115
|
interactionRequest,
|
|
114
116
|
isReady,
|
|
115
117
|
errorState,
|
package/src/main.tsx
CHANGED
|
@@ -16,6 +16,14 @@ import { getClientBase, resolveDevDocumentTitle } from '#~/runtime-config.js'
|
|
|
16
16
|
|
|
17
17
|
import App from './App'
|
|
18
18
|
|
|
19
|
+
const gitRefLabel = import.meta.env.__VF_PROJECT_AI_GIT_REF_LABEL__ ?? ''
|
|
20
|
+
|
|
21
|
+
const appTitle = import.meta.env.DEV && gitRefLabel !== ''
|
|
22
|
+
? `Vibe Forge Web [${gitRefLabel}]`
|
|
23
|
+
: 'Vibe Forge Web'
|
|
24
|
+
|
|
25
|
+
document.title = appTitle
|
|
26
|
+
|
|
19
27
|
const root = createRoot(document.getElementById('root')!)
|
|
20
28
|
|
|
21
29
|
const clientBase = getClientBase()
|
|
@@ -289,8 +289,8 @@
|
|
|
289
289
|
"desc": "Manage roles, components, and domain entities for the project.",
|
|
290
290
|
"empty": "No entities found.",
|
|
291
291
|
"create": "Create Entity",
|
|
292
|
-
"createHint": "Create an entity definition
|
|
293
|
-
"importHint": "Import entity files
|
|
292
|
+
"createHint": "Create an entity definition file, then refresh the page.",
|
|
293
|
+
"importHint": "Import entity definition files, then refresh the page."
|
|
294
294
|
},
|
|
295
295
|
"flows": {
|
|
296
296
|
"title": "Flow Library",
|
|
@@ -351,6 +351,13 @@
|
|
|
351
351
|
"permissionReasons": "Reasons",
|
|
352
352
|
"permissionExpandOptions": "Show more options",
|
|
353
353
|
"permissionCollapseOptions": "Show fewer options",
|
|
354
|
+
"permissionConfirmOption": "Confirm option",
|
|
355
|
+
"permissionConfirmOptionTooltip": "Confirm the currently highlighted permission option",
|
|
356
|
+
"permissionSendBlockedTooltip": "A permission choice is still pending. Confirm the option above first.",
|
|
357
|
+
"permissionSendBlockedError": "A permission choice is still pending, so sending is temporarily disabled.",
|
|
358
|
+
"interactionOptionNavigation": "Quick option navigation",
|
|
359
|
+
"interactionOptionPrevious": "Previous option",
|
|
360
|
+
"interactionOptionNext": "Next option",
|
|
354
361
|
"tooltipSlashCommands": "Slash commands",
|
|
355
362
|
"tooltipMentionAgents": "Mention agents",
|
|
356
363
|
"tooltipInjectContext": "Inject context",
|
|
@@ -363,6 +370,24 @@
|
|
|
363
370
|
"modelRemoveRecommendation": "Remove from recommended models",
|
|
364
371
|
"effortShortcutTooltip": "Switch reasoning effort",
|
|
365
372
|
"sendShortcutTooltip": "Send message",
|
|
373
|
+
"queue": {
|
|
374
|
+
"steerTitle": "Send After Current Turn",
|
|
375
|
+
"nextTitle": "Send At Next Safe Point",
|
|
376
|
+
"count": "{{count}} queued",
|
|
377
|
+
"sendAfterTurn": "After turn",
|
|
378
|
+
"sendNext": "Next safe point",
|
|
379
|
+
"steerShortcutTooltip": "Queue the message until the current turn finishes",
|
|
380
|
+
"nextShortcutTooltip": "Queue the message and send it at the next safe point",
|
|
381
|
+
"attachmentsOnly": "Contains queued images or references",
|
|
382
|
+
"hasImage": "Contains images",
|
|
383
|
+
"hasReference": "Contains references",
|
|
384
|
+
"moveToSteer": "Move to send after current turn",
|
|
385
|
+
"moveToNext": "Move to send at next safe point",
|
|
386
|
+
"requeueMessage": "Re-queue message",
|
|
387
|
+
"stopCurrentRun": "Stop current run",
|
|
388
|
+
"stopShortcutTooltip": "Press Esc twice to stop the current run",
|
|
389
|
+
"stopShortcutConfirm": "Press Esc again to stop the current run"
|
|
390
|
+
},
|
|
366
391
|
"adapterLockedTooltip": "Adapters are locked after a session is created",
|
|
367
392
|
"referenceActionsShort": "More",
|
|
368
393
|
"referenceActionsTitle": "More",
|
|
@@ -595,9 +620,9 @@
|
|
|
595
620
|
},
|
|
596
621
|
"entities": {
|
|
597
622
|
"title": "Existing Entities",
|
|
598
|
-
"empty": "No entities found. Add
|
|
623
|
+
"empty": "No entities found. Add entity definition files to show them here.",
|
|
599
624
|
"create": "Quick Create Entity",
|
|
600
|
-
"createToast": "Create an entity definition
|
|
625
|
+
"createToast": "Create an entity definition file, then refresh the page."
|
|
601
626
|
},
|
|
602
627
|
"help": {
|
|
603
628
|
"title": "Help",
|
|
@@ -607,9 +632,15 @@
|
|
|
607
632
|
"footer": "Add usage guidance to flow descriptions when needed"
|
|
608
633
|
}
|
|
609
634
|
},
|
|
635
|
+
"attachments": {
|
|
636
|
+
"pastedImage": "Pasted image"
|
|
637
|
+
},
|
|
610
638
|
"todo": {
|
|
611
639
|
"noTasks": "No tasks planned",
|
|
612
|
-
"progress": "Progress: {{completed}}/{{total}} completed"
|
|
640
|
+
"progress": "Progress: {{completed}}/{{total}} completed",
|
|
641
|
+
"pendingCount": "{{count}} todo",
|
|
642
|
+
"inProgressCount": "{{count}} doing",
|
|
643
|
+
"completedCount": "{{count}} done"
|
|
613
644
|
},
|
|
614
645
|
"tools": {
|
|
615
646
|
"read": "Read File",
|
|
@@ -290,8 +290,8 @@
|
|
|
290
290
|
"desc": "管理项目内的角色、组件或领域实体。",
|
|
291
291
|
"empty": "暂未发现实体。",
|
|
292
292
|
"create": "新建实体",
|
|
293
|
-
"createHint": "
|
|
294
|
-
"importHint": "
|
|
293
|
+
"createHint": "请创建实体定义文件,保存后刷新页面。",
|
|
294
|
+
"importHint": "请导入实体定义文件,保存后刷新页面。"
|
|
295
295
|
},
|
|
296
296
|
"flows": {
|
|
297
297
|
"title": "流程库",
|
|
@@ -352,6 +352,13 @@
|
|
|
352
352
|
"permissionReasons": "原因",
|
|
353
353
|
"permissionExpandOptions": "展开更多选项",
|
|
354
354
|
"permissionCollapseOptions": "收起更多选项",
|
|
355
|
+
"permissionConfirmOption": "确认选项",
|
|
356
|
+
"permissionConfirmOptionTooltip": "确认当前高亮的权限选项",
|
|
357
|
+
"permissionSendBlockedTooltip": "当前正在等待权限选项确认,请先确认上方选项",
|
|
358
|
+
"permissionSendBlockedError": "当前正在等待权限选项确认,暂时不能发送消息",
|
|
359
|
+
"interactionOptionNavigation": "选项快速切换",
|
|
360
|
+
"interactionOptionPrevious": "上一个选项",
|
|
361
|
+
"interactionOptionNext": "下一个选项",
|
|
355
362
|
"tooltipSlashCommands": "快捷指令",
|
|
356
363
|
"tooltipMentionAgents": "提及代理",
|
|
357
364
|
"tooltipInjectContext": "注入上下文",
|
|
@@ -364,6 +371,24 @@
|
|
|
364
371
|
"modelRemoveRecommendation": "从推荐模型中移除",
|
|
365
372
|
"effortShortcutTooltip": "切换推理强度",
|
|
366
373
|
"sendShortcutTooltip": "发送消息",
|
|
374
|
+
"queue": {
|
|
375
|
+
"steerTitle": "等待当前轮结束后发送",
|
|
376
|
+
"nextTitle": "合适时机发送",
|
|
377
|
+
"count": "{{count}} 条待发送",
|
|
378
|
+
"sendAfterTurn": "等待结束后发",
|
|
379
|
+
"sendNext": "下一轮发",
|
|
380
|
+
"steerShortcutTooltip": "等待当前轮结束后发送",
|
|
381
|
+
"nextShortcutTooltip": "在下一个合适时机发送",
|
|
382
|
+
"attachmentsOnly": "包含待发送的图片或引用",
|
|
383
|
+
"hasImage": "包含图片",
|
|
384
|
+
"hasReference": "包含引用",
|
|
385
|
+
"moveToSteer": "移动到等待当前轮结束后发送",
|
|
386
|
+
"moveToNext": "移动到合适时机发送",
|
|
387
|
+
"requeueMessage": "重新入队",
|
|
388
|
+
"stopCurrentRun": "停止当前执行",
|
|
389
|
+
"stopShortcutTooltip": "按两次 Esc 停止当前执行",
|
|
390
|
+
"stopShortcutConfirm": "再按一次 Esc 停止当前执行"
|
|
391
|
+
},
|
|
367
392
|
"adapterLockedTooltip": "创建会话后适配器会锁定",
|
|
368
393
|
"referenceActionsShort": "更多",
|
|
369
394
|
"referenceActionsTitle": "更多",
|
|
@@ -596,9 +621,9 @@
|
|
|
596
621
|
},
|
|
597
622
|
"entities": {
|
|
598
623
|
"title": "已有实体",
|
|
599
|
-
"empty": "
|
|
624
|
+
"empty": "暂未发现实体,加入实体定义文件后即可展示。",
|
|
600
625
|
"create": "快速创建实体",
|
|
601
|
-
"createToast": "
|
|
626
|
+
"createToast": "请创建实体定义文件,保存后刷新页面。"
|
|
602
627
|
},
|
|
603
628
|
"help": {
|
|
604
629
|
"title": "一些帮助",
|
|
@@ -608,9 +633,15 @@
|
|
|
608
633
|
"footer": "需要更多引导时,可在流程描述中写明使用方式"
|
|
609
634
|
}
|
|
610
635
|
},
|
|
636
|
+
"attachments": {
|
|
637
|
+
"pastedImage": "粘贴图片"
|
|
638
|
+
},
|
|
611
639
|
"todo": {
|
|
612
640
|
"noTasks": "未规划任务",
|
|
613
|
-
"progress": "任务进度: {{completed}}/{{total}} 已完成"
|
|
641
|
+
"progress": "任务进度: {{completed}}/{{total}} 已完成",
|
|
642
|
+
"pendingCount": "{{count}} 待办",
|
|
643
|
+
"inProgressCount": "{{count}} 进行中",
|
|
644
|
+
"completedCount": "{{count}} 已完成"
|
|
614
645
|
},
|
|
615
646
|
"tools": {
|
|
616
647
|
"read": "读取文件",
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
.chat-container {
|
|
2
|
+
--chat-content-max-width: 1040px;
|
|
3
|
+
|
|
2
4
|
display: flex;
|
|
3
5
|
flex-direction: column;
|
|
4
6
|
flex: 1;
|
|
@@ -231,12 +233,48 @@
|
|
|
231
233
|
display: flex;
|
|
232
234
|
flex-direction: column;
|
|
233
235
|
justify-content: flex-end;
|
|
234
|
-
padding: 0 12px 12px;
|
|
235
236
|
transition:
|
|
236
237
|
flex .4s cubic-bezier(.4, 0, .2, 1),
|
|
237
238
|
padding-bottom .4s cubic-bezier(.4, 0, .2, 1);
|
|
238
239
|
}
|
|
239
240
|
|
|
241
|
+
.chat-composer-stack {
|
|
242
|
+
flex: 0;
|
|
243
|
+
padding: 0 24px 24px;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.chat-composer-stack__inner {
|
|
247
|
+
width: min(100%, var(--chat-content-max-width));
|
|
248
|
+
margin: 0 auto;
|
|
249
|
+
display: flex;
|
|
250
|
+
flex-direction: column;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.chat-composer-stack__inner > * {
|
|
254
|
+
width: 100%;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.chat-composer-stack__inner > :not(:first-child).chat-composer-card,
|
|
258
|
+
.chat-composer-stack__inner > :not(:first-child) .chat-composer-card {
|
|
259
|
+
border-top-left-radius: 0;
|
|
260
|
+
border-top-right-radius: 0;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.chat-composer-stack__inner > :not(:last-child).chat-composer-card,
|
|
264
|
+
.chat-composer-stack__inner > :not(:last-child) .chat-composer-card {
|
|
265
|
+
margin-bottom: -1px;
|
|
266
|
+
border-bottom-left-radius: 0;
|
|
267
|
+
border-bottom-right-radius: 0;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.chat-composer-stack__inner
|
|
271
|
+
> :not(:first-child):not(:last-child).chat-composer-card,
|
|
272
|
+
.chat-composer-stack__inner
|
|
273
|
+
> :not(:first-child):not(:last-child)
|
|
274
|
+
.chat-composer-card {
|
|
275
|
+
border-radius: 0;
|
|
276
|
+
}
|
|
277
|
+
|
|
240
278
|
.scroll-bottom-btn {
|
|
241
279
|
position: sticky;
|
|
242
280
|
bottom: 24px;
|
|
@@ -281,3 +319,9 @@
|
|
|
281
319
|
align-content: center;
|
|
282
320
|
gap: 16px;
|
|
283
321
|
}
|
|
322
|
+
|
|
323
|
+
@media (max-width: 768px) {
|
|
324
|
+
.chat-composer-stack {
|
|
325
|
+
padding: 0 16px 16px;
|
|
326
|
+
}
|
|
327
|
+
}
|
package/src/routes/ChatRoute.tsx
CHANGED
|
@@ -48,6 +48,7 @@ function ChatRouteView({ session }: { session?: Session }) {
|
|
|
48
48
|
const {
|
|
49
49
|
messages,
|
|
50
50
|
sessionInfo,
|
|
51
|
+
queuedMessages,
|
|
51
52
|
interactionRequest,
|
|
52
53
|
isReady,
|
|
53
54
|
errorState,
|
|
@@ -123,6 +124,7 @@ function ChatRouteView({ session }: { session?: Session }) {
|
|
|
123
124
|
sessionInfo={sessionInfo}
|
|
124
125
|
sessionId={session.id}
|
|
125
126
|
sessionTitle={session.title}
|
|
127
|
+
sessionStatus={session.status}
|
|
126
128
|
isStarred={session.isStarred}
|
|
127
129
|
isArchived={session.isArchived}
|
|
128
130
|
tags={session.tags}
|
|
@@ -144,6 +146,7 @@ function ChatRouteView({ session }: { session?: Session }) {
|
|
|
144
146
|
targetToolUseId={targetToolUseId}
|
|
145
147
|
sessionInfo={sessionInfo}
|
|
146
148
|
historyStatusNotices={historyStatusNotices}
|
|
149
|
+
queuedMessages={queuedMessages}
|
|
147
150
|
onRetryConnection={retryConnection}
|
|
148
151
|
interactionRequest={interactionRequest}
|
|
149
152
|
onInteractionResponse={handleInteractionResponse}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{al as o,am as n}from"./mermaid.core-Cg1CCDo6.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-CukaUc0o.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-BfKbhiq5.js";import{f as a,g as t}from"./styles-d45a18b0-BgqAgJyW.js";import{ar as i}from"./mermaid.core-Cg1CCDo6.js";import"./graph-CukaUc0o.js";import"./layout-Z7yUG7hB.js";import"./index-BZosmb5_.js";import"./index-5325376f-CVISZFPw.js";import"./clone-CrkD2PuD.js";import"./edges-96097737-DuTBJJRv.js";import"./createText-1719965b-CigPEIEn.js";import"./line-DPG_cfAy.js";import"./array-BKyUJesY.js";import"./path-CbwjOpE9.js";import"./channel-CeKPk6Nd.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};
|