@gendive/chatllm 0.10.4 → 0.12.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/react/index.d.mts +563 -15
- package/dist/react/index.d.ts +563 -15
- package/dist/react/index.js +5344 -2392
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +5333 -2388
- package/dist/react/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/react/index.d.mts
CHANGED
|
@@ -165,6 +165,106 @@ interface SourceItem {
|
|
|
165
165
|
snippet?: string;
|
|
166
166
|
favicon?: string;
|
|
167
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* @description 검색 결과 아이템
|
|
170
|
+
* @Todo vibecode - 심층연구 기능용 검색 결과 타입
|
|
171
|
+
*/
|
|
172
|
+
interface SearchResult {
|
|
173
|
+
url: string;
|
|
174
|
+
title: string;
|
|
175
|
+
snippet: string;
|
|
176
|
+
/** 페이지 본문 추출 시 */
|
|
177
|
+
content?: string;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* @description 서브에이전트 진행 상태
|
|
181
|
+
* @Todo vibecode - 심층연구 병렬 검색 상태 추적
|
|
182
|
+
*/
|
|
183
|
+
interface SubAgentProgress {
|
|
184
|
+
id: string;
|
|
185
|
+
topic: string;
|
|
186
|
+
status: 'pending' | 'searching' | 'extracting' | 'done' | 'error';
|
|
187
|
+
searchCount: number;
|
|
188
|
+
resultsCount: number;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @description 심층연구 진행 상태
|
|
192
|
+
* @Todo vibecode - 4단계 심층연구 프로세스 상태
|
|
193
|
+
*/
|
|
194
|
+
interface DeepResearchProgress {
|
|
195
|
+
phase: 'analyzing' | 'researching' | 'evaluating' | 'generating' | 'done';
|
|
196
|
+
phaseLabel: string;
|
|
197
|
+
subAgents: SubAgentProgress[];
|
|
198
|
+
totalSources: number;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* @description 심층연구 콜백 타입
|
|
202
|
+
* @Todo vibecode - 라이브러리 사용자가 주입하는 검색 API 콜백
|
|
203
|
+
*/
|
|
204
|
+
interface DeepResearchCallbacks {
|
|
205
|
+
/** 웹 검색 API 호출 (필수) */
|
|
206
|
+
onWebSearch: (query: string) => Promise<SearchResult[]>;
|
|
207
|
+
/** 페이지 본문 추출 (선택) */
|
|
208
|
+
onExtractContent?: (url: string) => Promise<string>;
|
|
209
|
+
/** 진행 상태 업데이트 (선택) */
|
|
210
|
+
onProgress?: (progress: DeepResearchProgress) => void;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* @description 폴 선택지 옵션
|
|
214
|
+
* @Todo vibecode - AI 주도 선택지 기능
|
|
215
|
+
*/
|
|
216
|
+
interface PollOption {
|
|
217
|
+
id: string;
|
|
218
|
+
label: string;
|
|
219
|
+
description?: string;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* @description 폴 질문 (다중 질문 지원)
|
|
223
|
+
* @Todo vibecode - AI 주도 선택지 기능
|
|
224
|
+
*/
|
|
225
|
+
interface PollQuestion {
|
|
226
|
+
id: string;
|
|
227
|
+
question: string;
|
|
228
|
+
options: PollOption[];
|
|
229
|
+
/** 다중 선택 허용 여부 */
|
|
230
|
+
multiSelect?: boolean;
|
|
231
|
+
/** 기타 옵션 허용 여부 */
|
|
232
|
+
allowOther?: boolean;
|
|
233
|
+
/** 필수 여부 */
|
|
234
|
+
required?: boolean;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* @description 폴 블록 (여러 질문 포함)
|
|
238
|
+
* @Todo vibecode - AI 주도 선택지 기능
|
|
239
|
+
*/
|
|
240
|
+
interface PollBlock {
|
|
241
|
+
id: string;
|
|
242
|
+
questions: PollQuestion[];
|
|
243
|
+
/** 현재 질문 인덱스 */
|
|
244
|
+
currentIndex: number;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* @description 폴 응답 (사용자 선택 결과)
|
|
248
|
+
* @Todo vibecode - AI 주도 선택지 기능
|
|
249
|
+
*/
|
|
250
|
+
interface PollResponse {
|
|
251
|
+
questionId: string;
|
|
252
|
+
selectedOptions: string[];
|
|
253
|
+
otherText?: string;
|
|
254
|
+
skipped?: boolean;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* @description 폴 상태
|
|
258
|
+
* @Todo vibecode - AI 주도 선택지 기능
|
|
259
|
+
*/
|
|
260
|
+
interface PollState {
|
|
261
|
+
/** 현재 활성 폴 블록 */
|
|
262
|
+
activePoll: PollBlock | null;
|
|
263
|
+
/** 수집된 응답들 */
|
|
264
|
+
responses: PollResponse[];
|
|
265
|
+
/** 완료 여부 */
|
|
266
|
+
isCompleted: boolean;
|
|
267
|
+
}
|
|
168
268
|
interface ChatMessage {
|
|
169
269
|
id: string;
|
|
170
270
|
role: 'user' | 'assistant' | 'system';
|
|
@@ -173,6 +273,31 @@ interface ChatMessage {
|
|
|
173
273
|
timestamp: number;
|
|
174
274
|
alternatives?: AlternativeResponse[];
|
|
175
275
|
sources?: SourceItem[];
|
|
276
|
+
/**
|
|
277
|
+
* @description 심층연구 메시지 여부
|
|
278
|
+
* @Todo vibecode - 심층연구 결과 메시지 식별
|
|
279
|
+
*/
|
|
280
|
+
isDeepResearch?: boolean;
|
|
281
|
+
/**
|
|
282
|
+
* @description 심층연구 진행 상태
|
|
283
|
+
* @Todo vibecode - 진행 중일 때 상태 표시용
|
|
284
|
+
*/
|
|
285
|
+
researchProgress?: DeepResearchProgress;
|
|
286
|
+
/**
|
|
287
|
+
* @description 폴 블록 (AI 주도 선택지)
|
|
288
|
+
* @Todo vibecode - 메시지에 포함된 선택지
|
|
289
|
+
*/
|
|
290
|
+
pollBlock?: PollBlock;
|
|
291
|
+
/**
|
|
292
|
+
* @description UI에서 숨김 처리된 메시지 (API에는 포함)
|
|
293
|
+
* @Todo vibecode - Poll 응답 등 내부 프롬프트용
|
|
294
|
+
*/
|
|
295
|
+
hidden?: boolean;
|
|
296
|
+
/**
|
|
297
|
+
* @description 스킬 실행 상태 (AI가 스킬을 호출한 경우)
|
|
298
|
+
* @Todo vibecode - 스킬 실행 중/완료 상태 표시
|
|
299
|
+
*/
|
|
300
|
+
skillExecution?: SkillExecution;
|
|
176
301
|
}
|
|
177
302
|
interface ChatSession {
|
|
178
303
|
id: string;
|
|
@@ -195,6 +320,107 @@ interface ActionItem {
|
|
|
195
320
|
description: string;
|
|
196
321
|
systemPrompt?: string;
|
|
197
322
|
}
|
|
323
|
+
/**
|
|
324
|
+
* @description 스킬 트리거 방식
|
|
325
|
+
* auto: AI가 <skill_use> 태그로 자동 호출
|
|
326
|
+
* manual: 사용자가 UI에서 직접 선택
|
|
327
|
+
* both: 양쪽 모두 가능
|
|
328
|
+
*/
|
|
329
|
+
type SkillTrigger = 'auto' | 'manual' | 'both';
|
|
330
|
+
/**
|
|
331
|
+
* @description 스킬 실행 결과
|
|
332
|
+
*/
|
|
333
|
+
interface SkillExecutionResult {
|
|
334
|
+
/** 실행 결과 텍스트 */
|
|
335
|
+
content: string;
|
|
336
|
+
/** 출처 목록 (검색 등) */
|
|
337
|
+
sources?: SourceItem[];
|
|
338
|
+
/** 추가 메타데이터 */
|
|
339
|
+
metadata?: Record<string, unknown>;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* @description 스킬 실행 진행 상태
|
|
343
|
+
*/
|
|
344
|
+
interface SkillProgress {
|
|
345
|
+
/** 현재 단계 식별자 */
|
|
346
|
+
phase: string;
|
|
347
|
+
/** UI 표시용 라벨 */
|
|
348
|
+
phaseLabel: string;
|
|
349
|
+
/** 진행률 (0-100) */
|
|
350
|
+
percentage?: number;
|
|
351
|
+
/** 서브에이전트 상태 (딥리서치 등 멀티스텝 스킬용) */
|
|
352
|
+
subAgents?: SubAgentProgress[];
|
|
353
|
+
/** 총 수집된 소스 수 */
|
|
354
|
+
totalSources?: number;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* @description 스킬 실행 시 주입되는 콜백
|
|
358
|
+
* @Todo vibecode - 진행 상태 보고, 스트리밍, 중단 시그널
|
|
359
|
+
*/
|
|
360
|
+
interface SkillExecuteCallbacks {
|
|
361
|
+
/** 단계 진행 상태 보고 */
|
|
362
|
+
onProgress?: (progress: SkillProgress) => void;
|
|
363
|
+
/** 스트리밍 콘텐츠 청크 (보고서 생성 시) */
|
|
364
|
+
onStream?: (chunk: string) => void;
|
|
365
|
+
/** 중단 시그널 */
|
|
366
|
+
signal?: AbortSignal;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* @description 커스텀 스킬 설정
|
|
370
|
+
* @Todo vibecode - 라이브러리 사용자가 등록하는 스킬 단위
|
|
371
|
+
*/
|
|
372
|
+
interface SkillConfig<TParams = Record<string, unknown>> {
|
|
373
|
+
/** AI가 판단할 때 사용하는 설명 */
|
|
374
|
+
description: string;
|
|
375
|
+
/** 트리거 방식 */
|
|
376
|
+
trigger: SkillTrigger;
|
|
377
|
+
/** 스킬 실행 함수 (callbacks는 시스템이 자동 주입) */
|
|
378
|
+
execute: (params: TParams, callbacks?: SkillExecuteCallbacks) => Promise<SkillExecutionResult>;
|
|
379
|
+
/** JSON Schema 형태의 파라미터 정의 */
|
|
380
|
+
parameters?: {
|
|
381
|
+
type: 'object';
|
|
382
|
+
properties: Record<string, {
|
|
383
|
+
type: string;
|
|
384
|
+
description?: string;
|
|
385
|
+
enum?: string[];
|
|
386
|
+
}>;
|
|
387
|
+
required?: string[];
|
|
388
|
+
};
|
|
389
|
+
/** 아이콘 이름 */
|
|
390
|
+
icon?: string;
|
|
391
|
+
/** UI에 표시할 레이블 */
|
|
392
|
+
label: string;
|
|
393
|
+
/** 비활성화 여부 */
|
|
394
|
+
disabled?: boolean;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* @description 스킬 실행 상태 (메시지에 첨부)
|
|
398
|
+
* @Todo vibecode - 스킬 실행 중/완료/에러 상태 추적
|
|
399
|
+
*/
|
|
400
|
+
interface SkillExecution {
|
|
401
|
+
/** 실행 중인 스킬 이름 */
|
|
402
|
+
skillName: string;
|
|
403
|
+
/** 실행 파라미터 */
|
|
404
|
+
params: Record<string, unknown>;
|
|
405
|
+
/** 실행 상태 */
|
|
406
|
+
status: 'pending' | 'executing' | 'done' | 'error';
|
|
407
|
+
/** 실행 결과 */
|
|
408
|
+
result?: SkillExecutionResult;
|
|
409
|
+
/** 에러 메시지 */
|
|
410
|
+
error?: string;
|
|
411
|
+
/** 진행 상태 */
|
|
412
|
+
progress?: SkillProgress;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* @description manual 스킬 UI 표시용 정보
|
|
416
|
+
*/
|
|
417
|
+
interface ManualSkillItem {
|
|
418
|
+
name: string;
|
|
419
|
+
label: string;
|
|
420
|
+
icon?: string;
|
|
421
|
+
description: string;
|
|
422
|
+
disabled?: boolean;
|
|
423
|
+
}
|
|
198
424
|
type ProviderType = 'ollama' | 'devdive' | 'openai' | 'anthropic' | 'gemini';
|
|
199
425
|
interface ModelConfig {
|
|
200
426
|
id: string;
|
|
@@ -210,7 +436,7 @@ interface PromptTemplate {
|
|
|
210
436
|
category: string;
|
|
211
437
|
icon?: string;
|
|
212
438
|
}
|
|
213
|
-
type SettingsTab = 'general' | 'personalization' | 'data' | 'api';
|
|
439
|
+
type SettingsTab = 'general' | 'personalization' | 'data' | 'memory' | 'api';
|
|
214
440
|
type ThemeMode = 'light' | 'dark' | 'system';
|
|
215
441
|
interface ThemeConfig {
|
|
216
442
|
mode: ThemeMode;
|
|
@@ -218,8 +444,8 @@ interface ThemeConfig {
|
|
|
218
444
|
borderRadius?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
219
445
|
}
|
|
220
446
|
interface ChatUIProps {
|
|
221
|
-
/** 사용 가능한 모델 목록 */
|
|
222
|
-
models
|
|
447
|
+
/** 사용 가능한 모델 목록 (기본값 제공) */
|
|
448
|
+
models?: ModelConfig[];
|
|
223
449
|
/** 사용 가능한 Actions */
|
|
224
450
|
actions?: ActionItem[];
|
|
225
451
|
/** 프롬프트 템플릿 */
|
|
@@ -341,6 +567,17 @@ interface ChatUIProps {
|
|
|
341
567
|
* @Todo vibecode - true면 펼쳐진 상태로 표시 (기본: false)
|
|
342
568
|
*/
|
|
343
569
|
thinkingDefaultOpen?: boolean;
|
|
570
|
+
/**
|
|
571
|
+
* @description 심층연구 콜백 (onWebSearch 필수)
|
|
572
|
+
* @Todo vibecode - Perplexity 스타일 심층연구 기능
|
|
573
|
+
* @deprecated skills prop으로 마이그레이션 권장. 하위 호환성 유지됨.
|
|
574
|
+
*/
|
|
575
|
+
deepResearch?: DeepResearchCallbacks;
|
|
576
|
+
/**
|
|
577
|
+
* @description 커스텀 스킬 등록
|
|
578
|
+
* @Todo vibecode - AI가 자동/수동으로 활용하는 스킬 시스템
|
|
579
|
+
*/
|
|
580
|
+
skills?: Record<string, SkillConfig>;
|
|
344
581
|
}
|
|
345
582
|
interface SendMessageParams {
|
|
346
583
|
messages: {
|
|
@@ -413,6 +650,16 @@ interface MessageListProps {
|
|
|
413
650
|
* @Todo vibecode - true면 펼쳐진 상태로 표시 (기본: false)
|
|
414
651
|
*/
|
|
415
652
|
thinkingDefaultOpen?: boolean;
|
|
653
|
+
/**
|
|
654
|
+
* @description 다른 모델 응답 생성 중인 메시지 ID
|
|
655
|
+
* @Todo vibecode - 로딩 인디케이터 표시용
|
|
656
|
+
*/
|
|
657
|
+
loadingAlternativeFor?: string | null;
|
|
658
|
+
/**
|
|
659
|
+
* @description Poll 응답 제출 핸들러 (여러 질문의 응답)
|
|
660
|
+
* @Todo vibecode - 사용자가 선택지 선택 완료 시 호출
|
|
661
|
+
*/
|
|
662
|
+
onPollSubmit?: (messageId: string, responses: PollResponse[]) => void;
|
|
416
663
|
}
|
|
417
664
|
interface MessageBubbleProps {
|
|
418
665
|
message: ChatMessage;
|
|
@@ -440,6 +687,16 @@ interface MessageBubbleProps {
|
|
|
440
687
|
* @Todo vibecode - true면 펼쳐진 상태로 표시 (기본: false)
|
|
441
688
|
*/
|
|
442
689
|
thinkingDefaultOpen?: boolean;
|
|
690
|
+
/**
|
|
691
|
+
* @description 다른 모델 응답 생성 중 여부
|
|
692
|
+
* @Todo vibecode - 로딩 인디케이터 표시용
|
|
693
|
+
*/
|
|
694
|
+
isLoadingAlternative?: boolean;
|
|
695
|
+
/**
|
|
696
|
+
* @description Poll 응답 제출 핸들러 (여러 질문의 응답)
|
|
697
|
+
* @Todo vibecode - 사용자가 선택지 선택 완료 시 호출
|
|
698
|
+
*/
|
|
699
|
+
onPollSubmit?: (responses: PollResponse[]) => void;
|
|
443
700
|
}
|
|
444
701
|
interface InputProps {
|
|
445
702
|
value: string;
|
|
@@ -454,6 +711,36 @@ interface InputProps {
|
|
|
454
711
|
onClearAction?: () => void;
|
|
455
712
|
onActionSelect?: (action: ActionItem) => void;
|
|
456
713
|
actions?: ActionItem[];
|
|
714
|
+
/**
|
|
715
|
+
* @description 심층연구 모드 토글 핸들러
|
|
716
|
+
* @Todo vibecode - 심층연구 버튼 클릭 시 호출
|
|
717
|
+
*/
|
|
718
|
+
onDeepResearch?: () => void;
|
|
719
|
+
/**
|
|
720
|
+
* @description 심층연구 모드 활성화 여부
|
|
721
|
+
* @Todo vibecode - 버튼 하이라이트 표시용
|
|
722
|
+
*/
|
|
723
|
+
isDeepResearchMode?: boolean;
|
|
724
|
+
/**
|
|
725
|
+
* @description 심층연구 기능 사용 가능 여부
|
|
726
|
+
* @Todo vibecode - deepResearch 콜백 존재 시 true
|
|
727
|
+
*/
|
|
728
|
+
deepResearchEnabled?: boolean;
|
|
729
|
+
/**
|
|
730
|
+
* @description manual 트리거 스킬 목록
|
|
731
|
+
* @Todo vibecode - 입력창 메뉴에 표시
|
|
732
|
+
*/
|
|
733
|
+
manualSkills?: ManualSkillItem[];
|
|
734
|
+
/**
|
|
735
|
+
* @description manual 스킬 선택 핸들러
|
|
736
|
+
* @Todo vibecode - 스킬 이름으로 실행
|
|
737
|
+
*/
|
|
738
|
+
onSkillSelect?: (skillName: string) => void;
|
|
739
|
+
/**
|
|
740
|
+
* @description 현재 실행 중인 스킬
|
|
741
|
+
* @Todo vibecode - 입력창 상단 진행 상태 칩
|
|
742
|
+
*/
|
|
743
|
+
activeSkillExecution?: SkillExecution | null;
|
|
457
744
|
}
|
|
458
745
|
interface HeaderProps {
|
|
459
746
|
title: string;
|
|
@@ -503,8 +790,15 @@ interface UseChatUIReturn {
|
|
|
503
790
|
editingMessageId: string | null;
|
|
504
791
|
personalization: PersonalizationConfig;
|
|
505
792
|
activeAlternatives: Record<string, number>;
|
|
793
|
+
/**
|
|
794
|
+
* @description 다른 모델 응답 생성 중인 메시지 ID
|
|
795
|
+
* @Todo vibecode - 로딩 인디케이터 표시용
|
|
796
|
+
*/
|
|
797
|
+
loadingAlternativeFor: string | null;
|
|
506
798
|
setInput: (value: string) => void;
|
|
507
|
-
sendMessage: (content?: string
|
|
799
|
+
sendMessage: (content?: string, options?: {
|
|
800
|
+
hiddenUserMessage?: boolean;
|
|
801
|
+
}) => Promise<void>;
|
|
508
802
|
stopGeneration: () => void;
|
|
509
803
|
newSession: () => void;
|
|
510
804
|
selectSession: (id: string) => void;
|
|
@@ -543,6 +837,41 @@ interface UseChatUIReturn {
|
|
|
543
837
|
* @Todo vibecode - 외부 스토리지 사용 시 세션 상세 로드 중
|
|
544
838
|
*/
|
|
545
839
|
isSessionLoading: boolean;
|
|
840
|
+
/**
|
|
841
|
+
* @description 심층연구 모드 활성화 여부
|
|
842
|
+
* @Todo vibecode - 심층연구 버튼 토글 상태
|
|
843
|
+
*/
|
|
844
|
+
isDeepResearchMode: boolean;
|
|
845
|
+
/**
|
|
846
|
+
* @description 심층연구 모드 토글
|
|
847
|
+
* @Todo vibecode - 심층연구 버튼 클릭 핸들러
|
|
848
|
+
*/
|
|
849
|
+
toggleDeepResearchMode: () => void;
|
|
850
|
+
/**
|
|
851
|
+
* @description 심층연구 진행 상태
|
|
852
|
+
* @Todo vibecode - 현재 진행 중인 심층연구 상태
|
|
853
|
+
*/
|
|
854
|
+
deepResearchProgress: DeepResearchProgress | null;
|
|
855
|
+
/**
|
|
856
|
+
* @description Poll 응답 처리 (여러 질문의 응답)
|
|
857
|
+
* @Todo vibecode - 사용자가 선택지 선택 완료 시 호출
|
|
858
|
+
*/
|
|
859
|
+
handlePollSubmit: (messageId: string, responses: PollResponse[]) => void;
|
|
860
|
+
/**
|
|
861
|
+
* @description 현재 실행 중인 스킬 상태
|
|
862
|
+
* @Todo vibecode - 스킬 실행 상태 추적
|
|
863
|
+
*/
|
|
864
|
+
activeSkillExecution: SkillExecution | null;
|
|
865
|
+
/**
|
|
866
|
+
* @description manual 트리거 스킬 목록 (UI 표시용)
|
|
867
|
+
* @Todo vibecode - 입력창 메뉴에 표시
|
|
868
|
+
*/
|
|
869
|
+
manualSkills: ManualSkillItem[];
|
|
870
|
+
/**
|
|
871
|
+
* @description manual 스킬 실행
|
|
872
|
+
* @Todo vibecode - 사용자가 UI에서 스킬 선택 시 호출
|
|
873
|
+
*/
|
|
874
|
+
executeManualSkill: (skillName: string) => void;
|
|
546
875
|
}
|
|
547
876
|
|
|
548
877
|
/**
|
|
@@ -651,16 +980,181 @@ interface UseChatUIOptions {
|
|
|
651
980
|
role: 'USER' | 'ASSISTANT';
|
|
652
981
|
message: string;
|
|
653
982
|
}[]) => Promise<void>;
|
|
983
|
+
/**
|
|
984
|
+
* @description 심층연구 콜백 (onWebSearch 필수)
|
|
985
|
+
* @Todo vibecode - Perplexity 스타일 심층연구 기능
|
|
986
|
+
*/
|
|
987
|
+
deepResearch?: DeepResearchCallbacks;
|
|
988
|
+
/**
|
|
989
|
+
* @description AI 주도 선택지 기능 활성화 (기본: true)
|
|
990
|
+
* @Todo vibecode - AI가 자동으로 선택지를 제공하도록 시스템 프롬프트에 가이드 추가
|
|
991
|
+
*/
|
|
992
|
+
enablePoll?: boolean;
|
|
993
|
+
/**
|
|
994
|
+
* @description 커스텀 스킬 등록
|
|
995
|
+
* @Todo vibecode - AI가 자동/수동으로 활용하는 스킬 시스템
|
|
996
|
+
*/
|
|
997
|
+
skills?: Record<string, SkillConfig>;
|
|
654
998
|
}
|
|
655
999
|
declare const useChatUI: (options: UseChatUIOptions) => UseChatUIReturn;
|
|
656
1000
|
|
|
1001
|
+
/**
|
|
1002
|
+
* @description 심층연구 (Deep Research) 훅
|
|
1003
|
+
* @Todo vibecode - Perplexity 스타일 에이전트 기반 심층연구 기능
|
|
1004
|
+
*
|
|
1005
|
+
* 4단계 아키텍처:
|
|
1006
|
+
* 1. 쿼리 분석 - 질문 유형 판단, 서브토픽 분해
|
|
1007
|
+
* 2. 병렬 서브에이전트 실행 - 검색 API 호출, 결과 수집
|
|
1008
|
+
* 3. 충분성 판단 - 커버리지 평가, 필요시 추가 검색
|
|
1009
|
+
* 4. 보고서 생성 - 구조화된 보고서 + 인라인 인용
|
|
1010
|
+
*/
|
|
1011
|
+
|
|
1012
|
+
/**
|
|
1013
|
+
* @description useDeepResearch 훅 옵션
|
|
1014
|
+
*/
|
|
1015
|
+
interface UseDeepResearchOptions {
|
|
1016
|
+
/** 웹 검색 API 호출 (필수) */
|
|
1017
|
+
onWebSearch: (query: string) => Promise<SearchResult[]>;
|
|
1018
|
+
/** 페이지 본문 추출 (선택) */
|
|
1019
|
+
onExtractContent?: (url: string) => Promise<string>;
|
|
1020
|
+
/** API 엔드포인트 */
|
|
1021
|
+
apiEndpoint: string;
|
|
1022
|
+
/** API 키 */
|
|
1023
|
+
apiKey?: string;
|
|
1024
|
+
/** 사용할 모델 */
|
|
1025
|
+
model: string;
|
|
1026
|
+
/** 프로바이더 */
|
|
1027
|
+
provider: string;
|
|
1028
|
+
}
|
|
1029
|
+
/**
|
|
1030
|
+
* @description useDeepResearch 훅
|
|
1031
|
+
*/
|
|
1032
|
+
declare const useDeepResearch: (options: UseDeepResearchOptions) => {
|
|
1033
|
+
runDeepResearch: (query: string, onStreamContent: (chunk: string) => void) => Promise<{
|
|
1034
|
+
content: string;
|
|
1035
|
+
sources: SourceItem[];
|
|
1036
|
+
}>;
|
|
1037
|
+
stopResearch: () => void;
|
|
1038
|
+
isResearching: boolean;
|
|
1039
|
+
progress: DeepResearchProgress | null;
|
|
1040
|
+
};
|
|
1041
|
+
|
|
1042
|
+
/**
|
|
1043
|
+
* @description Skill 파싱 유틸리티
|
|
1044
|
+
* @Todo vibecode - AI 응답에서 <skill_use> 태그 파싱
|
|
1045
|
+
*
|
|
1046
|
+
* 형식:
|
|
1047
|
+
* <skill_use name="deepResearch">{"query":"검색어"}</skill_use>
|
|
1048
|
+
*/
|
|
1049
|
+
/**
|
|
1050
|
+
* @description 파싱된 스킬 호출 정보
|
|
1051
|
+
*/
|
|
1052
|
+
interface ParsedSkillCall {
|
|
1053
|
+
/** 스킬 이름 */
|
|
1054
|
+
name: string;
|
|
1055
|
+
/** 실행 파라미터 */
|
|
1056
|
+
params: Record<string, unknown>;
|
|
1057
|
+
/** 원본 매칭 문자열 */
|
|
1058
|
+
rawMatch: string;
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
/**
|
|
1062
|
+
* @description 스킬 관리 훅
|
|
1063
|
+
* @Todo vibecode - 시스템 프롬프트 생성, auto 스킬 실행, manual 스킬 관리
|
|
1064
|
+
*
|
|
1065
|
+
* useChatUI에서 호출하여 스킬 관련 로직을 분리합니다.
|
|
1066
|
+
*/
|
|
1067
|
+
|
|
1068
|
+
interface UseSkillsOptions {
|
|
1069
|
+
/** 사용자 등록 스킬 */
|
|
1070
|
+
skills?: Record<string, SkillConfig>;
|
|
1071
|
+
/** @deprecated 하위 호환용 deepResearch */
|
|
1072
|
+
deepResearch?: DeepResearchCallbacks;
|
|
1073
|
+
}
|
|
1074
|
+
interface UseSkillsReturn {
|
|
1075
|
+
/** 시스템 프롬프트에 추가할 스킬 가이드 텍스트 */
|
|
1076
|
+
buildSkillsPrompt: () => string;
|
|
1077
|
+
/**
|
|
1078
|
+
* @description 스트리밍 완료 후 skill_use 태그 감지 및 실행
|
|
1079
|
+
* @Todo vibecode - callbacks로 진행 상태/스트리밍/중단 시그널 전달
|
|
1080
|
+
* @returns skillCall이 있으면 실행하고 결과 반환, 없으면 null
|
|
1081
|
+
*/
|
|
1082
|
+
handleSkillCall: (content: string, callbacks?: SkillExecuteCallbacks) => Promise<{
|
|
1083
|
+
skillCall: ParsedSkillCall | null;
|
|
1084
|
+
cleanContent: string;
|
|
1085
|
+
result: SkillExecutionResult | null;
|
|
1086
|
+
}>;
|
|
1087
|
+
/** manual 스킬 목록 (UI 표시용) */
|
|
1088
|
+
manualSkills: ManualSkillItem[];
|
|
1089
|
+
/** manual 스킬 직접 실행 */
|
|
1090
|
+
executeManualSkill: (skillName: string, params?: Record<string, unknown>, callbacks?: SkillExecuteCallbacks) => Promise<SkillExecutionResult | null>;
|
|
1091
|
+
/** 현재 실행 중인 스킬 */
|
|
1092
|
+
activeSkillExecution: SkillExecution | null;
|
|
1093
|
+
/** 통합된 스킬 맵 (deepResearch 포함) */
|
|
1094
|
+
resolvedSkills: Record<string, SkillConfig>;
|
|
1095
|
+
}
|
|
1096
|
+
declare const useSkills: (options: UseSkillsOptions) => UseSkillsReturn;
|
|
1097
|
+
|
|
1098
|
+
/**
|
|
1099
|
+
* @description 고급 딥리서치 스킬 생성기
|
|
1100
|
+
* @Todo vibecode - useDeepResearch 4단계 파이프라인을 SkillConfig으로 통합
|
|
1101
|
+
*
|
|
1102
|
+
* 4단계 아키텍처:
|
|
1103
|
+
* 1. 쿼리 분석 - LLM이 서브토픽 + 검색 쿼리 분해
|
|
1104
|
+
* 2. 병렬 검색 - 토픽별 병렬 서브에이전트
|
|
1105
|
+
* 3. 충분성 평가 - 소스 부족 시 추가 검색
|
|
1106
|
+
* 4. 보고서 생성 - LLM 스트리밍 보고서 + 인라인 인용
|
|
1107
|
+
*/
|
|
1108
|
+
|
|
1109
|
+
/**
|
|
1110
|
+
* @description 고급 딥리서치 스킬 옵션
|
|
1111
|
+
* @Todo vibecode - 라이브러리 사용자가 제공하는 검색 API + LLM 엔드포인트
|
|
1112
|
+
*/
|
|
1113
|
+
interface AdvancedResearchOptions {
|
|
1114
|
+
/** 웹 검색 API 호출 (필수) */
|
|
1115
|
+
onWebSearch: (query: string) => Promise<SearchResult[]>;
|
|
1116
|
+
/** 페이지 본문 추출 (선택) */
|
|
1117
|
+
onExtractContent?: (url: string) => Promise<string>;
|
|
1118
|
+
/** LLM API 엔드포인트 */
|
|
1119
|
+
apiEndpoint: string;
|
|
1120
|
+
/** API 키 */
|
|
1121
|
+
apiKey?: string;
|
|
1122
|
+
/** 사용할 모델 */
|
|
1123
|
+
model: string;
|
|
1124
|
+
/** 프로바이더 */
|
|
1125
|
+
provider: string;
|
|
1126
|
+
}
|
|
1127
|
+
/**
|
|
1128
|
+
* @description 고급 딥리서치 SkillConfig 생성
|
|
1129
|
+
* @Todo vibecode - 4단계 파이프라인을 SkillConfig으로 래핑
|
|
1130
|
+
*
|
|
1131
|
+
* @example
|
|
1132
|
+
* ```tsx
|
|
1133
|
+
* skills={{
|
|
1134
|
+
* deepResearch: createAdvancedResearchSkill({
|
|
1135
|
+
* onWebSearch: mySearchAPI,
|
|
1136
|
+
* apiEndpoint: '/api/chat',
|
|
1137
|
+
* model: 'gpt-4o-mini',
|
|
1138
|
+
* provider: 'devdive',
|
|
1139
|
+
* })
|
|
1140
|
+
* }}
|
|
1141
|
+
* ```
|
|
1142
|
+
*/
|
|
1143
|
+
declare const createAdvancedResearchSkill: (options: AdvancedResearchOptions) => SkillConfig;
|
|
1144
|
+
/**
|
|
1145
|
+
* @description 하위 호환용 단순 딥리서치 스킬 생성 (기존 DeepResearchCallbacks 래핑)
|
|
1146
|
+
* @deprecated createAdvancedResearchSkill 사용 권장
|
|
1147
|
+
* @Todo vibecode - 기존 deepResearch prop 사용자를 위한 하위 호환
|
|
1148
|
+
*/
|
|
1149
|
+
declare const createDeepResearchSkill: (callbacks: DeepResearchCallbacks) => SkillConfig;
|
|
1150
|
+
|
|
657
1151
|
/**
|
|
658
1152
|
* @description Remix Icons wrapper component
|
|
659
1153
|
* @see https://remixicon.com/
|
|
660
1154
|
* Using Remix Icons 4.6.0 via CDN or npm package
|
|
661
1155
|
*/
|
|
662
1156
|
|
|
663
|
-
type IconName = 'menu-line' | 'close-line' | 'arrow-left-line' | 'arrow-right-line' | 'arrow-down-s-line' | 'arrow-up-s-line' | 'more-line' | 'more-2-line' | 'settings-3-line' | 'settings-4-line' | 'chat-1-line' | 'chat-3-line' | 'chat-new-line' | 'message-2-line' | 'send-plane-line' | 'send-plane-fill' | 'question-answer-line' | 'add-line' | 'add-circle-line' | 'delete-bin-line' | 'delete-bin-6-line' | 'edit-line' | 'edit-2-line' | 'pencil-line' | 'check-line' | 'close-circle-line' | 'refresh-line' | 'loop-left-line' | 'stop-line' | 'stop-circle-line' | 'play-line' | 'pause-line' | 'file-copy-line' | 'clipboard-line' | 'quote-text' | 'double-quotes-l' | 'double-quotes-r' | 'search-line' | 'search-2-line' | 'global-line' | 'image-line' | 'image-add-line' | 'gallery-line' | 'video-line' | 'mic-line' | 'code-line' | 'code-s-slash-line' | 'terminal-box-line' | 'bug-line' | 'git-branch-line' | 'file-text-line' | 'file-list-line' | 'article-line' | 'draft-line' | 'book-2-line' | 'magic-line' | 'sparkling-line' | 'sparkling-2-line' | 'robot-line' | 'brain-line' | 'user-line' | 'user-3-line' | 'user-settings-line' | 'account-circle-line' | 'sun-line' | 'moon-line' | 'computer-line' | 'information-line' | 'error-warning-line' | 'checkbox-circle-line' | 'loader-4-line' | 'translate-2' | 'time-line' | 'history-line' | 'star-line' | 'star-fill' | 'heart-line' | 'thumb-up-line' | 'thumb-down-line' | 'attachment-line' | 'link' | 'links-line' | 'external-link-line' | 'download-line' | 'upload-line' | 'folder-line' | 'home-line' | 'dashboard-line' | 'list-check' | 'list-unordered' | 'key-line' | 'lock-line' | 'eye-line' | 'eye-off-line';
|
|
1157
|
+
type IconName = 'menu-line' | 'close-line' | 'arrow-left-line' | 'arrow-right-line' | 'arrow-down-s-line' | 'arrow-up-s-line' | 'more-line' | 'more-2-line' | 'settings-3-line' | 'settings-4-line' | 'chat-1-line' | 'chat-3-line' | 'chat-new-line' | 'message-2-line' | 'send-plane-line' | 'send-plane-fill' | 'question-answer-line' | 'add-line' | 'add-circle-line' | 'delete-bin-line' | 'delete-bin-6-line' | 'edit-line' | 'edit-2-line' | 'pencil-line' | 'check-line' | 'close-circle-line' | 'refresh-line' | 'loop-left-line' | 'stop-line' | 'stop-circle-line' | 'play-line' | 'pause-line' | 'file-copy-line' | 'clipboard-line' | 'quote-text' | 'double-quotes-l' | 'double-quotes-r' | 'search-line' | 'search-2-line' | 'search-eye-line' | 'global-line' | 'image-line' | 'image-add-line' | 'gallery-line' | 'video-line' | 'mic-line' | 'code-line' | 'code-s-slash-line' | 'terminal-box-line' | 'bug-line' | 'git-branch-line' | 'file-text-line' | 'file-list-line' | 'article-line' | 'draft-line' | 'book-2-line' | 'magic-line' | 'sparkling-line' | 'sparkling-2-line' | 'robot-line' | 'brain-line' | 'user-line' | 'user-3-line' | 'user-settings-line' | 'account-circle-line' | 'sun-line' | 'moon-line' | 'computer-line' | 'information-line' | 'error-warning-line' | 'checkbox-circle-line' | 'loader-4-line' | 'translate-2' | 'time-line' | 'history-line' | 'star-line' | 'star-fill' | 'heart-line' | 'thumb-up-line' | 'thumb-down-line' | 'attachment-line' | 'link' | 'links-line' | 'external-link-line' | 'download-line' | 'upload-line' | 'folder-line' | 'home-line' | 'dashboard-line' | 'list-check' | 'list-unordered' | 'key-line' | 'lock-line' | 'eye-line' | 'eye-off-line';
|
|
664
1158
|
interface IconProps {
|
|
665
1159
|
/** Icon name from Remix Icons */
|
|
666
1160
|
name: IconName;
|
|
@@ -689,15 +1183,15 @@ declare const Icon: React$1.FC<IconProps>;
|
|
|
689
1183
|
declare const IconSvg: React$1.FC<IconProps>;
|
|
690
1184
|
|
|
691
1185
|
/**
|
|
692
|
-
* @description 채팅 사이드바 컴포넌트
|
|
693
|
-
*
|
|
1186
|
+
* @description 채팅 사이드바 컴포넌트 - Modern Canvas 디자인
|
|
1187
|
+
* @Todo vibecode - v0.11.0 새 디자인 시스템 적용
|
|
694
1188
|
*/
|
|
695
1189
|
|
|
696
1190
|
declare const ChatSidebar: React$1.FC<SidebarProps>;
|
|
697
1191
|
|
|
698
1192
|
/**
|
|
699
|
-
* @description 채팅 입력창 컴포넌트
|
|
700
|
-
*
|
|
1193
|
+
* @description 채팅 입력창 컴포넌트 - Modern Canvas 디자인
|
|
1194
|
+
* @Todo vibecode - v0.11.0 새 디자인 시스템 적용 (플로팅 스타일)
|
|
701
1195
|
*/
|
|
702
1196
|
|
|
703
1197
|
declare const ChatInput: React$1.FC<InputProps>;
|
|
@@ -710,9 +1204,8 @@ declare const ChatInput: React$1.FC<InputProps>;
|
|
|
710
1204
|
declare const ChatHeader: React$1.FC<HeaderProps>;
|
|
711
1205
|
|
|
712
1206
|
/**
|
|
713
|
-
* @description 메시지 버블 컴포넌트
|
|
714
|
-
*
|
|
715
|
-
* 마크다운 렌더링 및 출처 링크 칩 지원
|
|
1207
|
+
* @description 메시지 버블 컴포넌트 - Modern Canvas 디자인
|
|
1208
|
+
* @Todo vibecode - v0.11.0 새 디자인 시스템 적용
|
|
716
1209
|
*/
|
|
717
1210
|
|
|
718
1211
|
declare const MessageBubble: React$1.FC<MessageBubbleProps>;
|
|
@@ -724,8 +1217,8 @@ declare const MessageBubble: React$1.FC<MessageBubbleProps>;
|
|
|
724
1217
|
declare const MessageList: React$1.FC<MessageListProps>;
|
|
725
1218
|
|
|
726
1219
|
/**
|
|
727
|
-
* @description 빈 상태 컴포넌트
|
|
728
|
-
*
|
|
1220
|
+
* @description 빈 상태 컴포넌트 - Modern Canvas 디자인
|
|
1221
|
+
* @Todo vibecode - v0.11.0 새 디자인 시스템 적용 (Landing 화면)
|
|
729
1222
|
*/
|
|
730
1223
|
|
|
731
1224
|
declare const EmptyState: React$1.FC<EmptyStateProps>;
|
|
@@ -801,7 +1294,62 @@ interface SettingsModalProps {
|
|
|
801
1294
|
apiKeyLabel?: string;
|
|
802
1295
|
/** API 키 설명 */
|
|
803
1296
|
apiKeyDescription?: string;
|
|
1297
|
+
/** @description 메모리 아이템 목록 @Todo vibecode */
|
|
1298
|
+
memoryItems?: MemoryItem[];
|
|
1299
|
+
/** @description 컨텍스트 요약 (압축된 대화) @Todo vibecode */
|
|
1300
|
+
contextSummary?: string;
|
|
1301
|
+
/** @description 메모리 항목 삭제 핸들러 @Todo vibecode */
|
|
1302
|
+
onDeleteMemory?: (key: string) => void;
|
|
1303
|
+
/** @description 메모리 전체 삭제 핸들러 @Todo vibecode */
|
|
1304
|
+
onClearMemory?: () => void;
|
|
804
1305
|
}
|
|
805
1306
|
declare const SettingsModal: React$1.FC<SettingsModalProps>;
|
|
806
1307
|
|
|
807
|
-
|
|
1308
|
+
/**
|
|
1309
|
+
* @description 심층연구 진행 상태 UI 컴포넌트
|
|
1310
|
+
* @Todo vibecode - 심층연구 4단계 진행 상태 표시
|
|
1311
|
+
*/
|
|
1312
|
+
|
|
1313
|
+
interface DeepResearchProgressUIProps {
|
|
1314
|
+
progress: DeepResearchProgress;
|
|
1315
|
+
}
|
|
1316
|
+
/**
|
|
1317
|
+
* @description 심층연구 진행 상태 UI
|
|
1318
|
+
*/
|
|
1319
|
+
declare const DeepResearchProgressUI: React$1.FC<DeepResearchProgressUIProps>;
|
|
1320
|
+
|
|
1321
|
+
/**
|
|
1322
|
+
* @description AI 주도 선택지 (Poll) 컴포넌트
|
|
1323
|
+
* @Todo vibecode - Claude Code 스타일 탭 UI (여러 질문 한 번에)
|
|
1324
|
+
*/
|
|
1325
|
+
|
|
1326
|
+
interface PollCardProps {
|
|
1327
|
+
/** 모든 질문 목록 */
|
|
1328
|
+
questions: PollQuestion[];
|
|
1329
|
+
/** 제출 콜백 (모든 질문의 응답) */
|
|
1330
|
+
onSubmit: (responses: PollResponse[]) => void;
|
|
1331
|
+
/** 건너뛰기 콜백 */
|
|
1332
|
+
onSkip?: () => void;
|
|
1333
|
+
}
|
|
1334
|
+
/**
|
|
1335
|
+
* @description 탭 형식 Poll 카드 컴포넌트
|
|
1336
|
+
* @Todo vibecode - 여러 질문을 탭으로 표시, 모두 답변 후 제출
|
|
1337
|
+
*/
|
|
1338
|
+
declare const PollCard: React$1.FC<PollCardProps>;
|
|
1339
|
+
|
|
1340
|
+
/**
|
|
1341
|
+
* @description 스킬 실행 진행 상태 UI 컴포넌트
|
|
1342
|
+
* @Todo vibecode - 범용 스킬 실행 상태 표시
|
|
1343
|
+
*/
|
|
1344
|
+
|
|
1345
|
+
interface SkillProgressUIProps {
|
|
1346
|
+
/** 스킬 실행 상태 */
|
|
1347
|
+
execution: SkillExecution;
|
|
1348
|
+
/** UI 표시용 레이블 */
|
|
1349
|
+
skillLabel?: string;
|
|
1350
|
+
/** 아이콘 이름 */
|
|
1351
|
+
skillIcon?: string;
|
|
1352
|
+
}
|
|
1353
|
+
declare const SkillProgressUI: React$1.FC<SkillProgressUIProps>;
|
|
1354
|
+
|
|
1355
|
+
export { type ActionItem, type ActionMenuProps, type AdvancedResearchOptions, type AlternativeResponse, ChatHeader, ChatInput, type ChatMessage, type ChatSession, ChatSidebar, ChatUI, type ChatUIComponents, type ChatUIProps, type DeepResearchCallbacks, type DeepResearchProgress, DeepResearchProgressUI, EmptyState, type EmptyStateProps, type HeaderProps, Icon, type IconName, type IconProps, IconSvg, type InputProps, LinkChip, type LinkChipProps, type ManualSkillItem, MarkdownRenderer, type MarkdownRendererProps, type MemoryItem, MemoryPanel, type MemoryPanelProps, MessageBubble, type MessageBubbleProps, MessageList, type MessageListProps, type ModelConfig, type ModelSelectorProps, type PersonalizationConfig, type PollBlock, PollCard, type PollCardProps, type PollOption, type PollQuestion, type PollResponse, type PollState, type PromptTemplate, type ProviderType, type ResponseStyle, type SearchResult, type SendMessageParams, type SendMessageResponse, SettingsModal, type SettingsModalProps, type SettingsTab, type SidebarProps, type SkillConfig, type SkillExecuteCallbacks, type SkillExecution, type SkillExecutionResult, type SkillProgress, SkillProgressUI, type SkillProgressUIProps, type SkillTrigger, type SourceItem, type SubAgentProgress, type ThemeConfig, type ThemeMode, type UseChatUIOptions, type UseChatUIReturn, type UseDeepResearchOptions, type UseSkillsOptions, type UseSkillsReturn, type UserProfile, createAdvancedResearchSkill, createDeepResearchSkill, useChatUI, useDeepResearch, useSkills };
|