Path: blob/main/extensions/copilot/src/extension/prompt/node/todoListContextProvider.ts
13399 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { createServiceIdentifier } from '../../../util/common/services';6import { CancellationToken } from '../../../util/vs/base/common/cancellation';7import { LanguageModelTextPart } from '../../../vscodeTypes';8import { ToolName } from '../../tools/common/toolNames';9import { IToolsService } from '../../tools/common/toolsService';1011export const ITodoListContextProvider = createServiceIdentifier<ITodoListContextProvider>('ITodoListContextProvider');12export interface ITodoListContextProvider {13getCurrentTodoContext(sessionResource: string): Promise<string | undefined>;14}1516export class TodoListContextProvider implements ITodoListContextProvider {17constructor(18@IToolsService private readonly toolsService: IToolsService,19) { }2021async getCurrentTodoContext(sessionResource: string): Promise<string | undefined> {22try {23const result = await this.toolsService.invokeTool(24ToolName.CoreManageTodoList,25{26input: { operation: 'read', chatSessionResource: sessionResource }27} as any,28CancellationToken.None29);3031if (!result || !result.content) {32return undefined;33}3435const todoList = result.content36.filter((part): part is LanguageModelTextPart => part instanceof LanguageModelTextPart)37.map(part => part.value)38.join('\n');3940if (!todoList.trim() || todoList === 'No todo list found.') {41return undefined;42}4344return todoList;45} catch (error) {46return undefined;47}48}49}505152