@vibe-forge/client 2.0.1 → 3.0.0-alpha.1
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-CqviK3HX.js → arc-CLPB686k.js} +1 -1
- package/dist/assets/{blockDiagram-c4efeb88-BEp50UHp.js → blockDiagram-c4efeb88-DMStYteY.js} +1 -1
- package/dist/assets/{c4Diagram-c83219d4-C5w55JzM.js → c4Diagram-c83219d4-rf9gMSjH.js} +1 -1
- package/dist/assets/channel-DVzVHik1.js +1 -0
- package/dist/assets/{classDiagram-beda092f-CQJVtHEy.js → classDiagram-beda092f-C4vQa5QZ.js} +1 -1
- package/dist/assets/{classDiagram-v2-2358418a-B37Xl9jB.js → classDiagram-v2-2358418a-f9zo4MCR.js} +1 -1
- package/dist/assets/clone-Bqdku2Xw.js +1 -0
- package/dist/assets/{createText-1719965b-9YwvWMdV.js → createText-1719965b-D_7VWOAv.js} +1 -1
- package/dist/assets/{cssMode-BX88r5f4.js → cssMode-TBU0lKLl.js} +1 -1
- package/dist/assets/{edges-96097737-CNHoXVrD.js → edges-96097737-C4aqXnw4.js} +1 -1
- package/dist/assets/{erDiagram-0228fc6a-BoYldy0g.js → erDiagram-0228fc6a-CUOFDP88.js} +1 -1
- package/dist/assets/{flowDb-c6c81e3f-CoPw_R-Q.js → flowDb-c6c81e3f-CtPmxsKO.js} +1 -1
- package/dist/assets/{flowDiagram-50d868cf-nCqbSXd-.js → flowDiagram-50d868cf-BxJQf6xZ.js} +1 -1
- package/dist/assets/flowDiagram-v2-4f6560a1-UwlDcmES.js +1 -0
- package/dist/assets/{flowchart-elk-definition-6af322e1-BwMuPTrV.js → flowchart-elk-definition-6af322e1-Dit-sZjo.js} +1 -1
- package/dist/assets/{freemarker2-DUFDSvgj.js → freemarker2-CTXFNqpX.js} +1 -1
- package/dist/assets/{ganttDiagram-a2739b55-CLNH3S_C.js → ganttDiagram-a2739b55-CULsxs9m.js} +1 -1
- package/dist/assets/{gitGraphDiagram-82fe8481-uDu1ectX.js → gitGraphDiagram-82fe8481-C6B6ctTM.js} +1 -1
- package/dist/assets/{graph-DuC4kt4I.js → graph-E5s7kY4o.js} +1 -1
- package/dist/assets/{handlebars-BSd4a6l9.js → handlebars-VV2sVWpA.js} +1 -1
- package/dist/assets/{html-H48gEjQd.js → html-BaQZhNyu.js} +1 -1
- package/dist/assets/{htmlMode-Nqw7-Nqh.js → htmlMode-DC-T7U3Z.js} +1 -1
- package/dist/assets/{index-5325376f-rnz0GXAT.js → index-5325376f-BcHntDDH.js} +1 -1
- package/dist/assets/{index-DeQLT67a.js → index-Dc8IL8wB.js} +322 -322
- package/dist/assets/{index-DiOCtPLP.css → index-MWOwVzqE.css} +1 -1
- package/dist/assets/{infoDiagram-8eee0895-BsGB550b.js → infoDiagram-8eee0895-DBhMGcJZ.js} +1 -1
- package/dist/assets/{javascript-0g2herYV.js → javascript-D1mh-XtA.js} +1 -1
- package/dist/assets/{journeyDiagram-c64418c1-DLldlz0H.js → journeyDiagram-c64418c1-C6ccHNG_.js} +1 -1
- package/dist/assets/{jsonMode-CN5ZURMh.js → jsonMode-BcVpgG1G.js} +1 -1
- package/dist/assets/{layout-QKUiDNJK.js → layout-DQUeOk09.js} +1 -1
- package/dist/assets/{line-CeP3XWjD.js → line-BNSZ8woB.js} +1 -1
- package/dist/assets/{linear-74cQVgWT.js → linear-FDIGQp-F.js} +1 -1
- package/dist/assets/{liquid-B6cRrfrb.js → liquid-Yp7v-HuI.js} +1 -1
- package/dist/assets/{lspLanguageFeatures-C5ogOh5E.js → lspLanguageFeatures-y-HB9mm1.js} +1 -1
- package/dist/assets/{mdx-BBIy-KRj.js → mdx-BzbOmj2n.js} +1 -1
- package/dist/assets/{mermaid.core-BhdbV0mr.js → mermaid.core-BZWBFlxL.js} +4 -4
- package/dist/assets/{mindmap-definition-8da855dc-B67VKJuD.js → mindmap-definition-8da855dc-Bx0W62wP.js} +1 -1
- package/dist/assets/{pieDiagram-a8764435-Cxv9WY_E.js → pieDiagram-a8764435-ICiizDcw.js} +1 -1
- package/dist/assets/{python-CBdGo8__.js → python--itpZziZ.js} +1 -1
- package/dist/assets/{quadrantDiagram-1e28029f-BTkj65P_.js → quadrantDiagram-1e28029f-DPLXwibA.js} +1 -1
- package/dist/assets/{razor-azKH0Dwj.js → razor-BY3vF3Z2.js} +1 -1
- package/dist/assets/{requirementDiagram-08caed73-D4jVXpOT.js → requirementDiagram-08caed73-Czz2Ayg6.js} +1 -1
- package/dist/assets/{sankeyDiagram-a04cb91d-CXhutIA1.js → sankeyDiagram-a04cb91d-D82XBO4T.js} +1 -1
- package/dist/assets/{sequenceDiagram-c5b8d532-B56TTZlx.js → sequenceDiagram-c5b8d532-BiyoxjF7.js} +1 -1
- package/dist/assets/{stateDiagram-1ecb1508-Cs0plMcS.js → stateDiagram-1ecb1508-BtohcrjI.js} +1 -1
- package/dist/assets/{stateDiagram-v2-c2b004d7-LSJaXPJN.js → stateDiagram-v2-c2b004d7-Bte1ATNh.js} +1 -1
- package/dist/assets/{styles-b4e223ce-UdXfHMuu.js → styles-b4e223ce-BB-1jLao.js} +1 -1
- package/dist/assets/{styles-ca3715f6-EuRy_hTu.js → styles-ca3715f6-Dv3R8M8l.js} +1 -1
- package/dist/assets/{styles-d45a18b0-B24zVoK3.js → styles-d45a18b0-CslmN8E7.js} +1 -1
- package/dist/assets/{svgDrawCommon-b86b1483-B2S0NW3K.js → svgDrawCommon-b86b1483-C9wC1rgS.js} +1 -1
- package/dist/assets/{timeline-definition-faaaa080-DFWKh9mU.js → timeline-definition-faaaa080-DUFt2nhX.js} +1 -1
- package/dist/assets/{tsMode-FZsHWiOn.js → tsMode-xH26JMT6.js} +1 -1
- package/dist/assets/{typescript-CYdJ3s3D.js → typescript-DBlHiZkC.js} +1 -1
- package/dist/assets/{xml-C16X_hpZ.js → xml-DvpPym76.js} +1 -1
- package/dist/assets/{xychartDiagram-f5964ef8-DyBiBYci.js → xychartDiagram-f5964ef8-Brmas6JU.js} +1 -1
- package/dist/assets/{yaml-CRjA4-Rj.js → yaml-BGpvKN7u.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +13 -13
- package/src/components/ConfigView.scss +7 -6
- package/src/components/ConfigView.tsx +2 -1
- package/src/components/Sidebar.tsx +1 -0
- package/src/components/automation-view/@components/AutomationTaskComposer.tsx +10 -8
- package/src/components/automation-view/AutomationEmptyLanding.tsx +12 -0
- package/src/components/automation-view/TaskList.scss +5 -1
- package/src/components/chat/ChatHistoryView.tsx +5 -3
- package/src/components/chat/NewSessionGuide.tsx +16 -10
- package/src/components/chat/NewSessionGuideStarterList.tsx +4 -1
- package/src/components/chat/NewSessionGuideStarterSection.tsx +2 -1
- package/src/components/chat/messages/MessageItem.tsx +19 -5
- package/src/components/chat/messages/message-action-utils.ts +11 -0
- package/src/components/chat/sender/Sender.scss +12 -0
- package/src/components/config/AppSettingsPanel.tsx +84 -30
- package/src/components/knowledge-base/components/@hooks/use-skills-cli-modal-controller.ts +157 -0
- package/src/components/knowledge-base/components/@hooks/use-skills-tab-actions.ts +63 -0
- package/src/components/knowledge-base/components/SkillsTab.tsx +40 -193
- package/src/components/sidebar/SidebarHeader.tsx +44 -26
- package/src/components/sidebar/sidebar-search-visibility.ts +18 -0
- package/src/hooks/useQueryParams.ts +91 -23
- package/src/resources/locales/en.json +12 -0
- package/src/resources/locales/zh.json +12 -0
- package/src/routes/ChatRoute.scss +50 -45
- package/src/store/index.ts +111 -3
- package/dist/assets/channel-C6LTxxLg.js +0 -1
- package/dist/assets/clone-CG6ZcokX.js +0 -1
- package/dist/assets/flowDiagram-v2-4f6560a1-CSZTI7GQ.js +0 -1
|
@@ -267,71 +267,80 @@
|
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
+
.sender-container {
|
|
271
|
+
flex: 0;
|
|
272
|
+
display: flex;
|
|
273
|
+
flex-direction: column;
|
|
274
|
+
gap: 8px;
|
|
275
|
+
min-width: 0;
|
|
276
|
+
justify-content: flex-end;
|
|
277
|
+
transition:
|
|
278
|
+
flex .4s cubic-bezier(.4, 0, .2, 1),
|
|
279
|
+
padding-bottom .4s cubic-bezier(.4, 0, .2, 1);
|
|
280
|
+
}
|
|
281
|
+
|
|
270
282
|
.chat-thinking-indicator {
|
|
271
|
-
align-self: stretch;
|
|
272
283
|
display: flex;
|
|
273
|
-
justify-content:
|
|
274
|
-
padding:
|
|
284
|
+
justify-content: flex-start;
|
|
285
|
+
padding: 0;
|
|
275
286
|
min-width: 0;
|
|
287
|
+
width: 100%;
|
|
276
288
|
}
|
|
277
289
|
|
|
278
290
|
.chat-thinking-indicator__text {
|
|
279
291
|
display: inline-flex;
|
|
280
292
|
align-items: center;
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
293
|
+
justify-content: flex-start;
|
|
294
|
+
position: relative;
|
|
295
|
+
isolation: isolate;
|
|
296
|
+
overflow: hidden;
|
|
297
|
+
max-width: min(90%, 100%);
|
|
298
|
+
font-size: 14px;
|
|
299
|
+
line-height: 1.6;
|
|
300
|
+
font-weight: 400;
|
|
286
301
|
white-space: nowrap;
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
302
|
+
text-align: left;
|
|
303
|
+
color: var(--text-color);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.chat-thinking-indicator__text::after {
|
|
307
|
+
content: '';
|
|
308
|
+
position: absolute;
|
|
309
|
+
inset: -1px -20%;
|
|
310
|
+
border-radius: 999px;
|
|
311
|
+
pointer-events: none;
|
|
312
|
+
background: linear-gradient(
|
|
313
|
+
100deg,
|
|
314
|
+
transparent 18%,
|
|
315
|
+
rgba(255, 255, 255, 0) 34%,
|
|
316
|
+
rgba(255, 255, 255, .08) 42%,
|
|
317
|
+
rgba(255, 255, 255, .82) 50%,
|
|
318
|
+
rgba(255, 255, 255, .08) 58%,
|
|
319
|
+
rgba(255, 255, 255, 0) 66%,
|
|
320
|
+
transparent 82%
|
|
295
321
|
);
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
-webkit-background-clip: text;
|
|
300
|
-
background-clip: text;
|
|
301
|
-
color: transparent;
|
|
302
|
-
-webkit-text-fill-color: transparent;
|
|
303
|
-
animation: chat-thinking-indicator-shimmer 1.7s linear infinite;
|
|
322
|
+
mix-blend-mode: screen;
|
|
323
|
+
transform: translate3d(-180%, 0, 0);
|
|
324
|
+
animation: chat-thinking-indicator-scan 2s ease-in-out infinite;
|
|
304
325
|
}
|
|
305
326
|
|
|
306
|
-
@keyframes chat-thinking-indicator-
|
|
327
|
+
@keyframes chat-thinking-indicator-scan {
|
|
307
328
|
from {
|
|
308
|
-
|
|
329
|
+
transform: translate3d(-180%, 0, 0);
|
|
309
330
|
}
|
|
310
331
|
|
|
311
332
|
to {
|
|
312
|
-
|
|
333
|
+
transform: translate3d(180%, 0, 0);
|
|
313
334
|
}
|
|
314
335
|
}
|
|
315
336
|
|
|
316
337
|
@media (prefers-reduced-motion: reduce) {
|
|
317
|
-
.chat-thinking-indicator__text {
|
|
338
|
+
.chat-thinking-indicator__text::after {
|
|
318
339
|
animation: none;
|
|
319
|
-
|
|
340
|
+
opacity: 0;
|
|
320
341
|
}
|
|
321
342
|
}
|
|
322
343
|
|
|
323
|
-
.sender-container {
|
|
324
|
-
flex: 0;
|
|
325
|
-
display: flex;
|
|
326
|
-
flex-direction: column;
|
|
327
|
-
gap: 8px;
|
|
328
|
-
min-width: 0;
|
|
329
|
-
justify-content: flex-end;
|
|
330
|
-
transition:
|
|
331
|
-
flex .4s cubic-bezier(.4, 0, .2, 1),
|
|
332
|
-
padding-bottom .4s cubic-bezier(.4, 0, .2, 1);
|
|
333
|
-
}
|
|
334
|
-
|
|
335
344
|
.chat-composer-stack {
|
|
336
345
|
flex: 0;
|
|
337
346
|
min-width: 0;
|
|
@@ -498,10 +507,6 @@
|
|
|
498
507
|
border-radius: 8px;
|
|
499
508
|
}
|
|
500
509
|
|
|
501
|
-
.chat-thinking-indicator__text {
|
|
502
|
-
font-size: 12px;
|
|
503
|
-
}
|
|
504
|
-
|
|
505
510
|
.chat-composer-stack {
|
|
506
511
|
padding: 0 max(12px, env(safe-area-inset-right))
|
|
507
512
|
calc(
|
package/src/store/index.ts
CHANGED
|
@@ -18,10 +18,100 @@ export const activeSessionIdAtom = atom<string | undefined>(undefined)
|
|
|
18
18
|
|
|
19
19
|
// 主题模式: 'light' | 'dark' | 'system'
|
|
20
20
|
export type ThemeMode = 'light' | 'dark' | 'system'
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
|
|
22
|
+
const THEME_STORAGE_KEY = 'theme'
|
|
23
|
+
|
|
24
|
+
const isThemeMode = (value: string): value is ThemeMode => {
|
|
25
|
+
return value === 'light' || value === 'dark' || value === 'system'
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const getStoredThemeMode = (): ThemeMode => {
|
|
29
|
+
try {
|
|
30
|
+
const raw = localStorage.getItem(THEME_STORAGE_KEY)
|
|
31
|
+
if (raw != null && isThemeMode(raw)) {
|
|
32
|
+
return raw
|
|
33
|
+
}
|
|
34
|
+
} catch {}
|
|
35
|
+
|
|
36
|
+
return 'system'
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const themeBaseAtom = atom<ThemeMode>(getStoredThemeMode())
|
|
40
|
+
|
|
41
|
+
export const themeAtom = atom(
|
|
42
|
+
get => get(themeBaseAtom),
|
|
43
|
+
(_get, set, value: ThemeMode) => {
|
|
44
|
+
const nextValue = isThemeMode(value)
|
|
45
|
+
? value
|
|
46
|
+
: 'system'
|
|
47
|
+
|
|
48
|
+
set(themeBaseAtom, nextValue)
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
localStorage.setItem(THEME_STORAGE_KEY, nextValue)
|
|
52
|
+
} catch {}
|
|
53
|
+
}
|
|
23
54
|
)
|
|
24
55
|
|
|
56
|
+
const getStoredBoolean = (key: string, defaultValue: boolean) => {
|
|
57
|
+
try {
|
|
58
|
+
const raw = localStorage.getItem(key)
|
|
59
|
+
if (raw === 'true') return true
|
|
60
|
+
if (raw === 'false') return false
|
|
61
|
+
} catch {}
|
|
62
|
+
|
|
63
|
+
return defaultValue
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const createStoredBooleanAtom = (storageKey: string, defaultValue: boolean) => {
|
|
67
|
+
const baseAtom = atom<boolean>(getStoredBoolean(storageKey, defaultValue))
|
|
68
|
+
|
|
69
|
+
return atom(
|
|
70
|
+
get => get(baseAtom),
|
|
71
|
+
(_get, set, value: boolean) => {
|
|
72
|
+
const nextValue = value === true
|
|
73
|
+
set(baseAtom, nextValue)
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
localStorage.setItem(storageKey, String(nextValue))
|
|
77
|
+
} catch {}
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const getStoredNonNegativeInteger = (key: string, defaultValue: number) => {
|
|
83
|
+
try {
|
|
84
|
+
const raw = localStorage.getItem(key)
|
|
85
|
+
if (raw == null || raw.trim() === '') return defaultValue
|
|
86
|
+
|
|
87
|
+
const parsed = Number(raw)
|
|
88
|
+
if (Number.isInteger(parsed) && parsed >= 0) {
|
|
89
|
+
return parsed
|
|
90
|
+
}
|
|
91
|
+
} catch {}
|
|
92
|
+
|
|
93
|
+
return defaultValue
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const createStoredNonNegativeIntegerAtom = (storageKey: string, defaultValue: number) => {
|
|
97
|
+
const baseAtom = atom<number>(getStoredNonNegativeInteger(storageKey, defaultValue))
|
|
98
|
+
|
|
99
|
+
return atom(
|
|
100
|
+
get => get(baseAtom),
|
|
101
|
+
(_get, set, value: number) => {
|
|
102
|
+
const nextValue = Number.isInteger(value) && value >= 0
|
|
103
|
+
? value
|
|
104
|
+
: defaultValue
|
|
105
|
+
|
|
106
|
+
set(baseAtom, nextValue)
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
localStorage.setItem(storageKey, String(nextValue))
|
|
110
|
+
} catch {}
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
|
|
25
115
|
export type SenderHeaderDisplayMode = 'expanded' | 'collapsed'
|
|
26
116
|
|
|
27
117
|
const SENDER_HEADER_DISPLAY_STORAGE_KEY = 'vf_sender_header_default_display'
|
|
@@ -62,4 +152,22 @@ export const senderHeaderDisplayAtom = atom(
|
|
|
62
152
|
}
|
|
63
153
|
)
|
|
64
154
|
|
|
65
|
-
|
|
155
|
+
const SHOW_ANNOUNCEMENTS_STORAGE_KEY = 'vf_show_announcements'
|
|
156
|
+
const SHOW_NEW_SESSION_STARTER_LIST_STORAGE_KEY = 'vf_show_new_session_starter_list'
|
|
157
|
+
const SESSION_LIST_SEARCH_THRESHOLD_STORAGE_KEY = 'vf_session_list_search_threshold'
|
|
158
|
+
const DEFAULT_SESSION_LIST_SEARCH_THRESHOLD = 5
|
|
159
|
+
|
|
160
|
+
export const showAnnouncementsAtom = createStoredBooleanAtom(
|
|
161
|
+
SHOW_ANNOUNCEMENTS_STORAGE_KEY,
|
|
162
|
+
true
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
export const showNewSessionStarterListAtom = createStoredBooleanAtom(
|
|
166
|
+
SHOW_NEW_SESSION_STARTER_LIST_STORAGE_KEY,
|
|
167
|
+
true
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
export const sessionListSearchThresholdAtom = createStoredNonNegativeIntegerAtom(
|
|
171
|
+
SESSION_LIST_SEARCH_THRESHOLD_STORAGE_KEY,
|
|
172
|
+
DEFAULT_SESSION_LIST_SEARCH_THRESHOLD
|
|
173
|
+
)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{al as o,am as n}from"./mermaid.core-BhdbV0mr.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-DuC4kt4I.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-CoPw_R-Q.js";import{f as a,g as t}from"./styles-d45a18b0-B24zVoK3.js";import{ar as i}from"./mermaid.core-BhdbV0mr.js";import"./graph-DuC4kt4I.js";import"./layout-QKUiDNJK.js";import"./index-DeQLT67a.js";import"./index-5325376f-rnz0GXAT.js";import"./clone-CG6ZcokX.js";import"./edges-96097737-CNHoXVrD.js";import"./createText-1719965b-9YwvWMdV.js";import"./line-CeP3XWjD.js";import"./array-BKyUJesY.js";import"./path-CbwjOpE9.js";import"./channel-C6LTxxLg.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};
|