@bluedus/aiplug-sdk
v0.3.8
Published
AIPlug Enterprise AI Agent SDK - React & JavaScript
Downloads
2,547
Maintainers
Readme
Props 참조 (AgentChat)
| Prop | 타입 | 기본값 | 설명 |
|------|------|--------|------|
| baseUrl | string | 필수 | AIPlug Core 서버 URL |
| publicKey | string | 필수 | 테넌트 Public Key |
| tenantId | string | 필수 | 테넌트 ID |
| agentId | string \| null | null | Agent ID (null이면 자동 선택) |
| userId | string \| null | null | 사용자 식별자 (로그용) |
| title | string | 'AI Agent' | 헤더 타이틀 |
| placeholder | string | '메시지를 입력하세요...' | 입력창 placeholder |
| welcomeMessage | string | — | 첫 안내 메시지 |
| height | string | '560px' | 컴포넌트 높이 |
| width | string | '400px' | 컴포넌트 너비 |
| dark | boolean | false | 다크 테마 |
| showSources | boolean | true | RAG 출처 표시 |
| showToolCalls | boolean | true | Tool 실행 상태 표시 |
| streaming | boolean | true | SSE 스트리밍 사용 여부 (false이면 V2 동기 방식) |
Props 참조 (StreamingChat)
| Prop | 타입 | 기본값 | 설명 |
|------|------|--------|------|
| config | AIPlugClientConfig | 필수 | { baseUrl, publicKey, tenantId, agentId?, userId? } |
| components | BlockComponentOverrides | — | 블록 타입별 컴포넌트 오버라이드 |
| placeholder | string | '메시지를 입력하세요' | 입력창 placeholder |
| emptyHint | string | — | 메시지 없을 때 안내 문구 |
| className | string | — | 루트 컨테이너 클래스 |
버전 이력
| 버전 | 변경 내용 |
|------|-----------|
| 0.3.7 | 대화 이력 limit수정
| 0.3.7 | 본문 URL 자동 링크 · 인용 스크롤 SDK 내장 · 자동 스크롤 훅 · 표시 불가 출처 제외 안내. (1) 벌거벗은 URL 자동 링크화 — renderMarkdown이 https?:// 로 시작하는 평문 URL을 새 탭 <a>로 변환(기존엔 raw 노출). 마크다운 링크([t](url)) 변환 뒤 처리하고 href="..." 속성 안 URL은 제외해 이중처리 방지. (2) 인용 클릭 스크롤을 BlockRenderer로 이관 — [n] 클릭 → 해당 참고자료로 스크롤+하이라이트 로직을 BlockRenderer 래퍼가 자체 처리(소비 앱/StreamingChat이 핸들러 안 달아도 됨). e.currentTarget 스코프 탐색으로 답변이 여러 개일 때 aiplug-ref-{n} id 중복으로 위 답변으로 튀던 버그 해결. StreamingChat의 중복 핸들러 제거. (3) 자동 스크롤 훅/컴포넌트 추가 — useAutoScroll(trigger, options) 훅 + AutoScrollArea 드롭인. messages.length 트리거로 새 메시지/응답 시작 시에만 최하단 이동(토큰마다 X), stickToBottom 옵션으로 유저가 위에서 읽는 중엔 낚아채지 않음. 헤드리스(hook) UI는 AutoScrollArea로 스크롤 컨테이너만 교체하면 됨. (4) 표시 불가 출처 제외 안내 — 정리본(LLM 요약)도 안전 표시명(metadata name/title 등)도 없어 화면에 못 띄우는 DB 출처는 참고목록에서 제외하고, 하단에 "표시할 수 없는 출처 N건은 제외되었습니다" 안내를 표시. references 이벤트에 excludedCount 추가 → ReferencesContentBlock으로 전달 → ReferenceList footer 렌더(표시할 항목이 하나도 없으면 안내도 안 뜸). 서버(core) 필요 — RAG references 조립 시 안전 표시명 폴백(도메인 무관 관용 키만) + 제외 카운트, references SSE 이벤트 excludedCount 필드. 변경 파일: utils/markdown.ts, stream/react/BlockRenderer.tsx, stream/react/StreamingChat.tsx, stream/react/blocks/ReferenceList.tsx, stream/react/useAutoScroll.ts, stream/react/AutoScrollArea.tsx, stream/react/index.ts, stream/core/reducer.ts, stream/core/types.ts, types/index.ts. |
| 0.3.6 | 본문 인용 [n] 클릭 이동 + 마커 스타일 개선 · 참고목록 정리. (1) [n] 클릭 → 참고자료 스크롤 — 기존엔 인용 마커 [n]이 url이 있을 때만 외부 링크(새 탭)였던 것을, 항상 답변 하단 참고목록의 해당 출처로 스크롤 이동하도록 변경. renderMarkdown의 linkifyCitations가 [n]을 페이지 내 앵커(#aiplug-ref-{n})로 변환하고, StreamingChat의 어시스턴트 버블이 클릭을 위임 처리해 scrollIntoView + 짧은 하이라이트를 준다. 같은 버블 내에서만 대상을 탐색해 답변이 여러 개일 때 id 충돌을 방지하며, url 없는 DB 출처도 이제 클릭 가능하다. (2) 인용 마커 스타일 — [n]을 본문색에 가까운 중립 회색 칩(얇은 테두리 강조)으로 렌더하고, --aiplug-cite-fg/-bg/-border CSS 변수로 앱 테마 오버라이드 가능. (3) 참고목록 정리 — sourceType 그룹 헤더("DB" 등)를 제거해 flat 리스트로 바꾸고, 각 항목에 id={aiplug-ref-{index}}를 부여(스크롤 타깃). url 있는 항목은 제목 ↗ 강조 링크(새 탭)로 표시한다. 서버 무관 · 프론트 전용 · 하위호환(references 없는 데이터는 기존과 동일 렌더). 변경 파일: utils/markdown.ts, stream/react/StreamingChat.tsx, stream/react/blocks/ReferenceList.tsx. |
| 0.3.5 | core init message 추가
| 0.3.4 | 이력 출처 렌더 수정
| 0.3.3 | 대화 복원 시 참고자료(references) 표시 + 생성 이미지 제목/카드 UI. (1) references 복원 — 0.3.2까진 실시간 스트리밍에서만 보이던 RAG 참고자료가 과거 대화 복원 시엔 누락되던 것을, 서버가 인용된 출처를 메시지에 저장하고 복원 API로 반환하도록 개선. ConversationMessageItem에 references 필드 추가, loadConversation이 이를 UIMessage.references로 매핑 → AgentChat이 답변 하단에 출처 칩([n] 제목)으로 렌더한다. 저장·표시되는 references는 민감정보가 제거된 필터링본(인용된 출처만, DB 출처는 LLM 정리 요약)으로, 원본 검색 청크는 노출하지 않는다. (2) 생성 이미지 제목/카드 — 기존엔 생성 이미지가 캡션 없이 원본 크기로 노출되던 것을, ImageContentBlock에 title 필드를 추가하고 <figure>+<figcaption> 카드(최대 360px, 하단 제목 캡션)로 렌더. 제목은 마커의 title 속성(한글)을 우선 사용하고 없으면 altText(프롬프트)로 폴백한다. 서버(core) 0.3.3+ 필요 — AP_CONV_MESSAGE에 REFERENCE_ITEMS(jsonb) 컬럼 추가, POST /api/v1/conversations/messages 응답 MessageItem에 references 추가, <aiplug:generate-image> 마커에 title 속성 지원. 기존 동작 무변경(하위호환 — references/title 없는 구버전 데이터는 각각 미표시/폴백). |
| 0.3.2 | 대화 복원 시 표/차트/이미지 블록 렌더링 + 마크다운 링크 지원. (1) 복원 메시지 구조화 블록 지원 — 0.3.1에선 과거 대화 복원 시 텍스트(content)만 렌더해 표·차트가 마크다운 raw로 노출되던 것을, 서버가 저장된 원문을 ContentBlock으로 재파싱해 blocks로 함께 반환하도록 개선. fetchConversationMessages의 ConversationMessageItem에 blocks 필드 추가, loadConversation이 이를 UIMessage.contents로 매핑 → 실시간 응답과 동일하게 ContentBlockRenderer가 표·차트를 렌더한다. (2) 마크다운 링크 렌더링 — renderMarkdown이 [텍스트](url)를 클릭 가능한 <a>(새 창)로 변환(기존엔 raw 노출). 인용 마커 [n] 변환보다 먼저 처리해 충돌 방지. (3) 빈 표 방지 — 데이터 행이 없는 표(헤더만 존재)는 렌더하지 않도록 TableBlock에 가드 추가(약한 모델이 헤더만 낸 빈 표가 덜렁 나오던 문제 해결). 서버(core) 0.3.2+ 필요 — POST /api/v1/conversations/messages 응답의 MessageItem에 blocks(assistant 메시지 재파싱 결과) 추가, content(raw)는 하위호환 유지. 기존 동작 무변경(하위호환). |
| 0.3.1 | 대화 이력(사이드바) 지원 추가 — ChatGPT/Claude식 과거 대화 목록 + 클릭 복원. 브라우저 단위 식별자(config.userId = localStorage anon_id)를 서버 clientId로 저장해, 같은 브라우저의 과거 대화를 목록으로 조회하고 클릭 시 메시지를 복원한다. 신규 API: useConversations(config) 훅(대화 목록 + reload), useAIPlugChat에 loadConversation(conversationId) 추가(불러온 대화로 화면 복원 + 이후 send가 그 대화로 이어짐). core 함수 fetchConversations / fetchConversationMessages도 export. 서버(core) 0.3.1+ 필요 — AP_CONVERSATION에 CLIENT_ID/LOGIN_USER_ID 컬럼 추가, POST /api/v1/conversations(목록)·POST /api/v1/conversations/messages(복원) 엔드포인트. 복원 메시지는 텍스트(content)만 — 표/차트 등 구조화 블록은 추후 지원. 기존 send 시그니처·동작 무변경(하위호환). |
| 0.3.0 | 선택한 모델을 chat 요청에 반영 — 0.2.7에서 모델 목록 조회·선택 UI까지 구현됐으나 실제 /api/v3/chat 요청엔 반영되지 않던 것을 연결. send(text, modelId?) 시그니처 확장으로 선택 모델(selectedModel.modelId)을 요청 body의 llmModelId로 전달. ChatStreamOptions.modelId, ChatRequestBody.llmModelId 추가, StreamingChat이 입력바에 모델 셀렉트를 내장(useModels 연동). 라우팅 정책: 매 턴 변경 허용(대화 도중 모델 변경 시 그 턴부터 반영) + conversation 라우팅 핀 갱신(이후 턴 기본값으로 고정) + 유효하지 않은 modelId는 기존 라우팅 체인으로 자동 fallback. 서버(core) 0.3.0+ 필요 — ChatRequest.llmModelId 수신, ChatLlmTargetResolver가 tenant에 enabled 등록된 모델 범위에서만 resolve(cross-tenant/비활성 모델 차단), USER_SELECTED 라우팅 소스 추가. |
| 0.2.7 | 모델 목록 조회 및 지정 호출
| 0.2.6 | 마크다운 렌더 정리 — (1) 표 셀 안 마크다운 렌더링: DefaultTable이 헤더/셀의 **굵게**·*이탤릭*·`코드`·~~취소선~~을 변환(기존엔 **한국** 처럼 raw 노출). 신규 renderInlineMarkdown export. (2) 인용블록(> …) 지원: 기존엔 >가 그대로 찍히던 것을 <blockquote>로 렌더. (3) 줄바꿈 정리: 구분선 ***/___ 인식, 블록 요소(제목/리스트/표/인용/hr) 직후 불필요한 <br/> 제거로 과한 간격 완화. (4) 제목 줄분리: 스트리밍 중 …제공되었습니다.# 🐟 제목처럼 앞 문장에 붙은 ATX 제목을 줄 분리해 제목으로 렌더(문장부호+#{1,6} 패턴만 → C#·#태그 오탐 방지). 표/차트 점진 렌더링(content_block 이벤트) 추가. 스트리밍 중 표가 하나 완성될 때마다 즉시 렌더 — 기존엔 done 후에야 모든 표가 한꺼번에 보였음. 신규 SSE 이벤트 content_block(완성된 구조화 블록 1개)을 parseSse/reducer가 처리해 순서대로 블록 추가. done 시 mergeDoneBlocks가 서버 권위 블록으로 최종 교체(중복 없음). 서버(core) 0.2.6+ 필요 — core가 스트리밍 토큰에서 <aiplug:...> 마커·마크다운 표 구간을 분리해 완성 즉시 content_block으로 전송하고, 이모지(surrogate pair)가 토큰 경계로 쪼개져 ??로 깨지던 문제도 서버측에서 수정. |
| 0.2.5 | MessageId 추가 parseSse.ts
| 0.2.4 | 표 중복 렌더링 수정 · 피드백 활성화 안정화. done 완료 시 서버 contentBlocks를 본문 권위 소스로 사용하도록 reducer(mergeDoneBlocks) 재작성 — 스트리밍 중 누적된 raw 토큰(LLM이 낸 마크다운 표 원문 등)은 폐기하고, 스트림 전용 블록(REFERENCES/KEYWORDS)만 보존. 본문 마크다운 표 + 렌더된 표가 중복으로 보이던 문제 해결. 아울러 done.messageId → Message.messageId 매핑을 보정해 완료된 답변에 따봉 바가 항상 노출되도록 함. (서버측: render-table 마커 관용 파싱 + 마크다운 표 백스톱으로 약한 모델의 빈 표/마크다운 표도 보정.) |
| 0.2.3 | StreamingChat 응답 피드백 내장 — 드롭인이 내부에서 FeedbackContext.Provider로 감싸고 어시스턴트 답변 하단에 FeedbackBar를 자동 노출(done으로 messageId가 온 완료 답변에 한함). 0.2.2에선 hook의 feedback API는 제공됐지만 StreamingChat에 연결돼 있지 않아 드롭인에선 따봉이 보이지 않던 문제 수정. 툴킷 형태(useAIPlugChat + 직접 Provider)는 기존과 동일. |
| 0.2.2 | 응답·출처 피드백 추가 — 따봉(👍/👎)·코멘트. 응답 단위(FeedbackBar) + 출처 단위(ReferenceList 자동). FeedbackContext/useFeedback, hook feedback API, submitFeedback 함수(POST /api/v1/feedback). Message.messageId·done.messageId 추가(피드백 타겟). 계약: 변경마다 "현재 전체 상태" 전송, 둘 다 비면 평가 취소(삭제). Reference.title/url optional 화(내부 문서·파일명 미정 대응). |
| 0.2.1 | exports 맵 누락 수정 — ./stream, ./stream/react 가 해결되지 않던 문제 패치. |
| 0.2.0 | 블록 기반 스트리밍 챗 모듈 추가 (@bluedus/aiplug-sdk/stream). 함수(createChatStream)·툴킷(useAIPlugChat + BlockRenderer)·챗봇(StreamingChat) 3형태. REFERENCES/KEYWORDS ContentBlock, [n] 인용 마커→출처 링크, sourceType 그룹 참고목록, CSS 변수(--aiplug-*) 테마, components prop 블록 오버라이드. 기존 toolkit(AgentChat/useAIPlug/ChatSession) 무변경. |
| 0.1.9 | 마크다운 렌더러 내장(외부 의존성 없음). systemStatus 파생 상태 추가. (상세 changelog 확인 필요) |
| 0.1.8 | blocked SSE 이벤트에 source 필드(SYSTEM/POLICY/KANANA) 추가. (상세 changelog 확인 필요) |
| 0.1.7 | Phase 진행 상태 표시 추가 — 스트리밍 중 Agent 탐색·RAG 검색·Tool 실행 등 처리 단계 실시간 표시. thinkingStep 상태 추가. onThinking 콜백 추가. |
| 0.1.6 | SSE 스트리밍 추가 — /api/v3/chat 연동. 토큰 실시간 렌더링. isStreaming 상태, streaming 옵션 추가. streamMessage() API 추가. |
| 0.1.5 | 서버 에러 메시지 반환 추가 |
| 0.1.4 | 타입 에러 수정. |
| 0.1.3 | Platform 내장 기능 추가 — 이미지 생성·차트·테이블 ContentBlock 자동 렌더링. AgentResponse.contents, UIMessage.contents 타입 추가. |
| 0.1.2 | Confirm 흐름 추가 — PENDING_TOOL_CONFIRM, PENDING_ORCHESTRATION_CONFIRM, PENDING_CONSENT 자동 처리. /api/v2/chat 전환. confirmAction, agentAccepted 파라미터 지원. |
| 0.1.1 | 버그 수정 |
| 0.1.0 | 최초 릴리즈 |
배포 (GitLab CI)
# package.json version 0.3.3 로 올린 뒤
npm run build
git tag v0.3.7
git push origin v0.3.7GitLab CI/CD Variables에 NPM_TOKEN 등록 필요.
배포 전 확인:
package.json의exports에./stream,./stream/react매핑이 있고,npm run build후dist/에 stream 모듈이 실제로 나오는지 확인. 호스트 앱은 배포 후npm i @bluedus/[email protected]로 업그레이드해야 표 중복 수정·피드백 활성화가 반영됩니다.0.3.0+StreamingChat은 입력바에 모델 선택 셀렉트를 자동 포함합니다(테넌트에 등록된 모델이 2개 이상일 때). 선택값은 chat 요청에llmModelId로 전달되며, 별도 prop 설정은 필요 없습니다.0.3.1+ 대화 이력(사이드바)은 툴킷 형태 전용입니다 —useConversations로 목록을 그리고, 클릭 시useAIPlugChat의loadConversation(conversationId)을 호출해 복원합니다.StreamingChat드롭인에는 사이드바가 포함되지 않습니다(앱에서 직접 조립).0.3.2+ 과거 대화 복원 시 표·차트·이미지가 실시간과 동일하게 렌더됩니다. 서버(core) 0.3.2+ 필수 — 복원 API가blocks를 반환하지 않으면 표는 여전히 텍스트로만 보입니다(구버전 서버 하위호환:contentfallback).0.3.3+ 대화 복원 시 참고자료(references)가 표시되고, 생성 이미지가 제목 카드로 렌더됩니다. 서버(core) 0.3.3+ 필수 — 복원 API가references를 반환하지 않으면 참고자료는 표시되지 않습니다(구버전 서버 하위호환: 미표시). 이미지 제목은 서버가<aiplug:generate-image title="...">마커를 지원해야 채워지며, 미지원 시 프롬프트(altText)로 폴백합니다.0.3.7+ 본문 평문 URL이 자동 링크되고,[n]인용 클릭 스크롤이 SDK(BlockRenderer) 내장이라 앱에서 핸들러가 필요 없습니다. 자동 스크롤은useAutoScroll/AutoScrollArea로 제공(헤드리스 UI는 스크롤 컨테이너만 교체). 표시 불가 출처 제외 안내는 서버(core)가excludedCount를 내려줘야 뜹니다(구버전 서버 하위호환: 안내 미표시).
라이선스
UNLICENSED — ㈜블루더스 내부용
