@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.
@@ -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: ModelConfig[];
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) => Promise<void>;
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
- * 사용자/AI 메시지 표시, 복사, 수정, 재생성
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
- export { type ActionItem, type ActionMenuProps, type AlternativeResponse, ChatHeader, ChatInput, type ChatMessage, type ChatSession, ChatSidebar, ChatUI, type ChatUIComponents, type ChatUIProps, EmptyState, type EmptyStateProps, type HeaderProps, Icon, type IconName, type IconProps, IconSvg, type InputProps, LinkChip, type LinkChipProps, MarkdownRenderer, type MarkdownRendererProps, type MemoryItem, MemoryPanel, type MemoryPanelProps, MessageBubble, type MessageBubbleProps, MessageList, type MessageListProps, type ModelConfig, type ModelSelectorProps, type PersonalizationConfig, type PromptTemplate, type ProviderType, type ResponseStyle, type SendMessageParams, type SendMessageResponse, SettingsModal, type SettingsModalProps, type SettingsTab, type SidebarProps, type SourceItem, type ThemeConfig, type ThemeMode, type UseChatUIOptions, type UseChatUIReturn, type UserProfile, useChatUI };
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 };