diff --git a/packages/backend/server/src/models/copilot-session.ts b/packages/backend/server/src/models/copilot-session.ts index 32964518ad..d623cf3d62 100644 --- a/packages/backend/server/src/models/copilot-session.ts +++ b/packages/backend/server/src/models/copilot-session.ts @@ -91,7 +91,7 @@ export type ListSessionOptions = Pick< Partial, 'sessionId' | 'workspaceId' | 'docId' | 'pinned' > & { - userId: string; + userId: string | undefined; action?: boolean; fork?: boolean; limit?: number; diff --git a/packages/backend/server/src/plugins/copilot/session.ts b/packages/backend/server/src/plugins/copilot/session.ts index 467cfdae1c..68b080e9e6 100644 --- a/packages/backend/server/src/plugins/copilot/session.ts +++ b/packages/backend/server/src/plugins/copilot/session.ts @@ -47,6 +47,10 @@ declare global { 'copilot.session.generateTitle': { sessionId: string; }; + 'copilot.session.deleteDoc': { + workspaceId: string; + docId: string; + }; } } @@ -580,6 +584,24 @@ export class ChatSessionService { return provider.text(cond, [...prompt.finish({}), msg], config); } + @OnJob('copilot.session.deleteDoc') + async deleteDocSessions(doc: Jobs['copilot.session.deleteDoc']) { + const sessionIds = await this.models.copilotSession + .list({ + userId: undefined, + workspaceId: doc.workspaceId, + docId: doc.docId, + }) + .then(s => s.map(s => [s.userId, s.id])); + for (const [userId, sessionId] of sessionIds) { + await this.models.copilotSession.update({ + userId, + sessionId, + docId: null, + }); + } + } + @OnJob('copilot.session.generateTitle') async generateSessionTitle(job: Jobs['copilot.session.generateTitle']) { const { sessionId } = job; diff --git a/packages/backend/server/src/plugins/indexer/service.ts b/packages/backend/server/src/plugins/indexer/service.ts index 798281c8b8..52a2e0ac8a 100644 --- a/packages/backend/server/src/plugins/indexer/service.ts +++ b/packages/backend/server/src/plugins/indexer/service.ts @@ -322,6 +322,10 @@ export class IndexerService { ); await this.deleteBlocksByDocId(workspaceId, docId, options); + await this.queue.add('copilot.session.deleteDoc', { + workspaceId, + docId, + }); await this.queue.add('copilot.embedding.deleteDoc', { workspaceId, docId,