diff --git a/packages/backend/server/src/core/doc-service/controller.ts b/packages/backend/server/src/core/doc-service/controller.ts index 16bdfb0ee2..051f1fcf3c 100644 --- a/packages/backend/server/src/core/doc-service/controller.ts +++ b/packages/backend/server/src/core/doc-service/controller.ts @@ -47,9 +47,14 @@ export class DocRpcController { @Get('/workspaces/:workspaceId/docs/:docId/markdown') async getDocMarkdown( @Param('workspaceId') workspaceId: string, - @Param('docId') docId: string + @Param('docId') docId: string, + @Query('aiEditable') aiEditable?: string ) { - const result = await this.docReader.getDocMarkdown(workspaceId, docId); + const result = await this.docReader.getDocMarkdown( + workspaceId, + docId, + aiEditable === 'true' + ); if (!result) { throw new NotFound('Doc not found'); } diff --git a/packages/backend/server/src/core/doc/__tests__/reader-from-database.spec.ts b/packages/backend/server/src/core/doc/__tests__/reader-from-database.spec.ts index e672aedf0e..4294c7a7bd 100644 --- a/packages/backend/server/src/core/doc/__tests__/reader-from-database.spec.ts +++ b/packages/backend/server/src/core/doc/__tests__/reader-from-database.spec.ts @@ -269,7 +269,11 @@ test('should return doc markdown success', async t => { user, }); - const result = await docReader.getDocMarkdown(workspace.id, docSnapshot.id); + const result = await docReader.getDocMarkdown( + workspace.id, + docSnapshot.id, + false + ); t.snapshot(result); }); @@ -279,6 +283,10 @@ test('should read markdown return null when doc not exists', async t => { name: '', }); - const result = await docReader.getDocMarkdown(workspace.id, randomUUID()); + const result = await docReader.getDocMarkdown( + workspace.id, + randomUUID(), + false + ); t.is(result, null); }); diff --git a/packages/backend/server/src/core/doc/__tests__/reader-from-rpc.spec.ts b/packages/backend/server/src/core/doc/__tests__/reader-from-rpc.spec.ts index 005ff18fcc..cd47a6b260 100644 --- a/packages/backend/server/src/core/doc/__tests__/reader-from-rpc.spec.ts +++ b/packages/backend/server/src/core/doc/__tests__/reader-from-rpc.spec.ts @@ -389,7 +389,11 @@ test('should return doc markdown success', async t => { user, }); - const result = await docReader.getDocMarkdown(workspace.id, docSnapshot.id); + const result = await docReader.getDocMarkdown( + workspace.id, + docSnapshot.id, + false + ); t.snapshot(result); }); @@ -401,6 +405,10 @@ test('should read markdown return null when doc not exists', async t => { name: '', }); - const result = await docReader.getDocMarkdown(workspace.id, randomUUID()); + const result = await docReader.getDocMarkdown( + workspace.id, + randomUUID(), + false + ); t.is(result, null); }); diff --git a/packages/backend/server/src/core/doc/reader.ts b/packages/backend/server/src/core/doc/reader.ts index 2c6da66edf..f7cf85e249 100644 --- a/packages/backend/server/src/core/doc/reader.ts +++ b/packages/backend/server/src/core/doc/reader.ts @@ -67,7 +67,8 @@ export abstract class DocReader { abstract getDocMarkdown( workspaceId: string, - docId: string + docId: string, + aiEditable: boolean ): Promise; abstract getDocDiff( @@ -184,13 +185,19 @@ export class DatabaseDocReader extends DocReader { async getDocMarkdown( workspaceId: string, - docId: string + docId: string, + aiEditable: boolean ): Promise { const doc = await this.workspace.getDoc(workspaceId, docId); if (!doc) { return null; } - return parseDocToMarkdownFromDocSnapshot(workspaceId, docId, doc.bin); + return parseDocToMarkdownFromDocSnapshot( + workspaceId, + docId, + doc.bin, + aiEditable + ); } async getDocDiff( @@ -328,9 +335,10 @@ export class RpcDocReader extends DatabaseDocReader { override async getDocMarkdown( workspaceId: string, - docId: string + docId: string, + aiEditable: boolean ): Promise { - const url = `${this.config.docService.endpoint}/rpc/workspaces/${workspaceId}/docs/${docId}/markdown`; + const url = `${this.config.docService.endpoint}/rpc/workspaces/${workspaceId}/docs/${docId}/markdown?aiEditable=${aiEditable}`; const accessToken = this.crypto.sign(docId); try { const res = await this.fetch(accessToken, url, 'GET'); @@ -349,7 +357,7 @@ export class RpcDocReader extends DatabaseDocReader { err ); // fallback to database doc reader if the error is not user friendly, like network error - return await super.getDocMarkdown(workspaceId, docId); + return await super.getDocMarkdown(workspaceId, docId, aiEditable); } } diff --git a/packages/backend/server/src/plugins/copilot/tools/doc-edit.ts b/packages/backend/server/src/plugins/copilot/tools/doc-edit.ts index 68022db3fb..38be545d59 100644 --- a/packages/backend/server/src/plugins/copilot/tools/doc-edit.ts +++ b/packages/backend/server/src/plugins/copilot/tools/doc-edit.ts @@ -16,8 +16,8 @@ export const buildContentGetter = (ac: AccessController, doc: DocReader) => { .doc(docId) .can('Doc.Read'); if (!canAccess) return undefined; - const content = await doc.getFullDocContent(options.workspace, docId); - return content?.summary.trim() || undefined; + const content = await doc.getDocMarkdown(options.workspace, docId, true); + return content?.markdown.trim() || undefined; }; return getDocContent; }; diff --git a/packages/backend/server/src/plugins/copilot/tools/doc-read.ts b/packages/backend/server/src/plugins/copilot/tools/doc-read.ts index aa6411b73c..80b25af35a 100644 --- a/packages/backend/server/src/plugins/copilot/tools/doc-read.ts +++ b/packages/backend/server/src/plugins/copilot/tools/doc-read.ts @@ -47,7 +47,11 @@ export const buildDocContentGetter = ( return; } - const content = await docReader.getDocMarkdown(options.workspace, docId); + const content = await docReader.getDocMarkdown( + options.workspace, + docId, + true + ); if (!content) { return; }