@vibe-forge/client 0.8.3 → 0.9.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/dist/assets/{arc-CZwEW7WR.js → arc-D9HxM0yv.js} +1 -1
- package/dist/assets/{blockDiagram-c4efeb88--ejJ1hay.js → blockDiagram-c4efeb88-C_pTeiD4.js} +1 -1
- package/dist/assets/{c4Diagram-c83219d4-D0N419di.js → c4Diagram-c83219d4-_oYrCrLr.js} +1 -1
- package/dist/assets/channel-Di8KkPU4.js +1 -0
- package/dist/assets/{classDiagram-beda092f-BRVsm_of.js → classDiagram-beda092f-9dnkgPhR.js} +1 -1
- package/dist/assets/{classDiagram-v2-2358418a-OShdAlFU.js → classDiagram-v2-2358418a-BUIeZpdO.js} +1 -1
- package/dist/assets/clone-B065n6L-.js +1 -0
- package/dist/assets/{createText-1719965b-psgY2hME.js → createText-1719965b-DuRFplcD.js} +1 -1
- package/dist/assets/{edges-96097737-BA56Qmd2.js → edges-96097737-CTpq6Ih_.js} +1 -1
- package/dist/assets/{erDiagram-0228fc6a-Dyrrgc5j.js → erDiagram-0228fc6a-CWFgdO1E.js} +1 -1
- package/dist/assets/{flowDb-c6c81e3f-CRgQ7Xd3.js → flowDb-c6c81e3f-8Vdx29oZ.js} +1 -1
- package/dist/assets/{flowDiagram-50d868cf-B73a9Glk.js → flowDiagram-50d868cf-6S9wOVNl.js} +1 -1
- package/dist/assets/flowDiagram-v2-4f6560a1-nj-oVLPK.js +1 -0
- package/dist/assets/{flowchart-elk-definition-6af322e1-DtsYC0Wf.js → flowchart-elk-definition-6af322e1-DVcZ-ZBQ.js} +1 -1
- package/dist/assets/{ganttDiagram-a2739b55-gzdnsQCV.js → ganttDiagram-a2739b55-DY1QSl-x.js} +1 -1
- package/dist/assets/{gitGraphDiagram-82fe8481-RHa92Mol.js → gitGraphDiagram-82fe8481-BP08OBKL.js} +1 -1
- package/dist/assets/{graph-Uj8iC7DB.js → graph-D8GCszcN.js} +1 -1
- package/dist/assets/{index-5325376f-B2Q_MiDU.js → index-5325376f-OOoAXU1u.js} +1 -1
- package/dist/assets/{index-DGEAe87I.css → index-BZe1Qtye.css} +1 -1
- package/dist/assets/{index-ADFje5Kc.js → index-DV3eI2aD.js} +77 -77
- package/dist/assets/{infoDiagram-8eee0895-BIrv_GjX.js → infoDiagram-8eee0895-BHgkXjhJ.js} +1 -1
- package/dist/assets/{journeyDiagram-c64418c1-DMZd-Mfh.js → journeyDiagram-c64418c1-BljInElp.js} +1 -1
- package/dist/assets/{layout-Bwa2VjOX.js → layout-Cw-SwAFD.js} +1 -1
- package/dist/assets/{line-BDn4wwV7.js → line-Q-uZLuUr.js} +1 -1
- package/dist/assets/{linear-DQPiAjW8.js → linear-BahOnNn3.js} +1 -1
- package/dist/assets/{mermaid.core-B5GfAmDT.js → mermaid.core-BR0Qh3Rd.js} +4 -4
- package/dist/assets/{mindmap-definition-8da855dc-BTOOR2ac.js → mindmap-definition-8da855dc-Brq2OJUZ.js} +1 -1
- package/dist/assets/{pieDiagram-a8764435-C3QNifd4.js → pieDiagram-a8764435-uhYdiXro.js} +1 -1
- package/dist/assets/{quadrantDiagram-1e28029f-Ds5ATncA.js → quadrantDiagram-1e28029f-TwqtEe7e.js} +1 -1
- package/dist/assets/{requirementDiagram-08caed73-CVdpqqVi.js → requirementDiagram-08caed73-DSXnPRDS.js} +1 -1
- package/dist/assets/{sankeyDiagram-a04cb91d-CxP85079.js → sankeyDiagram-a04cb91d-EADpJeAn.js} +1 -1
- package/dist/assets/{sequenceDiagram-c5b8d532-BeaQEYgt.js → sequenceDiagram-c5b8d532-C8qXvt9z.js} +1 -1
- package/dist/assets/{stateDiagram-1ecb1508-Bv-YlfIf.js → stateDiagram-1ecb1508-5W0ghy_S.js} +1 -1
- package/dist/assets/{stateDiagram-v2-c2b004d7-CWKsGrvN.js → stateDiagram-v2-c2b004d7-BfwOQJw4.js} +1 -1
- package/dist/assets/{styles-b4e223ce-DzdnfR-A.js → styles-b4e223ce-EkKH_ULb.js} +1 -1
- package/dist/assets/{styles-ca3715f6-BS5E4Xdv.js → styles-ca3715f6-DwhrtqlU.js} +1 -1
- package/dist/assets/{styles-d45a18b0-t7c5i-_-.js → styles-d45a18b0-yqL8KH6x.js} +1 -1
- package/dist/assets/{svgDrawCommon-b86b1483-CyA-VVES.js → svgDrawCommon-b86b1483--5VjnjhC.js} +1 -1
- package/dist/assets/{timeline-definition-faaaa080-BuFEjpzk.js → timeline-definition-faaaa080-CWOTwik9.js} +1 -1
- package/dist/assets/{xychartDiagram-f5964ef8-B4b4QqYX.js → xychartDiagram-f5964ef8-CZg47H1t.js} +1 -1
- package/dist/favicon.svg +5 -0
- package/dist/index.html +3 -2
- package/index.html +2 -1
- package/package.json +10 -10
- package/public/favicon.svg +5 -0
- package/src/components/chat/sender/Sender.scss +140 -0
- package/src/components/chat/sender/Sender.tsx +75 -33
- package/src/components/chat/sender/interaction-request.ts +5 -0
- package/src/components/config/ConfigSectionForm.tsx +0 -1
- package/src/components/config/configSchema.ts +2 -23
- package/src/hooks/chat/interaction-state.ts +37 -0
- package/src/hooks/chat/use-chat-session-messages.ts +11 -4
- package/src/hooks/use-session-subscription.ts +31 -8
- package/src/resources/locales/en.json +11 -0
- package/src/resources/locales/zh.json +11 -0
- package/src/runtime-config.ts +18 -9
- package/dist/assets/channel-dXWmEygA.js +0 -1
- package/dist/assets/clone-C4IafnWc.js +0 -1
- package/dist/assets/flowDiagram-v2-4f6560a1-Ccm4QuQe.js +0 -1
|
@@ -71,14 +71,37 @@ export function useSessionSubscription() {
|
|
|
71
71
|
useEffect(() => {
|
|
72
72
|
let disposed = false
|
|
73
73
|
let socket: WebSocket | undefined
|
|
74
|
-
let
|
|
74
|
+
let connectTimer: ReturnType<typeof setTimeout> | undefined
|
|
75
|
+
|
|
76
|
+
const closeSocket = (target: WebSocket | undefined) => {
|
|
77
|
+
if (!target) return
|
|
78
|
+
if (target.readyState === WebSocket.CLOSED || target.readyState === WebSocket.CLOSING) {
|
|
79
|
+
return
|
|
80
|
+
}
|
|
81
|
+
if (target.readyState === WebSocket.CONNECTING) {
|
|
82
|
+
target.addEventListener('open', () => target.close(), { once: true })
|
|
83
|
+
return
|
|
84
|
+
}
|
|
85
|
+
target.close()
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const scheduleConnect = (delay = 0) => {
|
|
89
|
+
if (disposed) return
|
|
90
|
+
if (connectTimer) {
|
|
91
|
+
clearTimeout(connectTimer)
|
|
92
|
+
}
|
|
93
|
+
connectTimer = setTimeout(() => {
|
|
94
|
+
connectTimer = undefined
|
|
95
|
+
connect()
|
|
96
|
+
}, delay)
|
|
97
|
+
}
|
|
75
98
|
|
|
76
99
|
const connect = () => {
|
|
77
100
|
if (disposed) return
|
|
78
101
|
|
|
79
102
|
socket = createSocket({
|
|
80
103
|
onMessage: (data: WSEvent) => {
|
|
81
|
-
if (data.type !== 'session_updated') return
|
|
104
|
+
if (disposed || data.type !== 'session_updated') return
|
|
82
105
|
const updatedSession = data.session as SessionUpdate
|
|
83
106
|
|
|
84
107
|
void mutate('/api/sessions', (prev: SessionListResponse | undefined) => {
|
|
@@ -91,22 +114,22 @@ export function useSessionSubscription() {
|
|
|
91
114
|
},
|
|
92
115
|
onClose: () => {
|
|
93
116
|
if (disposed) return
|
|
94
|
-
|
|
117
|
+
scheduleConnect(1000)
|
|
95
118
|
},
|
|
96
119
|
onError: () => {
|
|
97
|
-
socket
|
|
120
|
+
closeSocket(socket)
|
|
98
121
|
}
|
|
99
122
|
}, { subscribe: 'sessions' })
|
|
100
123
|
}
|
|
101
124
|
|
|
102
|
-
|
|
125
|
+
scheduleConnect()
|
|
103
126
|
|
|
104
127
|
return () => {
|
|
105
128
|
disposed = true
|
|
106
|
-
if (
|
|
107
|
-
clearTimeout(
|
|
129
|
+
if (connectTimer) {
|
|
130
|
+
clearTimeout(connectTimer)
|
|
108
131
|
}
|
|
109
|
-
socket
|
|
132
|
+
closeSocket(socket)
|
|
110
133
|
}
|
|
111
134
|
}, [mutate])
|
|
112
135
|
}
|
|
@@ -310,6 +310,17 @@
|
|
|
310
310
|
"connectionError": "WebSocket connection failed. Check the server and try again.",
|
|
311
311
|
"connectionClosed": "WebSocket connection closed. Try reconnecting.",
|
|
312
312
|
"retryConnection": "Retry",
|
|
313
|
+
"permissionRequestBadge": "Permission request",
|
|
314
|
+
"permissionCurrentMode": "Current mode",
|
|
315
|
+
"permissionSuggestedMode": "Suggested mode",
|
|
316
|
+
"permissionDeniedTools": "Restricted tools",
|
|
317
|
+
"permissionReasons": "Reasons",
|
|
318
|
+
"tooltipSlashCommands": "Slash commands",
|
|
319
|
+
"tooltipMentionAgents": "Mention agents",
|
|
320
|
+
"tooltipInjectContext": "Inject context",
|
|
321
|
+
"tooltipUploadImages": "Upload images",
|
|
322
|
+
"effortSelectPlaceholder": "Effort",
|
|
323
|
+
"permissionModeSelectPlaceholder": "Permission mode",
|
|
313
324
|
"assetWarningsTitle": "Compatibility notes",
|
|
314
325
|
"assetWarningsCount": "{{count}} asset warnings",
|
|
315
326
|
"assetWarningsMore": "+{{count}} more",
|
|
@@ -311,6 +311,17 @@
|
|
|
311
311
|
"connectionError": "WebSocket 连接失败,请检查服务状态后重试",
|
|
312
312
|
"connectionClosed": "WebSocket 连接已关闭,请重试",
|
|
313
313
|
"retryConnection": "重试连接",
|
|
314
|
+
"permissionRequestBadge": "权限请求",
|
|
315
|
+
"permissionCurrentMode": "当前模式",
|
|
316
|
+
"permissionSuggestedMode": "建议模式",
|
|
317
|
+
"permissionDeniedTools": "受限工具",
|
|
318
|
+
"permissionReasons": "原因",
|
|
319
|
+
"tooltipSlashCommands": "快捷指令",
|
|
320
|
+
"tooltipMentionAgents": "提及代理",
|
|
321
|
+
"tooltipInjectContext": "注入上下文",
|
|
322
|
+
"tooltipUploadImages": "上传图片",
|
|
323
|
+
"effortSelectPlaceholder": "推理强度",
|
|
324
|
+
"permissionModeSelectPlaceholder": "权限模式",
|
|
314
325
|
"assetWarningsTitle": "兼容性提示",
|
|
315
326
|
"assetWarningsCount": "{{count}} 个资产告警",
|
|
316
327
|
"assetWarningsMore": "还有 {{count}} 条",
|
package/src/runtime-config.ts
CHANGED
|
@@ -10,16 +10,17 @@ const getGlobalRuntimeEnv = () => {
|
|
|
10
10
|
return globalScope.__VF_PROJECT_AI_RUNTIME_ENV__
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
const pickNonEmptyValue = (...values: Array<string | undefined>) => (
|
|
14
|
+
values.find((value) => typeof value === 'string' && value.trim() !== '')
|
|
15
|
+
)
|
|
16
|
+
|
|
13
17
|
const normalizeBase = (value?: string) => {
|
|
14
|
-
let base = value?.trim() ?? ''
|
|
15
|
-
if (!base) {
|
|
16
|
-
return '/ui/'
|
|
17
|
-
}
|
|
18
|
+
let base = value?.trim() ?? '/ui'
|
|
18
19
|
if (!base.startsWith('/')) {
|
|
19
20
|
base = `/${base}`
|
|
20
21
|
}
|
|
21
|
-
if (
|
|
22
|
-
base
|
|
22
|
+
if (base.length > 1 && base.endsWith('/')) {
|
|
23
|
+
base = base.slice(0, -1)
|
|
23
24
|
}
|
|
24
25
|
return base
|
|
25
26
|
}
|
|
@@ -37,10 +38,18 @@ const normalizePath = (value?: string) => {
|
|
|
37
38
|
|
|
38
39
|
export const getRuntimeEnv = (): RuntimeEnv => getGlobalRuntimeEnv() ?? {}
|
|
39
40
|
|
|
40
|
-
export const
|
|
41
|
-
normalizeBase(
|
|
42
|
-
|
|
41
|
+
export const resolveClientBase = (...values: Array<string | undefined>) => (
|
|
42
|
+
normalizeBase(pickNonEmptyValue(...values))
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
export const getClientBase = () => (
|
|
46
|
+
resolveClientBase(
|
|
47
|
+
getRuntimeEnv().__VF_PROJECT_AI_CLIENT_BASE__,
|
|
48
|
+
import.meta.env.__VF_PROJECT_AI_CLIENT_BASE__,
|
|
49
|
+
import.meta.env.BASE_URL,
|
|
50
|
+
'/ui'
|
|
43
51
|
)
|
|
52
|
+
)
|
|
44
53
|
|
|
45
54
|
export const getServerHostEnv = () =>
|
|
46
55
|
getRuntimeEnv().__VF_PROJECT_AI_SERVER_HOST__ ??
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{al as o,am as n}from"./mermaid.core-B5GfAmDT.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-Uj8iC7DB.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-CRgQ7Xd3.js";import{f as a,g as t}from"./styles-d45a18b0-t7c5i-_-.js";import{ar as i}from"./mermaid.core-B5GfAmDT.js";import"./graph-Uj8iC7DB.js";import"./layout-Bwa2VjOX.js";import"./index-ADFje5Kc.js";import"./index-5325376f-B2Q_MiDU.js";import"./clone-C4IafnWc.js";import"./edges-96097737-BA56Qmd2.js";import"./createText-1719965b-psgY2hME.js";import"./line-BDn4wwV7.js";import"./array-BKyUJesY.js";import"./path-CbwjOpE9.js";import"./channel-dXWmEygA.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};
|