public async invoke()

in server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/lspReadDocumentContents.ts [18:82]


    public async invoke(params: LspReadDocumentContentsParams): Promise<InvokeOutput> {
        if (params.uris.length === 0) {
            return {
                output: {
                    kind: 'text',
                    content: 'No URIs provided to read.',
                },
            }
        }

        try {
            const results: { [uri: string]: string } = {}

            for (const uri of params.uris) {
                const document = await this.workspace.getTextDocument(uri)

                if (!document) {
                    this.logging.warn(`Document not found: ${uri}`)
                    results[uri] = `[Document not found: ${uri}]`
                    continue
                }

                const content = document.getText()

                if (params.readRange && params.readRange.length > 0) {
                    const lines = content.split('\n')
                    const [start, end] = this.parseLineRange(lines.length, params.readRange)

                    if (start > end) {
                        results[uri] = `[Invalid range for ${uri}: ${params.readRange.join('-')}]`
                    } else {
                        results[uri] = lines.slice(start, end + 1).join('\n')
                    }
                } else {
                    results[uri] = content
                }
            }

            // If only one URI was requested, return just its content
            if (params.uris.length === 1) {
                return {
                    output: {
                        kind: 'text',
                        content: results[params.uris[0]],
                    },
                }
            }

            // Otherwise return a JSON object with all results
            return {
                output: {
                    kind: 'json',
                    content: results,
                },
            }
        } catch (error) {
            this.logging.error(`Error reading document contents: ${error}`)
            return {
                output: {
                    kind: 'text',
                    content: `Error reading document contents: ${error}`,
                },
            }
        }
    }