@vibexnpm/talkx 3.0.1 → 3.0.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibexnpm/talkx",
3
- "version": "3.0.1",
3
+ "version": "3.0.2",
4
4
  "type": "module",
5
5
  "description": "TalkFlow SDK - Chat & WebRTC unified client",
6
6
  "main": "dist/talkflow-sdk.umd.js",
@@ -477,9 +477,9 @@ class ChatClient extends EventEmitter {
477
477
  * Rolling 누적 요약 갱신 트리거 (비동기).
478
478
  *
479
479
  * <p>방의 <b>누적 대화 요약</b>을 갱신한다 — {@link #summarizeWithAssistant}(페르소나가 최근 N개를 방에
480
- * 어시스턴트 메시지로 발행)와 달리, 방당 1개의 통합 요약본(rollup)을 마지막 요약 지점 이후 <b>새 대화만
481
- * 증분</b> 반영한다. 실제 요약은 서버 워커가 비동기로 수행하며, 완료/실패는 {@code summaryUpdate} 이벤트로
482
- * 통지된다. 확정 내용은 {@link #getSummary} 로 조회한다(알림 payload 에는 내용이 없다).</p>
480
+ * 어시스턴트 메시지로 발행)와 달리, <b>포맷별</b> 통합 요약본(rollup)을 마지막 요약 지점 이후 <b>새 대화만
481
+ * 증분</b> 반영한다(같은 방을 여러 포맷으로 보관). 실제 요약은 서버 워커가 비동기로 수행하며, 완료/실패는
482
+ * {@code summaryUpdate} 이벤트로 통지된다. 확정 내용은 {@link #getSummary} 로 조회한다(알림 payload 에는 내용이 없다).</p>
483
483
  *
484
484
  * <p>전체 히스토리를 보는 방(예: TEAM) 대상 기능이며, AI capability {@code TOOL_SUMMARIZE} 가 필요하다.</p>
485
485
  *
@@ -512,23 +512,28 @@ class ChatClient extends EventEmitter {
512
512
  * transient(저장 안 됨)라 유실될 수 있으므로 GET 으로 동기화한다. 아직 한 번도 요약된 적 없으면 {@code rollup}
513
513
  * 이 {@code null} 이다. segment 는 {@code afterSeq}/{@code size} 로 페이지네이션한다({@code hasNext}/{@code nextSeq}).</p>
514
514
  *
515
+ * <p>같은 방을 여러 포맷으로 보관하므로 {@code options.format} 으로 골라 조회한다. 미지정 시 기본(SHORT 우선),
516
+ * 요청 포맷이 아직 없으면 {@code rollup=null}(이때 {@code availableFormats} 로 보유 포맷 확인 또는 refreshSummary
517
+ * 로 생성). {@code rollup.stale} 이 {@code true} 면 그 포맷이 최신 대화를 아직 반영 안 함(refresh 로 최신화).</p>
518
+ *
515
519
  * @param {string} roomId - 채팅방 ID
516
520
  * @param {Object} [options]
521
+ * @param {string} [options.format] - 조회할 포맷({@link SummarizeFormat}). 미지정 시 기본. 미보유 포맷이면 rollup=null.
517
522
  * @param {number} [options.afterSeq] - segment 페이지 커서(exclusive). 미지정 시 처음부터.
518
523
  * @param {number} [options.size=50] - segment 페이지 크기(서버 상한 50).
519
- * @returns {Promise<RoomSummaryView>} { rollup: { content, format, status, ... } | null, segments: [...], hasNext, nextSeq }
524
+ * @returns {Promise<RoomSummaryView>} { rollup | null, availableFormats, segments, hasNext, nextSeq }
520
525
  *
521
526
  * @example
522
- * const view = await chat.getSummary(roomId);
523
- * if (!view.rollup) return renderEmpty(); // 아직 요약 없음
524
- * renderRollup(view.rollup); // rollup.status: 'IDLE' | 'RUNNING' | 'FAILED'
525
- * renderSegments(view.segments, view.hasNext, view.nextSeq);
527
+ * const view = await chat.getSummary(roomId, { format: 'timeline' });
528
+ * if (!view.rollup) return renderEmpty(); // 그 포맷 아직 없음 (availableFormats 로 탭 렌더)
529
+ * renderRollup(view.rollup, view.rollup.stale); // stale 이면 "최신화" 유도
530
+ * renderTabs(view.availableFormats); // 보유 포맷 탭
526
531
  */
527
532
  async getSummary(roomId, options = {}) {
528
- const { afterSeq, size } = options;
533
+ const { format, afterSeq, size } = options;
529
534
  const response = await this.apiClient.get(
530
535
  `/api/v1/rooms/${roomId}/summary`,
531
- { afterSeq, size }
536
+ { format, afterSeq, size }
532
537
  );
533
538
  return this._unwrapSuccessResponse(response);
534
539
  }
package/types/index.d.ts CHANGED
@@ -307,6 +307,8 @@ export interface RefreshSummaryResult {
307
307
 
308
308
  /** {@link ChatClient.getSummary} 옵션. */
309
309
  export interface GetSummaryOptions {
310
+ /** 조회할 포맷({@link SummarizeFormat}). 미지정 시 기본(SHORT 우선). 미보유 포맷이면 rollup=null. */
311
+ format?: SummarizeFormatValue;
310
312
  /** segment 페이지 커서(exclusive). 미지정 시 처음부터. */
311
313
  afterSeq?: number;
312
314
  /** segment 페이지 크기(서버 상한 50). */
@@ -325,6 +327,8 @@ export interface RoomSummaryRollup {
325
327
  watermarkAt: string | null;
326
328
  /** 전체 segment 수(페이지 총량 힌트). */
327
329
  segmentCount: number;
330
+ /** 이 포맷이 최신 대화를 아직 반영 안 함(reducedSegmentCount < segmentCount) — refreshSummary 로 최신화 가능. */
331
+ stale: boolean;
328
332
  /** 진행 상태. {@code 'IDLE'}(완료/대기) | {@code 'RUNNING'}(요약 중) | {@code 'FAILED'}(실패). */
329
333
  status: 'IDLE' | 'RUNNING' | 'FAILED';
330
334
  /** 마지막 갱신 시각. */
@@ -352,9 +356,11 @@ export interface RoomSummarySegment {
352
356
  * 아직 한 번도 요약되지 않았으면 {@code rollup} 이 {@code null} 이고 {@code segments} 는 빈 배열이다.
353
357
  */
354
358
  export interface RoomSummaryView {
355
- /** 통합 요약본. 최초 요약 전이면 null. */
359
+ /** 요청/기본 포맷의 통합 요약본. 그 포맷으로 아직 요약 안 됐으면 null(availableFormats 로 다른 포맷 확인). */
356
360
  rollup: RoomSummaryRollup | null;
357
- /** 구간 부분요약 페이지. */
361
+ /** 이 방이 보유한 포맷 목록(short/timeline/… — 탭 렌더용). */
362
+ availableFormats: string[];
363
+ /** 구간 부분요약 페이지(포맷 무관 공유). */
358
364
  segments: RoomSummarySegment[];
359
365
  /** 다음 segment 페이지 존재 여부. */
360
366
  hasNext: boolean;