@things-factory/ai-assistant 10.1.6
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/client/components/board-ai-chat.test.ts +149 -0
- package/client/components/board-ai-chat.ts +3228 -0
- package/client/components/chat-defaults.ts +27 -0
- package/client/components/chat-echo-dedup.test.ts +230 -0
- package/client/components/chat-echo-dedup.ts +155 -0
- package/client/components/chat-input-builder.ts +69 -0
- package/client/components/markdown.test.ts +518 -0
- package/client/components/markdown.ts +508 -0
- package/client/components/mention-popup-helpers.ts +433 -0
- package/client/components/mention-popup.test.ts +588 -0
- package/client/components/mention-popup.ts +238 -0
- package/client/index.ts +14 -0
- package/client/tsconfig.json +13 -0
- package/client/utils/board-edit-patch.ts +374 -0
- package/dist-client/components/board-ai-chat.d.ts +423 -0
- package/dist-client/components/board-ai-chat.js +3034 -0
- package/dist-client/components/board-ai-chat.js.map +1 -0
- package/dist-client/components/board-ai-chat.test.d.ts +1 -0
- package/dist-client/components/board-ai-chat.test.js +138 -0
- package/dist-client/components/board-ai-chat.test.js.map +1 -0
- package/dist-client/components/chat-defaults.d.ts +8 -0
- package/dist-client/components/chat-defaults.js +22 -0
- package/dist-client/components/chat-defaults.js.map +1 -0
- package/dist-client/components/chat-echo-dedup.d.ts +54 -0
- package/dist-client/components/chat-echo-dedup.js +115 -0
- package/dist-client/components/chat-echo-dedup.js.map +1 -0
- package/dist-client/components/chat-echo-dedup.test.d.ts +1 -0
- package/dist-client/components/chat-echo-dedup.test.js +203 -0
- package/dist-client/components/chat-echo-dedup.test.js.map +1 -0
- package/dist-client/components/chat-input-builder.d.ts +55 -0
- package/dist-client/components/chat-input-builder.js +32 -0
- package/dist-client/components/chat-input-builder.js.map +1 -0
- package/dist-client/components/markdown.d.ts +60 -0
- package/dist-client/components/markdown.js +422 -0
- package/dist-client/components/markdown.js.map +1 -0
- package/dist-client/components/markdown.test.d.ts +1 -0
- package/dist-client/components/markdown.test.js +418 -0
- package/dist-client/components/markdown.test.js.map +1 -0
- package/dist-client/components/mention-popup-helpers.d.ts +165 -0
- package/dist-client/components/mention-popup-helpers.js +330 -0
- package/dist-client/components/mention-popup-helpers.js.map +1 -0
- package/dist-client/components/mention-popup.d.ts +35 -0
- package/dist-client/components/mention-popup.js +223 -0
- package/dist-client/components/mention-popup.js.map +1 -0
- package/dist-client/components/mention-popup.test.d.ts +1 -0
- package/dist-client/components/mention-popup.test.js +474 -0
- package/dist-client/components/mention-popup.test.js.map +1 -0
- package/dist-client/index.d.ts +14 -0
- package/dist-client/index.js +15 -0
- package/dist-client/index.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-client/utils/board-edit-patch.d.ts +157 -0
- package/dist-client/utils/board-edit-patch.js +284 -0
- package/dist-client/utils/board-edit-patch.js.map +1 -0
- package/dist-server/index.d.ts +28 -0
- package/dist-server/index.js +32 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/service/chat-message/chat-message-broadcast.d.ts +13 -0
- package/dist-server/service/chat-message/chat-message-broadcast.js +13 -0
- package/dist-server/service/chat-message/chat-message-broadcast.js.map +1 -0
- package/dist-server/service/chat-message/chat-message-publish.d.ts +6 -0
- package/dist-server/service/chat-message/chat-message-publish.js +27 -0
- package/dist-server/service/chat-message/chat-message-publish.js.map +1 -0
- package/dist-server/service/chat-message/chat-message-subscription.d.ts +8 -0
- package/dist-server/service/chat-message/chat-message-subscription.js +57 -0
- package/dist-server/service/chat-message/chat-message-subscription.js.map +1 -0
- package/dist-server/service/chat-message/chat-message.d.ts +68 -0
- package/dist-server/service/chat-message/chat-message.js +172 -0
- package/dist-server/service/chat-message/chat-message.js.map +1 -0
- package/dist-server/service/chat-message/fold-history.d.ts +43 -0
- package/dist-server/service/chat-message/fold-history.js +33 -0
- package/dist-server/service/chat-message/fold-history.js.map +1 -0
- package/dist-server/service/chat-message/history-summary.d.ts +43 -0
- package/dist-server/service/chat-message/history-summary.js +77 -0
- package/dist-server/service/chat-message/history-summary.js.map +1 -0
- package/dist-server/service/chat-message/index.d.ts +5 -0
- package/dist-server/service/chat-message/index.js +12 -0
- package/dist-server/service/chat-message/index.js.map +1 -0
- package/dist-server/service/chat-message/llm-history.d.ts +46 -0
- package/dist-server/service/chat-message/llm-history.js +87 -0
- package/dist-server/service/chat-message/llm-history.js.map +1 -0
- package/dist-server/service/chat-session/chat-session.d.ts +60 -0
- package/dist-server/service/chat-session/chat-session.js +159 -0
- package/dist-server/service/chat-session/chat-session.js.map +1 -0
- package/dist-server/service/chat-session/index.d.ts +3 -0
- package/dist-server/service/chat-session/index.js +7 -0
- package/dist-server/service/chat-session/index.js.map +1 -0
- package/dist-server/service/chat-session/session-activity-broadcast.d.ts +30 -0
- package/dist-server/service/chat-session/session-activity-broadcast.js +34 -0
- package/dist-server/service/chat-session/session-activity-broadcast.js.map +1 -0
- package/dist-server/service/chat-session/session-activity-publish.d.ts +12 -0
- package/dist-server/service/chat-session/session-activity-publish.js +37 -0
- package/dist-server/service/chat-session/session-activity-publish.js.map +1 -0
- package/dist-server/service/chat-session/session-activity-subscription.d.ts +14 -0
- package/dist-server/service/chat-session/session-activity-subscription.js +87 -0
- package/dist-server/service/chat-session/session-activity-subscription.js.map +1 -0
- package/dist-server/service/chat-session/session-anchor.d.ts +26 -0
- package/dist-server/service/chat-session/session-anchor.js +100 -0
- package/dist-server/service/chat-session/session-anchor.js.map +1 -0
- package/dist-server/service/chat-session/session-inbox.d.ts +80 -0
- package/dist-server/service/chat-session/session-inbox.js +133 -0
- package/dist-server/service/chat-session/session-inbox.js.map +1 -0
- package/dist-server/service/chat-session-participant/chat-session-participant.d.ts +49 -0
- package/dist-server/service/chat-session-participant/chat-session-participant.js +141 -0
- package/dist-server/service/chat-session-participant/chat-session-participant.js.map +1 -0
- package/dist-server/service/chat-session-participant/index.d.ts +4 -0
- package/dist-server/service/chat-session-participant/index.js +10 -0
- package/dist-server/service/chat-session-participant/index.js.map +1 -0
- package/dist-server/service/chat-session-participant/invite-notification.d.ts +27 -0
- package/dist-server/service/chat-session-participant/invite-notification.js +30 -0
- package/dist-server/service/chat-session-participant/invite-notification.js.map +1 -0
- package/dist-server/service/chat-session-participant/presence.d.ts +4 -0
- package/dist-server/service/chat-session-participant/presence.js +22 -0
- package/dist-server/service/chat-session-participant/presence.js.map +1 -0
- package/dist-server/service/chat-session-resolver.d.ts +93 -0
- package/dist-server/service/chat-session-resolver.js +706 -0
- package/dist-server/service/chat-session-resolver.js.map +1 -0
- package/dist-server/service/index.d.ts +24 -0
- package/dist-server/service/index.js +39 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/subscribe-auth.d.ts +14 -0
- package/dist-server/service/subscribe-auth.js +33 -0
- package/dist-server/service/subscribe-auth.js.map +1 -0
- package/dist-server/service/types.d.ts +5 -0
- package/dist-server/service/types.js +12 -0
- package/dist-server/service/types.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -0
- package/package.json +48 -0
- package/server/index.ts +28 -0
- package/server/service/chat-message/chat-message-broadcast.integration.test.ts +73 -0
- package/server/service/chat-message/chat-message-broadcast.test.ts +40 -0
- package/server/service/chat-message/chat-message-broadcast.ts +27 -0
- package/server/service/chat-message/chat-message-publish.ts +22 -0
- package/server/service/chat-message/chat-message-subscription.ts +45 -0
- package/server/service/chat-message/chat-message.ts +195 -0
- package/server/service/chat-message/fold-history.test.ts +98 -0
- package/server/service/chat-message/fold-history.ts +77 -0
- package/server/service/chat-message/history-summary.test.ts +127 -0
- package/server/service/chat-message/history-summary.ts +100 -0
- package/server/service/chat-message/index.ts +12 -0
- package/server/service/chat-message/llm-history.test.ts +194 -0
- package/server/service/chat-message/llm-history.ts +163 -0
- package/server/service/chat-session/chat-session.ts +193 -0
- package/server/service/chat-session/index.ts +5 -0
- package/server/service/chat-session/session-activity-broadcast.ts +57 -0
- package/server/service/chat-session/session-activity-publish.ts +44 -0
- package/server/service/chat-session/session-activity-subscription.ts +67 -0
- package/server/service/chat-session/session-anchor.ts +106 -0
- package/server/service/chat-session/session-inbox.test.ts +185 -0
- package/server/service/chat-session/session-inbox.ts +161 -0
- package/server/service/chat-session-participant/chat-session-participant.ts +135 -0
- package/server/service/chat-session-participant/index.ts +6 -0
- package/server/service/chat-session-participant/invite-notification.test.ts +30 -0
- package/server/service/chat-session-participant/invite-notification.ts +48 -0
- package/server/service/chat-session-participant/presence.test.ts +39 -0
- package/server/service/chat-session-participant/presence.ts +21 -0
- package/server/service/chat-session-resolver.ts +644 -0
- package/server/service/index.ts +37 -0
- package/server/service/session-anchor.test.ts +133 -0
- package/server/service/subscribe-auth.test.ts +57 -0
- package/server/service/subscribe-auth.ts +34 -0
- package/server/service/types.ts +15 -0
- package/things-factory.config.js +1 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 협업 초대 알림 — 순수 payload 빌더.
|
|
4
|
+
*
|
|
5
|
+
* 부수효과(실제 발송)는 resolver 의 thin caller 가 `context.state.notify` 로 수행.
|
|
6
|
+
* 여기엔 "무엇을 보낼지"(payload) 결정 로직만 둔다 — DB·pubsub·notify 의존 없이 테스트 가능.
|
|
7
|
+
* (patch spine 의 board-patch-broadcast.ts 와 동일한 순수/부수효과 분리 컨벤션.)
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.buildInviteNotification = buildInviteNotification;
|
|
11
|
+
/**
|
|
12
|
+
* 초대된 사용자들에게 보낼 협업 초대 알림 payload 를 만든다.
|
|
13
|
+
* 받는 사람이 없으면 null (= 보낼 것 없음).
|
|
14
|
+
*/
|
|
15
|
+
function buildInviteNotification(userIds, boardId, inviter) {
|
|
16
|
+
if (!Array.isArray(userIds) || userIds.length === 0)
|
|
17
|
+
return null;
|
|
18
|
+
const who = inviter?.name || inviter?.email || 'someone';
|
|
19
|
+
return {
|
|
20
|
+
receivers: userIds,
|
|
21
|
+
type: 'board-collab-invite',
|
|
22
|
+
subject: 'info',
|
|
23
|
+
title: 'Board collaboration invite',
|
|
24
|
+
body: `${who} invited you to collaborate on a board.`,
|
|
25
|
+
// board 가 연결돼 있으면 모델러로 바로 가는 링크. 없으면 링크 생략.
|
|
26
|
+
url: boardId ? `board-modeller/${boardId}` : undefined,
|
|
27
|
+
mode: 'background'
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=invite-notification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-notification.js","sourceRoot":"","sources":["../../../server/service/chat-session-participant/invite-notification.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAuBH,0DAkBC;AAtBD;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,OAAiB,EACjB,OAA2B,EAC3B,OAAmC;IAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEhE,MAAM,GAAG,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,KAAK,IAAI,SAAS,CAAA;IACxD,OAAO;QACL,SAAS,EAAE,OAAO;QAClB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,4BAA4B;QACnC,IAAI,EAAE,GAAG,GAAG,yCAAyC;QACrD,4CAA4C;QAC5C,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;QACtD,IAAI,EAAE,YAAY;KACnB,CAAA;AACH,CAAC","sourcesContent":["/**\n * 협업 초대 알림 — 순수 payload 빌더.\n *\n * 부수효과(실제 발송)는 resolver 의 thin caller 가 `context.state.notify` 로 수행.\n * 여기엔 \"무엇을 보낼지\"(payload) 결정 로직만 둔다 — DB·pubsub·notify 의존 없이 테스트 가능.\n * (patch spine 의 board-patch-broadcast.ts 와 동일한 순수/부수효과 분리 컨벤션.)\n */\n\n/** notification-middleware 의 notifier 가 받는 인자 형태 (필요한 키만). */\nexport interface InviteNotification {\n receivers: string[]\n type: string\n subject: string\n title: string\n body: string\n url?: string\n mode: 'background' | 'foreground'\n}\n\n/** 초대자 식별용 — User 엔티티에서 쓰는 필드만 (duck-typed). */\nexport interface Inviter {\n name?: string | null\n email?: string | null\n}\n\n/**\n * 초대된 사용자들에게 보낼 협업 초대 알림 payload 를 만든다.\n * 받는 사람이 없으면 null (= 보낼 것 없음).\n */\nexport function buildInviteNotification(\n userIds: string[],\n boardId: string | undefined,\n inviter: Inviter | undefined | null\n): InviteNotification | null {\n if (!Array.isArray(userIds) || userIds.length === 0) return null\n\n const who = inviter?.name || inviter?.email || 'someone'\n return {\n receivers: userIds,\n type: 'board-collab-invite',\n subject: 'info',\n title: 'Board collaboration invite',\n body: `${who} invited you to collaborate on a board.`,\n // board 가 연결돼 있으면 모델러로 바로 가는 링크. 없으면 링크 생략.\n url: boardId ? `board-modeller/${boardId}` : undefined,\n mode: 'background'\n }\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** online 으로 간주할 기본 유예(ms) — heartbeat 주기의 ~2.5배 권장(주기 30s → 75s). */
|
|
2
|
+
export declare const PRESENCE_TTL_MS = 75000;
|
|
3
|
+
/** lastSeenAt 이 now 기준 ttl 이내면 online. lastSeenAt 없으면 offline. */
|
|
4
|
+
export declare function isOnline(lastSeenAt: Date | string | null | undefined, now: number, ttlMs?: number): boolean;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* presence — lastSeenAt 기반 online 판정 (Phase Board-AI C4). 순수·결정적 → 테스트 가능.
|
|
4
|
+
* 클라이언트가 주기적 heartbeat(touchPresence)로 lastSeenAt 을 갱신하고, roster 는
|
|
5
|
+
* 이 판정으로 online/offline 표시. 시각(now)을 주입받아 시간 의존성을 제거.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.PRESENCE_TTL_MS = void 0;
|
|
9
|
+
exports.isOnline = isOnline;
|
|
10
|
+
/** online 으로 간주할 기본 유예(ms) — heartbeat 주기의 ~2.5배 권장(주기 30s → 75s). */
|
|
11
|
+
exports.PRESENCE_TTL_MS = 75_000;
|
|
12
|
+
/** lastSeenAt 이 now 기준 ttl 이내면 online. lastSeenAt 없으면 offline. */
|
|
13
|
+
function isOnline(lastSeenAt, now, ttlMs = exports.PRESENCE_TTL_MS) {
|
|
14
|
+
if (!lastSeenAt)
|
|
15
|
+
return false;
|
|
16
|
+
const t = lastSeenAt instanceof Date ? lastSeenAt.getTime() : new Date(lastSeenAt).getTime();
|
|
17
|
+
if (!Number.isFinite(t))
|
|
18
|
+
return false;
|
|
19
|
+
const age = now - t;
|
|
20
|
+
return age >= 0 ? age <= ttlMs : true; // 미래 시각(클럭 스큐)은 online 으로 관대 처리
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=presence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presence.js","sourceRoot":"","sources":["../../../server/service/chat-session-participant/presence.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAMH,4BAUC;AAdD,sEAAsE;AACzD,QAAA,eAAe,GAAG,MAAM,CAAA;AAErC,kEAAkE;AAClE,SAAgB,QAAQ,CACtB,UAA4C,EAC5C,GAAW,EACX,QAAgB,uBAAe;IAE/B,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAA;IAC7B,MAAM,CAAC,GAAG,UAAU,YAAY,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAA;IAC5F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IACrC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;IACnB,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA,CAAC,gCAAgC;AACxE,CAAC","sourcesContent":["/*\n * presence — lastSeenAt 기반 online 판정 (Phase Board-AI C4). 순수·결정적 → 테스트 가능.\n * 클라이언트가 주기적 heartbeat(touchPresence)로 lastSeenAt 을 갱신하고, roster 는\n * 이 판정으로 online/offline 표시. 시각(now)을 주입받아 시간 의존성을 제거.\n */\n\n/** online 으로 간주할 기본 유예(ms) — heartbeat 주기의 ~2.5배 권장(주기 30s → 75s). */\nexport const PRESENCE_TTL_MS = 75_000\n\n/** lastSeenAt 이 now 기준 ttl 이내면 online. lastSeenAt 없으면 offline. */\nexport function isOnline(\n lastSeenAt: Date | string | null | undefined,\n now: number,\n ttlMs: number = PRESENCE_TTL_MS\n): boolean {\n if (!lastSeenAt) return false\n const t = lastSeenAt instanceof Date ? lastSeenAt.getTime() : new Date(lastSeenAt).getTime()\n if (!Number.isFinite(t)) return false\n const age = now - t\n return age >= 0 ? age <= ttlMs : true // 미래 시각(클럭 스큐)은 online 으로 관대 처리\n}\n"]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { User } from '@things-factory/auth-base';
|
|
2
|
+
import { ChatSession } from './chat-session/chat-session.js';
|
|
3
|
+
import { ChatMessage } from './chat-message/chat-message.js';
|
|
4
|
+
import { ChatSessionParticipant } from './chat-session-participant/chat-session-participant.js';
|
|
5
|
+
declare class ChatSessionInboxEntry {
|
|
6
|
+
id?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
anchorType?: string;
|
|
9
|
+
anchorId?: string;
|
|
10
|
+
boardId?: string;
|
|
11
|
+
lastMessageAt?: Date;
|
|
12
|
+
lastMessagePreview?: string;
|
|
13
|
+
createdAt?: Date;
|
|
14
|
+
unread: boolean;
|
|
15
|
+
participant: boolean;
|
|
16
|
+
mine: boolean;
|
|
17
|
+
hidden?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare class ChatSessionResolver {
|
|
20
|
+
chatSession(id: string, context: ResolverContext): Promise<ChatSession | null>;
|
|
21
|
+
chatSessionsByAnchor(anchorType: string, anchorId: string, context: ResolverContext): Promise<ChatSession[]>;
|
|
22
|
+
/**
|
|
23
|
+
* 받은편지함 — 앵커의 세션 목록 + 내 안 읽음 상태. 최근 활동순.
|
|
24
|
+
* 집계 쿼리를 쓰지 않는다: 세션의 비정규화된 lastMessageAt 과 내 참여자 lastReadAt 을 **값 비교**한다
|
|
25
|
+
* (5개 DB 드라이버 지원 때문에 group by/MAX 를 목록 경로에 두지 않는다).
|
|
26
|
+
*/
|
|
27
|
+
chatSessionInbox(anchorType: string, anchorId: string, context: ResolverContext, showHidden?: boolean, search?: string, mineOnly?: boolean, limit?: number, offset?: number): Promise<ChatSessionInboxEntry[]>;
|
|
28
|
+
/**
|
|
29
|
+
* 필터를 통과한 **전체 개수** — "더 보기" 가 남았는지, 검색 결과가 몇 건인지.
|
|
30
|
+
*
|
|
31
|
+
* 목록과 같은 요청에 담아 가져가므로 왕복은 늘지 않는다. 개수를 모르면 사용자는 목록의 끝이
|
|
32
|
+
* 페이지의 끝인지 자료의 끝인지 구별할 수 없다.
|
|
33
|
+
*/
|
|
34
|
+
chatSessionInboxTotal(anchorType: string, anchorId: string, context: ResolverContext, showHidden?: boolean, search?: string, mineOnly?: boolean): Promise<number>;
|
|
35
|
+
/** 필터 적용(페이지 전) — 목록·개수가 **같은 규칙**을 쓰도록 한 곳에 둔다(어긋나면 "더 보기" 가 거짓말이 된다). */
|
|
36
|
+
private _inboxFiltered;
|
|
37
|
+
/**
|
|
38
|
+
* 내가 숨긴 대화 수 — 필터에 "몇 개가 접혀 있는지" 를 보여주기 위한 값.
|
|
39
|
+
*
|
|
40
|
+
* 숨긴 것이 몇 개인지 모르면 필터를 눌러 볼 이유가 생기지 않는다(숨긴 사실 자체를 잊는다).
|
|
41
|
+
* 목록 조회와 **같은 요청**에 담아 가져갈 수 있으므로 왕복은 늘지 않는다.
|
|
42
|
+
*/
|
|
43
|
+
hiddenSessionCount(anchorType: string, anchorId: string, context: ResolverContext): Promise<number>;
|
|
44
|
+
/** 목록 조립 — 숨김 표시까지 붙인 **전체**. 목록·개수 두 진입점이 같은 규칙을 쓰도록 한 곳에 둔다. */
|
|
45
|
+
private _inboxEntries;
|
|
46
|
+
/**
|
|
47
|
+
* 세션 삭제 — **만든 사람만.**
|
|
48
|
+
*
|
|
49
|
+
* 협의는 여럿의 기록이고 삭제는 화면에서 되돌릴 수 없다. 그래서 권한을 좁힌다(이름 변경은 되돌릴 수
|
|
50
|
+
* 있어서 누구나 할 수 있는 것과 대비). 권한이 없는 사람에게는 `hideAISession`(내 목록에서만 숨김)이
|
|
51
|
+
* 있다 — 남의 기록을 지우지 않고 자기 목록을 정리하는 길.
|
|
52
|
+
*
|
|
53
|
+
* 소프트 삭제(deletedAt)다 — 메시지·패치는 세션을 통해서만 도달하므로 함께 사라지고, 잘못 지운 경우
|
|
54
|
+
* 데이터로는 남아 있다. 다른 참여자 목록에서도 사라져야 하므로 meta 활동으로 방송한다.
|
|
55
|
+
*/
|
|
56
|
+
deleteAISession(sessionId: string, context: ResolverContext): Promise<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* 내 목록에서 숨기기·되돌리기 — **나에게만** 적용된다(대화·다른 참여자 목록은 그대로).
|
|
59
|
+
*
|
|
60
|
+
* 참여자가 아니어도 숨길 수 있어야 한다 — 목록에는 같은 공간의 남의 협의도 보이고, 그것을 정리하는
|
|
61
|
+
* 것은 남에게 아무 영향이 없다. 그 경우 'viewer' 역할로 기록만 남긴다(참여자 명부·배지에는 들지 않는다).
|
|
62
|
+
*/
|
|
63
|
+
hideAISession(sessionId: string, context: ResolverContext, hidden?: boolean): Promise<boolean>;
|
|
64
|
+
/**
|
|
65
|
+
* 세션 이름 변경 — **참여자 누구나** 할 수 있다.
|
|
66
|
+
*
|
|
67
|
+
* 왜 소유자 전용이 아닌가: 이름은 대화의 주제표이고 협의는 여럿이 한다. 논의가 흘러 주제가 달라졌는데
|
|
68
|
+
* 만든 사람만 고칠 수 있으면 그 사람이 없을 때 목록이 계속 어긋난다. 되돌릴 수 있는 변경이고 대화
|
|
69
|
+
* 내용에 영향이 없으므로 권한을 좁힐 이유가 없다(되돌릴 수 없는 것만 좁힌다).
|
|
70
|
+
*
|
|
71
|
+
* 변경은 **meta 활동**으로 방송한다 — 모든 참여자 목록에 즉시 반영되지만 안 읽음 배지는 올리지 않는다
|
|
72
|
+
* (이름 변경을 "새 소식" 으로 알리면 소음이다).
|
|
73
|
+
*/
|
|
74
|
+
renameAISession(sessionId: string, name: string, context: ResolverContext): Promise<boolean>;
|
|
75
|
+
/**
|
|
76
|
+
* 읽은 지점 갱신 — 이 세션을 여기까지 읽었다. 멱등(여러 번 호출해도 최신 시각으로만 이동).
|
|
77
|
+
* 접속 표시(lastSeenAt)와 분리한다 — 창을 열어 두고 화면을 안 볼 수 있다.
|
|
78
|
+
*/
|
|
79
|
+
markSessionRead(sessionId: string, context: ResolverContext): Promise<boolean>;
|
|
80
|
+
domainUsersForMention(query: string | undefined, limit: number, context: ResolverContext): Promise<User[]>;
|
|
81
|
+
chatSessionParticipants(sessionId: string, context: ResolverContext): Promise<ChatSessionParticipant[]>;
|
|
82
|
+
touchPresence(sessionId: string, context: ResolverContext): Promise<boolean>;
|
|
83
|
+
chatMessages(sessionId: string, limit: number, offset: number, context: ResolverContext): Promise<ChatMessage[]>;
|
|
84
|
+
startAISession(anchorType: string, anchorId: string, context: ResolverContext): Promise<ChatSession>;
|
|
85
|
+
createAISession(anchorType: string, anchorId: string, name: string | undefined, context: ResolverContext): Promise<ChatSession>;
|
|
86
|
+
renameChatSession(sessionId: string, name: string, context: ResolverContext): Promise<boolean>;
|
|
87
|
+
appendSessionNote(sessionId: string, content: string, context: ResolverContext): Promise<boolean>;
|
|
88
|
+
appendSessionTurns(sessionId: string, turns: {
|
|
89
|
+
role?: string;
|
|
90
|
+
content?: string;
|
|
91
|
+
}[], context: ResolverContext): Promise<boolean>;
|
|
92
|
+
}
|
|
93
|
+
export {};
|