@gendive/chatllm 0.16.1 → 0.17.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.
@@ -386,6 +386,21 @@ interface ChatToolDefinition {
386
386
  label?: string;
387
387
  /** @Todo vibecode - UI 표시용 아이콘 ('image', 'search', 'code', 'file') */
388
388
  icon?: string;
389
+ /**
390
+ * @description 트리거 방식 (기본: 'both')
391
+ * @Todo vibecode - 'attachment' 시 파일 첨부 자동 실행
392
+ */
393
+ trigger?: 'both' | 'attachment';
394
+ /**
395
+ * @description 허용 파일 타입 (attachment trigger 전용)
396
+ * @Todo vibecode - MIME 와일드카드 ('image/*'), 확장자 ('.pdf') 지원
397
+ */
398
+ acceptedTypes?: string[];
399
+ /**
400
+ * @description 파일 첨부 시 File 객체를 base64 문자열로 자동 변환
401
+ * @Todo vibecode - true 시 execute()에 { name, mimeType, base64, size } 형태로 전달
402
+ */
403
+ autoConvertBase64?: boolean;
389
404
  }
390
405
  interface ChatMessage {
391
406
  id: string;
@@ -457,8 +472,9 @@ interface ActionItem {
457
472
  * auto: AI가 <skill_use> 태그로 자동 호출
458
473
  * manual: 사용자가 UI에서 직접 선택
459
474
  * both: 양쪽 모두 가능
475
+ * attachment: 파일 첨부 시 자동 실행 (AI 호출 불가, UI 메뉴 미표시)
460
476
  */
461
- type SkillTrigger = 'auto' | 'manual' | 'both';
477
+ type SkillTrigger = 'auto' | 'manual' | 'both' | 'attachment';
462
478
  /**
463
479
  * @description 스킬 실행 결과
464
480
  */
@@ -524,6 +540,17 @@ interface SkillConfig<TParams = Record<string, unknown>> {
524
540
  label: string;
525
541
  /** 비활성화 여부 */
526
542
  disabled?: boolean;
543
+ /**
544
+ * @description 허용 파일 타입 (attachment trigger 전용)
545
+ * @Todo vibecode - MIME 와일드카드 ('image/*'), 확장자 ('.pdf') 지원
546
+ * @example ['image/*', 'application/pdf', '.docx']
547
+ */
548
+ acceptedTypes?: string[];
549
+ /**
550
+ * @description 파일 첨부 시 File 객체를 base64 문자열로 자동 변환
551
+ * @Todo vibecode - true 시 execute()에 { name, mimeType, base64, size } 형태로 전달
552
+ */
553
+ autoConvertBase64?: boolean;
527
554
  }
528
555
  /**
529
556
  * @description 스킬 실행 상태 (메시지에 첨부)
@@ -559,6 +586,14 @@ interface ModelConfig {
559
586
  name: string;
560
587
  provider: ProviderType;
561
588
  description?: string;
589
+ /** @Todo vibecode - UI 표시용 아이콘 (URL 또는 아이콘 이름) */
590
+ icon?: string;
591
+ /** @Todo vibecode - 최대 출력 토큰 수 */
592
+ maxTokens?: number;
593
+ /** @Todo vibecode - 컨텍스트 윈도우 크기 (토큰) */
594
+ contextWindow?: number;
595
+ /** @Todo vibecode - 호스트 커스텀 필드 허용 */
596
+ [key: string]: unknown;
562
597
  }
563
598
  interface PromptTemplate {
564
599
  id: string;
@@ -741,6 +776,21 @@ interface ChatUIProps {
741
776
  * @Todo vibecode - 라이브러리가 도구 호출 판단 후 호스트에 실행 위임
742
777
  */
743
778
  onToolCall?: (name: string, params: Record<string, unknown>) => Promise<ToolCallResult>;
779
+ /**
780
+ * @description 도구/스킬 실행 후 AI 후속 스트리밍 계속 여부 (기본: true)
781
+ * @Todo vibecode - false 시 도구 결과만 표시하고 AI 후속 응답 생략
782
+ */
783
+ continueAfterToolResult?: boolean;
784
+ /**
785
+ * @description 스킬 실행 완료 시 콜백 (개별 스킬별 제어)
786
+ * @Todo vibecode - 'continue' 반환 시 AI 후속 응답, 'stop' 반환 시 중단
787
+ */
788
+ onSkillComplete?: (skillName: string, result: SkillExecutionResult) => 'continue' | 'stop';
789
+ /**
790
+ * @description 모델 목록 비동기 로드 콜백
791
+ * @Todo vibecode - 마운트 시 호출, 반환된 모델 목록이 models prop을 대체
792
+ */
793
+ onLoadModels?: () => Promise<ModelConfig[]>;
744
794
  /**
745
795
  * @description 프로젝트 기능 활성화 여부 (기본: false)
746
796
  * @Todo vibecode - true 시 프로젝트 그룹핑, 지침, 메모리 계층 활성화
@@ -854,6 +904,11 @@ interface SidebarProps {
854
904
  renderAfterHeader?: () => React.ReactNode;
855
905
  /** @Todo vibecode - 세션 목록 아래, 사이드바 하단에 커스텀 콘텐츠 렌더링 */
856
906
  renderFooter?: () => React.ReactNode;
907
+ /**
908
+ * @description 세션 목록 로딩 상태
909
+ * @Todo vibecode - true 시 스켈레톤 UI 표시
910
+ */
911
+ isLoading?: boolean;
857
912
  }
858
913
  interface MessageListProps {
859
914
  messages: ChatMessage[];
@@ -1089,6 +1144,11 @@ interface UseChatUIReturn {
1089
1144
  * @Todo vibecode - 외부 스토리지 사용 시 세션 상세 로드 중
1090
1145
  */
1091
1146
  isSessionLoading: boolean;
1147
+ /**
1148
+ * @description 모델 목록 로딩 상태
1149
+ * @Todo vibecode - onLoadModels 실행 중
1150
+ */
1151
+ isModelsLoading: boolean;
1092
1152
  /**
1093
1153
  * @description 심층연구 모드 활성화 여부
1094
1154
  * @Todo vibecode - 심층연구 버튼 토글 상태
@@ -1345,6 +1405,21 @@ interface UseChatUIOptions {
1345
1405
  onAddProjectFile?: (projectId: string, file: File) => Promise<ProjectFile>;
1346
1406
  /** @Todo vibecode - 프로젝트 파일 삭제 콜백 */
1347
1407
  onDeleteProjectFile?: (projectId: string, fileId: string) => Promise<void>;
1408
+ /**
1409
+ * @description 도구 실행 후 AI 스트리밍 계속 여부 (기본: true, 하위호환)
1410
+ * @Todo vibecode - false 시 도구 결과만 표시하고 AI 후속 응답 생략
1411
+ */
1412
+ continueAfterToolResult?: boolean;
1413
+ /**
1414
+ * @description 스킬 완료 시 콜백 (스트림 제어)
1415
+ * @Todo vibecode - 'continue' 반환 시 AI 응답 생성, 'stop' 반환 시 중단
1416
+ */
1417
+ onSkillComplete?: (skillName: string, result: SkillExecutionResult) => 'continue' | 'stop';
1418
+ /**
1419
+ * @description 모델 목록 비동기 로드 콜백
1420
+ * @Todo vibecode - 제공 시 마운트 시 호출, 완료 전까지 models prop 사용
1421
+ */
1422
+ onLoadModels?: () => Promise<ModelConfig[]>;
1348
1423
  }
1349
1424
  declare const useChatUI: (options: UseChatUIOptions) => UseChatUIReturn;
1350
1425
 
@@ -386,6 +386,21 @@ interface ChatToolDefinition {
386
386
  label?: string;
387
387
  /** @Todo vibecode - UI 표시용 아이콘 ('image', 'search', 'code', 'file') */
388
388
  icon?: string;
389
+ /**
390
+ * @description 트리거 방식 (기본: 'both')
391
+ * @Todo vibecode - 'attachment' 시 파일 첨부 자동 실행
392
+ */
393
+ trigger?: 'both' | 'attachment';
394
+ /**
395
+ * @description 허용 파일 타입 (attachment trigger 전용)
396
+ * @Todo vibecode - MIME 와일드카드 ('image/*'), 확장자 ('.pdf') 지원
397
+ */
398
+ acceptedTypes?: string[];
399
+ /**
400
+ * @description 파일 첨부 시 File 객체를 base64 문자열로 자동 변환
401
+ * @Todo vibecode - true 시 execute()에 { name, mimeType, base64, size } 형태로 전달
402
+ */
403
+ autoConvertBase64?: boolean;
389
404
  }
390
405
  interface ChatMessage {
391
406
  id: string;
@@ -457,8 +472,9 @@ interface ActionItem {
457
472
  * auto: AI가 <skill_use> 태그로 자동 호출
458
473
  * manual: 사용자가 UI에서 직접 선택
459
474
  * both: 양쪽 모두 가능
475
+ * attachment: 파일 첨부 시 자동 실행 (AI 호출 불가, UI 메뉴 미표시)
460
476
  */
461
- type SkillTrigger = 'auto' | 'manual' | 'both';
477
+ type SkillTrigger = 'auto' | 'manual' | 'both' | 'attachment';
462
478
  /**
463
479
  * @description 스킬 실행 결과
464
480
  */
@@ -524,6 +540,17 @@ interface SkillConfig<TParams = Record<string, unknown>> {
524
540
  label: string;
525
541
  /** 비활성화 여부 */
526
542
  disabled?: boolean;
543
+ /**
544
+ * @description 허용 파일 타입 (attachment trigger 전용)
545
+ * @Todo vibecode - MIME 와일드카드 ('image/*'), 확장자 ('.pdf') 지원
546
+ * @example ['image/*', 'application/pdf', '.docx']
547
+ */
548
+ acceptedTypes?: string[];
549
+ /**
550
+ * @description 파일 첨부 시 File 객체를 base64 문자열로 자동 변환
551
+ * @Todo vibecode - true 시 execute()에 { name, mimeType, base64, size } 형태로 전달
552
+ */
553
+ autoConvertBase64?: boolean;
527
554
  }
528
555
  /**
529
556
  * @description 스킬 실행 상태 (메시지에 첨부)
@@ -559,6 +586,14 @@ interface ModelConfig {
559
586
  name: string;
560
587
  provider: ProviderType;
561
588
  description?: string;
589
+ /** @Todo vibecode - UI 표시용 아이콘 (URL 또는 아이콘 이름) */
590
+ icon?: string;
591
+ /** @Todo vibecode - 최대 출력 토큰 수 */
592
+ maxTokens?: number;
593
+ /** @Todo vibecode - 컨텍스트 윈도우 크기 (토큰) */
594
+ contextWindow?: number;
595
+ /** @Todo vibecode - 호스트 커스텀 필드 허용 */
596
+ [key: string]: unknown;
562
597
  }
563
598
  interface PromptTemplate {
564
599
  id: string;
@@ -741,6 +776,21 @@ interface ChatUIProps {
741
776
  * @Todo vibecode - 라이브러리가 도구 호출 판단 후 호스트에 실행 위임
742
777
  */
743
778
  onToolCall?: (name: string, params: Record<string, unknown>) => Promise<ToolCallResult>;
779
+ /**
780
+ * @description 도구/스킬 실행 후 AI 후속 스트리밍 계속 여부 (기본: true)
781
+ * @Todo vibecode - false 시 도구 결과만 표시하고 AI 후속 응답 생략
782
+ */
783
+ continueAfterToolResult?: boolean;
784
+ /**
785
+ * @description 스킬 실행 완료 시 콜백 (개별 스킬별 제어)
786
+ * @Todo vibecode - 'continue' 반환 시 AI 후속 응답, 'stop' 반환 시 중단
787
+ */
788
+ onSkillComplete?: (skillName: string, result: SkillExecutionResult) => 'continue' | 'stop';
789
+ /**
790
+ * @description 모델 목록 비동기 로드 콜백
791
+ * @Todo vibecode - 마운트 시 호출, 반환된 모델 목록이 models prop을 대체
792
+ */
793
+ onLoadModels?: () => Promise<ModelConfig[]>;
744
794
  /**
745
795
  * @description 프로젝트 기능 활성화 여부 (기본: false)
746
796
  * @Todo vibecode - true 시 프로젝트 그룹핑, 지침, 메모리 계층 활성화
@@ -854,6 +904,11 @@ interface SidebarProps {
854
904
  renderAfterHeader?: () => React.ReactNode;
855
905
  /** @Todo vibecode - 세션 목록 아래, 사이드바 하단에 커스텀 콘텐츠 렌더링 */
856
906
  renderFooter?: () => React.ReactNode;
907
+ /**
908
+ * @description 세션 목록 로딩 상태
909
+ * @Todo vibecode - true 시 스켈레톤 UI 표시
910
+ */
911
+ isLoading?: boolean;
857
912
  }
858
913
  interface MessageListProps {
859
914
  messages: ChatMessage[];
@@ -1089,6 +1144,11 @@ interface UseChatUIReturn {
1089
1144
  * @Todo vibecode - 외부 스토리지 사용 시 세션 상세 로드 중
1090
1145
  */
1091
1146
  isSessionLoading: boolean;
1147
+ /**
1148
+ * @description 모델 목록 로딩 상태
1149
+ * @Todo vibecode - onLoadModels 실행 중
1150
+ */
1151
+ isModelsLoading: boolean;
1092
1152
  /**
1093
1153
  * @description 심층연구 모드 활성화 여부
1094
1154
  * @Todo vibecode - 심층연구 버튼 토글 상태
@@ -1345,6 +1405,21 @@ interface UseChatUIOptions {
1345
1405
  onAddProjectFile?: (projectId: string, file: File) => Promise<ProjectFile>;
1346
1406
  /** @Todo vibecode - 프로젝트 파일 삭제 콜백 */
1347
1407
  onDeleteProjectFile?: (projectId: string, fileId: string) => Promise<void>;
1408
+ /**
1409
+ * @description 도구 실행 후 AI 스트리밍 계속 여부 (기본: true, 하위호환)
1410
+ * @Todo vibecode - false 시 도구 결과만 표시하고 AI 후속 응답 생략
1411
+ */
1412
+ continueAfterToolResult?: boolean;
1413
+ /**
1414
+ * @description 스킬 완료 시 콜백 (스트림 제어)
1415
+ * @Todo vibecode - 'continue' 반환 시 AI 응답 생성, 'stop' 반환 시 중단
1416
+ */
1417
+ onSkillComplete?: (skillName: string, result: SkillExecutionResult) => 'continue' | 'stop';
1418
+ /**
1419
+ * @description 모델 목록 비동기 로드 콜백
1420
+ * @Todo vibecode - 제공 시 마운트 시 호출, 완료 전까지 models prop 사용
1421
+ */
1422
+ onLoadModels?: () => Promise<ModelConfig[]>;
1348
1423
  }
1349
1424
  declare const useChatUI: (options: UseChatUIOptions) => UseChatUIReturn;
1350
1425