({
repoData,
query,
page = 1,
env,
ctx,
}: {
repoData: RepoData;
query: string;
page?: number;
env: Env;
ctx: any;
})
| 582 | * Supports pagination for retrieving more results |
| 583 | */ |
| 584 | export async function searchRepositoryCode({ |
| 585 | repoData, |
| 586 | query, |
| 587 | page = 1, |
| 588 | env, |
| 589 | ctx, |
| 590 | }: { |
| 591 | repoData: RepoData; |
| 592 | query: string; |
| 593 | page?: number; |
| 594 | env: Env; |
| 595 | ctx: any; |
| 596 | }): Promise<{ |
| 597 | searchQuery: string; |
| 598 | content: { type: "text"; text: string }[]; |
| 599 | pagination?: { |
| 600 | totalCount: number; |
| 601 | currentPage: number; |
| 602 | perPage: number; |
| 603 | hasMorePages: boolean; |
| 604 | }; |
| 605 | }> { |
| 606 | try { |
| 607 | // Initialize owner and repo from the provided repoData |
| 608 | const owner = repoData.owner; |
| 609 | const repo = repoData.repo; |
| 610 | |
| 611 | if (!owner || !repo) { |
| 612 | return { |
| 613 | searchQuery: query, |
| 614 | content: [ |
| 615 | { |
| 616 | type: "text" as const, |
| 617 | text: `### Code Search Results for: "${query}"\n\nCannot perform code search without repository information.`, |
| 618 | }, |
| 619 | ], |
| 620 | }; |
| 621 | } |
| 622 | |
| 623 | // Use fixed resultsPerPage of 30 and normalize page value |
| 624 | const currentPage = Math.max(1, page); |
| 625 | const resultsPerPage = 30; // Fixed at 30 results per page |
| 626 | |
| 627 | console.log( |
| 628 | `Searching code in ${owner}/${repo}" (page ${currentPage}, ${resultsPerPage} per page)`, |
| 629 | ); |
| 630 | |
| 631 | const data = await searchCode( |
| 632 | query, |
| 633 | owner, |
| 634 | repo, |
| 635 | env, |
| 636 | currentPage, |
| 637 | resultsPerPage, |
| 638 | ); |
| 639 | |
| 640 | if (!data) { |
| 641 | return { |
no test coverage detected