@octocodeai/octocode-tools-core 18.1.2 → 18.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +113 -162
  2. package/dist/cacheMaintenance.d.ts +8 -0
  3. package/dist/direct.js +41 -51
  4. package/dist/github/client.d.ts +1 -1
  5. package/dist/github/codeSearch.d.ts +2 -2
  6. package/dist/github/commit.d.ts +48 -0
  7. package/dist/github/compare.d.ts +2 -2
  8. package/dist/github/directoryFetch/fetchDirectoryContents.d.ts +1 -1
  9. package/dist/github/directoryFetch/fetchFileContentToDisk.d.ts +1 -1
  10. package/dist/github/directoryFetch/refResolution.d.ts +6 -0
  11. package/dist/github/fileContent.d.ts +1 -1
  12. package/dist/github/fileContentRaw/fetch.d.ts +2 -2
  13. package/dist/github/githubAPI.d.ts +1 -2
  14. package/dist/github/history/commitFiles.d.ts +5 -0
  15. package/dist/github/history.d.ts +1 -1
  16. package/dist/github/issues/fetchers.d.ts +1 -1
  17. package/dist/github/issues/orchestrator.d.ts +1 -1
  18. package/dist/github/issues/types.d.ts +5 -0
  19. package/dist/github/prByNumber.d.ts +1 -1
  20. package/dist/github/prContentFetcher/commits.d.ts +1 -1
  21. package/dist/github/prContentFetcher/transform.d.ts +1 -1
  22. package/dist/github/pullRequestSearch.d.ts +1 -1
  23. package/dist/github/queryBuilders/codeAndRepo.d.ts +1 -1
  24. package/dist/github/repoSearch.d.ts +2 -2
  25. package/dist/github/repoStructure/contentResolution.d.ts +1 -1
  26. package/dist/github/repoStructure/fetchOrchestration.d.ts +2 -2
  27. package/dist/github/repoStructurePagination.d.ts +1 -1
  28. package/dist/graph/advancedOperations.d.ts +22 -0
  29. package/dist/{tools/local_dead_code/graphBuilder.d.ts → graph/buildFileGraph.d.ts} +6 -5
  30. package/dist/graph/cycleOperations.d.ts +12 -0
  31. package/dist/{tools/local_dead_code → graph}/importResolver.d.ts +1 -1
  32. package/dist/graph/operations.d.ts +7 -0
  33. package/dist/{tools/local_dead_code → graph}/reachability.d.ts +1 -1
  34. package/dist/{tools/local_dead_code → graph}/types.d.ts +11 -0
  35. package/dist/graph/workspacePackageResolver.d.ts +2 -0
  36. package/dist/index.d.ts +11 -30
  37. package/dist/index.js +45 -55
  38. package/dist/providers/github/githubContent.d.ts +1 -1
  39. package/dist/providers/github/githubPullRequests.d.ts +1 -1
  40. package/dist/providers/github/githubSearch.d.ts +1 -1
  41. package/dist/providers/github/githubStructure.d.ts +1 -1
  42. package/dist/providers/github/paginationMetadata.d.ts +4 -5
  43. package/dist/providers/providerQueries.d.ts +1 -3
  44. package/dist/providers/providerResults.d.ts +4 -0
  45. package/dist/providers/types.d.ts +1 -1
  46. package/dist/responses.d.ts +1 -1
  47. package/dist/schema.d.ts +2 -0
  48. package/dist/schema.js +13 -1
  49. package/dist/scheme/conditionalSchemas.d.ts +12 -0
  50. package/dist/scheme/fields.d.ts +2 -1
  51. package/dist/security/bridge.d.ts +7 -10
  52. package/dist/shared/credentials/index.js +2 -2
  53. package/dist/shared/paths.d.ts +1 -0
  54. package/dist/shared/paths.js +1 -1
  55. package/dist/shared/session/index.js +1 -1
  56. package/dist/toolContract/descriptions.d.ts +14 -0
  57. package/dist/toolContract/input/resources/global.d.ts +15 -0
  58. package/dist/toolContract/input/resources/toolRelations.d.ts +1 -0
  59. package/dist/toolContract/input/resources/toolVariants.d.ts +9 -0
  60. package/dist/toolContract/input/resources/tools/_toolkit.d.ts +75 -0
  61. package/dist/toolContract/input/resources/tools/ghCloneRepo.d.ts +12 -0
  62. package/dist/toolContract/input/resources/tools/ghGetFileContent.d.ts +30 -0
  63. package/dist/toolContract/input/resources/tools/ghSearch.d.ts +76 -0
  64. package/dist/toolContract/input/resources/tools/githubCodeOperation.d.ts +29 -0
  65. package/dist/toolContract/input/resources/tools/githubHistorySchema.d.ts +114 -0
  66. package/dist/toolContract/input/resources/tools/githubRepositoriesOperation.d.ts +54 -0
  67. package/dist/toolContract/input/resources/tools/githubTreeOperation.d.ts +26 -0
  68. package/dist/toolContract/input/resources/tools/historyCommitInput.d.ts +21 -0
  69. package/dist/toolContract/input/resources/tools/historyIssueInput.d.ts +59 -0
  70. package/dist/toolContract/input/resources/tools/historyPullRequestInput.d.ts +98 -0
  71. package/dist/toolContract/input/resources/tools/localAnalyzeGraph.d.ts +75 -0
  72. package/dist/toolContract/input/resources/tools/localFilesOperation.d.ts +70 -0
  73. package/dist/toolContract/input/resources/tools/localGetFileContent.d.ts +22 -0
  74. package/dist/toolContract/input/resources/tools/localSearch.d.ts +258 -0
  75. package/dist/toolContract/input/resources/tools/localTextOperation.d.ts +113 -0
  76. package/dist/toolContract/input/resources/tools/localTreeOperation.d.ts +44 -0
  77. package/dist/toolContract/input/resources/tools/lspGetSemantics.d.ts +37 -0
  78. package/dist/toolContract/input/resources/tools/npmSearch.d.ts +10 -0
  79. package/dist/toolContract/input/types/index.d.ts +24 -0
  80. package/dist/toolContract/metadata.d.ts +11 -0
  81. package/dist/toolContract/runtime.d.ts +11 -0
  82. package/dist/toolContract/schemas.d.ts +31 -0
  83. package/dist/toolContract/types.d.ts +11 -0
  84. package/dist/tools/directToolCatalog/toolCatalogDefinitions.d.ts +6 -16
  85. package/dist/tools/directToolCatalog/toolCatalogFormatters.d.ts +1 -1
  86. package/dist/tools/directToolCatalog/toolCommandPatternUnifiedSearchQueries.d.ts +6 -0
  87. package/dist/tools/directToolCatalog/toolInputPreparation.d.ts +2 -2
  88. package/dist/tools/directToolCatalog/toolSchemaIntrospection.d.ts +10 -0
  89. package/dist/tools/directToolCatalog/toolSchemaRelations.d.ts +9 -0
  90. package/dist/tools/directToolCatalog/toolSpecifications.d.ts +13 -0
  91. package/dist/tools/directToolCatalog.exec.d.ts +1 -1
  92. package/dist/tools/directToolCatalog.meta.d.ts +1 -0
  93. package/dist/tools/executionGuard.d.ts +1 -2
  94. package/dist/tools/github_clone_repo/cache.d.ts +1 -2
  95. package/dist/tools/github_clone_repo/cacheArtifacts.d.ts +3 -0
  96. package/dist/tools/github_clone_repo/cachePaths.d.ts +1 -1
  97. package/dist/tools/github_clone_repo/cloneRepo.d.ts +1 -1
  98. package/dist/tools/github_clone_repo/execution.d.ts +1 -1
  99. package/dist/tools/github_clone_repo/scheme.d.ts +24 -24
  100. package/dist/tools/github_fetch_content/execution.d.ts +1 -1
  101. package/dist/tools/github_fetch_content/finalizer/types.d.ts +19 -16
  102. package/dist/tools/github_fetch_content/scheme.d.ts +19 -16
  103. package/dist/tools/github_fetch_content/types.d.ts +4 -3
  104. package/dist/tools/github_search/execution.d.ts +4 -0
  105. package/dist/tools/github_search/finalizer.d.ts +3 -0
  106. package/dist/tools/github_search/scheme.d.ts +79 -0
  107. package/dist/tools/github_search_code/execution.d.ts +4 -2
  108. package/dist/tools/github_search_code/finalizer/groups.d.ts +3 -3
  109. package/dist/tools/github_search_code/finalizer/ranking.d.ts +1 -2
  110. package/dist/tools/github_search_code/scheme.d.ts +10 -16
  111. package/dist/tools/github_search_pull_requests/contentRequest.d.ts +1 -4
  112. package/dist/tools/github_search_pull_requests/contentResponse/commentsShaping.d.ts +8 -4
  113. package/dist/tools/github_search_pull_requests/contentResponse/fileSurfaces.d.ts +13 -10
  114. package/dist/tools/github_search_pull_requests/contentResponse/nextCalls.d.ts +3 -2
  115. package/dist/tools/github_search_pull_requests/contentResponse/pagination.d.ts +10 -3
  116. package/dist/tools/github_search_pull_requests/execution/commitsMode.d.ts +2 -2
  117. package/dist/tools/github_search_pull_requests/execution/issuesMode.d.ts +2 -2
  118. package/dist/tools/github_search_pull_requests/execution/pullRequestsMode.d.ts +1 -1
  119. package/dist/tools/github_search_pull_requests/execution.d.ts +1 -1
  120. package/dist/tools/github_search_pull_requests/historyContinuations.d.ts +15 -0
  121. package/dist/tools/github_search_pull_requests/historyExecutions.d.ts +6 -0
  122. package/dist/tools/github_search_pull_requests/historyPartialContinuations.d.ts +5 -0
  123. package/dist/tools/github_search_pull_requests/historySchemes.d.ts +58 -0
  124. package/dist/tools/github_search_pull_requests/historySearchPagination.d.ts +3 -0
  125. package/dist/tools/github_search_pull_requests/scheme.d.ts +14 -30
  126. package/dist/tools/github_search_pull_requests/splitExecutions.d.ts +1 -2
  127. package/dist/tools/github_search_pull_requests/splitSchemes.d.ts +197 -181
  128. package/dist/tools/github_search_repos/execution/pagination.d.ts +4 -4
  129. package/dist/tools/github_search_repos/execution/queryVariants.d.ts +3 -1
  130. package/dist/tools/github_search_repos/execution.d.ts +3 -1
  131. package/dist/tools/github_search_repos/scheme.d.ts +5 -7
  132. package/dist/tools/github_view_repo_structure/execution.d.ts +4 -2
  133. package/dist/tools/github_view_repo_structure/scheme.d.ts +2 -4
  134. package/dist/tools/github_view_repo_structure/types.d.ts +3 -0
  135. package/dist/tools/local_analyze_graph/analysisTypes.d.ts +46 -0
  136. package/dist/tools/local_analyze_graph/analyzeGraph.d.ts +3 -0
  137. package/dist/tools/{local_dead_code → local_analyze_graph}/deadCodeScan.d.ts +2 -1
  138. package/dist/tools/{local_dead_code → local_analyze_graph}/entrypoints.d.ts +1 -0
  139. package/dist/tools/local_analyze_graph/execution.d.ts +4 -0
  140. package/dist/tools/local_analyze_graph/pagination.d.ts +3 -0
  141. package/dist/tools/{local_dead_code → local_analyze_graph}/retention.d.ts +1 -1
  142. package/dist/tools/{local_dead_code → local_analyze_graph}/scheme.d.ts +31 -15
  143. package/dist/tools/local_fetch_content/execution.d.ts +1 -1
  144. package/dist/tools/local_fetch_content/scheme.d.ts +2 -4
  145. package/dist/tools/local_find_files/execution.d.ts +1 -1
  146. package/dist/tools/local_find_files/findFiles.d.ts +1 -1
  147. package/dist/tools/local_find_files/findFilesNext.d.ts +3 -3
  148. package/dist/tools/local_find_files/scheme.d.ts +6 -2
  149. package/dist/tools/local_ripgrep/captureBudget.d.ts +1 -0
  150. package/dist/tools/local_ripgrep/execution.d.ts +1 -1
  151. package/dist/tools/local_ripgrep/rankingProfile/rankingLexical.d.ts +20 -0
  152. package/dist/tools/local_ripgrep/rankingProfile/rankingResults.d.ts +1 -18
  153. package/dist/tools/local_ripgrep/rankingProfile.d.ts +5 -4
  154. package/dist/tools/local_ripgrep/ripgrepResultBuilder/searchNext.d.ts +4 -1
  155. package/dist/tools/local_ripgrep/scheme.d.ts +9 -7
  156. package/dist/tools/local_ripgrep/structuralSearch.d.ts +1 -1
  157. package/dist/tools/local_search/execution.d.ts +5 -0
  158. package/dist/tools/local_search/scheme.d.ts +260 -0
  159. package/dist/tools/local_view_structure/execution.d.ts +1 -1
  160. package/dist/tools/local_view_structure/scheme.d.ts +8 -5
  161. package/dist/tools/local_view_structure/viewStructureNext.d.ts +3 -3
  162. package/dist/tools/lsp/semantic_content/execution.d.ts +1 -1
  163. package/dist/tools/lsp/semantic_content/scheme.d.ts +4 -42
  164. package/dist/tools/lsp/semantic_content/semanticEnvelopes/envelopeHelpers.d.ts +1 -1
  165. package/dist/tools/lsp/semantic_content/semanticFileOps/anchor.d.ts +1 -1
  166. package/dist/tools/lsp/semantic_content/semanticPresentation.d.ts +0 -1
  167. package/dist/tools/lsp/shared/semanticTypes.d.ts +6 -3
  168. package/dist/tools/package_search/execution.d.ts +6 -13
  169. package/dist/tools/package_search/pagination.d.ts +21 -0
  170. package/dist/tools/package_search/queryHelpers.d.ts +3 -5
  171. package/dist/tools/package_search/scheme.d.ts +12 -7
  172. package/dist/tools/providerExecution.d.ts +3 -4
  173. package/dist/tools/providerMappers/codeSearch.d.ts +3 -4
  174. package/dist/tools/providerMappers/fileContent.d.ts +1 -2
  175. package/dist/tools/providerMappers/pullRequests.d.ts +6 -6
  176. package/dist/tools/providerMappers/repoSearch.d.ts +7 -4
  177. package/dist/tools/providerMappers/repoStructure.d.ts +2 -3
  178. package/dist/tools/toolCatalogFactory.d.ts +5 -6
  179. package/dist/tools/toolConfig.d.ts +6 -17
  180. package/dist/tools/toolMetadata/baseSchema.d.ts +1 -2
  181. package/dist/tools/toolMetadata/descriptions.d.ts +1 -1
  182. package/dist/tools/toolMetadata/names.d.ts +18 -2
  183. package/dist/tools/toolMetadata/state.d.ts +3 -3
  184. package/dist/tools/toolMetadata/types.d.ts +1 -1
  185. package/dist/tools/toolNames.d.ts +16 -3
  186. package/dist/tools/toolSchemaImports.d.ts +5 -4
  187. package/dist/tools/utils.d.ts +3 -6
  188. package/dist/types/bulk.d.ts +11 -1
  189. package/dist/types/execution.d.ts +6 -1
  190. package/dist/types/server.d.ts +0 -2
  191. package/dist/types/toolOutput.d.ts +10 -9
  192. package/dist/types/toolResults.d.ts +17 -1
  193. package/dist/utils/contextUtils.d.ts +4 -2
  194. package/dist/utils/file/toolHelpers.d.ts +1 -1
  195. package/dist/utils/http/cache/conditional.d.ts +9 -4
  196. package/dist/utils/http/cache/dataCache.d.ts +7 -2
  197. package/dist/utils/http/cache/diskStore.d.ts +30 -0
  198. package/dist/utils/http/cache/management.d.ts +5 -0
  199. package/dist/utils/http/cache/store.d.ts +1 -0
  200. package/dist/utils/http/cache/trace.d.ts +10 -0
  201. package/dist/utils/http/cache.d.ts +1 -0
  202. package/dist/utils/package/types.d.ts +5 -2
  203. package/dist/utils/pagination/charLimit.d.ts +0 -2
  204. package/dist/utils/response/bulk/pagination.d.ts +2 -1
  205. package/dist/utils/response/bulk/paginationDiagnostics.d.ts +2 -0
  206. package/dist/utils/response/bulk/queries.d.ts +0 -9
  207. package/dist/utils/response/bulk/response.d.ts +3 -2
  208. package/dist/utils/response/bulk.d.ts +1 -1
  209. package/dist/utils/response/callToolResult.d.ts +1 -1
  210. package/dist/utils/response/error.d.ts +3 -4
  211. package/dist/utils/response/groupedFinalizer.d.ts +2 -6
  212. package/dist/utils/response/normalizedError.d.ts +6 -0
  213. package/dist/utils/response/responseChannels.d.ts +4 -0
  214. package/package.json +7 -6
  215. package/dist/github/discussions.d.ts +0 -45
  216. package/dist/github/releases.d.ts +0 -45
  217. package/dist/scheme/responseEnvelope.d.ts +0 -88
  218. package/dist/tools/github_search_discussions/execution.d.ts +0 -15
  219. package/dist/tools/github_search_discussions/scheme.d.ts +0 -16
  220. package/dist/tools/github_search_pull_requests/execution/releasesMode.d.ts +0 -4
  221. package/dist/tools/local_dead_code/execution.d.ts +0 -4
  222. package/dist/tools/local_dead_code/local_dead_code.d.ts +0 -5
  223. package/dist/tools/local_find_files/pathPatternBraces.d.ts +0 -20
  224. package/dist/tools/toolMetadata/gateway.d.ts +0 -7
package/dist/index.js CHANGED
@@ -5,63 +5,53 @@ import { dirname as __dirname_fn } from 'path';
5
5
  const require = __createRequire(import.meta.url);
6
6
  const __filename = __fileURLToPath(import.meta.url);
7
7
  const __dirname = __dirname_fn(__filename);
8
- import{withSecurityValidation as hy,withBasicSecurityValidation as gy}from"@octocodeai/octocode-engine/security";function Vu(e,t){let n=hy(e,(r,o)=>t(r,o));return(r,o)=>n(r,o)}function Ku(e,t){let n=gy((r,o)=>e(r,o),t);return(r,o)=>n(r,o)}var me=30,oe=100,qL=10,JL=100,Yu=200,Ne=20,ct=100,Mo=20,ln=50,Je=1e4,bt=20,No=1e3,Xu=100,pn=5e4,qu=8e3,Go=1e5,Ju=500;var Ts={NOT_INITIALIZED:{code:"CONFIG_NOT_INITIALIZED",message:"Configuration not initialized. Call initialize() and await its completion before calling getServerConfig()."}},tr={PROMISES_NOT_ARRAY:{code:"VALIDATION_PROMISES_NOT_ARRAY",message:"promises must be an array"},TIMEOUT_NOT_POSITIVE:{code:"VALIDATION_TIMEOUT_NOT_POSITIVE",message:"timeout must be positive"},CONCURRENCY_NOT_POSITIVE:{code:"VALIDATION_CONCURRENCY_NOT_POSITIVE",message:"concurrency must be positive"}},nr={FETCH_NOT_AVAILABLE:{code:"FETCH_NOT_AVAILABLE",message:"Global fetch is not available in this environment."},FETCH_FAILED_AFTER_RETRIES:{code:"FETCH_FAILED_AFTER_RETRIES",message:(e,t)=>`Failed to fetch after ${e} attempts: ${t}`},FETCH_HTTP_ERROR:{code:"FETCH_HTTP_ERROR",message:(e,t)=>`Failed to fetch (${e} ${t})`}},yy={INVALID_FORMAT:{code:"TOOL_METADATA_INVALID_FORMAT",message:"Invalid tool metadata format from remote source."},INVALID_API_RESPONSE:{code:"TOOL_METADATA_INVALID_API_RESPONSE",message:"Invalid API response structure"}},Ct={PATH_IS_DIRECTORY:{code:"FILE_PATH_IS_DIRECTORY",message:e=>`Path is a directory. Use ${e} to list directory contents`},FILE_TOO_LARGE:{code:"FILE_TOO_LARGE",message:(e,t,n)=>`File too large (${e}KB > ${t}KB). Use ${n} to search within the file or use startLine/endLine parameters to get specific sections`},FILE_EMPTY:{code:"FILE_EMPTY",message:"File is empty - no content to display"},BINARY_FILE:{code:"FILE_BINARY",message:"Binary file detected. Cannot display as text - download directly from GitHub"},DECODE_FAILED:{code:"FILE_DECODE_FAILED",message:"Failed to decode file. Encoding may not be supported (expected UTF-8)"},UNSUPPORTED_TYPE:{code:"FILE_UNSUPPORTED_TYPE",message:e=>`Unsupported file type: ${e}`}},xt={NOT_FOUND:{code:"REPO_NOT_FOUND",message:(e,t,n)=>`Repository "${e}/${t}" not found or not accessible: ${n}`},PATH_NOT_FOUND:{code:"REPO_PATH_NOT_FOUND",message:(e,t,n,r)=>`Path "${e}" not found in repository "${t}/${n}" on branch "${r}"`},PATH_NOT_FOUND_ANY_BRANCH:{code:"REPO_PATH_NOT_FOUND_ANY_BRANCH",message:(e,t,n)=>`Path "${e}" not found in repository "${t}/${n}" on any common branch`},ACCESS_FAILED:{code:"REPO_ACCESS_FAILED",message:(e,t,n)=>`Failed to access repository "${e}/${t}": ${n}`},STRUCTURE_EXPLORATION_FAILED:{code:"REPO_STRUCTURE_EXPLORATION_FAILED",message:"Failed to explore repository structure"}},Ee={QUERY_EMPTY:{code:"SEARCH_QUERY_EMPTY",message:"Search query cannot be empty"},NO_VALID_PARAMETERS:{code:"SEARCH_NO_VALID_PARAMETERS",message:"No valid search parameters provided"},PR_REQUIRED_PARAMS:{code:"SEARCH_PR_REQUIRED_PARAMS",message:"Owner, repo, and prNumber are required parameters"},PR_SINGLE_VALUES:{code:"SEARCH_PR_SINGLE_VALUES",message:"Owner and repo must be single values"},PULL_REQUEST_SEARCH_FAILED:{code:"SEARCH_PR_SEARCH_FAILED",message:e=>`Pull request search failed: ${e}`},PULL_REQUEST_LIST_FAILED:{code:"SEARCH_PR_LIST_FAILED",message:e=>`Pull request list failed: ${e}`},PULL_REQUEST_FETCH_FAILED:{code:"SEARCH_PR_FETCH_FAILED",message:(e,t)=>`Failed to fetch pull request #${e}: ${t}`}},Ry={NO_TOOLS_REGISTERED:{code:"STARTUP_NO_TOOLS_REGISTERED",message:"No tools were successfully registered"},UNCAUGHT_EXCEPTION:{code:"STARTUP_UNCAUGHT_EXCEPTION",message:e=>`Uncaught exception: ${e}`},UNHANDLED_REJECTION:{code:"STARTUP_UNHANDLED_REJECTION",message:e=>`Unhandled rejection: ${e}`},STARTUP_FAILED:{code:"STARTUP_FAILED",message:e=>`Startup failed: ${e}`}},rr={TIMEOUT:{code:"PROMISE_TIMEOUT",message:(e,t)=>`Query ${e+1} timed out after ${t}ms \u2014 retry it alone, with tighter caps (maxFiles/maxMatchesPerFile/itemsPerPage) if it was large`},NOT_A_FUNCTION:{code:"PROMISE_NOT_A_FUNCTION",message:e=>`Promise function at index ${e} is not a function`},FUNCTION_UNDEFINED:{code:"PROMISE_FUNCTION_UNDEFINED",message:"Promise function is undefined"}},Sy={EXECUTION_FAILED:{code:"TOOL_EXECUTION_FAILED",message:(e,t)=>`Tool ${e} execution failed: ${t}`},SECURITY_VALIDATION_FAILED:{code:"TOOL_SECURITY_VALIDATION_FAILED",message:(e,t)=>`Security validation failed for ${e}: ${t}`}},eA={...Ts,...tr,...nr,...yy,...Ct,...xt,...Ee,...Ry,...rr,...Sy};var H={PATH_VALIDATION_FAILED:"pathValidationFailed",FILE_ACCESS_FAILED:"fileAccessFailed",FILE_READ_FAILED:"fileReadFailed",FILE_TOO_LARGE:"fileTooLarge",BINARY_FILE_UNSUPPORTED:"binaryFileUnsupported",NO_MATCHES:"noMatches",OUTPUT_TOO_LARGE:"outputTooLarge",COMMAND_NOT_AVAILABLE:"commandNotAvailable",COMMAND_EXECUTION_FAILED:"commandExecutionFailed",COMMAND_TIMEOUT:"commandTimeout",TOOL_EXECUTION_FAILED:"toolExecutionFailed",LSP_SERVER_UNAVAILABLE:"lspServerUnavailable"},by=(i=>(i.FILE_SYSTEM="FILE_SYSTEM",i.VALIDATION="VALIDATION",i.SEARCH="SEARCH",i.PAGINATION="PAGINATION",i.EXECUTION="EXECUTION",i))(by||{}),Zu={[H.PATH_VALIDATION_FAILED]:{code:H.PATH_VALIDATION_FAILED,category:"VALIDATION",description:"Path validation failed - invalid or unsafe path",recoverability:"user-action-required"},[H.FILE_ACCESS_FAILED]:{code:H.FILE_ACCESS_FAILED,category:"FILE_SYSTEM",description:"Cannot access file - may not exist or lack permissions",recoverability:"unrecoverable"},[H.FILE_READ_FAILED]:{code:H.FILE_READ_FAILED,category:"FILE_SYSTEM",description:"Failed to read file contents",recoverability:"unrecoverable"},[H.FILE_TOO_LARGE]:{code:H.FILE_TOO_LARGE,category:"FILE_SYSTEM",description:"File exceeds size limits for operation",recoverability:"user-action-required"},[H.BINARY_FILE_UNSUPPORTED]:{code:H.BINARY_FILE_UNSUPPORTED,category:"FILE_SYSTEM",description:"Binary file is not supported by text content reader",recoverability:"user-action-required"},[H.NO_MATCHES]:{code:H.NO_MATCHES,category:"SEARCH",description:"Search pattern found no matches",recoverability:"user-action-required"},[H.OUTPUT_TOO_LARGE]:{code:H.OUTPUT_TOO_LARGE,category:"PAGINATION",description:"Output exceeds size limits",recoverability:"user-action-required"},[H.COMMAND_NOT_AVAILABLE]:{code:H.COMMAND_NOT_AVAILABLE,category:"EXECUTION",description:"Required CLI command is not installed or not in PATH",recoverability:"user-action-required"},[H.COMMAND_EXECUTION_FAILED]:{code:H.COMMAND_EXECUTION_FAILED,category:"EXECUTION",description:"System command execution failed",recoverability:"unrecoverable"},[H.COMMAND_TIMEOUT]:{code:H.COMMAND_TIMEOUT,category:"EXECUTION",description:"Command execution timed out",recoverability:"user-action-required"},[H.TOOL_EXECUTION_FAILED]:{code:H.TOOL_EXECUTION_FAILED,category:"EXECUTION",description:"Generic tool execution failure",recoverability:"unrecoverable"},[H.LSP_SERVER_UNAVAILABLE]:{code:H.LSP_SERVER_UNAVAILABLE,category:"EXECUTION",description:"No language server available for semantic analysis \u2014 use text search (localSearchCode) and localGetFileContent instead",recoverability:"user-action-required"}};var xe=class e extends Error{errorCode;category;recoverability;context;constructor(t,n,r,o){let i=Zu[t],s=n||i.description;super(s,o?{cause:o}:void 0),this.name="ToolError",this.errorCode=t,this.category=i.category,this.recoverability=i.recoverability,this.context=r,o&&o.stack&&(this.stack=`${this.stack}
9
- Caused by: ${o.stack}`),Object.setPrototypeOf(this,e.prototype)}isRecoverable(){return this.recoverability==="recoverable"}requiresUserAction(){return this.recoverability==="user-action-required"}toJSON(){return{name:this.name,errorCode:this.errorCode,category:this.category,message:this.message,recoverability:this.recoverability,context:this.context,stack:this.stack}}};function Es(e){return e instanceof xe}function el(e,t=H.TOOL_EXECUTION_FAILED,n){if(Es(e))return e;if(e instanceof Error)return new xe(t,e.message,n,e);let r=String(e);return new xe(t,r,n)}import{redactPath as or}from"@octocodeai/octocode-engine/pathUtils";var Le={pathValidationFailed:(e,t,n)=>new xe(H.PATH_VALIDATION_FAILED,t||`Path validation failed: ${or(e,n)}`,{path:e}),fileAccessFailed:(e,t,n)=>{let r=or(e,n),o=`Cannot access file: ${r}`,i=t?.code;return i==="ENOENT"?o=`File not found: ${r}. Verify the path exists using localFindFiles.`:i==="EACCES"?o=`Permission denied: ${r}. Check file permissions.`:i==="EISDIR"?o=`Path is a directory: ${r}. Use localViewStructure instead.`:i==="ENOTDIR"?o=`Invalid path: ${r}. A component of the path is not a directory.`:i==="ENAMETOOLONG"&&(o=`Path too long: ${r}`),new xe(H.FILE_ACCESS_FAILED,o,{path:e,errorCode:i},t)},fileReadFailed:(e,t,n)=>new xe(H.FILE_READ_FAILED,`Failed to read file: ${or(e,n)}`,{path:e,errorCode:t?.code},t),fileTooLarge:(e,t,n)=>new xe(H.FILE_TOO_LARGE,(()=>{let r=o=>Number.isInteger(o)?`${o}KB`:`${o.toFixed(1)}KB`;return`File too large: ${r(t)} (limit: ${r(n)}). Use startLine/endLine, matchString, or charOffset/charLength to read a bounded slice.`})(),{path:e,sizeKB:t,limitKB:n}),binaryFileUnsupported:e=>new xe(H.BINARY_FILE_UNSUPPORTED,`Binary file unsupported: ${or(e)}. Use localSearchCode to grep embedded strings.`,{path:e}),outputTooLarge:(e,t)=>new xe(H.OUTPUT_TOO_LARGE,`Output too large: ${e} (limit: ${t})`,{size:e,limit:t}),commandNotAvailable:(e,t)=>new xe(H.COMMAND_NOT_AVAILABLE,`Command '${e}' is not available. ${t||"Please install it and ensure it is in your PATH."}`,{command:e,installHint:t}),commandExecutionFailed:(e,t,n)=>new xe(H.COMMAND_EXECUTION_FAILED,n?`Command '${e}' failed: ${n}`:`Command execution failed: ${e}`,{command:e,stderr:n},t),toolExecutionFailed:(e,t)=>new xe(H.TOOL_EXECUTION_FAILED,`Tool execution failed: ${e}`,{toolName:e},t)};import{Octokit as mR}from"octokit";import{throttling as fR}from"@octokit/plugin-throttling";import{createHash as hR}from"crypto";function Ze(e){return e.toLowerCase().replace(/^https?:\/\//,"").replace(/\/$/,"")}function ut(e){if(!e.token.expiresAt)return!1;let t=new Date(e.token.expiresAt);if(isNaN(t.getTime()))return!0;let n=new Date;return t.getTime()-n.getTime()<300*1e3}function ir(e){if(!e.token.refreshTokenExpiresAt)return!1;let t=new Date(e.token.refreshTokenExpiresAt);return isNaN(t.getTime())?!0:new Date>=t}var sr=new Map,Cy=300*1e3;function xy(e){let t=Ze(e),n=sr.get(t);return!n||Date.now()-n.cachedAt>=Cy?!1:n.credentials?!ut(n.credentials):!0}function ar(e){e?sr.delete(Ze(e)):sr.clear()}function tl(e){let t=Ze(e);if(xy(t))return sr.get(t).credentials}function nl(e,t){let n=Ze(e);sr.set(n,{credentials:t,cachedAt:Date.now()})}import{existsSync as $o,readFileSync as al,writeFileSync as cl,unlinkSync as sl,statSync as Ay,chmodSync as ky}from"node:fs";import{createCipheriv as _y,createDecipheriv as Iy,randomBytes as ul}from"node:crypto";import{existsSync as Ho,mkdirSync as Bo}from"node:fs";import{join as je}from"node:path";import{getOctocodeHome as Py}from"@octocodeai/config";var Uo=448;function rl(){return Py(process.env)}function zt(){return Ie}var Ie=rl(),we={home:Ie,config:je(Ie,".octocoderc"),credentials:je(Ie,"credentials.json"),key:je(Ie,".key"),session:je(Ie,"session.json"),stats:je(Ie,"stats.json"),tmp:je(Ie,"tmp"),clone:je(Ie,"tmp","clone"),tree:je(Ie,"tmp","tree"),repos:je(Ie,"tmp","clone"),cliConfig:je(Ie,"config.json"),lspConfig:je(Ie,"lsp-servers.json")};function Qo(){Ho(we.home)||Bo(we.home,{recursive:!0,mode:Uo})}function wy(){ol()}function Ls(){Qo(),Ho(we.tmp)||Bo(we.tmp,{recursive:!0,mode:Uo})}function ol(){Ls(),Ho(we.clone)||Bo(we.clone,{recursive:!0,mode:Uo})}function Ty(){Ls(),Ho(we.tree)||Bo(we.tree,{recursive:!0,mode:Uo})}import{z as Se}from"zod";var Ey=Se.object({token:Se.string(),tokenType:Se.literal("oauth"),scopes:Se.array(Se.string()).optional(),refreshToken:Se.string().optional(),expiresAt:Se.string().optional(),refreshTokenExpiresAt:Se.string().optional()}),Ly=Se.object({hostname:Se.string(),username:Se.string(),token:Ey,gitProtocol:Se.enum(["ssh","https"]),createdAt:Se.string(),updatedAt:Se.string()}),il=Se.object({version:Se.number(),credentials:Se.record(Se.string(),Ly)});var As=we.home,lt=we.credentials,et=we.key,ll="aes-256-gcm",Oy=16;function Pt(){Qo()}function pl(){if(Pt(),$o(et))return Ay(et).mode&511&63&&ky(et,384),Buffer.from(al(et,"utf8"),"hex");let e=ul(32);return cl(et,e.toString("hex"),{mode:384}),e}function jo(e){let t=pl(),n=ul(Oy),r=_y(ll,t,n),o=r.update(e,"utf8","hex");o+=r.final("hex");let i=r.getAuthTag();return`${n.toString("hex")}:${i.toString("hex")}:${o}`}function zo(e){let t=pl(),[n,r,o]=e.split(":");if(!n||!r||!o)throw new Error("Invalid encrypted data format");let i=Buffer.from(n,"hex"),s=Buffer.from(r,"hex"),a=Iy(ll,t,i);a.setAuthTag(s);let c=a.update(o,"hex","utf8");return c+=a.final("utf8"),c}function pt(){if(Pt(),!$o(lt))return{version:1,credentials:{}};try{let e=al(lt,"utf8"),t=zo(e),n=JSON.parse(t),r=il.safeParse(n);return r.success?r.data:{version:1,credentials:{}}}catch{return{version:1,credentials:{}}}}function ks(e){Pt();let t=jo(JSON.stringify(e,null,2));cl(lt,t,{mode:384})}function dl(){try{$o(lt)&&sl(lt),$o(et)&&sl(et)}catch{}}import{refreshToken as Fy}from"@octokit/oauth-methods";import{request as vy}from"@octokit/request";var dn="178c6fc778ccc68e1d6a",wt="github.com";function Dy(e){return e.replace(/\b(ghp_|gho_|ghu_|ghs_|ghr_)[a-zA-Z0-9]{36,}\b/g,"***MASKED***").replace(/\b[a-zA-Z0-9]{40,}\b/g,"***MASKED***")}function My(e){return e==="github.com"||e===wt?"https://api.github.com":`https://${e}/api/v3`}async function _s(e,t=wt,n=dn){let r=await e.getCredentials(t);if(!r)return{success:!1,error:`Not logged in to ${t}`};if(!r.token.refreshToken)return{success:!1,error:"Token does not support refresh (OAuth App tokens do not expire)"};if(ir(r))return{success:!1,error:"Refresh token has expired. Please login again."};try{let o=await Fy({clientType:"github-app",clientId:n,clientSecret:"",refreshToken:r.token.refreshToken,request:vy.defaults({baseUrl:My(t)})}),i={token:o.authentication.token,tokenType:"oauth",refreshToken:o.authentication.refreshToken,expiresAt:o.authentication.expiresAt,refreshTokenExpiresAt:o.authentication.refreshTokenExpiresAt};return await e.updateToken(t,i),{success:!0,username:r.username,hostname:t}}catch(o){return{success:!1,error:o instanceof Error?Dy(o.message):"Token refresh failed"}}}async function ml(e,t=wt,n=dn){let r=await e.getCredentials(t);if(!r||!r.token)return{token:null,source:"none"};if(!ut(r))return{token:r.token.token,source:"stored",username:r.username};if(r.token.refreshToken){let o=await _s(e,t,n);if(o.success){let i=await e.getCredentials(t);if(i?.token.token)return{token:i.token.token,source:"refreshed",username:i.username}}return{token:null,source:"none",refreshError:o.error}}return{token:null,source:"none",refreshError:"Token expired and no refresh token available"}}import{resolveEnvToken as Hy}from"@octocodeai/config";import{execFile as Ny}from"child_process";var Gy=["/opt/homebrew/bin","/usr/local/bin","/home/linuxbrew/.linuxbrew/bin"];function Wo(e){return new Promise(t=>{let n=["auth","token"];e&&n.push("--hostname",e);let r=process.env.PATH??"",o=new Set(r.split(":")),i=Gy.filter(a=>!o.has(a)),s=i.length?`${i.join(":")}:${r}`:r;Ny("gh",n,{encoding:"utf8",timeout:5e3,env:{...process.env,PATH:s}},(a,c)=>{if(a||!c){t(null);return}t(c.trim()||null)})})}var Vo=null;function fl(e){Vo=e}function Is(){Vo=null}function By(){if(!Vo)throw new Error("Token resolution not initialized. Call initTokenResolution() first.");return Vo}async function Tt(e){let t=e?.hostname??wt,n=e?.clientId??dn,r=e?.getGhCliToken??Wo,o=Hy();if(o)return{token:o.token,source:o.source,wasRefreshed:!1};let i=await By().getTokenWithRefresh(t,n);if(i.token)return{token:i.token,source:"octocode-storage",wasRefreshed:i.source==="refreshed",username:i.username};try{let s=await Promise.resolve(r(t));if(s?.trim())return{token:s.trim(),source:"gh-cli",wasRefreshed:!1}}catch(s){process.stderr.write(`[octocode] gh auth token failed: ${s instanceof Error?s.message:String(s)}
10
- `)}return null}async function Os(e=wt){let t=await Tt({hostname:e,getGhCliToken:()=>null});return t?{token:t.token,source:t.source}:null}async function Fs(e=wt,t=dn){let n=await Tt({hostname:e,clientId:t,getGhCliToken:()=>null});return n?{token:n.token,source:n.source,wasRefreshed:n.wasRefreshed,username:n.username}:null}async function vs(e){let t=Ze(e.hostname),n={...e,hostname:t,updatedAt:new Date().toISOString()};try{let r=pt();return r.credentials[t]=n,ks(r),ar(t),{success:!0}}catch{throw new Error("Failed to store credentials")}}async function Wt(e="github.com",t){let n=Ze(e);if(!t?.bypassCache){let i=tl(n);if(i!==void 0)return i}let o=pt().credentials[n]||null;return nl(n,o),o}function Ko(e="github.com"){let t=Ze(e);return pt().credentials[t]||null}async function hl(e="github.com"){let t=Ze(e),n=!1,r=pt();return r.credentials[t]&&(delete r.credentials[t],Object.keys(r.credentials).length===0?dl():ks(r),n=!0),ar(t),{success:n,deletedFromFile:n}}async function gl(){let e=pt();return Object.keys(e.credentials)}function yl(){let e=pt();return Object.keys(e.credentials)}async function Rl(e="github.com"){return await Wt(e)!==null}function Sl(e="github.com"){return Ko(e)!==null}async function Yo(e,t){let n=await Wt(e);return n?(n.token=t,n.updatedAt=new Date().toISOString(),await vs(n),!0):!1}function bl(){return lt}async function Cl(e="github.com"){let t=await Wt(e);return!t||!t.token||ut(t)?null:t.token.token}function xl(e="github.com"){let t=Ko(e);return!t||!t.token||ut(t)?null:t.token.token}async function Pl(e,t){return _s({getCredentials:Wt,updateToken:Yo},e,t)}async function Ds(e,t){return ml({getCredentials:Wt,updateToken:Yo},e,t)}fl({getTokenWithRefresh:Ds});import fn from"node:os";import wl from"node:path";var cr=fn.platform()==="win32",Ms=fn.platform()==="darwin",Ns=fn.platform()==="linux",mn=fn.homedir();function Tl(){return cr?process.env.APPDATA||wl.join(mn,"AppData","Roaming"):mn}function El(){return cr?process.env.LOCALAPPDATA||wl.join(mn,"AppData","Local"):mn}function Ll(){return Ms?"macOS":cr?"Windows":Ns?"Linux":fn.platform()}function Al(){return fn.arch()}import{randomUUID as Zy}from"node:crypto";import{existsSync as Gs,readFileSync as Fl,writeFileSync as zy,unlinkSync as Wy,renameSync as Vy}from"node:fs";import{isStatsEnabled as vl}from"@octocodeai/config";import{z as W}from"zod";var Uy=W.object({rawChars:W.number(),responseChars:W.number(),savedChars:W.number(),calls:W.number()}),Qy=W.object({hits:W.record(W.string(),W.number()).default({}),rateLimits:W.number().default(0)}),Xo=W.record(W.string(),W.number()).default({}),$y=W.object({toolCalls:W.number(),errors:W.number(),rateLimits:W.number(),rateLimitsByProvider:Xo,rawChars:W.number(),responseChars:W.number(),savedChars:W.number(),charSavingsCalls:W.number(),githubCacheHits:W.number(),githubCacheRateLimits:W.number(),packageRegistryFailures:W.number().default(0),packageRegistryFailuresByRegistry:Xo}),qo=W.object({toolCalls:W.number(),errors:W.number(),rateLimits:W.number(),rateLimitsByProvider:Xo,charsSavedByTool:W.record(W.string(),Uy).default({}),githubCacheHits:Qy.default({hits:{},rateLimits:0}),packageRegistryFailures:Xo,totalUsage:$y.optional()}),kl=W.object({version:W.literal(1),sessionId:W.string(),createdAt:W.string(),lastActiveAt:W.string(),stats:qo.optional()}),_l=W.object({version:W.literal(1),stats:qo});function Il(e){return Object.values(e).reduce((t,n)=>t+n,0)}function jy(e){let t=e.charsSavedByTool??{},n=e.githubCacheHits??{hits:{},rateLimits:0},r=e.rateLimitsByProvider??{},o=e.packageRegistryFailures??{},i=Object.values(t).reduce((s,a)=>({rawChars:s.rawChars+a.rawChars,responseChars:s.responseChars+a.responseChars,savedChars:s.savedChars+a.savedChars,charSavingsCalls:s.charSavingsCalls+a.calls}),{rawChars:0,responseChars:0,savedChars:0,charSavingsCalls:0});return{toolCalls:e.toolCalls,errors:e.errors,rateLimits:e.rateLimits,rateLimitsByProvider:r,...i,githubCacheHits:Il(n.hits),githubCacheRateLimits:n.rateLimits,packageRegistryFailures:Il(o),packageRegistryFailuresByRegistry:o}}function Et(e){let t={...e,rateLimitsByProvider:e.rateLimitsByProvider??{},charsSavedByTool:e.charsSavedByTool??{},githubCacheHits:e.githubCacheHits??{hits:{},rateLimits:0},packageRegistryFailures:e.packageRegistryFailures??{}};return{...t,totalUsage:jy(t)}}function Lt(){return Et({toolCalls:0,errors:0,rateLimits:0,rateLimitsByProvider:{},charsSavedByTool:{},githubCacheHits:{hits:{},rateLimits:0},packageRegistryFailures:{}})}var Vt=we.session,Kt=we.stats;function Ol(e,t){let n=`${e}.tmp`;zy(n,JSON.stringify(t,null,2),{mode:384}),Vy(n,e)}function Ky(e){let t=JSON.parse(e),n=_l.safeParse(t);if(n.success)return Et(n.data.stats);let r=qo.safeParse(t);return r.success?Et(r.data):null}function Yy(){if(!Gs(Kt))return Lt();try{let e=Fl(Kt,"utf8");return Ky(e)??Lt()}catch{return Lt()}}function Jo(e){Pt(),vl()&&Ol(Kt,{version:e.version,stats:Et(e.stats)});let{stats:t,...n}=e;Ol(Vt,n)}function Dl(){if(!Gs(Vt))return null;try{let e=Fl(Vt,"utf8"),t=JSON.parse(e),n=kl.safeParse(t);return n.success?{...n.data,stats:vl()?Yy():Lt()}:null}catch{return null}}function Ml(){let e=!1;for(let t of[Vt,Kt])if(Gs(t))try{Wy(t),e=!0}catch{return!1}return e}var Xy=6e4,ze=null,At=!1,hn=null,Hs=!1,ur=null,lr=null,pr=null,Zo=!1;function qy(){Hs||(Hs=!0,ur=()=>{dr()},lr=()=>{dr()},pr=()=>{dr()},process.on("exit",ur),process.on("SIGINT",lr),process.on("SIGTERM",pr))}function Bs(){ur&&(process.removeListener("exit",ur),ur=null),lr&&(process.removeListener("SIGINT",lr),lr=null),pr&&(process.removeListener("SIGTERM",pr),pr=null),Hs=!1}function Jy(){hn||(hn=setInterval(()=>{At&&ze&&(Jo(ze),At=!1)},Xy),hn.unref())}function Us(){hn&&(clearInterval(hn),hn=null)}function mr(){if(ze)return ze;let e=Dl();return e&&(ze=e),e}function gn(e){ze=e,At=!0,qy(),Jy()}function fr(){At&&ze&&(Jo(ze),At=!1)}function dr(){if(!Zo&&At&&ze){Zo=!0;try{Jo(ze),At=!1}catch{}finally{Zo=!1}}}function Qs(){ze=null,At=!1,Zo=!1}function Nl(){Qs(),Us(),Bs()}var eR=1;function tR(e){return Et(e)}function nR(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t)){let i=n[r]??{rawChars:0,responseChars:0,savedChars:0,calls:0};n[r]={rawChars:i.rawChars+o.rawChars,responseChars:i.responseChars+o.responseChars,savedChars:i.savedChars+o.savedChars,calls:i.calls+o.calls}}return n}function Gl(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t))n[r]=(n[r]??0)+o;return n}function rR(e,t){if(!t)return e;let n={...e.hits};for(let[r,o]of Object.entries(t.hits??{}))n[r]=(n[r]??0)+o;return{hits:n,rateLimits:e.rateLimits+(t.rateLimits??0)}}function Hl(){let e=new Date().toISOString();return{version:eR,sessionId:Zy(),createdAt:e,lastActiveAt:e,stats:Lt()}}function Bl(){fr()}function Ul(){dr()}function Ql(e){if(e?.forceNew){let r=Hl();return gn(r),fr(),r}let t=mr();if(t){let r={...t,lastActiveAt:new Date().toISOString()};return gn(r),fr(),r}let n=Hl();return gn(n),fr(),n}function $l(){return mr()?.sessionId??null}function Ge(e){let t=mr();if(!t)return{success:!1,session:null};let n=tR(t.stats),r=Et({toolCalls:n.toolCalls+(e.toolCalls??0),errors:n.errors+(e.errors??0),rateLimits:n.rateLimits+(e.rateLimits??0),rateLimitsByProvider:Gl(n.rateLimitsByProvider,e.rateLimitsByProvider),charsSavedByTool:nR(n.charsSavedByTool,e.charsSavedByTool),githubCacheHits:rR(n.githubCacheHits,e.githubCacheHits),packageRegistryFailures:Gl(n.packageRegistryFailures,e.packageRegistryFailures)}),o={...t,lastActiveAt:new Date().toISOString(),stats:r};return gn(o),{success:!0,session:o}}function jl(e=1){return Ge({toolCalls:e})}function zl(e=1){return Ge({errors:e})}function ei(e=1){return Ge({rateLimits:e})}function Wl(e,t=1){return Ge({rateLimits:t,rateLimitsByProvider:{[e]:t}})}function ti(e,t,n){let r=Number.isFinite(t)?Math.max(0,t):0,o=Number.isFinite(n)?Math.max(0,n):0;return Ge({charsSavedByTool:{[e]:{rawChars:r,responseChars:o,savedChars:Math.max(0,r-o),calls:1}}})}function ni(e,t=1){return Ge({githubCacheHits:{hits:{[e]:t},rateLimits:0}})}function ri(e=1){return Ge({githubCacheHits:{hits:{},rateLimits:e}})}function Vl(e,t=1){return Ge({packageRegistryFailures:{[e]:t}})}function Kl(){let e=mr();if(!e)return{success:!1,session:null};let t={...e,lastActiveAt:new Date().toISOString(),stats:Lt()};return gn(t),{success:!0,session:t}}function Yl(){return Qs(),Us(),Bs(),Ml()}function Xl(){Nl()}import{z as de}from"zod";var ql=de.looseObject({$schema:de.string().optional(),version:de.number().int().optional(),github:de.record(de.string(),de.unknown()).optional(),local:de.record(de.string(),de.unknown()).optional(),tools:de.record(de.string(),de.unknown()).optional(),network:de.record(de.string(),de.unknown()).optional(),lsp:de.record(de.string(),de.unknown()).optional(),output:de.record(de.string(),de.unknown()).optional()});import{existsSync as oR,readdirSync as iR,lstatSync as sR}from"node:fs";import{join as aR}from"node:path";function hr(e){if(!oR(e))return 0;let t=0,n=[e];for(;n.length>0;){let r=n.pop(),o;try{o=iR(r)}catch{continue}for(let i of o){let s=aR(r,i);try{let a=sR(s);if(a.isSymbolicLink())continue;a.isDirectory()?n.push(s):a.isFile()&&(t+=a.size)}catch{}}}return t}function cR(e){if(e<1024)return`${e} B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)} KB`;let n=t/1024;return n<1024?`${n.toFixed(1)} MB`:`${(n/1024).toFixed(2)} GB`}import{getConfigSync as Jl,invalidateConfigCache as lR}from"@octocodeai/config";var Yt="18.1.2";import{maskSensitiveData as pR}from"@octocodeai/octocode-engine/mask";var kt=null,yn=null,$s=Tt;function zk(e){e.resolveTokenFull&&($s=e.resolveTokenFull)}function Wk(){$s=Tt}var dR=new Set(["env:OCTOCODE_TOKEN","env:GH_TOKEN","env:GITHUB_TOKEN","env:GITHUB_PERSONAL_ACCESS_TOKEN","octocode-storage","gh-cli","none"]);async function js(){try{let e=await $s({hostname:"github.com"});if(e?.token){let t=e.source??"none";return{token:e.token,source:dR.has(t)?t:"none"}}return{token:null,source:"none"}}catch{return{token:null,source:"none"}}}async function Zl(){if(kt!==null)return;if(yn!==null)return yn;let e=(async()=>{let t=Jl(),n=await js();kt={version:Yt,githubApiUrl:t.github.apiUrl,toolsToRun:t.tools.enabled??void 0,enableTools:t.tools.enableAdditional??void 0,disableTools:t.tools.disabled??void 0,timeout:t.network.timeout,maxRetries:t.network.maxRetries,enableLocal:t.local.enabled,enableClone:t.local.enableClone,outputFormat:t.output.format,tokenSource:n.source}})();yn=e;try{await e}catch(t){throw yn===e&&(kt=null,yn=null),t}}function Vk(){kt=null,yn=null,lR()}function gr(){if(!kt){let e=pR(Ts.NOT_INITIALIZED.message);throw new Error(e)}return kt}async function zs(){return(await js()).token}function Kk(){return gr().enableLocal}function ep(){let e=gr();return e.enableLocal&&e.enableClone}async function Yk(){return kt!==null?kt.tokenSource:(await js()).source}function Ws(){return"github"}function Vs(){let e=Jl().github.apiUrl;return{provider:"github",baseUrl:e!=="https://api.github.com"?e:void 0}}function _t(e){(e.provider?Ge({rateLimits:1,rateLimitsByProvider:{[e.provider]:1}}):ei(1)).session&&e.provider==="github"&&ri(1)}function tp(e){Ge({packageRegistryFailures:{[e]:1}})}function sp(e){return hR("sha256").update(e).digest("hex").substring(0,16)}async function fe(e){let t=e?.token??await zs(),n=t?sp(t):"anon",r=gr().githubApiUrl||"https://api.github.com";try{let o=new URL(r).host;if(o&&o!=="api.github.com")return`${n}@${o}`}catch{}return n}var gR=mR.plugin(fR),yR=300*1e3,Ks=50,RR=60*1e3;function ap(e){return Date.now()-e.createdAt>yR}var tt=new Map,It=null;function cp(){for(let[e,t]of tt.entries())ap(t)&&tt.delete(e);if(tt.size>Ks){let e=tt.size-Ks,t=0;for(let[n]of tt){if(t>=e)break;tt.delete(n),t++}}}function SR(){It||(It=setInterval(cp,RR),typeof It=="object"&&"unref"in It&&It.unref())}var np=3,rp=60;function op(e,t,n){_t({limit_type:e,retry_after_seconds:t,api_method:n.method,api_url:n.url,provider:"github"})}var bR=()=>({onRateLimit:(e,t,n,r)=>(op("primary",e,t),r<np&&e<rp),onSecondaryRateLimit:(e,t,n,r)=>(op("secondary",e,t),r<np&&e<rp)});function CR(e){let t=gr(),n=t.githubApiUrl,r={debug:()=>{},info:()=>{},warn:()=>{},error:(...i)=>console.error(...i)},o={userAgent:`octocode-mcp/${Yt}`,baseUrl:n,request:{timeout:t.timeout||3e4,log:r},throttle:bR(),log:r,...e&&{auth:e}};return new gR(o)}async function Q(e){SR();let t=e?.token??await zs(),n=t?sp(t):"ANONYMOUS",r=tt.get(n);if(r&&!ap(r))return r.client;tt.size>=Ks&&cp();let o=CR(t??void 0);return tt.set(n,{client:o,createdAt:Date.now()}),o}var xR=200,Rn=new Map;async function Ae(e,t,n){let r=`${e}/${t}`,o=Rn.get(r);if(o)return o;let i=await Q(n);try{let{data:a}=await i.rest.repos.get({owner:e,repo:t}),c=a.default_branch;return ip(r,c),c}catch{}let s=["main","master"];for(let a of s)try{return await i.rest.repos.getBranch({owner:e,repo:t,branch:a}),ip(r,a),a}catch{}throw new Error(`Could not determine default branch for ${e}/${t}. The repository may not exist, require authentication, or be inaccessible.`)}function ip(e,t){if(Rn.size>=xR){let n=Rn.keys().next().value;n!==void 0&&Rn.delete(n)}Rn.set(e,t)}function s_(){tt.clear(),Rn.clear(),It&&(clearInterval(It),It=null)}import{ContentSanitizer as XR}from"@octocodeai/octocode-engine/contentSanitizer";import{createRequire as PR}from"node:module";var wR=PR(import.meta.url),up="@octocodeai/octocode-engine",TR=()=>globalThis.__OCTOCODE_ENGINE_BINDING__??wR(up),oi,ER=TR,Ys=class extends Error{constructor(n){super(`Failed to load native dependency ${up}`);this.cause=n;this.name="ContextUtilsLoadError"}cause};function J(){if(oi)return oi;try{return oi=ER(),oi}catch(e){throw new Ys(e)}}var O={applyContentViewMinification(e,t){return J().applyContentViewMinification(e,t)},applyMinification(e,t){return J().applyMinification(e,t)},minifyContent(e,t){return J().minifyContent(e,t)},minifyContentSync(e,t){return J().minifyContentSync(e,t)},minifyContentResult(e,t){return J().minifyContentResult(e,t)},minifyMarkdownCore(e){return J().minifyMarkdownCore(e)},extractSignatures(e,t){return J().extractSignatures(e,t)},extractJsSymbols(e,t){return J().extractJsSymbols(e,t)},findInFileReferences(e,t,n,r){return J().findInFileReferences(e,t,n,r)},extractGraphFacts(e,t){return J().extractGraphFacts(e,t)},getSupportedJsTsExtensions(){return J().getSupportedJsTsExtensions()},getSupportedGraphFactExtensions(){return J().getSupportedGraphFactExtensions()},getGraphFactCapabilities(){return J().getGraphFactCapabilities()},structuralSearch(e,t,n,r){return J().structuralSearch(e,t,n,r)},structuralSearchFiles(e){return J().structuralSearchFiles(e)},structuralSearchFilesDetailed(e){return J().structuralSearchFilesDetailed(e)},getSupportedStructuralExtensions(){return J().getSupportedStructuralExtensions()},validateRipgrepPattern(e,t,n){return J().validateRipgrepPattern(e,t,n)},getSemanticBoundaryOffsets(e,t){return J().getSemanticBoundaryOffsets(e,t)},jsonToYamlString(e,t){return J().jsonToYamlString(e,t)},parseRipgrepJson(e,t){return J().parseRipgrepJson(e,t)},searchRipgrep(e){return J().searchRipgrep(e)},queryFileSystem(e){return J().queryFileSystem(e)},extractMatchingLines(e,t,n){return J().extractMatchingLines(e,t,n)},filterPatch(e,t){return J().filterPatch(e,t)},computeLineDiff(e,t){return J().computeLineDiff(e,t)},charToByteOffset(e,t){return J().charToByteOffset(e,t)},byteToCharOffset(e,t){return J().byteToCharOffset(e,t)},byteSliceContent(e,t,n){return J().byteSliceContent(e,t,n)},sliceContent(e,t,n,r){return J().sliceContent(e,t,n,r)},get SIGNATURES_ONLY_HINT(){return J().SIGNATURES_ONLY_HINT}};import{RequestError as pp}from"octokit";var z={AUTH_REQUIRED:"AUTH_REQUIRED",RATE_LIMIT_PRIMARY:"RATE_LIMIT_PRIMARY",RATE_LIMIT_SECONDARY:"RATE_LIMIT_SECONDARY",FORBIDDEN_PERMISSIONS:"FORBIDDEN_PERMISSIONS",NOT_FOUND:"NOT_FOUND",INVALID_REQUEST:"INVALID_REQUEST",SERVER_UNAVAILABLE:"SERVER_UNAVAILABLE",NETWORK_CONNECTION_FAILED:"NETWORK_CONNECTION_FAILED",REQUEST_TIMEOUT:"REQUEST_TIMEOUT",UNKNOWN:"UNKNOWN"},ye={[z.AUTH_REQUIRED]:{message:"GitHub authentication required",suggestion:"TELL THE USER: Refresh your GitHub token! Run 'gh auth login' OR 'gh auth refresh' OR set a new GITHUB_TOKEN/GH_TOKEN environment variable",explanation:"API request requires authentication. GitHub APIs have different rate limits for authenticated (5000/hour) vs unauthenticated (60/hour) requests."},[z.RATE_LIMIT_PRIMARY]:{message:"GitHub API rate limit exceeded",messageWithTime:(e,t)=>`GitHub API rate limit exceeded. Resets at ${e.toISOString()} (in ${t} seconds)`,messageWithoutTime:"GitHub API rate limit exceeded. Reset time unavailable - check GitHub status or try again later",suggestion:"Set GITHUB_TOKEN for higher rate limits (5000/hour vs 60/hour)",explanation:"Primary rate limit tracks total API calls per hour. Authenticated users get 5000 requests/hour, unauthenticated get 60 requests/hour."},[z.RATE_LIMIT_SECONDARY]:{message:e=>`GitHub secondary rate limit triggered. Retry after ${e} seconds`,suggestion:"Reduce request frequency to avoid abuse detection",explanation:"Secondary rate limits prevent API abuse by limiting request frequency. Triggered by making too many requests too quickly, regardless of remaining quota.",fallbackRetryAfter:60},[z.FORBIDDEN_PERMISSIONS]:{message:"Access forbidden - insufficient permissions",suggestion:"Check repository permissions or authentication",suggestionWithScopes:e=>`Missing required scopes: ${e.join(", ")}. Run: gh auth refresh -s ${e.join(" -s ")}`,fallbackSuggestion:"Token may not have sufficient permissions for this operation",explanation:"GitHub tokens require specific OAuth scopes for different operations. Common scopes: repo (full repository access), read:org (organization access), gist (gist access)."},[z.NOT_FOUND]:{message:"Repository, resource, or path not found",explanation:"Resource not found or not accessible. Could be: incorrect path, deleted resource, private repository without access, wrong branch name."},[z.INVALID_REQUEST]:{message:"Invalid search query or request parameters",suggestion:"Check search syntax and parameter values",explanation:"Request was well-formed but contains invalid parameters. Common causes: invalid search syntax, parameters out of range, invalid filter combinations."},[z.SERVER_UNAVAILABLE]:{message:"GitHub API temporarily unavailable",suggestion:"Retry the request after a short delay",explanation:"GitHub servers are temporarily unavailable. Usually resolves quickly. Check https://www.githubstatus.com for service status."},[z.NETWORK_CONNECTION_FAILED]:{message:"Network connection failed",suggestion:"Check internet connection and GitHub API status",explanation:"Cannot establish connection to GitHub API. Check internet connectivity, DNS settings, and firewall/proxy configuration."},[z.REQUEST_TIMEOUT]:{message:"Request timeout",suggestion:"Retry the request or check network connectivity",explanation:"Request exceeded timeout limit. Could be slow network, large response size, or GitHub server delay."},[z.UNKNOWN]:{message:"Unknown error occurred",explanation:"An unexpected error occurred that does not match known error patterns."}},lp={401:z.AUTH_REQUIRED,403:z.FORBIDDEN_PERMISSIONS,404:z.NOT_FOUND,422:z.INVALID_REQUEST,502:z.SERVER_UNAVAILABLE,503:z.SERVER_UNAVAILABLE,504:z.SERVER_UNAVAILABLE},Xs={CONNECTION_FAILED:["ENOTFOUND","ECONNREFUSED"],TIMEOUT:["timeout"]},qs={SECONDARY:/\bsecondary rate\b/i,GRAPHQL_TYPE:"RATE_LIMITED"},ii={RESET_BUFFER_SECONDS:1,SECONDARY_FALLBACK_SECONDS:60};var LR=["cannot be searched","do not exist","does not exist","could not be found","cannot be found"];function nt(e){if(!(e instanceof pp)||e.status!==422)return!1;let t=e.response?.data?.errors;return!Array.isArray(t)||t.length===0?!1:t.some(n=>{let r=typeof n?.message=="string"?n.message.toLowerCase():"";return LR.some(o=>r.includes(o))})}function V(e){return e instanceof pp?AR(e):e instanceof Error?MR(e):{error:typeof e=="string"?e:ye[z.UNKNOWN].message,type:"unknown"}}function AR(e){let{status:t,message:n,response:r}=e;if(t===403)return _R(n,r);if(t===429)return kR(n,r);let o=lp[t];return o?DR(o,t):Sn(z.UNKNOWN,{error:n||ye[z.UNKNOWN].message,status:t})}function Js(e,t){let n=e?.[t],r=n===void 0?NaN:parseInt(String(n),10);return isNaN(r)?void 0:r}function kR(e,t){let n=t?.headers,r=Js(n,"retry-after"),o=Js(n,"x-ratelimit-reset"),i=Js(n,"x-ratelimit-remaining")??0,s=o?new Date(o*1e3):null,a=r??(s?Math.max(Math.ceil((s.getTime()-Date.now())/1e3)+ii.RESET_BUFFER_SECONDS,0):void 0);return _t({limit_type:"primary",retry_after_seconds:a,rate_limit_remaining:i,rate_limit_reset_ms:s?s.getTime():void 0,provider:"github"}),Sn(z.RATE_LIMIT_PRIMARY,{error:e||ye[z.RATE_LIMIT_PRIMARY].messageWithoutTime,status:429,rateLimitRemaining:i,rateLimitReset:s?s.getTime():void 0,retryAfter:a,scopesSuggestion:ye[z.RATE_LIMIT_PRIMARY].suggestion})}function _R(e,t){let n=t?.headers;if(qs.SECONDARY.test(e))return IR(n);let r=n?.["x-ratelimit-remaining"],o=vR(t);return r!==void 0&&String(r)==="0"||o?OR(n):FR(n)}function IR(e){let t=Number(e?.["retry-after"]),n=isNaN(t)?ii.SECONDARY_FALLBACK_SECONDS:t;return _t({limit_type:"secondary",retry_after_seconds:n,provider:"github"}),Sn(z.RATE_LIMIT_SECONDARY,{error:ye[z.RATE_LIMIT_SECONDARY].message(n),status:403,rateLimitRemaining:0,retryAfter:n,scopesSuggestion:ye[z.RATE_LIMIT_SECONDARY].suggestion})}function OR(e){let t=e?.["x-ratelimit-reset"],n=t?parseInt(String(t),10):NaN,r=isNaN(n)?null:new Date(n*1e3),o=r?Math.max(Math.ceil((r.getTime()-Date.now())/1e3)+ii.RESET_BUFFER_SECONDS,0):void 0,i=r?ye[z.RATE_LIMIT_PRIMARY].messageWithTime(r,o):ye[z.RATE_LIMIT_PRIMARY].messageWithoutTime;return _t({limit_type:"primary",retry_after_seconds:o,rate_limit_remaining:0,rate_limit_reset_ms:r?r.getTime():void 0,provider:"github"}),Sn(z.RATE_LIMIT_PRIMARY,{error:i,status:403,rateLimitRemaining:0,rateLimitReset:r?r.getTime():void 0,retryAfter:o,scopesSuggestion:ye[z.RATE_LIMIT_PRIMARY].suggestion})}function FR(e){let t=e?.["x-accepted-oauth-scopes"],n=e?.["x-oauth-scopes"],r=ye[z.FORBIDDEN_PERMISSIONS].suggestion;return t&&n&&(r=NR(String(t),String(n))),Sn(z.FORBIDDEN_PERMISSIONS,{error:ye[z.FORBIDDEN_PERMISSIONS].message,status:403,scopesSuggestion:r})}function vR(e){return e?.data?.errors?.some(n=>n.type===qs.GRAPHQL_TYPE)??!1}function DR(e,t){let n=ye[e];return Sn(e,{error:n.message,status:t,..."suggestion"in n&&{scopesSuggestion:n.suggestion}})}function MR(e){return Xs.CONNECTION_FAILED.some(t=>e.message.includes(t))?{error:ye[z.NETWORK_CONNECTION_FAILED].message,type:"network",scopesSuggestion:ye[z.NETWORK_CONNECTION_FAILED].suggestion}:Xs.TIMEOUT.some(t=>e.message.includes(t))?{error:ye[z.REQUEST_TIMEOUT].message,type:"network",scopesSuggestion:ye[z.REQUEST_TIMEOUT].suggestion}:{error:e.message,type:"unknown"}}function Sn(e,t){return{type:"http",...t}}function NR(e,t){let n=e.split(",").map(i=>i.trim()).filter(Boolean),r=t.split(",").map(i=>i.trim()).filter(Boolean),o=n.filter(i=>!r.includes(i));return o.length>0?ye[z.FORBIDDEN_PERMISSIONS].suggestionWithScopes(o):ye[z.FORBIDDEN_PERMISSIONS].fallbackSuggestion}function dp(e){return`user:${e}`}var GR=/[@/]/,HR=/^[A-Za-z0-9_-]+$/;function Zs(e){return e.startsWith('"')||HR.test(e)?e:`"${e.replace(/"/g,'\\"')}"`}var dt=class{queryParts=[];addOwnerRepo(t){if(t.owner&&t.repo){let n=Array.isArray(t.owner)?t.owner:[t.owner],r=Array.isArray(t.repo)?t.repo:[t.repo];n.forEach(o=>{r.forEach(i=>{this.queryParts.push(`repo:${o}/${i}`)})})}else t.owner&&(Array.isArray(t.owner)?t.owner:[t.owner]).forEach(r=>{this.queryParts.push(dp(r))});return this}addDateFilters(t){return Object.entries({created:"created",updated:"updated","author-date":"author-date","committer-date":"committer-date","merged-at":"merged",closed:"closed"}).forEach(([r,o])=>{let i=t[r];i&&this.queryParts.push(`${o}:${i}`)}),this}addArrayFilter(t,n,r=!1){return t&&t!==null&&(Array.isArray(t)?t:[t]).forEach(i=>{let s=r?`"${i}"`:i;this.queryParts.push(`${n}:${s}`)}),this}addBooleanFilter(t,n,r){return t===!0?this.queryParts.push(n):t===!1&&this.queryParts.push(r),this}addSimpleFilter(t,n){return t!=null&&this.queryParts.push(`${n}:${t}`),this}addQuotedFilter(t,n){if(t!=null){let o=GR.test(t)&&!t.startsWith('"')?`"${t}"`:t;this.queryParts.push(`${n}:${o}`)}return this}addEngagementFilters(t){return this.addSimpleFilter(t.comments,"comments"),this.addSimpleFilter(t.reactions,"reactions"),this}addOrganizationFilters(t){return this.addArrayFilter(t.label,"label",!0),t.milestone&&this.queryParts.push(`milestone:"${t.milestone}"`),this}build(){return this.queryParts.join(" ").trim()}};var BR=/(?:^|\/)([^/]+\.[A-Za-z][A-Za-z0-9]{0,9})$/,ea=class extends dt{addQueryTerms(t){if(Array.isArray(t.keywords)&&t.keywords.length>0){let n=t.keywords.filter(r=>r&&r.trim());n.length>0&&this.queryParts.push(...n.map(Zs))}return this}addSearchFilters(t){let n=t.path,r=t.filename,o=typeof n=="string"&&!r?n.match(BR):null;return o&&(r=o[1],n=n.slice(0,o.index)||void 0),this.addSimpleFilter(r,"filename"),this.addSimpleFilter(t.extension,"extension"),this.addQuotedFilter(n,"path"),t.language&&this.queryParts.push(`language:${t.language}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="file"?this.queryParts.push("in:file"):r==="path"&&this.queryParts.push("in:path")}),this}},ta=class extends dt{addQueryTerms(t){return Array.isArray(t.keywords)&&t.keywords.length>0&&this.queryParts.push(...t.keywords.map(Zs)),this}addRepoFilters(t){this.addArrayFilter(t.topicsToSearch,"topic"),this.addSimpleFilter(t.stars,"stars"),t.updated&&this.queryParts.push(`pushed:${t.updated}`),t.language&&this.queryParts.push(`language:${t.language}`);let n=t;return typeof n.forks=="string"&&this.queryParts.push(`forks:${n.forks}`),typeof n.license=="string"&&this.queryParts.push(`license:${n.license}`),typeof n.goodFirstIssues=="string"&&this.queryParts.push(`good-first-issues:${n.goodFirstIssues}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="name"?this.queryParts.push("in:name"):r==="description"?this.queryParts.push("in:description"):r==="readme"&&this.queryParts.push("in:readme")}),this}addQualityFilters(t){let n=t,r=n?.archived;this.queryParts.push(r===!0?"archived:true":"is:not-archived");let o=n?.visibility;return o==="public"?this.queryParts.push("is:public"):o==="private"&&this.queryParts.push("is:private"),this}};function na(e){return new ea().addQueryTerms(e).addSearchFilters(e).addOwnerRepo(e).addMatchFilters(e).build()}function ra(e){return new ta().addQueryTerms(e).addOwnerRepo(e).addRepoFilters(e).addMatchFilters(e).addQualityFilters(e).build()}var oa=class extends dt{addBasicFilters(t){return t.query&&t.query.trim()&&(this.queryParts.push(t.query.trim()),t.match&&t.match.length>0&&this.queryParts.push(`in:${t.match.join(",")}`)),this.queryParts.push("is:pr"),this}addStateFilters(t){return t.merged===!0&&t.state==="closed"||this.addSimpleFilter(t.state,"is"),this.addBooleanFilter(t.draft,"is:draft","-is:draft"),this.addBooleanFilter(t.merged,"is:merged","is:unmerged"),this}addUserFilters(t){return this.addSimpleFilter(t.author,"author"),this.addSimpleFilter(t.assignee,"assignee"),this.addSimpleFilter(t.mentions,"mentions"),this.addSimpleFilter(t.commenter,"commenter"),this.addSimpleFilter(t["reviewed-by"],"reviewed-by"),this.addSimpleFilter(t["review-requested"],"review-requested"),this}addBranchFilters(t){return this.addSimpleFilter(t.head,"head"),this.addSimpleFilter(t.base,"base"),this}addReviewFilters(t){return t.review&&this.queryParts.push(`review:${t.review}`),this}addNegativeFilters(t){return t.locked===!0?this.queryParts.push("is:locked"):t.locked===!1&&this.queryParts.push("is:unlocked"),t.visibility==="public"?this.queryParts.push("is:public"):t.visibility==="private"&&this.queryParts.push("is:private"),t.project&&this.queryParts.push(`project:${t.project}`),this}addMiscFilters(t){return this.queryParts.push(t.archived===!0?"archived:true":"archived:false"),t.language&&this.queryParts.push(`language:${t.language}`),t.checks&&this.queryParts.push(`status:${t.checks}`),this}};function ia(e){return new oa().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addBranchFilters(e).addDateFilters(e).addEngagementFilters(e).addReviewFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function sa(e){return e.draft!==void 0||e.author!==void 0||e.assignee!==void 0||typeof e.query=="string"&&e.query.trim().length>0||e.label&&e.label.length>0||e.mentions!==void 0||e.commenter!==void 0||e["reviewed-by"]!==void 0||e["review-requested"]!==void 0||e.reactions!==void 0||e.comments!==void 0||e.state==="merged"||e.milestone!==void 0||e.language!==void 0||e.checks!==void 0||e.review!==void 0||e.locked!==void 0||e.visibility!==void 0||e.project!==void 0||e.created!==void 0||e.updated!==void 0||e["merged-at"]!==void 0||e.closed!==void 0||e.merged!==void 0||e.match!==void 0&&e.match.length>0||e.sort==="comments"||e.sort==="reactions"||Array.isArray(e.owner)||Array.isArray(e.repo)}var aa=class extends dt{addBasicFilters(t){return t.query&&t.query.trim()&&(this.queryParts.push(t.query.trim()),t.match&&t.match.length>0&&this.queryParts.push(`in:${t.match.join(",")}`)),this.queryParts.push("is:issue"),this}addStateFilters(t){return(t.state==="open"||t.state==="closed")&&this.addSimpleFilter(t.state,"is"),this}addUserFilters(t){return this.addSimpleFilter(t.author,"author"),this.addSimpleFilter(t.assignee,"assignee"),this.addSimpleFilter(t.mentions,"mentions"),this.addSimpleFilter(t.commenter,"commenter"),this}addNegativeFilters(t){return t.locked===!0?this.queryParts.push("is:locked"):t.locked===!1&&this.queryParts.push("is:unlocked"),t.visibility==="public"?this.queryParts.push("is:public"):t.visibility==="private"&&this.queryParts.push("is:private"),this}addMiscFilters(t){return this.queryParts.push(t.archived===!0?"archived:true":"archived:false"),this}};function ca(e){return new aa().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addDateFilters(e).addEngagementFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function ua(e){return typeof e.query=="string"&&e.query.trim().length>0||e.author!==void 0||e.assignee!==void 0||e.label!==void 0&&(Array.isArray(e.label),e.label.length>0)||e.mentions!==void 0||e.commenter!==void 0||e.reactions!==void 0||e.comments!==void 0||e.milestone!==void 0||e.locked!==void 0||e.visibility!==void 0||e.created!==void 0||e.updated!==void 0||e.closed!==void 0||e.match!==void 0&&e.match.length>0||e.sort==="comments"||e.sort==="reactions"||Array.isArray(e.owner)||Array.isArray(e.repo)}import UR from"crypto";var QR="v2",$R=new Set([]);function jR(e){if(e===null||typeof e!="object"||Array.isArray(e))return e;let t=e,n=!1,r={};for(let o of Object.keys(t)){if($R.has(o)){n=!0;continue}r[o]=t[o]}return n?r:e}function ce(e,t,n){let r=la(jR(t)),o=n?`${n}:${r}`:r,i=UR.createHash("sha256").update(o).digest("hex");return`${QR}-${e}:${i}`}function la(e,t=new WeakSet){return e===null?"null":e===void 0?"undefined":typeof e!="object"?String(e):t.has(e)?'"[Circular]"':(t.add(e),Array.isArray(e)?`[${e.map(o=>la(o,t)).join(",")}]`:`{${Object.keys(e).sort().map(o=>{let i=e[o];return`"${o}":${la(i,t)}`}).join(",")}}`)}import zR from"node-cache";var WR=300*1e3,Te=new zR({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1}),ue={hits:0,misses:0,sets:0,totalKeys:0,lastReset:new Date},mp={"gh-api-code":3600,"gh-api-repos":7200,"gh-api-prs":1800,"gh-api-issues":1800,"gh-api-history":1800,"gh-api-releases":3600,"gh-api-file-content":300,"gh-repo-structure-api":7200,"github-user":900,"npm-search":14400,default:86400},He=new Map;function VR(e){return e.match(/^v\d+-([^:]+):/)?.[1]}function KR(e){return e.startsWith("gh-api-")||e.startsWith("gh-repo-")||e==="github-user"}function yr(e){let t=VR(e);if(!(!t||!KR(t)))try{ni(t,1)}catch{}}function si(){let e=Date.now();for(let[t,n]of He.entries())e-n.startedAt>WR&&He.delete(t)}function Rr(e){return mp[e]||mp.default}function Sr(e,t,n){try{return Te.set(e,t,n),ue.sets++,ue.totalKeys=Te.keys().length,!0}catch{try{let r=Te.keys();for(let o of r)Te.get(o);return Te.set(e,t,n),ue.sets++,ue.totalKeys=Te.keys().length,!0}catch{return!1}}}async function he(e,t,n={}){if(n.skipCache)return await t();if(!n.forceRefresh)try{let i=Te.get(e);if(i!==void 0)return ue.hits++,yr(e),i}catch{}si();let r=He.get(e);if(r)return r.promise;let o=(async()=>{try{let i=await t();if(n.forceRefresh||ue.misses++,(n.shouldCache??(()=>!0))(i)){let a=n.ttl;if(!a){let u=e.match(/^v\d+-([^:]+):/)?.[1]??"default";a=Rr(u)}Sr(e,i,a)}return i}finally{He.delete(e)}})();return He.set(e,{promise:o,startedAt:Date.now()}),o}import YR from"node-cache";var br=new YR({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1});async function ai(e,t,n={}){if(n.skipCache)return(await t({})).value;if(!n.forceRefresh)try{let i=Te.get(e);if(i!==void 0)return ue.hits++,yr(e),i}catch{}si();let r=He.get(e);if(r)return r.promise;let o=(async()=>{try{let i=n.forceRefresh?void 0:br.get(e),s=await t({ifNoneMatch:!n.forceRefresh&&i?.etag?i.etag:void 0});if(s.notModified&&i){ue.hits++,yr(e);let c=n.ttl;if(!c){let l=e.match(/^v\d+-([^:]+):/)?.[1]??"default";c=Rr(l)}return Sr(e,i.data,c),i.data}if(n.forceRefresh||ue.misses++,(n.shouldCache??(()=>!0))(s.value)){let c=n.ttl;if(!c){let l=e.match(/^v\d+-([^:]+):/)?.[1]??"default";c=Rr(l)}Sr(e,s.value,c),br.set(e,{data:s.value,etag:s.etag})}return s.value}finally{He.delete(e)}})();return He.set(e,{promise:o,startedAt:Date.now()}),o}function H_(){Te.flushAll(),br.flushAll(),He.clear(),ue.hits=0,ue.misses=0,ue.sets=0,ue.totalKeys=0,ue.lastReset=new Date}function Ot(e){let t=Te.keys(),n=0;for(let r of t){let i=r.match(/^v\d+-([^:]+):/)?.[1];!i||!i.startsWith(e)||Te.del(r)>0&&n++}return n>0&&(ue.totalKeys=Te.keys().length),n}function B_(){return Ot("local-")}function U_(){return Ot("lsp-")}function Q_(){let e=0;return e+=Ot("gh-api-"),e+=Ot("bb-api-"),e+=Ot("gh-repo-"),e+=Ot("bb-repo-"),e+=Ot("github-user"),e+=Ot("npm-search"),br.flushAll(),e}function $_(){let e=ue.hits+ue.misses;return{...ue,hitRate:e>0?ue.hits/e*100:0,cacheSize:Te.keys().length}}import{DISCOVERY_IGNORED_FILE_EXTENSIONS as J_,DISCOVERY_IGNORED_FILE_NAMES as Z_,DISCOVERY_IGNORED_FOLDER_NAMES as eI,getDiscoveryExtension as fp,shouldIgnoreDiscoveryDir as Cr,shouldIgnoreDiscoveryFile as bn}from"@octocodeai/octocode-engine/security";var hp=Symbol.for("octocode.rawResponseChars");function N(e){if(typeof e=="string")return e.length;try{return JSON.stringify(e)?.length??0}catch{return String(e).length}}function gp(e){if(!(typeof e!="number"||!Number.isFinite(e)))return Math.max(0,e)}function $(e,t){let n=typeof t=="number"?gp(t):N(t);if(n===void 0)return e;try{Object.defineProperty(e,hp,{value:n,enumerable:!1,configurable:!0})}catch{}return e}function ne(e){if(!(typeof e!="object"||e===null))return gp(e[hp])}function Cn(e){let t={};if(!e||typeof e!="object")return t;for(let[n,r]of Object.entries(e))typeof r=="string"?t[n]=r:typeof r=="number"&&Number.isFinite(r)&&(t[n]=String(r));return t}function yp(e){let t=Cn(e),n=Number(t["x-ratelimit-remaining"]),r=Number(t["x-ratelimit-limit"]),o=Number(t["x-ratelimit-reset"]);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=0||n>Math.max(3,r*.15))return;let i=Number.isFinite(o)?Math.max(0,Math.round((o*1e3-Date.now())/1e3)):void 0;return`GitHub rate limit low: ${n}/${r} remaining${i!==void 0?` (resets in ~${i}s)`:""} \u2014 pace or narrow further requests.`}function xn(e){let t=Cn(e),n=t.etag||t.ETag||t.Etag||Object.entries(t).find(([r])=>r.toLowerCase()==="etag")?.[1];return n&&n.length>0?n:void 0}function Rp(e,t,n){let r=[],o=0;for(let[i,s]of t){let a=e.slice(i,s);if(!a)continue;let c=n.indexOf(a,o);c===-1&&(c=n.indexOf(a),c===-1)||(r.push([c,c+a.length]),o=c+a.length)}return r}var Sp=30;async function bp(e,t,n){let r=await fe(t),o=ce("gh-api-code",{keywords:e.keywords,owner:e.owner,repo:e.repo,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,auth:r},n);return await he(o,async()=>await qR(e,t),{shouldCache:s=>"data"in s&&!s.error})}async function qR(e,t){try{let n=await Q(t);if(e.keywords&&e.keywords.length>0&&e.keywords.filter(h=>h&&h.trim()).length===0)return{error:Ee.QUERY_EMPTY.message,type:"http",status:400};let r=na(e);if(!r.trim())return{error:Ee.QUERY_EMPTY.message,type:"http",status:400};let o=Math.min(typeof e.limit=="number"?e.limit:Sp,100),i=e.page||1,s={q:r,per_page:o,page:i,headers:{Accept:"application/vnd.github.v3.text-match+json"}},a=await n.rest.search.code(s),c=await JR(a.data.items,a.data.total_count),u=a.data.incomplete_results===!0,l=c.total_count,p=Math.min(l,1e3),m=Math.min(Math.ceil(p/o),10),d=Math.min(i,Math.max(1,m)),f=d<m,g=Math.min(p,m*o);return{data:{total_count:c.total_count,items:c.items,...u?{incompleteResults:!0}:{},repository:c.repository,matchLocations:c.matchLocations,minified:c.minified,minificationFailed:c.minificationFailed,minificationTypes:c.minificationTypes,_researchContext:c._researchContext,pagination:{currentPage:d,totalPages:m,perPage:o,totalMatches:p,reportedTotalMatches:l,reachableTotalMatches:g,totalMatchesKind:"reported",totalMatchesCapped:l>p,hasMore:f,...f?{nextPage:d+1}:{},uniqueFileCount:c._researchContext?.uniqueFileCount}},status:200,headers:Cn(a.headers),rawResponseChars:N(a.data)}}catch(n){if(nt(n)){let o=Math.min(typeof e.limit=="number"?e.limit:Sp,100);return{data:{total_count:0,items:[],nonExistentScope:!0,pagination:{currentPage:e.page||1,totalPages:0,perPage:o,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return V(n)}}async function JR(e,t){let n=ZR(e),r=new Set,o=!1,i=[],s=new Set,a=e.filter(d=>!bn(d.path)),c=0,u=0,l=await Promise.allSettled(a.map(async d=>{s.add(d.path);let f=[],g=await Promise.allSettled((d.text_matches||[]).map(async C=>{let P=C.fragment,T=XR.sanitizeContent(P||"",d.path);P=T.content,T.hasSecrets&&r.add(`Secrets detected in ${d.path}: ${T.secretsDetected.join(", ")}`),T.warnings.length>0&&T.warnings.forEach(k=>r.add(`${d.path}: ${k}`));try{let k=await O.minifyContent(P||"",d.path);P=k.content,k.failed?o=!0:k.type!=="failed"&&(f.push(k.type),i.push(k.type))}catch{o=!0}let L=C.matches?.flatMap(k=>Array.isArray(k.indices)&&k.indices.length>=2?[[k.indices[0],k.indices[1]]]:[])||[];return{context:P||"",positions:Rp(C.fragment||"",L,P||"")}})),R=g.filter(C=>C.status==="fulfilled").map(C=>C.value),h=g.filter(C=>C.status==="rejected").length;h>0&&(u+=h);let y=d,S=Array.from(new Set(f));return{path:d.path,matches:R,url:d.html_url,repository:{nameWithOwner:d.repository.full_name,url:d.repository.url,pushedAt:d.repository.pushed_at||void 0},...y.last_modified_at&&{lastModifiedAt:y.last_modified_at},...S.length>0&&{minificationType:S.join(",")}}})),p=l.filter(d=>d.status==="fulfilled").map(d=>d.value);c=l.filter(d=>d.status==="rejected").length;let m={items:p,total_count:t!==void 0?t:a.length,_researchContext:{uniqueFileCount:s.size,repositoryContext:n?(()=>{let d=n.full_name.split("/");return d.length===2&&d[0]&&d[1]?{owner:d[0],repo:d[1],branch:n.default_branch||void 0}:void 0})():void 0}};return n&&(m.repository={name:n.full_name,url:n.url,createdAt:n.created_at||void 0,updatedAt:n.updated_at||void 0,pushedAt:n.pushed_at||void 0}),c>0&&r.add(`${c} item(s) dropped due to processing errors`),u>0&&r.add(`${u} match(es) dropped due to processing errors`),r.size>0&&(m.matchLocations=Array.from(r)),m.minified=!o,m.minificationFailed=o,i.length>0&&(m.minificationTypes=Array.from(new Set(i))),m}function ZR(e){if(e.length===0)return null;let t=e[0]?.repository;return t&&e.every(r=>r.repository.full_name===t.full_name)?t:null}import{readdirSync as eS,statSync as Cp}from"node:fs";import{join as tS}from"node:path";var xr=50,ci=5*1024*1024,pa=300*1024,xp=5,nS=1e4,Pp=new Set([".png",".jpg",".jpeg",".gif",".bmp",".ico",".svg",".webp",".mp3",".mp4",".wav",".avi",".mov",".mkv",".webm",".zip",".tar",".gz",".bz2",".7z",".rar",".xz",".exe",".dll",".so",".dylib",".bin",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".woff",".woff2",".ttf",".eot",".otf",".pyc",".class",".o",".obj",".lock",".min.js",".min.css"]),da={maxDirectoryFiles:xr,maxTotalSize:ci,maxFileSize:pa};function ma(){return{nonFile:0,missingDownloadUrl:0,oversized:0,binary:0,fileLimit:0,fetchFailed:0,totalSizeLimit:0,pathTraversal:0}}function wp(e){return Object.values(e).every(t=>t===0)}function fa(e,t){if(!t&&e)return["Cannot verify completeness against remote tree; use forceRefresh or ghCloneRepo if completeness matters."];if(!e)return["Directory materialization is partial; inspect skipped counts or use ghCloneRepo before repo-wide reachability/dead-code conclusions."]}async function Tp(e,t,n){let r=[];for(let o=0;o<e.length;o+=t){let i=e.slice(o,o+t),s=await Promise.allSettled(i.map(async a=>{let c=await oS(a.download_url,n);return{entry:a,content:c}}));for(let a of s)a.status==="fulfilled"&&r.push(a.value)}return r}var rS=new Set(["raw.githubusercontent.com","objects.githubusercontent.com","github.com"]);async function oS(e,t){try{let o=new URL(e);if(!rS.has(o.hostname))throw new Error(`Blocked fetch to unexpected host: ${o.hostname}. Only GitHub download URLs are allowed.`)}catch(o){throw o instanceof TypeError?new Error(`Invalid download URL: ${e}`):o}let n=new AbortController,r=setTimeout(()=>n.abort(),nS);try{let o={"User-Agent":"octocode-mcp"};t&&(o.Authorization=`token ${t}`);let i=await fetch(e,{signal:n.signal,headers:o});if(!i.ok)throw new Error(`HTTP ${i.status} fetching ${e}`);return await i.text()}finally{clearTimeout(r)}}function Ep(e,t){let n=[],r=0;function o(i){let s;try{s=eS(i)}catch{return}for(let a of s){if(a.startsWith("."))continue;let c=tS(i,a);try{let u=Cp(c);if(u.isDirectory())o(c);else if(u.isFile()){let l=c.substring(t.length+1);r+=u.size,n.push({path:l,size:u.size,type:"file"})}}catch{}}}return o(e),{files:n,fileCount:n.length,totalSize:r}}function Lp(e){try{return Cp(e).size}catch{return 0}}import{writeFileSync as wS,mkdirSync as Dp,existsSync as ya,rmSync as TS}from"node:fs";import{join as Mp,dirname as ES,resolve as Np,sep as Gp}from"node:path";import{existsSync as Lr,readFileSync as aS,writeFileSync as cS,mkdirSync as uS,rmSync as Er,readdirSync as lS,statSync as pS}from"node:fs";import{join as Ft}from"node:path";import{join as ui}from"node:path";import{createHash as Ap}from"node:crypto";function iS(e){return Pr(e)}function Pr(e){return ui(e,"tmp","clone")}function li(e){return ui(e,"tmp","tree")}function sS(e){return e?`__sp_${Ap("sha256").update(e).digest("hex").substring(0,6)}`:""}function kp(e){if(!/[\\/]/.test(e))return e;let t=Ap("sha256").update(e).digest("hex").substring(0,8);return`${e.replace(/[\\/]/g,"_")}__b_${t}`}function ha(e,t,n,r,o){let i=`${kp(r)}${sS(o)}`;return ui(Pr(e),t,n,i)}function wr(e,t,n,r){return ui(li(e),t,n,kp(r))}var dS=1440*60*1e3,mS=600*1e3,fS=2*1024*1024*1024,hS=50,Ip=".octocode-clone-meta.json",Pn=null;function gS(e){return typeof e=="object"&&e!==null}function yS(e){if(!gS(e)||typeof e.clonedAt!="string"||typeof e.expiresAt!="string"||typeof e.owner!="string"||typeof e.repo!="string"||typeof e.branch!="string"||e.source!=="clone"&&e.source!=="directoryFetch"&&e.source!=="treeFetch")return null;let t={clonedAt:e.clonedAt,expiresAt:e.expiresAt,owner:e.owner,repo:e.repo,branch:e.branch,source:e.source};return typeof e.sparsePath=="string"&&(t.sparsePath=e.sparsePath),typeof e.sizeBytes=="number"&&(t.sizeBytes=e.sizeBytes),typeof e.commitSha=="string"&&e.commitSha.length===40&&(t.commitSha=e.commitSha),t}function ga(e){let t=Ft(e,Ip);if(!Lr(t))return null;try{return yS(JSON.parse(aS(t,"utf-8")))}catch{return null}}function Tn(e,t){try{cS(Ft(e,Ip),JSON.stringify(t,null,2),"utf-8")}catch{}}function Op(e){return Date.now()<new Date(e.expiresAt).getTime()}function En(e){let t=ga(e);return t?Op(t)?Lr(e)?{hit:!0,meta:t}:{hit:!1}:{hit:!1}:{hit:!1}}function RS(){let e=process.env.OCTOCODE_CACHE_TTL_MS;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return dS}function SS(){let e=process.env.OCTOCODE_MAX_CACHE_SIZE;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return fS}function bS(){let e=process.env.OCTOCODE_MAX_CLONES;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return Math.floor(t)}return hS}function Ln(e,t,n,r,o,i,s){let a=new Date;return{clonedAt:a.toISOString(),expiresAt:new Date(a.getTime()+RS()).toISOString(),owner:e,repo:t,branch:n,source:r,...o?{sparsePath:o}:{},...i!=null?{sizeBytes:i}:{},...s?{commitSha:s}:{}}}function vt(e){let t=Ft(e,"..");try{Lr(t)||uS(t,{recursive:!0,mode:448})}catch(n){throw new Error(`Failed to create clone parent directory '${t}': ${n instanceof Error?n.message:String(n)}`)}}function di(e){try{Lr(e)&&Er(e,{recursive:!0,force:!0})}catch{}}function Tr(e){try{return pS(e).isDirectory()}catch{return!1}}function Xt(e){try{return lS(e)}catch{return[]}}function*Fp(e){for(let t of Xt(e)){let n=Ft(e,t);if(Tr(n))for(let r of Xt(n)){let o=Ft(n,r);if(Tr(o))for(let i of Xt(o)){let s=Ft(o,i);Tr(s)&&(yield s)}}}}function _p(e){for(let t of[...Xt(e)]){let n=Ft(e,t);if(Tr(n)){for(let r of[...Xt(n)]){let o=Ft(n,r);if(Tr(o)&&Xt(o).length===0)try{Er(o,{recursive:!0,force:!0})}catch{}}if(Xt(n).length===0)try{Er(n,{recursive:!0,force:!0})}catch{}}}}function CS(e){let t=0;for(let n of Fp(e))try{let r=ga(n);(!r||!Op(r))&&(Er(n,{recursive:!0,force:!0}),t++)}catch{}return t}function xS(e){let t=[];for(let n of Fp(e)){let r=ga(n);if(!r)continue;let o=Number.isNaN(Date.parse(r.clonedAt))?0:Date.parse(r.clonedAt);t.push({branchDir:n,clonedAtMs:o,sizeBytes:r.sizeBytes??hr(n)})}return t}function PS(e,t,n){let r=e.reduce((s,a)=>s+a.sizeBytes,0),o=e.length;if(r<=t&&o<=n)return 0;e.sort((s,a)=>s.clonedAtMs-a.clonedAtMs);let i=0;for(let s of e){if(r<=t&&o<=n)break;try{Er(s.branchDir,{recursive:!0,force:!0}),i++,r-=s.sizeBytes,o-=1}catch{}}return i}function vp(e){if(!Lr(e))return 0;let t=0;try{t+=CS(e)}catch{return t}_p(e);let n=PS(xS(e),SS(),bS());return t+=n,n>0&&_p(e),t}function pi(e){return vp(Pr(e))}function wn(e){return vp(li(e))}function LI(e){Pn||(pi(e),wn(e),Pn=setInterval(()=>{pi(e),wn(e)},mS),Pn.unref())}function AI(){Pn&&(clearInterval(Pn),Pn=null)}async function Ra(e,t,n,r,o,i=!1){let s=zt(),a=wr(s,e,t,r),c=Np(Mp(a,n));if(!c.startsWith(a+Gp)&&c!==a)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let u=En(a);if(u.hit&&!i&&ya(c)){let b=Ep(c,a),A=ma();return{localPath:c,repoRoot:a,files:b.files,fileCount:b.fileCount,totalSize:b.totalSize,complete:!0,verified:!1,...u.meta.commitSha?{commitSha:u.meta.commitSha}:{},directoryEntryCount:b.fileCount,eligibleFileCount:b.fileCount,savedFileCount:b.fileCount,skipped:A,limits:da,warnings:fa(!0,!1),cached:!0,expiresAt:u.meta.expiresAt,owner:e,repo:t,branch:r,directoryPath:n}}let l=await Q(o),p;try{p=(await l.rest.repos.getBranch({owner:e,repo:t,branch:r})).data.commit.sha}catch{}let{data:m}=await l.rest.repos.getContent({owner:e,repo:t,path:n,ref:r});if(!Array.isArray(m))throw new Error(`Path "${n}" is not a directory. Use type "file" to fetch file content.`);let d=m,f=ma(),g=[];for(let b of d){if(b.type!=="file"){f.nonFile+=1;continue}if(!b.download_url){f.missingDownloadUrl+=1;continue}if(b.size>pa){f.oversized+=1;continue}let A=fp(b.name,{lowercase:!0,leadingDot:!0});if(Pp.has(A)){f.binary+=1;continue}g.push(b)}f.fileLimit=Math.max(0,g.length-xr);let R=g.slice(0,xr),h=o?.token,y=await Tp(R,xp,h);f.fetchFailed=R.length-y.length;let S=0,C=[];for(let b=0;b<y.length;b+=1){let{entry:A,content:M}=y[b];if(S+M.length>ci){f.totalSizeLimit=y.length-b;break}S+=M.length,C.push({entry:A,content:M})}wn(s),vt(a),ya(c)&&TS(c,{recursive:!0,force:!0}),Dp(c,{recursive:!0,mode:448});let P=[];for(let{entry:b,content:A}of C){let M=Np(Mp(a,b.path));if(!M.startsWith(a+Gp)){f.pathTraversal+=1;continue}let B=ES(M);ya(B)||Dp(B,{recursive:!0,mode:448}),wS(M,A,"utf-8"),P.push({path:b.path,size:A.length,type:"file"})}let T=Ln(e,t,r,"treeFetch",void 0,void 0,p);Tn(a,T);let L=wp(f),k=L,w=f.nonFile>0;return{localPath:c,repoRoot:a,files:P,fileCount:P.length,totalSize:S,complete:L,verified:k,...p?{commitSha:p}:{},...w?{hasSubdirectories:!0}:{},directoryEntryCount:d.length,eligibleFileCount:g.length,savedFileCount:P.length,skipped:f,limits:da,warnings:fa(L,k),cached:!1,expiresAt:T.expiresAt,owner:e,repo:t,branch:r,directoryPath:n}}import{writeFileSync as vS,mkdirSync as DS,existsSync as Up}from"node:fs";import{join as MS,dirname as NS,resolve as GS,sep as HS}from"node:path";import{RequestError as Ta}from"octokit";import{completeMetadata as Sa}from"@octocodeai/octocode-core";var x=new Proxy({},{get(e,t){return Sa.toolNames[t]},ownKeys(){return Object.keys(Sa.toolNames)},getOwnPropertyDescriptor(e,t){let n=Sa.toolNames;if(t in n)return{enumerable:!0,configurable:!0,value:n[t]}}});import{completeMetadata as LS}from"@octocodeai/octocode-core";var ba=new Proxy({},{get(e,t){return LS.tools[t]?.description??""}});import{completeMetadata as AS}from"@octocodeai/octocode-core";function Ca(e){return Object.prototype.hasOwnProperty.call(AS.tools,e)}import{completeMetadata as kS}from"@octocodeai/octocode-core";function xa(){return kS.baseSchema}var _S=new Proxy({},{get(e,t){return xa()[t]},ownKeys(){return Array.from(new Set([...Reflect.ownKeys(xa())]))},getOwnPropertyDescriptor(e,t){let n=xa();if(t in n)return{enumerable:!0,configurable:!0,value:n[t]}}});function Pa(e,t){let n=e.split("/").pop()||"",r=t.some(i=>{let s=i.split("/").pop()||"";return s.toLowerCase()===n.toLowerCase()&&s!==n}),o=[];return r&&o.push("GitHub Contents API paths are case-sensitive. Verify exact file casing with ghViewRepoStructure."),o.push(`Did you mean: ${t.join(", ")}?`),o}async function wa(e,t,n,r,o){try{let i=r.split("/").slice(0,-1).join("/"),s=r.split("/").pop();if(!s)return[];let a=await e.rest.repos.getContent({owner:t,repo:n,path:i,ref:o});if(!Array.isArray(a.data))return[];let c=a.data,u=[],l=c.find(d=>d.name.toLowerCase()===s.toLowerCase());l&&u.push(l.path);let p=s.replace(/\.[^/.]+$/,"");return c.filter(d=>d.name===s?!1:!!d.name.startsWith(p+".")).forEach(d=>u.push(d.path)),u.length===0&&p.length>=3&&c.filter(f=>{let g=f.name.replace(/\.[^/.]+$/,"");return g!==p&&g.length>=3&&(p.startsWith(g)||g.startsWith(p))}).forEach(f=>u.push(f.path)),Array.from(new Set(u)).slice(0,3)}catch{return[]}}async function IS(e,t,n,r,o,i,s,a){let c=await Ae(r,o,a);if((s==="main"||s==="master")&&s!==c)try{return{result:await e.rest.repos.getContent({...n,ref:c}),actualBranch:c}}catch{throw t}let l=V(t),p=s===c?void 0:`Branch '${s}' not found. Default branch is '${c}'. Ask user: Do you want to get the file from '${c}' instead?`,m=await wa(e,r,o,i,s||c);return m.length>0&&(l.hints=[...l.hints||[],...Pa(i,m)]),{...l,...p&&{scopesSuggestion:p}}}async function OS(e,t,n,r,o,i){let s=V(t),a=await wa(e,n,r,o,i||"main");return a.length>0&&(s.hints=[...s.hints||[],...Pa(o,a)]),s}async function Hp(e,t){let n=e.replace(/\s/g,"");if(!n)return{error:Ct.FILE_EMPTY.message,type:"unknown",status:404};try{let r=Buffer.from(n,"base64");return r.indexOf(0)!==-1?{error:Ct.BINARY_FILE.message,type:"unknown",status:415}:{data:r.toString("utf-8"),status:200}}catch{return{error:Ct.DECODE_FAILED.message,type:"unknown",status:422}}}async function Bp(e,t,n,r,o){try{let i=await e.rest.git.getBlob({owner:t,repo:n,file_sha:r}),{content:s,encoding:a}=i.data;return a==="base64"?Hp(s,o):a==="utf-8"?{data:s,status:200}:{error:`Unsupported blob encoding: ${a}`,type:"unknown",status:415}}catch(i){return V(i)}}async function FS(e,t,n,r,o,i){try{let s=r.split("/").slice(0,-1).join("/"),a=r.split("/").pop();if(!a)return{error:`Cannot determine file name from path: ${r}`,type:"unknown",status:400};let c=o||await Ae(t,n,i).catch(()=>"HEAD"),u=await e.rest.repos.getContent({owner:t,repo:n,path:s||"",ref:c});if(!Array.isArray(u.data))return{error:`Expected directory listing for ${s||"root"}`,type:"unknown",status:500};let l=u.data.find(m=>m.name===a&&m.type==="file");if(!l)return{error:`File ${a} not found in ${s||"root"}`,type:"unknown",status:404};let p=await Bp(e,t,n,l.sha,r);return"error"in p?p:{data:{rawContent:p.data,branch:typeof c=="string"?c:void 0,resolvedRef:typeof c=="string"?c:"HEAD"},status:200}}catch(s){return V(s)}}async function Ar(e,t,n={}){try{let r=await Q(t),{owner:o,repo:i,path:s,branch:a}=e,c={owner:o,repo:i,path:s,...a&&{ref:a},...n.ifNoneMatch?{headers:{"If-None-Match":n.ifNoneMatch}}:{}},u,l=a;try{u=await r.rest.repos.getContent(c)}catch(d){if(d instanceof Ta&&d.status===304)return{data:{rawContent:"",resolvedRef:a||"HEAD"},status:304,etag:n.ifNoneMatch,notModified:!0};if(d instanceof Ta&&d.status===404)if(a){let f=await IS(r,d,c,o,i,s,a,t);if("result"in f)u=f.result,l=f.actualBranch;else return f}else return await OS(r,d,o,i,s,a);else{if(d instanceof Ta&&d.status===413)return await FS(r,o,i,s,a||l,t);throw d}}let p=u.data,m=xn(u.headers);if(Array.isArray(p))return{error:Ct.PATH_IS_DIRECTORY.message(x.GITHUB_VIEW_REPO_STRUCTURE),type:"unknown",status:400};if("content"in p&&p.type==="file"){let d=typeof p.content=="string"?p.content:"",f=p.size??0,g;if(d.length>0)g=await Hp(d,s);else if(f>0&&"sha"in p&&typeof p.sha=="string"&&p.sha)g=await Bp(r,o,i,p.sha,s);else return{error:Ct.FILE_EMPTY.message,type:"unknown",status:404};if("error"in g)return g;if(!l&&!a)try{l=await Ae(o,i,t)}catch{}return{data:{rawContent:g.data,branch:l||void 0,resolvedRef:l||a||"HEAD"},status:200,rawResponseChars:N(p),...m?{etag:m}:{}}}return{error:Ct.UNSUPPORTED_TYPE.message(p.type),type:"unknown",status:415}}catch(r){return V(r)}}async function Ea(e,t,n,r,o,i=!1){let s=zt(),a=wr(s,e,t,r),c=GS(MS(a,n));if(!c.startsWith(a+HS)&&c!==a)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let u=En(a);if(!i&&u.hit&&Up(c))return{localPath:c,repoRoot:a,path:n,size:Lp(c),cached:!0,expiresAt:u.meta.expiresAt,owner:e,repo:t,branch:r};let l=await Ar({owner:e,repo:t,path:n,type:"file",branch:r,fullContent:!0,contextLines:0,minify:"none",mainResearchGoal:"Materialize GitHub file content for local research",researchGoal:`Save ${e}/${t}/${n} locally`,reasoning:"GitHub file materialization"},o);if(!("data"in l)||!l.data){let f="error"in l?l.error:void 0;throw new Error(f||`Failed to fetch ${e}/${t}/${n}`)}wn(s),vt(a);let p=NS(c);Up(p)||DS(p,{recursive:!0,mode:448}),vS(c,l.data.rawContent,"utf-8");let m=l.data.branch||r,d=Ln(e,t,m,"treeFetch");return Tn(a,d),{localPath:c,repoRoot:a,path:n,size:l.data.rawContent.length,cached:!1,expiresAt:d.expiresAt,owner:e,repo:t,branch:m}}import{ContentSanitizer as Ia}from"@octocodeai/octocode-engine/contentSanitizer";function kr(e){if(e.length===0)return[];let t=e.split(/\r?\n/);return t.length>0&&t[t.length-1]===""&&t.pop(),t}function rt(e){return kr(e).length}function mi(e,t,n,r=!1,o=!1,i){if(r)try{new RegExp(t)}catch(u){let l=u instanceof Error?u.message:String(u);throw new Error(`Invalid regex pattern: ${l}`)}if(i!==void 0&&i<=0)return{lines:[],matchRanges:[],matchCount:0,matchingLines:[]};let s=e.join(`
11
- `),a={isRegex:r,caseSensitive:o,contextLines:n,maxMatches:i},c=O.extractMatchingLines(s,t,a);return{lines:c.lines,matchRanges:c.matchRanges.map(u=>({start:u.start,end:u.end})),matchCount:c.matchCount,matchingLines:c.matchingLines.map(u=>u)}}var BS=/\.(?:md|markdown|mdx)$/i;function US(e){return BS.test(e.split(/[?#]/,1)[0]??e)}function Qp(e,t){return US(t)?$S(QS(e)):null}function fi(e,t){let n=Qp(e,t);if(n===null||n.length===0)return null;let r=[];return jp(n,r),r.join(`
12
- `)}function $p(e,t){let n=Qp(e,t);return n===null?null:n.map(zp)}function QS(e){let t=[],n=e.split(/\r?\n/),r;return n.forEach((o,i)=>{let s=o.match(/^[ \t]{0,3}(`{3,}|~{3,})/);if(s?.[1]){let u=s[1][0],l=s[1].length;r?r.marker===u&&l>=r.length&&(r=void 0):r={marker:u,length:l};return}if(r)return;let a=o.match(/^[ \t]{0,3}(#{1,6})(?:[ \t]+|$)(.*)$/);if(!a?.[1])return;let c=(a[2]??"").replace(/[ \t]+#+[ \t]*$/,"").trim();t.push({line:i+1,level:a[1].length,text:c.length>0?c:"(untitled heading)",children:[]})}),t}function $S(e){let t=[],n=[];for(let r of e){for(;n.length>0&&n[n.length-1].level>=r.level;)n.pop();let o=n[n.length-1];o?o.children.push(r):t.push(r),n.push(r)}return t}function jp(e,t){for(let n of e){let r=String(n.line).padStart(4," "),o=" ".repeat(Math.max(0,n.level-1));t.push(`${r}| ${o}${"#".repeat(n.level)} ${n.text}`),jp(n.children,t)}}function zp(e){let t=`${"#".repeat(e.level)} ${e.text}`;return{name:t,kind:"markdownHeading",range:{start:{line:e.line-1,character:0},end:{line:e.line-1,character:t.length}},selectionRange:{start:{line:e.line-1,character:0},end:{line:e.line-1,character:t.length}},children:e.children.map(zp)}}import{getConfigSync as jS,DEFAULT_OUTPUT_CONFIG as zS}from"@octocodeai/config";function Dt(){try{return jS().output.pagination.defaultCharLength}catch{return zS.pagination.defaultCharLength}}var Wp=1e5;function LO(e){let t=Math.min(Math.max(Dt(),1),Wp),n=Math.max(Math.floor(e)||0,1);return Math.min(t*n,Wp)}function WS(e,t,n){return O.byteSliceContent(e,t,n)}function hi(e,t){return O.byteToCharOffset(e,t)}function Vp(e,t){return O.charToByteOffset(e,t)}function Kp(e){return O.charToByteOffset(e,e.length)}function _O(e,t,n){let r=WS(e,t,t+n);return{charOffset:hi(e,t),charLength:r.length,text:r}}function La(e,t,n,r){return O.sliceContent(e,t,n,r)}function gi(e,t=0,n,r={}){let o=r.mode??"characters",i=e.length,s=Kp(e);if(n===void 0)return{paginatedContent:e,byteOffset:0,byteLength:s,totalBytes:s,nextByteOffset:void 0,charOffset:0,charLength:i,totalChars:i,nextCharOffset:void 0,hasMore:!1,estimatedTokens:Math.ceil(e.length/4),currentPage:1,totalPages:1};let a=Math.max(1,r.pageSize??n),c,u,l,p,m,d,f,g;if(o==="bytes"){let R=Math.min(t,s),h=Math.min(R+n,s);p=hi(e,R),m=hi(e,h),m<i&&Vp(e,m)<h&&(m+=1);let y=La(e,p,m-p);c=y.text,p=y.charOffset,m=y.charOffset+y.charLength,u=y.byteOffset,l=y.byteOffset+y.byteLength,d=l<s;let S=r.actualOffset??R;f=Math.floor(S/a)+1,g=Math.max(f,Math.ceil(s/a))}else{let R=La(e,t,n);c=R.text,p=R.charOffset,m=R.charOffset+R.charLength,u=R.byteOffset,l=R.byteOffset+R.byteLength,d=m<i;let h=r.actualOffset??p;f=Math.floor(h/a)+1,g=Math.max(f,Math.ceil(i/a))}return{paginatedContent:c,byteOffset:u,byteLength:l-u,totalBytes:s,nextByteOffset:d?l:void 0,charOffset:p,charLength:c.length,totalChars:i,nextCharOffset:d?m:void 0,hasMore:d,estimatedTokens:Math.ceil(c.length/4),currentPage:f,totalPages:g}}function FO(e,t=!1){return t?JSON.stringify(e,null,2):JSON.stringify(e)}function Aa(e){return{currentPage:e.currentPage,totalPages:e.totalPages,hasMore:e.hasMore,charOffset:e.charOffset,charLength:e.charLength,totalChars:e.totalChars,...e.nextCharOffset!==void 0&&{nextCharOffset:e.nextCharOffset}}}function vO(e,t,n){let r=e.length;if(r===0)return{sliced:"",actualOffset:0,actualLength:0,hasMore:!1,lineCount:0,totalChars:0};if(t>=r)return{sliced:"",actualOffset:r,actualLength:0,hasMore:!1,lineCount:0,totalChars:r,nextOffset:r};let o=t;if(o>0&&e[o-1]!==`
13
- `){let u=e.lastIndexOf(`
14
- `,o-1);o=u===-1?0:u+1}let i=o,s=0;for(;i<r;){let u=e.indexOf(`
15
- `,i);if(u===-1){i=r;break}if(i=u+1,s++,i-o>=n)break}let a=e.substring(o,i),c=i<r;return{sliced:a,actualOffset:o,actualLength:a.length,hasMore:c,lineCount:s,totalChars:r,nextOffset:c?i:void 0}}var VS=8e3,KS="__octocode_generic__.unknown";function YS(e){return e&&e.trim().length>0?e:KS}async function Yp(e,t){return(await O.getSemanticBoundaryOffsets(e,YS(t))).filter(r=>Number.isInteger(r)&&r>=0&&r<=e.length)}function XS(e,t){let n=e.indexOf(`
16
- `,t);return n===-1?void 0:n+1}function _r(e){let t=e.trimEnd().split(`
17
- `).at(-1)??"";return t.length>0&&(t[0]===" "||t[0]===" ")}async function Ir(e,t,n){let r=XS(e,Math.max(0,t));return r===void 0?void 0:(await Yp(e,n)).find(i=>i>=r&&i>t)}async function NO(e,t,n,r,o){if(!_r(e))return;let i=await Ir(t,n,o);if(i===void 0)return;let s=i-n,a=`Page cut mid-block at char ${n}. Next top-level definition at char ${i}. Re-request with charLength=${r+s} to extend this page to the next boundary, or use charOffset=${n} to continue page-by-page.`;return{nextBlockChar:i,hint:a}}async function yi(e,t,n,r){let o=Math.min(Math.max(0,t),e.length),i=Math.max(1,n),s=o+i;if(s>=e.length)return{length:e.length-o,chunkMode:"char-limit"};let a=await Yp(e,r);if(a.length===0)return{length:i,chunkMode:"char-limit"};let c=a.find(l=>l>s);return c===void 0?{length:i,chunkMode:"char-limit"}:c-s<=VS?{length:c-o,chunkMode:"semantic"}:{length:i,chunkMode:"char-limit"}}function qS(){let e=Dt();return Math.min(e,8e3)}async function ka(e,t,n){let r=e.content??"",o=n??qS();if(r.length<=o&&t===0)return e;let i=e.path??void 0,{length:s,chunkMode:a}=await yi(r,t,o,i),c=gi(r,t,s,{pageSize:o}),u;if(c.hasMore&&a==="char-limit"&&_r(c.paginatedContent)){let l=c.charOffset+c.charLength;u=await Ir(r,l,i)}return{...e,content:c.paginatedContent,pagination:{currentPage:c.currentPage,totalPages:c.totalPages,hasMore:c.hasMore,charOffset:c.charOffset,charLength:c.charLength,totalChars:c.totalChars,...c.nextCharOffset!==void 0&&{nextCharOffset:c.nextCharOffset},chunkMode:a,...u!==void 0&&{nextBlockChar:u}}}}async function _a(e,t,n,r,o){try{let i=await e.rest.repos.listCommits({owner:t,repo:n,path:r,per_page:1,...o&&{sha:o}});if(i.data.length>0){let s=i.data[0],a=s?.commit?.committer?.date,c=s?.commit?.author?.name||s?.author?.login||"Unknown";return{lastModified:a||"Unknown",lastModifiedBy:c}}return null}catch{return null}}function Or(e,t){return{sourceChars:e,sourceBytes:t}}async function Xp(e,t,n,r,o,i,s,a,c=5,u,l,p,m="standard"){let d=e.length,f=Buffer.byteLength(e,"utf-8"),g=m==="standard"||m==="symbols",R=g?"standard":"none",h;if(m==="symbols"){let I=O.extractSignatures(e,o);if(I===null){let U=fi(e,o);if(U!==null){let ee=Ia.sanitizeContent(U,o),v=[O.SIGNATURES_ONLY_HINT];return ee.hasSecrets&&v.push(`Secrets detected and redacted: ${ee.secretsDetected.join(", ")}`),{owner:t,repo:n,path:o,content:ee.content,contentView:"symbols",branch:r,totalLines:rt(e),...Or(d,f),isPartial:!1,signaturesExtracted:!0,hints:v}}h=`minify:"symbols" is not supported for this file type (${o.split(".").pop()??"unknown"}) \u2014 falling back to standard content view.`}if(I!==null){let U=Ia.sanitizeContent(I,o),ee=O.applyContentViewMinification(U.content,o),v=[O.SIGNATURES_ONLY_HINT];return u&&v.push('matchString was ignored \u2014 minify:"symbols" returns the full skeleton index. Use startLine/endLine from the gutter to read the matching body.'),U.hasSecrets&&v.push(`Secrets detected and redacted: ${U.secretsDetected.join(", ")}`),{owner:t,repo:n,path:o,content:ee,contentView:"symbols",branch:r,totalLines:rt(e),...Or(d,f),isPartial:!1,signaturesExtracted:!0,hints:v}}}let y=new Set,S=e,C=S.split(`
18
- `),P=rt(S),T=e,L,k,w=!1,b,A;if(i)T=e;else if(u){let I=p===!0,U;try{U=mi(C,u,c,l??!1,I)}catch{return{owner:t,repo:n,path:o,content:"",branch:r,totalLines:P,...Or(d,f),matchNotFound:!0,searchedFor:u,hints:[`Invalid regex "${u}". Check syntax (e.g. escape backslashes: "\\\\w+" not "\\w+") or disable matchStringIsRegex=false for a literal search.`]}}if(U.matchCount===0){let ae=l?[`Regex "${u}" matched no lines. Verify the pattern, check flags (case-${I?"sensitive":"insensitive"}), or use fullContent=true to inspect the file.`]:[`"${u}" not found in file${I?" (case-sensitive)":""}. Try matchStringIsRegex=true for pattern matching, broaden the search, or use fullContent=true.`];return{owner:t,repo:n,path:o,content:"",branch:r,totalLines:P,...Or(d,f),matchNotFound:!0,searchedFor:u,hints:ae}}T=U.lines.join(`
19
- `);let ee=U.matchRanges[0],v=U.matchRanges[U.matchRanges.length-1];s=ee.start,a=v.end,L=ee.start,k=v.end,w=!0,b=U.matchRanges,A=U.matchingLines;let q=U.matchingLines.slice(0,5).join(", "),le=U.matchingLines.length>5?` and ${U.matchingLines.length-5} more`:"";y.add(U.matchCount>1?`Found ${U.matchCount} occurrences of "${u}" on lines ${q}${le} \u2014 all shown as ${U.matchRanges.length} slice${U.matchRanges.length===1?"":"s"}, \xB1${c} lines of context each.`:`Found "${u}" on line ${U.matchingLines[0]}`)}else if(s!==void 0||a!==void 0){let I=s||1,U=a||P;if(I<1||I>P)T=e,y.add(`Requested startLine ${I} is out of range for this ${P}-line file \u2014 returning the full file instead of a range.`);else if(U<I)T=e,y.add(`Requested range startLine=${I}, endLine=${U} is invalid (endLine before startLine) \u2014 returning the full file instead of a range.`);else{let ee=Math.max(1,I),v=Math.min(P,U),q=C.slice(ee-1,v);L=ee,k=v,w=!0,T=q.join(`
20
- `),U>P&&y.add(`Requested endLine ${U} adjusted to ${P} (file end)`)}}let M=Ia.sanitizeContent(T,o);if(T=g?O.applyContentViewMinification(M.content,o):M.content,M.hasSecrets&&y.add(`Secrets detected and redacted: ${M.secretsDetected.join(", ")}`),M.warnings.length>0&&M.warnings.forEach(I=>y.add(I)),P>2e3&&m!=="symbols"&&!u&&!s&&!a&&!i){let I=Math.max(1,P-200);y.add(`Large file (${P} lines) \u2014 minify:"symbols" for an export index, or startLine=${I} for the tail.`)}let B=Array.from(y);return{owner:t,repo:n,path:o,content:T,contentView:R,branch:r,totalLines:P,...Or(d,f),...w&&{startLine:L,endLine:k,isPartial:w},...b&&{matchRanges:b},...A&&{matchedLines:A},...B.length>0&&{matchLocations:B},...(B.length>0||h)&&{warnings:[...h?[h]:[],...B]}}}async function qp(e,t,n){let r=await fe(t),o=ce("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,auth:r},n),i=await ai(o,async({ifNoneMatch:g})=>{let R=await Ar(e,t,{ifNoneMatch:g}),{etag:h,notModified:y,...S}=R;return{value:S,etag:h,notModified:y}},{shouldCache:g=>"data"in g&&!g.error,forceRefresh:e.forceRefresh===!0});if(!("data"in i)||!i.data)return i;let s=i.data.branch||i.data.resolvedRef||e.branch||"",a=await Xp(i.data.rawContent,e.owner,e.repo,s,e.path,e.fullContent||!1,e.startLine,e.endLine,e.contextLines??5,e.matchString,e.matchStringIsRegex,e.matchStringCaseSensitive,e.minify??"standard");if("error"in a)return{error:a.error||"Unknown error",status:500,type:"unknown"};let{signaturesExtracted:c,...u}=a,l=e.charOffset??0,p=e.charLength,m=e.fullContent===!0&&l===0&&p===void 0,d=c||m?u:await ka(u,l,p),f=(e.charOffset??0)>0;if(!e.noTimestamp&&!f)try{let g=await Q(t),R=await he(ce("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,ts:!0,auth:r},n),()=>_a(g,e.owner,e.repo,e.path,e.branch),{shouldCache:h=>h!==null,forceRefresh:e.forceRefresh===!0});R&&(d.lastModified=R.lastModified,d.lastModifiedBy=R.lastModifiedBy)}catch{}return{data:d,status:200,rawResponseChars:i.rawResponseChars}}import{ContentSanitizer as ed}from"@octocodeai/octocode-engine/contentSanitizer";var JS=2,ZS=20;function oF(e,t=ZS){let n=e?kr(e):[];return{lines:n.slice(0,t),moreCount:Math.max(0,n.length-t)}}function Jp(e,t,n){if(!e)return"";if(t===void 0&&n===void 0)return e;let r={additions:t,deletions:n};return O.filterPatch(e,r)}function Zp(e){return e?O.filterPatch(e,{trimContext:!0,contextLines:JS}):""}function Oa(e){let t=ed.sanitizeContent(e.title??""),n=e.body?ed.sanitizeContent(e.body):{content:void 0,warnings:[]},r=new Set([...t.warnings,...n.warnings]),i=e.state?.toLowerCase()==="closed"?"closed":"open";return{prData:{number:e.number,title:t.content,body:n.content,state:i,author:e.user?.login??"",labels:e.labels?.map(a=>typeof a=="string"?a:a.name??"")??[],created_at:e.created_at??"",updated_at:e.updated_at??"",closed_at:e.closed_at??null,url:e.html_url,comments:[],...typeof e.comments=="number"&&e.comments>0?{total_comment_count:e.comments}:{},reactions:0,draft:e.draft??!1,head:e.head?.ref,head_sha:e.head?.sha,base:e.base?.ref,base_sha:e.base?.sha,...e.merged_at&&{merged_at:e.merged_at}},sanitizationWarnings:r}}var eb=Dt(),tb=Math.round(Dt()/4),td=3;function nd(e,t,n,r){if(typeof e!="string"||!r)return{value:e};let o=e.length,i=Math.min(Math.max(0,t),o),s=Math.max(1,n),a=Math.min(i+s,o),c=a<o;return i===0&&a===o?{value:e}:{value:e.slice(i,a),pagination:{charOffset:i,charLength:a-i,totalChars:o,hasMore:c,...c?{nextCharOffset:a}:{}}}}function An(e,t={}){let n=t.charOffset??0,r=t.charLength??eb,o=t.charLength??tb,i=typeof e.body=="string"?O.minifyMarkdownCore(e.body):e.body,s=nd(i,n,r,!t.includeFullBody),a=(e.comments??[]).sort((f,g)=>{let R=f.commentType==="review_inline"?0:1,h=g.commentType==="review_inline"?0:1;return R-h}),c=a.filter(f=>f.commentType==="review_inline").length,u=a.length-c,l=t.includeFullCommentDetails?a:a.slice(0,td),p=l.map(f=>{let g=nd(f.body,n,o,!t.includeFullCommentDetails);return{...f,body:g.value??"",...g.pagination?{bodyPagination:g.pagination}:{}}}),m=!t.includeFullCommentDetails&&(a.length>l.length||p.some(f=>"bodyPagination"in f)),d=[...s.pagination&&t.includeFullBody?[`PR body paginated at charOffset=${s.pagination.charOffset}, charLength=${s.pagination.charLength}, totalChars=${s.pagination.totalChars}. Re-call with prNumber and charOffset=${s.pagination.nextCharOffset??s.pagination.totalChars} to continue this body.`]:[],...m?[`PR comments are paginated/summarized to ${td} comment(s) per search result with ${o} chars each. Use prNumber with content.comments={discussion:true,reviewInline:true} and charOffset to continue specific comment bodies.`]:[]];return{number:e.number,title:e.title,state:e.state,draft:e.draft??!1,merged:e.state==="closed"&&!!e.merged_at,createdAt:e.created_at,updatedAt:e.updated_at,closedAt:e.closed_at??void 0,mergedAt:e.merged_at,author:e.author,...e.labels?.length?{labels:e.labels.map(f=>({id:0,name:f,color:""}))}:{},headRef:e.head||"",...e.head_sha?{headSha:e.head_sha}:{},baseRef:e.base||"",...e.base_sha?{baseSha:e.base_sha}:{},body:s.value,...s.pagination?{bodyPagination:s.pagination}:{},comments:e.total_comment_count??a.length,...a.length>0&&{commentDetailsBreakdown:{inlineReview:c,discussion:u}},commits:e.commits?.length||0,additions:e.file_changes?.files.reduce((f,g)=>f+g.additions,0)||e.additions||0,deletions:e.file_changes?.files.reduce((f,g)=>f+g.deletions,0)||e.deletions||0,changedFiles:e.file_changes?.total_count||0,...e.file_changes&&{fileChanges:e.file_changes.files?.map(f=>({filename:f.filename,status:f.status,additions:f.additions,deletions:f.deletions,patch:f.patch}))},...e.reviews&&{reviews:e.reviews},...e.commits&&{commitDetails:e.commits},...p.length>0&&{commentDetails:p,commentDetailsShown:p.length,commentDetailsTotal:a.length,...m?{commentDetailsPaginated:!0}:{}},...(e._sanitization_warnings||d.length>0)&&{sanitizationWarnings:[...e._sanitization_warnings||[],...d]}}}function Fr(e){let t=Array.isArray(e.owner)?e.owner[0]||void 0:e.owner,n=Array.isArray(e.repo)?e.repo[0]||void 0:e.repo;return{owner:t,repo:n}}function vr(e,t){let r=t.content?.patches,o=r?.mode??(t.reviewMode==="full"?"all":"none"),i=new Map(r?.ranges?.map(a=>[a.file,a])||[]),s=new Set([...r?.files??[],...i.keys()]);return o==="none"?e.map(a=>({...a,patch:void 0})):o==="selected"?e.filter(a=>s.has(a.filename)).map(a=>{let c=i.get(a.filename);return{...a,patch:a.patch?Jp(a.patch,c?.additions,c?.deletions):void 0}}):e.map(a=>({...a,patch:a.patch?Zp(a.patch):a.patch}))}function kn(e){let t=e.content;return!!(e.reviewMode==="full"||t?.changedFiles||t?.patches?.mode&&t.patches.mode!=="none")}function rd(e){return e.reviewMode==="full"?{discussion:!0,reviewInline:!0}:e.content?.comments??null}function Ri(e){let t=rd(e);return t?t.discussion!==!1:!1}function Si(e){let t=rd(e);return t?t.reviewInline!==!1:!1}function bi(e){let t=e.content;return!!(e.reviewMode==="full"||t?.commits)}function Ci(e){let t=e.content;return!!(e.reviewMode==="full"||t?.reviews)}function Fa(e){return e.prNumber!==void 0||e.reviewMode==="full"?!0:kn(e)||Ri(e)||Si(e)||bi(e)||Ci(e)}function va(e){return!!e.content?.comments?.includeBots}function xi(e){return e.replace(/<!--[\s\S]*?-->/g,"").replace(/^\[vc\]:\s*#.*$/gm,"").replace(/^[A-Za-z0-9+/]{120,}={0,2}$/gm,"").replace(/\n{3,}/g,`
8
+ import{withSecurityValidation as SC,withBasicSecurityValidation as RC}from"@octocodeai/octocode-engine/security";function em(e,t,n){let r=SC(e,(o,i)=>t(o,i),n);return(o,i)=>r(o,{authInfo:i?.http?.authInfo,sessionId:i?.sessionId,signal:i?.mcpReq.signal})}function tm(e,t,n){let r=RC((o,i)=>e(o,i),t,n);return(o,i)=>r(o,{signal:i?.mcpReq.signal})}var Re=30,ue=100,dF=10,mF=100,nm=200,Qn=20,rm=100,ji=20,Qi=50,Ve=1e4,dn=20,G=1e3,om=100,fr=5e4,im=8e3,mn=1e5,sm=500;var Tc={NOT_INITIALIZED:{code:"CONFIG_NOT_INITIALIZED",message:"Configuration not initialized. Call initialize() and await its completion before calling getServerConfig()."}},yo={PROMISES_NOT_ARRAY:{code:"VALIDATION_PROMISES_NOT_ARRAY",message:"promises must be an array"},TIMEOUT_NOT_POSITIVE:{code:"VALIDATION_TIMEOUT_NOT_POSITIVE",message:"timeout must be positive"},CONCURRENCY_NOT_POSITIVE:{code:"VALIDATION_CONCURRENCY_NOT_POSITIVE",message:"concurrency must be positive"}},bo={FETCH_NOT_AVAILABLE:{code:"FETCH_NOT_AVAILABLE",message:"Global fetch is not available in this environment."},FETCH_FAILED_AFTER_RETRIES:{code:"FETCH_FAILED_AFTER_RETRIES",message:(e,t)=>`Failed to fetch after ${e} attempts: ${t}`},FETCH_HTTP_ERROR:{code:"FETCH_HTTP_ERROR",message:(e,t)=>`Failed to fetch (${e} ${t})`}},CC={INVALID_FORMAT:{code:"TOOL_METADATA_INVALID_FORMAT",message:"Invalid tool metadata format from remote source."},INVALID_API_RESPONSE:{code:"TOOL_METADATA_INVALID_API_RESPONSE",message:"Invalid API response structure"}},fn={PATH_IS_DIRECTORY:{code:"FILE_PATH_IS_DIRECTORY",message:e=>`Path is a directory. Use ${e} to list directory contents`},FILE_TOO_LARGE:{code:"FILE_TOO_LARGE",message:(e,t,n)=>`File too large (${e}KB > ${t}KB). Use ${n} to search within the file or use startLine/endLine parameters to get specific sections`},FILE_EMPTY:{code:"FILE_EMPTY",message:"File is empty - no content to display"},BINARY_FILE:{code:"FILE_BINARY",message:"Binary file detected. Cannot display as text - download directly from GitHub"},DECODE_FAILED:{code:"FILE_DECODE_FAILED",message:"Failed to decode file. Encoding may not be supported (expected UTF-8)"},UNSUPPORTED_TYPE:{code:"FILE_UNSUPPORTED_TYPE",message:e=>`Unsupported file type: ${e}`}},hn={NOT_FOUND:{code:"REPO_NOT_FOUND",message:(e,t,n)=>`Repository "${e}/${t}" not found or not accessible: ${n}`},PATH_NOT_FOUND:{code:"REPO_PATH_NOT_FOUND",message:(e,t,n,r)=>`Path "${e}" not found in repository "${t}/${n}" on branch "${r}"`},PATH_NOT_FOUND_ANY_BRANCH:{code:"REPO_PATH_NOT_FOUND_ANY_BRANCH",message:(e,t,n)=>`Path "${e}" not found in repository "${t}/${n}" on any common branch`},ACCESS_FAILED:{code:"REPO_ACCESS_FAILED",message:(e,t,n)=>`Failed to access repository "${e}/${t}": ${n}`},STRUCTURE_EXPLORATION_FAILED:{code:"REPO_STRUCTURE_EXPLORATION_FAILED",message:"Failed to explore repository structure"}},Ke={QUERY_EMPTY:{code:"SEARCH_QUERY_EMPTY",message:"Search query cannot be empty"},NO_VALID_PARAMETERS:{code:"SEARCH_NO_VALID_PARAMETERS",message:"No valid search parameters provided"},PR_REQUIRED_PARAMS:{code:"SEARCH_PR_REQUIRED_PARAMS",message:"Owner, repo, and prNumber are required parameters"},PR_SINGLE_VALUES:{code:"SEARCH_PR_SINGLE_VALUES",message:"Owner and repo must be single values"},PULL_REQUEST_SEARCH_FAILED:{code:"SEARCH_PR_SEARCH_FAILED",message:e=>`Pull request search failed: ${e}`},PULL_REQUEST_LIST_FAILED:{code:"SEARCH_PR_LIST_FAILED",message:e=>`Pull request list failed: ${e}`},PULL_REQUEST_FETCH_FAILED:{code:"SEARCH_PR_FETCH_FAILED",message:(e,t)=>`Failed to fetch pull request #${e}: ${t}`}},xC={NO_TOOLS_REGISTERED:{code:"STARTUP_NO_TOOLS_REGISTERED",message:"No tools were successfully registered"},UNCAUGHT_EXCEPTION:{code:"STARTUP_UNCAUGHT_EXCEPTION",message:e=>`Uncaught exception: ${e}`},UNHANDLED_REJECTION:{code:"STARTUP_UNHANDLED_REJECTION",message:e=>`Unhandled rejection: ${e}`},STARTUP_FAILED:{code:"STARTUP_FAILED",message:e=>`Startup failed: ${e}`}},So={TIMEOUT:{code:"PROMISE_TIMEOUT",message:(e,t)=>`Query ${e+1} timed out after ${t}ms \u2014 retry it alone, with tighter caps (maxFiles/maxMatchesPerFile/itemsPerPage) if it was large`},NOT_A_FUNCTION:{code:"PROMISE_NOT_A_FUNCTION",message:e=>`Promise function at index ${e} is not a function`},FUNCTION_UNDEFINED:{code:"PROMISE_FUNCTION_UNDEFINED",message:"Promise function is undefined"}},wC={EXECUTION_FAILED:{code:"TOOL_EXECUTION_FAILED",message:(e,t)=>`Tool ${e} execution failed: ${t}`},SECURITY_VALIDATION_FAILED:{code:"TOOL_SECURITY_VALIDATION_FAILED",message:(e,t)=>`Security validation failed for ${e}: ${t}`}},hF={...Tc,...yo,...bo,...CC,...fn,...hn,...Ke,...xC,...So,...wC};var j={PATH_VALIDATION_FAILED:"pathValidationFailed",FILE_ACCESS_FAILED:"fileAccessFailed",FILE_READ_FAILED:"fileReadFailed",FILE_TOO_LARGE:"fileTooLarge",BINARY_FILE_UNSUPPORTED:"binaryFileUnsupported",NO_MATCHES:"noMatches",OUTPUT_TOO_LARGE:"outputTooLarge",COMMAND_NOT_AVAILABLE:"commandNotAvailable",COMMAND_EXECUTION_FAILED:"commandExecutionFailed",COMMAND_TIMEOUT:"commandTimeout",TOOL_EXECUTION_FAILED:"toolExecutionFailed",LSP_SERVER_UNAVAILABLE:"lspServerUnavailable"},PC=(i=>(i.FILE_SYSTEM="FILE_SYSTEM",i.VALIDATION="VALIDATION",i.SEARCH="SEARCH",i.PAGINATION="PAGINATION",i.EXECUTION="EXECUTION",i))(PC||{}),am={[j.PATH_VALIDATION_FAILED]:{code:j.PATH_VALIDATION_FAILED,category:"VALIDATION",description:"Path validation failed - invalid or unsafe path",recoverability:"user-action-required"},[j.FILE_ACCESS_FAILED]:{code:j.FILE_ACCESS_FAILED,category:"FILE_SYSTEM",description:"Cannot access file - may not exist or lack permissions",recoverability:"unrecoverable"},[j.FILE_READ_FAILED]:{code:j.FILE_READ_FAILED,category:"FILE_SYSTEM",description:"Failed to read file contents",recoverability:"unrecoverable"},[j.FILE_TOO_LARGE]:{code:j.FILE_TOO_LARGE,category:"FILE_SYSTEM",description:"File exceeds size limits for operation",recoverability:"user-action-required"},[j.BINARY_FILE_UNSUPPORTED]:{code:j.BINARY_FILE_UNSUPPORTED,category:"FILE_SYSTEM",description:"Binary file is not supported by text content reader",recoverability:"user-action-required"},[j.NO_MATCHES]:{code:j.NO_MATCHES,category:"SEARCH",description:"Search pattern found no matches",recoverability:"user-action-required"},[j.OUTPUT_TOO_LARGE]:{code:j.OUTPUT_TOO_LARGE,category:"PAGINATION",description:"Output exceeds size limits",recoverability:"user-action-required"},[j.COMMAND_NOT_AVAILABLE]:{code:j.COMMAND_NOT_AVAILABLE,category:"EXECUTION",description:"Required CLI command is not installed or not in PATH",recoverability:"user-action-required"},[j.COMMAND_EXECUTION_FAILED]:{code:j.COMMAND_EXECUTION_FAILED,category:"EXECUTION",description:"System command execution failed",recoverability:"unrecoverable"},[j.COMMAND_TIMEOUT]:{code:j.COMMAND_TIMEOUT,category:"EXECUTION",description:"Command execution timed out",recoverability:"user-action-required"},[j.TOOL_EXECUTION_FAILED]:{code:j.TOOL_EXECUTION_FAILED,category:"EXECUTION",description:"Generic tool execution failure",recoverability:"unrecoverable"},[j.LSP_SERVER_UNAVAILABLE]:{code:j.LSP_SERVER_UNAVAILABLE,category:"EXECUTION",description:'No language server available for semantic analysis \u2014 use localSearch operation:"text" or "structural", then localGetFileContent',recoverability:"user-action-required"}};var Ge=class e extends Error{errorCode;category;recoverability;context;constructor(t,n,r,o){let i=am[t],s=n||i.description;super(s,o?{cause:o}:void 0),this.name="ToolError",this.errorCode=t,this.category=i.category,this.recoverability=i.recoverability,this.context=r,o&&o.stack&&(this.stack=`${this.stack}
9
+ Caused by: ${o.stack}`),Object.setPrototypeOf(this,e.prototype)}isRecoverable(){return this.recoverability==="recoverable"}requiresUserAction(){return this.recoverability==="user-action-required"}toJSON(){return{name:this.name,errorCode:this.errorCode,category:this.category,message:this.message,recoverability:this.recoverability,context:this.context,stack:this.stack}}};function Ec(e){return e instanceof Ge}function cm(e,t=j.TOOL_EXECUTION_FAILED,n){if(Ec(e))return e;if(e instanceof Error)return new Ge(t,e.message,n,e);let r=String(e);return new Ge(t,r,n)}import{redactPath as Ro}from"@octocodeai/octocode-engine/pathUtils";var Xe={pathValidationFailed:(e,t,n)=>new Ge(j.PATH_VALIDATION_FAILED,t||`Path validation failed: ${Ro(e,n)}`,{path:e}),fileAccessFailed:(e,t,n)=>{let r=Ro(e,n),o=`Cannot access file: ${r}`,i=t?.code;return i==="ENOENT"?o=`File not found: ${r}. Verify the path with localSearch operation:"files".`:i==="EACCES"?o=`Permission denied: ${r}. Check file permissions.`:i==="EISDIR"?o=`Path is a directory: ${r}. Use localSearch operation:"tree".`:i==="ENOTDIR"?o=`Invalid path: ${r}. A component of the path is not a directory.`:i==="ENAMETOOLONG"&&(o=`Path too long: ${r}`),new Ge(j.FILE_ACCESS_FAILED,o,{path:e,errorCode:i},t)},fileReadFailed:(e,t,n)=>new Ge(j.FILE_READ_FAILED,`Failed to read file: ${Ro(e,n)}`,{path:e,errorCode:t?.code},t),fileTooLarge:(e,t,n)=>new Ge(j.FILE_TOO_LARGE,(()=>{let r=o=>Number.isInteger(o)?`${o}KB`:`${o.toFixed(1)}KB`;return`File too large: ${r(t)} (limit: ${r(n)}). Use startLine/endLine, matchString, or charOffset/charLength to read a bounded slice.`})(),{path:e,sizeKB:t,limitKB:n}),binaryFileUnsupported:e=>new Ge(j.BINARY_FILE_UNSUPPORTED,`Binary file unsupported: ${Ro(e)}. Use localSearch operation:"text" for embedded strings.`,{path:e}),outputTooLarge:(e,t)=>new Ge(j.OUTPUT_TOO_LARGE,`Output too large: ${e} (limit: ${t})`,{size:e,limit:t}),commandNotAvailable:(e,t)=>new Ge(j.COMMAND_NOT_AVAILABLE,`Command '${e}' is not available. ${t||"Please install it and ensure it is in your PATH."}`,{command:e,installHint:t}),commandExecutionFailed:(e,t,n)=>new Ge(j.COMMAND_EXECUTION_FAILED,n?`Command '${e}' failed: ${n}`:`Command execution failed: ${e}`,{command:e,stderr:n},t),toolExecutionFailed:(e,t)=>new Ge(j.TOOL_EXECUTION_FAILED,`Tool execution failed: ${e}`,{toolName:e},t)};import{Octokit as Pw}from"octokit";import{throttling as Tw}from"@octokit/plugin-throttling";import{createHash as Ew}from"crypto";function Bt(e){return e.toLowerCase().replace(/^https?:\/\//,"").replace(/\/$/,"")}function Zt(e){if(!e.token.expiresAt)return!1;let t=new Date(e.token.expiresAt);if(isNaN(t.getTime()))return!0;let n=new Date;return t.getTime()-n.getTime()<300*1e3}function Co(e){if(!e.token.refreshTokenExpiresAt)return!1;let t=new Date(e.token.refreshTokenExpiresAt);return isNaN(t.getTime())?!0:new Date>=t}var xo=new Map,TC=300*1e3;function EC(e){let t=Bt(e),n=xo.get(t);return!n||Date.now()-n.cachedAt>=TC?!1:n.credentials?!Zt(n.credentials):!0}function wo(e){e?xo.delete(Bt(e)):xo.clear()}function lm(e){let t=Bt(e);if(EC(t))return xo.get(t).credentials}function um(e,t){let n=Bt(e);xo.set(n,{credentials:t,cachedAt:Date.now()})}import{existsSync as Ki,readFileSync as fm,writeFileSync as hm,unlinkSync as mm,statSync as OC,chmodSync as vC}from"node:fs";import{createCipheriv as FC,createDecipheriv as MC,randomBytes as gm}from"node:crypto";import{existsSync as Ui,mkdirSync as $i}from"node:fs";import{join as gt}from"node:path";import{getOctocodeHome as AC}from"@octocodeai/config";var Wi=448;function gn(){return AC(process.env)}function At(){return Ye}var Ye=gn(),ze={home:Ye,config:gt(Ye,".octocoderc"),credentials:gt(Ye,"credentials.json"),key:gt(Ye,".key"),session:gt(Ye,"session.json"),stats:gt(Ye,"stats.json"),tmp:gt(Ye,"tmp"),clone:gt(Ye,"tmp","clone"),tree:gt(Ye,"tmp","tree"),response:gt(Ye,"tmp","response"),repos:gt(Ye,"tmp","clone"),cliConfig:gt(Ye,"config.json"),lspConfig:gt(Ye,"lsp-servers.json")};function Vi(){Ui(ze.home)||$i(ze.home,{recursive:!0,mode:Wi})}function LC(){pm()}function Ac(){Vi(),Ui(ze.tmp)||$i(ze.tmp,{recursive:!0,mode:Wi})}function pm(){Ac(),Ui(ze.clone)||$i(ze.clone,{recursive:!0,mode:Wi})}function _C(){Ac(),Ui(ze.tree)||$i(ze.tree,{recursive:!0,mode:Wi})}import{z as Ne}from"zod";var kC=Ne.object({token:Ne.string(),tokenType:Ne.literal("oauth"),scopes:Ne.array(Ne.string()).optional(),refreshToken:Ne.string().optional(),expiresAt:Ne.string().optional(),refreshTokenExpiresAt:Ne.string().optional()}),IC=Ne.object({hostname:Ne.string(),username:Ne.string(),token:kC,gitProtocol:Ne.enum(["ssh","https"]),createdAt:Ne.string(),updatedAt:Ne.string()}),dm=Ne.object({version:Ne.number(),credentials:Ne.record(Ne.string(),IC)});var Lc=ze.home,qt=ze.credentials,zt=ze.key,ym="aes-256-gcm",NC=16;function yn(){Vi()}function bm(){if(yn(),Ki(zt))return OC(zt).mode&511&63&&vC(zt,384),Buffer.from(fm(zt,"utf8"),"hex");let e=gm(32);return hm(zt,e.toString("hex"),{mode:384}),e}function Xi(e){let t=bm(),n=gm(NC),r=FC(ym,t,n),o=r.update(e,"utf8","hex");o+=r.final("hex");let i=r.getAuthTag();return`${n.toString("hex")}:${i.toString("hex")}:${o}`}function Yi(e){let t=bm(),[n,r,o]=e.split(":");if(!n||!r||!o)throw new Error("Invalid encrypted data format");let i=Buffer.from(n,"hex"),s=Buffer.from(r,"hex"),a=MC(ym,t,i);a.setAuthTag(s);let c=a.update(o,"hex","utf8");return c+=a.final("utf8"),c}function Jt(){if(yn(),!Ki(qt))return{version:1,credentials:{}};try{let e=fm(qt,"utf8"),t=Yi(e),n=JSON.parse(t),r=dm.safeParse(n);return r.success?r.data:{version:1,credentials:{}}}catch{return{version:1,credentials:{}}}}function _c(e){yn();let t=Xi(JSON.stringify(e,null,2));hm(qt,t,{mode:384})}function Sm(){try{Ki(qt)&&mm(qt),Ki(zt)&&mm(zt)}catch{}}import{refreshToken as DC}from"@octokit/oauth-methods";import{request as HC}from"@octokit/request";var hr="178c6fc778ccc68e1d6a",bn="github.com";function GC(e){return e.replace(/\b(ghp_|gho_|ghu_|ghs_|ghr_)[a-zA-Z0-9]{36,}\b/g,"***MASKED***").replace(/\b[a-zA-Z0-9]{40,}\b/g,"***MASKED***")}function BC(e){return e==="github.com"||e===bn?"https://api.github.com":`https://${e}/api/v3`}async function kc(e,t=bn,n=hr){let r=await e.getCredentials(t);if(!r)return{success:!1,error:`Not logged in to ${t}`};if(!r.token.refreshToken)return{success:!1,error:"Token does not support refresh (OAuth App tokens do not expire)"};if(Co(r))return{success:!1,error:"Refresh token has expired. Please login again."};try{let o=await DC({clientType:"github-app",clientId:n,clientSecret:"",refreshToken:r.token.refreshToken,request:HC.defaults({baseUrl:BC(t)})}),i={token:o.authentication.token,tokenType:"oauth",refreshToken:o.authentication.refreshToken,expiresAt:o.authentication.expiresAt,refreshTokenExpiresAt:o.authentication.refreshTokenExpiresAt};return await e.updateToken(t,i),{success:!0,username:r.username,hostname:t}}catch(o){return{success:!1,error:o instanceof Error?GC(o.message):"Token refresh failed"}}}async function Rm(e,t=bn,n=hr){let r=await e.getCredentials(t);if(!r||!r.token)return{token:null,source:"none"};if(!Zt(r))return{token:r.token.token,source:"stored",username:r.username};if(r.token.refreshToken){let o=await kc(e,t,n);if(o.success){let i=await e.getCredentials(t);if(i?.token.token)return{token:i.token.token,source:"refreshed",username:i.username}}return{token:null,source:"none",refreshError:o.error}}return{token:null,source:"none",refreshError:"Token expired and no refresh token available"}}import{resolveEnvToken as QC}from"@octocodeai/config";import{execFile as zC}from"child_process";var jC=["/opt/homebrew/bin","/usr/local/bin","/home/linuxbrew/.linuxbrew/bin"];function Zi(e){return new Promise(t=>{let n=["auth","token"];e&&n.push("--hostname",e);let r=process.env.PATH??"",o=new Set(r.split(":")),i=jC.filter(a=>!o.has(a)),s=i.length?`${i.join(":")}:${r}`:r;zC("gh",n,{encoding:"utf8",timeout:5e3,env:{...process.env,PATH:s}},(a,c)=>{if(a||!c){t(null);return}t(c.trim()||null)})})}var qi=null;function Cm(e){qi=e}function Ic(){qi=null}function UC(){if(!qi)throw new Error("Token resolution not initialized. Call initTokenResolution() first.");return qi}async function Sn(e){let t=e?.hostname??bn,n=e?.clientId??hr,r=e?.getGhCliToken??Zi,o=QC();if(o)return{token:o.token,source:o.source,wasRefreshed:!1};let i=await UC().getTokenWithRefresh(t,n);if(i.token)return{token:i.token,source:"octocode-storage",wasRefreshed:i.source==="refreshed",username:i.username};try{let s=await Promise.resolve(r(t));if(s?.trim())return{token:s.trim(),source:"gh-cli",wasRefreshed:!1}}catch(s){process.stderr.write(`[octocode] gh auth token failed: ${s instanceof Error?s.message:String(s)}
10
+ `)}return null}async function Oc(e=bn){let t=await Sn({hostname:e,getGhCliToken:()=>null});return t?{token:t.token,source:t.source}:null}async function vc(e=bn,t=hr){let n=await Sn({hostname:e,clientId:t,getGhCliToken:()=>null});return n?{token:n.token,source:n.source,wasRefreshed:n.wasRefreshed,username:n.username}:null}async function Fc(e){let t=Bt(e.hostname),n={...e,hostname:t,updatedAt:new Date().toISOString()};try{let r=Jt();return r.credentials[t]=n,_c(r),wo(t),{success:!0}}catch{throw new Error("Failed to store credentials")}}async function Un(e="github.com",t){let n=Bt(e);if(!t?.bypassCache){let i=lm(n);if(i!==void 0)return i}let o=Jt().credentials[n]||null;return um(n,o),o}function Ji(e="github.com"){let t=Bt(e);return Jt().credentials[t]||null}async function xm(e="github.com"){let t=Bt(e),n=!1,r=Jt();return r.credentials[t]&&(delete r.credentials[t],Object.keys(r.credentials).length===0?Sm():_c(r),n=!0),wo(t),{success:n,deletedFromFile:n}}async function wm(){let e=Jt();return Object.keys(e.credentials)}function Pm(){let e=Jt();return Object.keys(e.credentials)}async function Tm(e="github.com"){return await Un(e)!==null}function Em(e="github.com"){return Ji(e)!==null}async function es(e,t){let n=await Un(e);return n?(n.token=t,n.updatedAt=new Date().toISOString(),await Fc(n),!0):!1}function Am(){return qt}async function Lm(e="github.com"){let t=await Un(e);return!t||!t.token||Zt(t)?null:t.token.token}function _m(e="github.com"){let t=Ji(e);return!t||!t.token||Zt(t)?null:t.token.token}async function km(e,t){return kc({getCredentials:Un,updateToken:es},e,t)}async function Mc(e,t){return Rm({getCredentials:Un,updateToken:es},e,t)}Cm({getTokenWithRefresh:Mc});import yr from"node:os";import Im from"node:path";var Po=yr.platform()==="win32",Nc=yr.platform()==="darwin",Dc=yr.platform()==="linux",gr=yr.homedir();function Om(){return Po?process.env.APPDATA||Im.join(gr,"AppData","Roaming"):gr}function vm(){return Po?process.env.LOCALAPPDATA||Im.join(gr,"AppData","Local"):gr}function Fm(){return Nc?"macOS":Po?"Windows":Dc?"Linux":yr.platform()}function Mm(){return yr.arch()}import{randomUUID as rx}from"node:crypto";import{existsSync as Hc,readFileSync as Bm,writeFileSync as XC,unlinkSync as YC,renameSync as ZC}from"node:fs";import{isPersistentStorageEnabled as zm,isStatsEnabled as jm}from"@octocodeai/config";import{z as Y}from"zod";var $C=Y.object({rawChars:Y.number(),responseChars:Y.number(),savedChars:Y.number(),calls:Y.number()}),WC=Y.object({hits:Y.record(Y.string(),Y.number()).default({}),rateLimits:Y.number().default(0)}),ts=Y.record(Y.string(),Y.number()).default({}),VC=Y.object({toolCalls:Y.number(),errors:Y.number(),rateLimits:Y.number(),rateLimitsByProvider:ts,rawChars:Y.number(),responseChars:Y.number(),savedChars:Y.number(),charSavingsCalls:Y.number(),githubCacheHits:Y.number(),githubCacheRateLimits:Y.number(),packageRegistryFailures:Y.number().default(0),packageRegistryFailuresByRegistry:ts}),ns=Y.object({toolCalls:Y.number(),errors:Y.number(),rateLimits:Y.number(),rateLimitsByProvider:ts,charsSavedByTool:Y.record(Y.string(),$C).default({}),githubCacheHits:WC.default({hits:{},rateLimits:0}),packageRegistryFailures:ts,totalUsage:VC.optional()}),Nm=Y.object({version:Y.literal(1),sessionId:Y.string(),createdAt:Y.string(),lastActiveAt:Y.string(),stats:ns.optional()}),Dm=Y.object({version:Y.literal(1),stats:ns});function Hm(e){return Object.values(e).reduce((t,n)=>t+n,0)}function KC(e){let t=e.charsSavedByTool??{},n=e.githubCacheHits??{hits:{},rateLimits:0},r=e.rateLimitsByProvider??{},o=e.packageRegistryFailures??{},i=Object.values(t).reduce((s,a)=>({rawChars:s.rawChars+a.rawChars,responseChars:s.responseChars+a.responseChars,savedChars:s.savedChars+a.savedChars,charSavingsCalls:s.charSavingsCalls+a.calls}),{rawChars:0,responseChars:0,savedChars:0,charSavingsCalls:0});return{toolCalls:e.toolCalls,errors:e.errors,rateLimits:e.rateLimits,rateLimitsByProvider:r,...i,githubCacheHits:Hm(n.hits),githubCacheRateLimits:n.rateLimits,packageRegistryFailures:Hm(o),packageRegistryFailuresByRegistry:o}}function Rn(e){let t={...e,rateLimitsByProvider:e.rateLimitsByProvider??{},charsSavedByTool:e.charsSavedByTool??{},githubCacheHits:e.githubCacheHits??{hits:{},rateLimits:0},packageRegistryFailures:e.packageRegistryFailures??{}};return{...t,totalUsage:KC(t)}}function Cn(){return Rn({toolCalls:0,errors:0,rateLimits:0,rateLimitsByProvider:{},charsSavedByTool:{},githubCacheHits:{hits:{},rateLimits:0},packageRegistryFailures:{}})}var $n=ze.session,Wn=ze.stats;function Gm(e,t){let n=`${e}.tmp`;XC(n,JSON.stringify(t,null,2),{mode:384}),ZC(n,e)}function qC(e){let t=JSON.parse(e),n=Dm.safeParse(t);if(n.success)return Rn(n.data.stats);let r=ns.safeParse(t);return r.success?Rn(r.data):null}function JC(){if(!Hc(Wn))return Cn();try{let e=Bm(Wn,"utf8");return qC(e)??Cn()}catch{return Cn()}}function rs(e){if(!zm())return;yn(),jm()&&Gm(Wn,{version:e.version,stats:Rn(e.stats)});let{stats:t,...n}=e;Gm($n,n)}function Qm(){if(!zm()||!Hc($n))return null;try{let e=Bm($n,"utf8"),t=JSON.parse(e),n=Nm.safeParse(t);return n.success?{...n.data,stats:jm()?JC():Cn()}:null}catch{return null}}function Um(){let e=!1;for(let t of[$n,Wn])if(Hc(t))try{YC(t),e=!0}catch{return!1}return e}var ex=6e4,Lt=null,xn=!1,br=null,Gc=!1,To=null,Eo=null,Ao=null,os=!1;function tx(){Gc||(Gc=!0,To=()=>{Lo()},Eo=()=>{Lo()},Ao=()=>{Lo()},process.on("exit",To),process.on("SIGINT",Eo),process.on("SIGTERM",Ao))}function Bc(){To&&(process.removeListener("exit",To),To=null),Eo&&(process.removeListener("SIGINT",Eo),Eo=null),Ao&&(process.removeListener("SIGTERM",Ao),Ao=null),Gc=!1}function nx(){br||(br=setInterval(()=>{xn&&Lt&&(rs(Lt),xn=!1)},ex),br.unref())}function zc(){br&&(clearInterval(br),br=null)}function _o(){if(Lt)return Lt;let e=Qm();return e&&(Lt=e),e}function Sr(e){Lt=e,xn=!0,tx(),nx()}function ko(){xn&&Lt&&(rs(Lt),xn=!1)}function Lo(){if(!os&&xn&&Lt){os=!0;try{rs(Lt),xn=!1}catch{}finally{os=!1}}}function jc(){Lt=null,xn=!1,os=!1}function $m(){jc(),zc(),Bc()}var ox=1;function ix(e){return Rn(e)}function sx(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t)){let i=n[r]??{rawChars:0,responseChars:0,savedChars:0,calls:0};n[r]={rawChars:i.rawChars+o.rawChars,responseChars:i.responseChars+o.responseChars,savedChars:i.savedChars+o.savedChars,calls:i.calls+o.calls}}return n}function Wm(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t))n[r]=(n[r]??0)+o;return n}function ax(e,t){if(!t)return e;let n={...e.hits};for(let[r,o]of Object.entries(t.hits??{}))n[r]=(n[r]??0)+o;return{hits:n,rateLimits:e.rateLimits+(t.rateLimits??0)}}function Vm(){let e=new Date().toISOString();return{version:ox,sessionId:rx(),createdAt:e,lastActiveAt:e,stats:Cn()}}function Km(){ko()}function Xm(){Lo()}function Ym(e){if(e?.forceNew){let r=Vm();return Sr(r),ko(),r}let t=_o();if(t){let r={...t,lastActiveAt:new Date().toISOString()};return Sr(r),ko(),r}let n=Vm();return Sr(n),ko(),n}function Zm(){return _o()?.sessionId??null}function dt(e){let t=_o();if(!t)return{success:!1,session:null};let n=ix(t.stats),r=Rn({toolCalls:n.toolCalls+(e.toolCalls??0),errors:n.errors+(e.errors??0),rateLimits:n.rateLimits+(e.rateLimits??0),rateLimitsByProvider:Wm(n.rateLimitsByProvider,e.rateLimitsByProvider),charsSavedByTool:sx(n.charsSavedByTool,e.charsSavedByTool),githubCacheHits:ax(n.githubCacheHits,e.githubCacheHits),packageRegistryFailures:Wm(n.packageRegistryFailures,e.packageRegistryFailures)}),o={...t,lastActiveAt:new Date().toISOString(),stats:r};return Sr(o),{success:!0,session:o}}function qm(e=1){return dt({toolCalls:e})}function Jm(e=1){return dt({errors:e})}function is(e=1){return dt({rateLimits:e})}function ef(e,t=1){return dt({rateLimits:t,rateLimitsByProvider:{[e]:t}})}function ss(e,t,n){let r=Number.isFinite(t)?Math.max(0,t):0,o=Number.isFinite(n)?Math.max(0,n):0;return dt({charsSavedByTool:{[e]:{rawChars:r,responseChars:o,savedChars:Math.max(0,r-o),calls:1}}})}function as(e,t=1){return dt({githubCacheHits:{hits:{[e]:t},rateLimits:0}})}function cs(e=1){return dt({githubCacheHits:{hits:{},rateLimits:e}})}function tf(e,t=1){return dt({packageRegistryFailures:{[e]:t}})}function nf(){let e=_o();if(!e)return{success:!1,session:null};let t={...e,lastActiveAt:new Date().toISOString(),stats:Cn()};return Sr(t),{success:!0,session:t}}function rf(){return jc(),zc(),Bc(),Um()}function of(){$m()}import{z as Ce}from"zod";var sf=Ce.looseObject({$schema:Ce.string().optional(),version:Ce.number().int().optional(),github:Ce.record(Ce.string(),Ce.unknown()).optional(),local:Ce.record(Ce.string(),Ce.unknown()).optional(),tools:Ce.record(Ce.string(),Ce.unknown()).optional(),network:Ce.record(Ce.string(),Ce.unknown()).optional(),lsp:Ce.record(Ce.string(),Ce.unknown()).optional(),output:Ce.record(Ce.string(),Ce.unknown()).optional()});import{existsSync as cx,readdirSync as lx,lstatSync as ux}from"node:fs";import{join as px}from"node:path";function Io(e){if(!cx(e))return 0;let t=0,n=[e];for(;n.length>0;){let r=n.pop(),o;try{o=lx(r)}catch{continue}for(let i of o){let s=px(r,i);try{let a=ux(s);if(a.isSymbolicLink())continue;a.isDirectory()?n.push(s):a.isFile()&&(t+=a.size)}catch{}}}return t}function dx(e){if(e<1024)return`${e} B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)} KB`;let n=t/1024;return n<1024?`${n.toFixed(1)} MB`:`${(n/1024).toFixed(2)} GB`}import{getConfigSync as Uf}from"@octocodeai/config";var Vn="18.2.0";import{maskSensitiveData as xw}from"@octocodeai/octocode-engine/mask";import{mkdirSync as Nf,readFileSync as pw,renameSync as Hf,rmSync as Gf,statSync as dw,writeFileSync as mw}from"node:fs";import{join as qc}from"node:path";import{isPersistentStorageEnabled as Bf}from"@octocodeai/config";import{existsSync as No,readFileSync as Tx,writeFileSync as Ex,mkdirSync as Ax,rmSync as Mo,readdirSync as Lx,statSync as _x}from"node:fs";import{join as wn}from"node:path";import{join as ls}from"node:path";import{createHash as af}from"node:crypto";function fx(e){return Oo(e)}function Oo(e){return ls(e,"tmp","clone")}function us(e){return ls(e,"tmp","tree")}function hx(e){return e?`__sp_${af("sha256").update(e).digest("hex").substring(0,6)}`:""}function gx(e){if(!/[\\/]/.test(e))return e;let t=af("sha256").update(e).digest("hex").substring(0,8);return`${e.replace(/[\\/]/g,"_")}__b_${t}`}function Qc(e,t,n,r,o){let i=`${gx(r)}${hx(o)}`;return ls(Oo(e),t,n,i)}function vo(e,t,n,r){if(!/^[0-9a-f]{40}$/i.test(r))throw new Error("Tree cache identity must be a 40-character commit SHA.");return ls(us(e),t,n,r.toLowerCase())}import{readFileSync as yx,readdirSync as bx,renameSync as Sx,rmSync as uf,statSync as pf,writeFileSync as Rx}from"node:fs";import{join as Rr}from"node:path";var Cx=900*1e3,cf=300*1e3,df=".octocode-lock.json";function xx(e){return typeof e=="object"&&e!==null}function lf(e){try{return bx(e)}catch{return[]}}function Uc(e,t=process.pid,n=Date.now()){try{Rx(Rr(e,df),JSON.stringify({pid:t,createdAt:n}),{encoding:"utf8",mode:384})}catch{}}function wx(e){try{let t=JSON.parse(yx(Rr(e,df),"utf8"));return!xx(t)||!Number.isInteger(t.pid)||t.pid<=0||typeof t.createdAt!="number"?null:{pid:t.pid,createdAt:t.createdAt}}catch{return null}}function Px(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function ps(e,t=Date.now()){let n,r=wx(e);if(r){if(n=r.createdAt,t-n<=cf||Px(r.pid))return!1}else{try{n=pf(e).mtimeMs}catch{return!1}if(t-n<=cf)return!1}let o=`${e}.stale-${process.pid}-${t}`;try{return Sx(e,o),uf(o,{recursive:!0,force:!0}),!0}catch{return!1}}function $c(e,t=Date.now()){let n=Rr(e,"tmp","clone-tmp"),r=0;for(let i of lf(n)){let s=Rr(n,i);try{let a=pf(s);if(t-a.mtimeMs<=Cx)continue;uf(s,{recursive:!0,force:!0}),r++}catch{}}let o=Rr(e,"tmp","clone-locks");for(let i of lf(o))ps(Rr(o,i),t)&&r++;return r}var kx=1440*60*1e3,Ix=2*1024*1024*1024,Ox=50,ff=".octocode-clone-meta.json";function vx(e){return typeof e=="object"&&e!==null}function Fx(e){if(!vx(e)||typeof e.clonedAt!="string"||typeof e.expiresAt!="string"||typeof e.owner!="string"||typeof e.repo!="string"||typeof e.branch!="string"||e.source!=="clone"&&e.source!=="directoryFetch"&&e.source!=="treeFetch")return null;let t={clonedAt:e.clonedAt,expiresAt:e.expiresAt,owner:e.owner,repo:e.repo,branch:e.branch,source:e.source};return typeof e.sparsePath=="string"&&(t.sparsePath=e.sparsePath),typeof e.sizeBytes=="number"&&(t.sizeBytes=e.sizeBytes),typeof e.commitSha=="string"&&e.commitSha.length===40&&(t.commitSha=e.commitSha),t}function Wc(e){let t=wn(e,ff);if(!No(t))return null;try{return Fx(JSON.parse(Tx(t,"utf-8")))}catch{return null}}function Cr(e,t){try{Ex(wn(e,ff),JSON.stringify(t,null,2),"utf-8")}catch{}}function hf(e){return Date.now()<new Date(e.expiresAt).getTime()}function xr(e){let t=Wc(e);return t?hf(t)?No(e)?{hit:!0,meta:t}:{hit:!1}:{hit:!1}:{hit:!1}}function Mx(){let e=process.env.OCTOCODE_CACHE_TTL_MS;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return kx}function Nx(){let e=process.env.OCTOCODE_MAX_CACHE_SIZE;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return Ix}function Dx(){let e=process.env.OCTOCODE_MAX_CLONES;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return Math.floor(t)}return Ox}function wr(e,t,n,r,o,i,s){let a=new Date;return{clonedAt:a.toISOString(),expiresAt:new Date(a.getTime()+Mx()).toISOString(),owner:e,repo:t,branch:n,source:r,...o?{sparsePath:o}:{},...i!=null?{sizeBytes:i}:{},...s?{commitSha:s}:{}}}function Pn(e){let t=wn(e,"..");try{No(t)||Ax(t,{recursive:!0,mode:448})}catch(n){throw new Error(`Failed to create clone parent directory '${t}': ${n instanceof Error?n.message:String(n)}`)}}function ds(e){try{No(e)&&Mo(e,{recursive:!0,force:!0})}catch{}}function Fo(e){try{return _x(e).isDirectory()}catch{return!1}}function Kn(e){try{return Lx(e)}catch{return[]}}function*gf(e){for(let t of Kn(e)){let n=wn(e,t);if(Fo(n))for(let r of Kn(n)){let o=wn(n,r);if(Fo(o))for(let i of Kn(o)){let s=wn(o,i);Fo(s)&&(yield s)}}}}function mf(e){for(let t of[...Kn(e)]){let n=wn(e,t);if(Fo(n)){for(let r of[...Kn(n)]){let o=wn(n,r);if(Fo(o)&&Kn(o).length===0)try{Mo(o,{recursive:!0,force:!0})}catch{}}if(Kn(n).length===0)try{Mo(n,{recursive:!0,force:!0})}catch{}}}}function Hx(e){let t=0;for(let n of gf(e))try{let r=Wc(n);(!r||!hf(r))&&(Mo(n,{recursive:!0,force:!0}),t++)}catch{}return t}function Gx(e){let t=[];for(let n of gf(e)){let r=Wc(n);if(!r)continue;let o=Number.isNaN(Date.parse(r.clonedAt))?0:Date.parse(r.clonedAt);t.push({branchDir:n,clonedAtMs:o,sizeBytes:r.sizeBytes??Io(n)})}return t}function Bx(e,t,n){let r=e.reduce((s,a)=>s+a.sizeBytes,0),o=e.length;if(r<=t&&o<=n)return 0;e.sort((s,a)=>s.clonedAtMs-a.clonedAtMs);let i=0;for(let s of e){if(r<=t&&o<=n)break;try{Mo(s.branchDir,{recursive:!0,force:!0}),i++,r-=s.sizeBytes,o-=1}catch{}}return i}function yf(e){if(!No(e))return 0;let t=0;try{t+=Hx(e)}catch{return t}mf(e);let n=Bx(Gx(e),Nx(),Dx());return t+=n,n>0&&mf(e),t}function ms(e){return yf(Oo(e))}function Pr(e){return yf(us(e))}import zx from"crypto";var jx="v2",Qx=new Set([]);function Ux(e){if(e===null||typeof e!="object"||Array.isArray(e))return e;let t=e,n=!1,r={};for(let o of Object.keys(t)){if(Qx.has(o)){n=!0;continue}r[o]=t[o]}return n?r:e}function xe(e,t,n){let r=Vc(Ux(t)),o=n?`${n}:${r}`:r,i=zx.createHash("sha256").update(o).digest("hex");return`${jx}-${e}:${i}`}function Vc(e,t=new WeakSet){return e===null?"null":e===void 0?"undefined":typeof e!="object"?String(e):t.has(e)?'"[Circular]"':(t.add(e),Array.isArray(e)?`[${e.map(o=>Vc(o,t)).join(",")}]`:`{${Object.keys(e).sort().map(o=>{let i=e[o];return`"${o}":${Vc(i,t)}`}).join(",")}}`)}import $x from"node-cache";var Wx=300*1e3,je=new $x({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1}),me={hits:0,misses:0,sets:0,totalKeys:0,lastReset:new Date},bf={"gh-api-code":3600,"gh-api-repos":7200,"gh-api-prs":1800,"gh-api-issues":1800,"gh-api-history":1800,"gh-api-releases":3600,"gh-api-file-content":300,"gh-repo-structure-api":7200,"github-user":900,"npm-search":14400,default:86400},it=new Map;function Vx(e){return e.match(/^v\d+-([^:]+):/)?.[1]}function Kx(e){return e.startsWith("gh-api-")||e.startsWith("gh-repo-")||e==="github-user"}function Xn(e){let t=Vx(e);if(!(!t||!Kx(t)))try{as(t,1)}catch{}}function fs(){let e=Date.now();for(let[t,n]of it.entries())e-n.startedAt>Wx&&it.delete(t)}function hs(e){return bf[e]||bf.default}function Yn(e,t,n){try{return je.set(e,t,n),me.sets++,me.totalKeys=je.keys().length,!0}catch{try{let r=je.keys();for(let o of r)je.get(o);return je.set(e,t,n),me.sets++,me.totalKeys=je.keys().length,!0}catch{return!1}}}import{createHash as Xx}from"node:crypto";import{chmod as Sf,mkdir as Cf,readFile as xf,readdir as Yx,rename as Rf,rm as Zx,stat as Kc,writeFile as wf}from"node:fs/promises";import{join as Do}from"node:path";import{isPersistentStorageEnabled as qx}from"@octocodeai/config";var Pf=1,Tf=5*1024*1024,Jx=5e3,ew=256*1024*1024,tw=1440*60*1e3,nw=900*1e3,Ef=".last-gc",_e={hits:0,misses:0,sets:0,errors:0,evictions:0};function gs(e,t){let n=Number(process.env[e]);return Number.isFinite(n)&&n>0?Math.floor(n):t}function Xc(){if(!qx())return!1;let e=process.env.OCTOCODE_DISK_CACHE?.trim().toLowerCase();return!(e==="false"||e==="0")}function Yc(e=gn()){return Do(e,"tmp","response")}function rw(e){return(e.match(/^v\d+-([^:]+):/)?.[1]??"default").replace(/[^a-zA-Z0-9._-]/g,"_")}function Af(e,t=gn()){let n=Xx("sha256").update(e).digest("hex");return Do(Yc(t),rw(e),n.slice(0,2),`${n}.json`)}function Lf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ow(e,t){let n;try{n=JSON.parse(e)}catch{return null}return!Lf(n)||n.version!==Pf||n.key!==t||typeof n.createdAt!="number"||typeof n.expiresAt!="number"||typeof n.staleUntil!="number"||!("value"in n)||n.etag!==void 0&&typeof n.etag!="string"?null:n}async function en(e){try{await Zx(e,{force:!0,recursive:!0})}catch{}}async function ys(e,t={}){if(!Xc())return;let n=Af(e);try{let r=await Kc(n);if(!r.isFile()||r.size>gs("OCTOCODE_DISK_CACHE_MAX_ENTRY_SIZE",Tf)){await en(n),_e.errors++;return}let o=ow(await xf(n,"utf8"),e);if(!o){await en(n),_e.errors++;return}let i=Date.now();if(i>=o.staleUntil){await en(n),_e.evictions++,_e.misses++;return}if(i>=o.expiresAt&&!t.allowStale){_e.misses++;return}return _e.hits++,{value:o.value,...o.etag?{etag:o.etag}:{},state:i<o.expiresAt?"fresh":"stale",expiresAt:o.expiresAt}}catch(r){r.code!=="ENOENT"&&_e.errors++,_e.misses++;return}}async function Ho(e,t,n,r={}){if(!Xc())return!1;let o=Date.now(),i=Math.max(1,n*1e3),s=Math.max(i,(r.staleTtlSeconds??n)*1e3),a={version:Pf,key:e,createdAt:o,expiresAt:o+i,staleUntil:o+s,value:t,...r.etag?{etag:r.etag}:{}},c;try{c=JSON.stringify(a)}catch{return _e.errors++,!1}if(c===void 0||Buffer.byteLength(c)>gs("OCTOCODE_DISK_CACHE_MAX_ENTRY_SIZE",Tf))return!1;let l=Af(e),u=Do(l,".."),p=`${l}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;try{await Cf(u,{recursive:!0,mode:448}),await Sf(u,448),await wf(p,c,{encoding:"utf8",mode:384}),await Sf(p,384);try{await Rf(p,l)}catch(d){let m=d.code;if(m!=="EEXIST"&&m!=="EPERM")throw d;await en(l),await Rf(p,l)}return _e.sets++,!0}catch{return _e.errors++,await en(p),!1}}async function iw(e){let t=[],n=[e];for(;n.length>0;){let r=n.pop(),o;try{o=await Yx(r,{withFileTypes:!0})}catch{continue}for(let i of o){let s=Do(r,i.name);i.isDirectory()?n.push(s):i.isFile()&&i.name!==Ef&&t.push(s)}}return t}async function _f(e,t,n){if(!Xc())return 0;let r=Yc(e),o=Do(r,Ef);if(n)try{let p=await Kc(o);if(t-p.mtimeMs<tw)return 0}catch{}let i=0,s=await iw(r),a=gs("OCTOCODE_DISK_CACHE_MAX_ENTRIES",Jx),c=gs("OCTOCODE_DISK_CACHE_MAX_SIZE",ew),l=[],u=0;for(let p of s)try{let d=await Kc(p);if(p.includes(".tmp-")){t-d.mtimeMs>nw&&(await en(p),i++);continue}let m=await xf(p,"utf8"),f;try{f=JSON.parse(m)}catch{f=null}if(!Lf(f)||typeof f.staleUntil!="number"||t>=f.staleUntil){await en(p),i++;continue}l.push({path:p,size:d.size,modified:d.mtimeMs}),u+=d.size}catch{}for(l.sort((p,d)=>p.modified-d.modified);l.length>a||u>c;){let p=l.shift();if(!p)break;await en(p.path),u-=p.size,i++}try{await Cf(r,{recursive:!0,mode:448}),await wf(o,String(t),{encoding:"utf8",mode:384})}catch{_e.errors++}return _e.evictions+=i,i}function PM(e=gn(),t=Date.now()){return _f(e,t,!0)}function kf(e=gn(),t=Date.now()){return _f(e,t,!1)}async function TM(e=gn()){await en(Yc(e))}function If(){return{..._e}}function Of(){_e.hits=0,_e.misses=0,_e.sets=0,_e.errors=0,_e.evictions=0}import{AsyncLocalStorage as sw}from"node:async_hooks";var bs=new sw;async function vf(e){let t={hit:!1};return{value:await bs.run({root:t,depth:0,role:"response"},e),cacheHit:t.hit}}function Ss(e,t="response"){let n=bs.getStore();return n?bs.run({root:n.root,depth:n.depth+1,role:t},e):e()}function tn(){let e=bs.getStore();e&&e.depth<=1&&e.role==="response"&&(e.root.hit=!0)}function aw(e,t){if(t)return t;let n=e.match(/^v\d+-([^:]+):/);return hs(n?.[1]??"default")}async function De(e,t,n={}){return Ss(()=>cw(e,t,n),n.cacheRole)}async function cw(e,t,n){if(n.skipCache)return await t();if(!n.forceRefresh){try{let a=je.get(e);if(a!==void 0)return me.hits++,Xn(e),tn(),a}catch{}let s=await ys(e);if(s?.state==="fresh")return me.hits++,Xn(e),tn(),Yn(e,s.value,Math.max(1,(s.expiresAt-Date.now())/1e3)),s.value}fs();let r=it.get(e);if(r)return r.promise;let o=Symbol(e),i=(async()=>{try{let s=await t();if(n.forceRefresh||me.misses++,(n.shouldCache??(()=>!0))(s)){let c=aw(e,n.ttl);Yn(e,s,c),await Ho(e,s,c)}return s}finally{it.get(e)?.requestId===o&&it.delete(e)}})();return it.set(e,{promise:i,startedAt:Date.now(),requestId:o}),i}import lw from"node-cache";var Ff=86400;function Mf(e,t){if(t)return t;let n=e.match(/^v\d+-([^:]+):/);return hs(n?.[1]??"default")}var Tr=new lw({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1});async function Rs(e,t,n={}){return Ss(()=>uw(e,t,n),n.cacheRole)}async function uw(e,t,n){if(n.skipCache)return(await t({})).value;let r;if(!n.forceRefresh){try{let a=je.get(e);if(a!==void 0)return me.hits++,Xn(e),tn(),a}catch{}if(r=await ys(e,{allowStale:!0}),r?.state==="fresh")return me.hits++,Xn(e),tn(),Yn(e,r.value,Math.max(1,(r.expiresAt-Date.now())/1e3)),r.etag&&Tr.set(e,{data:r.value,etag:r.etag}),r.value}fs();let o=it.get(e);if(o)return o.promise;let i=Symbol(e),s=(async()=>{try{let c=(n.forceRefresh?void 0:Tr.get(e))??(r?{data:r.value,etag:r.etag}:void 0),l=await t({ifNoneMatch:!n.forceRefresh&&c?.etag?c.etag:void 0});if(l.notModified&&c){me.hits++,Xn(e),tn();let p=Mf(e,n.ttl);return Yn(e,c.data,p),await Ho(e,c.data,p,{...c.etag?{etag:c.etag}:{},staleTtlSeconds:Ff}),c.data}if(n.forceRefresh||me.misses++,(n.shouldCache??(()=>!0))(l.value)){let p=Mf(e,n.ttl);Yn(e,l.value,p),Tr.set(e,{data:l.value,etag:l.etag}),await Ho(e,l.value,p,{...l.etag?{etag:l.etag}:{},staleTtlSeconds:Ff})}return l.value}finally{it.get(e)?.requestId===i&&it.delete(e)}})();return it.set(e,{promise:s,startedAt:Date.now(),requestId:i}),s}function zM(){je.flushAll(),Tr.flushAll(),it.clear(),me.hits=0,me.misses=0,me.sets=0,me.totalKeys=0,me.lastReset=new Date,Of()}function Tn(e){let t=je.keys(),n=0;for(let r of t){let i=r.match(/^v\d+-([^:]+):/)?.[1];!i||!i.startsWith(e)||je.del(r)>0&&n++}return n>0&&(me.totalKeys=je.keys().length),n}function jM(){return Tn("local-")}function QM(){return Tn("lsp-")}function UM(){let e=0;return e+=Tn("gh-api-"),e+=Tn("bb-api-"),e+=Tn("gh-repo-"),e+=Tn("bb-repo-"),e+=Tn("github-user"),e+=Tn("npm-search"),Tr.flushAll(),e}function $M(){let e=me.hits+me.misses,t=If();return{...me,hitRate:e>0?me.hits/e*100:0,cacheSize:je.keys().length,diskHits:t.hits,diskMisses:t.misses,diskSets:t.sets,diskErrors:t.errors,diskEvictions:t.evictions}}var Df=1440*60*1e3,fw=60*1e3,hw=900*1e3,gw=".last-cache-maintenance",yw=".cache-maintenance.lock",Er=null,xs=null,Cs=new Map;function zf(e){return qc(e,"tmp")}function jf(e){return qc(zf(e),gw)}function bw(e){try{let t=Number(pw(jf(e),"utf8"));return Number.isFinite(t)&&t>=0?t:null}catch{return null}}function Zc(e,t=Date.now()){let n=bw(e);return n===null?0:Math.min(Df,Math.max(0,n+Df-t))}function Sw(e,t){let n=zf(e),r=qc(n,yw);try{Nf(n,{recursive:!0,mode:448})}catch{return null}let o=()=>{try{return Nf(r,{mode:448}),!0}catch{return!1}};if(o())return r;try{if(t-dw(r).mtimeMs<=hw)return null;let i=`${r}.stale-${process.pid}-${t}`;Hf(r,i),Gf(i,{recursive:!0,force:!0})}catch{return null}return o()?r:null}function Rw(e,t){let n=jf(e),r=`${n}.tmp-${process.pid}-${t}`;mw(r,String(t),{encoding:"utf8",mode:384}),Hf(r,n)}async function Cw(e,t){if(Zc(e,t)>0)return!1;let n=Sw(e,t);if(!n)return!1;try{if(Zc(e,t)>0)return!1;try{return ms(e),Pr(e),$c(e,t),await kf(e,t),Rw(e,t),!0}catch{return!1}}finally{try{Gf(n,{recursive:!0,force:!0})}catch{}}}function Ar(e,t=Date.now()){if(!Bf())return Promise.resolve(!1);let n=Cs.get(e);if(n)return n;let r=Cw(e,t).finally(()=>{Cs.get(e)===r&&Cs.delete(e)});return Cs.set(e,r),r}function Qf(e){if(xs!==e)return;let t=Math.max(fw,Zc(e));Er=setTimeout(()=>{Er=null,Ar(e).finally(()=>{Qf(e)})},t),Er.unref()}function iN(e){Bf()&&xs===null&&(xs=e,Ar(e).finally(()=>{Qf(e)}))}function sN(){xs=null,Er&&clearTimeout(Er),Er=null}var En=null,Lr=null,Jc=Sn;function fN(e){e.resolveTokenFull&&(Jc=e.resolveTokenFull)}function hN(){Jc=Sn}var ww=new Set(["env:OCTOCODE_TOKEN","env:GH_TOKEN","env:GITHUB_TOKEN","env:GITHUB_PERSONAL_ACCESS_TOKEN","octocode-storage","gh-cli","none"]);async function el(){try{let e=await Jc({hostname:"github.com"});if(e?.token){let t=e.source??"none";return{token:e.token,source:ww.has(t)?t:"none"}}return{token:null,source:"none"}}catch{return{token:null,source:"none"}}}async function $f(){if(En!==null)return;if(Lr!==null)return Lr;let e=(async()=>{let t=Uf(),n=await el();En={version:Vn,githubApiUrl:t.github.apiUrl,toolsToRun:t.tools.enabled??void 0,disableTools:t.tools.disabled??void 0,timeout:t.network.timeout,maxRetries:t.network.maxRetries,enableLocal:t.local.enabled,enableClone:t.local.enableClone&&t.storage.mode==="persistent",tokenSource:n.source},await Ar(At())})();Lr=e;try{await e}catch(t){throw Lr===e&&(En=null,Lr=null),t}}function gN(){En=null,Lr=null}function Go(){if(!En){let e=xw(Tc.NOT_INITIALIZED.message);throw new Error(e)}return En}async function tl(){return(await el()).token}function yN(){return Go().enableLocal}function Wf(){let e=Go();return e.enableLocal&&e.enableClone}async function bN(){return En!==null?En.tokenSource:(await el()).source}function nl(){return"github"}function rl(){let e=Uf().github.apiUrl;return{provider:"github",baseUrl:e!=="https://api.github.com"?e:void 0}}function An(e){(e.provider?dt({rateLimits:1,rateLimitsByProvider:{[e.provider]:1}}):is(1)).session&&e.provider==="github"&&cs(1)}function Vf(e){dt({packageRegistryFailures:{[e]:1}})}function qf(e){return Ew("sha256").update(e).digest("hex").substring(0,16)}async function ke(e){let t=e?.token??await tl(),n=t?qf(t):"anon",r=Go().githubApiUrl||"https://api.github.com";try{let o=new URL(r).host;if(o&&o!=="api.github.com")return`${n}@${o}`}catch{}return n}var Aw=Pw.plugin(Tw),Lw=300*1e3,ol=50,_w=60*1e3;function Jf(e){return Date.now()-e.createdAt>Lw}var jt=new Map,Ln=null;function eh(){for(let[e,t]of jt.entries())Jf(t)&&jt.delete(e);if(jt.size>ol){let e=jt.size-ol,t=0;for(let[n]of jt){if(t>=e)break;jt.delete(n),t++}}}function kw(){Ln||(Ln=setInterval(eh,_w),typeof Ln=="object"&&"unref"in Ln&&Ln.unref())}var Kf=3,Xf=60;function Yf(e,t,n){An({limit_type:e,retry_after_seconds:t,api_method:n.method,api_url:n.url,provider:"github"})}var Iw=()=>({onRateLimit:(e,t,n,r)=>(Yf("primary",e,t),r<Kf&&e<Xf),onSecondaryRateLimit:(e,t,n,r)=>(Yf("secondary",e,t),r<Kf&&e<Xf)});function Ow(e){let t=Go(),n=t.githubApiUrl,r={debug:()=>{},info:()=>{},warn:()=>{},error:(...i)=>console.error(...i)},o={userAgent:`octocode-mcp/${Vn}`,baseUrl:n,request:{timeout:t.timeout||3e4,log:r},throttle:Iw(),log:r,...e&&{auth:e}};return new Aw(o)}async function $(e){kw();let t=e?.token??await tl(),n=t?qf(t):"ANONYMOUS",r=jt.get(n);if(r&&!Jf(r))return r.client;jt.size>=ol&&eh();let o=Ow(t??void 0);return jt.set(n,{client:o,createdAt:Date.now()}),o}var vw=200,Fw=300*1e3,Zn=new Map;async function Be(e,t,n){let o=`${await ke(n)}:${e}/${t}`,i=Zn.get(o);if(i&&i.expiresAt>Date.now())return i.branch;i&&Zn.delete(o);let s=await $(n);try{let{data:c}=await s.rest.repos.get({owner:e,repo:t}),l=c.default_branch;return Zf(o,l),l}catch{}let a=["main","master"];for(let c of a)try{return await s.rest.repos.getBranch({owner:e,repo:t,branch:c}),Zf(o,c),c}catch{}throw new Error(`Could not determine default branch for ${e}/${t}. The repository may not exist, require authentication, or be inaccessible.`)}function Zf(e,t){if(Zn.size>=vw){let n=Zn.keys().next().value;n!==void 0&&Zn.delete(n)}Zn.set(e,{branch:t,expiresAt:Date.now()+Fw})}function _N(){jt.clear(),Zn.clear(),Ln&&(clearInterval(Ln),Ln=null)}import{ContentSanitizer as Jw}from"@octocodeai/octocode-engine/contentSanitizer";import{createRequire as Mw}from"node:module";var Nw=Mw(import.meta.url),th="@octocodeai/octocode-engine",Dw=()=>globalThis.__OCTOCODE_ENGINE_BINDING__??Nw(th),ws,Hw=Dw,il=class extends Error{constructor(n){super(`Failed to load native dependency ${th}`);this.cause=n;this.name="ContextUtilsLoadError"}cause};function te(){if(ws)return ws;try{return ws=Hw(),ws}catch(e){throw new il(e)}}var D={applyContentViewMinification(e,t){return te().applyContentViewMinification(e,t)},applyMinification(e,t){return te().applyMinification(e,t)},minifyContent(e,t){return te().minifyContent(e,t)},minifyContentSync(e,t){return te().minifyContentSync(e,t)},minifyContentResult(e,t){return te().minifyContentResult(e,t)},minifyMarkdownCore(e){return te().minifyMarkdownCore(e)},extractSignatures(e,t){return te().extractSignatures(e,t)},extractJsSymbols(e,t){return te().extractJsSymbols(e,t)},findInFileReferences(e,t,n,r){return te().findInFileReferences(e,t,n,r)},extractGraphFacts(e,t){return te().extractGraphFacts(e,t)},scanGraphFacts(e){return te().scanGraphFacts(e)},getSupportedJsTsExtensions(){return te().getSupportedJsTsExtensions()},getSupportedGraphFactExtensions(){return te().getSupportedGraphFactExtensions()},getGraphFactCapabilities(){return te().getGraphFactCapabilities()},structuralSearch(e,t,n,r){return te().structuralSearch(e,t,n,r)},structuralSearchFiles(e){return te().structuralSearchFiles(e)},structuralSearchFilesDetailed(e){return te().structuralSearchFilesDetailed(e)},getSupportedStructuralExtensions(){return te().getSupportedStructuralExtensions()},validateRipgrepPattern(e,t,n){return te().validateRipgrepPattern(e,t,n)},getSemanticBoundaryOffsets(e,t){return te().getSemanticBoundaryOffsets(e,t)},jsonToYamlString(e,t){return te().jsonToYamlString(e,t)},parseRipgrepJson(e,t){return te().parseRipgrepJson(e,t)},searchRipgrep(e){return te().searchRipgrep(e)},queryFileSystem(e){return te().queryFileSystem(e)},extractMatchingLines(e,t,n){return te().extractMatchingLines(e,t,n)},filterPatch(e,t){return te().filterPatch(e,t)},computeLineDiff(e,t){return te().computeLineDiff(e,t)},charToByteOffset(e,t){return te().charToByteOffset(e,t)},byteToCharOffset(e,t){return te().byteToCharOffset(e,t)},byteSliceContent(e,t,n){return te().byteSliceContent(e,t,n)},sliceContent(e,t,n,r){return te().sliceContent(e,t,n,r)},get SIGNATURES_ONLY_HINT(){return te().SIGNATURES_ONLY_HINT}};import{RequestError as rh}from"octokit";var K={AUTH_REQUIRED:"AUTH_REQUIRED",RATE_LIMIT_PRIMARY:"RATE_LIMIT_PRIMARY",RATE_LIMIT_SECONDARY:"RATE_LIMIT_SECONDARY",FORBIDDEN_PERMISSIONS:"FORBIDDEN_PERMISSIONS",NOT_FOUND:"NOT_FOUND",INVALID_REQUEST:"INVALID_REQUEST",SERVER_UNAVAILABLE:"SERVER_UNAVAILABLE",NETWORK_CONNECTION_FAILED:"NETWORK_CONNECTION_FAILED",REQUEST_TIMEOUT:"REQUEST_TIMEOUT",UNKNOWN:"UNKNOWN"},Ie={[K.AUTH_REQUIRED]:{message:"GitHub authentication required",suggestion:"TELL THE USER: Refresh your GitHub token! Run 'gh auth login' OR 'gh auth refresh' OR set a new GITHUB_TOKEN/GH_TOKEN environment variable",explanation:"API request requires authentication. GitHub APIs have different rate limits for authenticated (5000/hour) vs unauthenticated (60/hour) requests."},[K.RATE_LIMIT_PRIMARY]:{message:"GitHub API rate limit exceeded",messageWithTime:(e,t)=>`GitHub API rate limit exceeded. Resets at ${e.toISOString()} (in ${t} seconds)`,messageWithoutTime:"GitHub API rate limit exceeded. Reset time unavailable - check GitHub status or try again later",suggestion:"Set GITHUB_TOKEN for higher rate limits (5000/hour vs 60/hour)",explanation:"Primary rate limit tracks total API calls per hour. Authenticated users get 5000 requests/hour, unauthenticated get 60 requests/hour."},[K.RATE_LIMIT_SECONDARY]:{message:e=>`GitHub secondary rate limit triggered. Retry after ${e} seconds`,suggestion:"Reduce request frequency to avoid abuse detection",explanation:"Secondary rate limits prevent API abuse by limiting request frequency. Triggered by making too many requests too quickly, regardless of remaining quota.",fallbackRetryAfter:60},[K.FORBIDDEN_PERMISSIONS]:{message:"Access forbidden - insufficient permissions",suggestion:"Check repository permissions or authentication",suggestionWithScopes:e=>`Missing required scopes: ${e.join(", ")}. Run: gh auth refresh -s ${e.join(" -s ")}`,fallbackSuggestion:"Token may not have sufficient permissions for this operation",explanation:"GitHub tokens require specific OAuth scopes for different operations. Common scopes: repo (full repository access), read:org (organization access), gist (gist access)."},[K.NOT_FOUND]:{message:"Repository, resource, or path not found",explanation:"Resource not found or not accessible. Could be: incorrect path, deleted resource, private repository without access, wrong branch name."},[K.INVALID_REQUEST]:{message:"Invalid search query or request parameters",suggestion:"Check search syntax and parameter values",explanation:"Request was well-formed but contains invalid parameters. Common causes: invalid search syntax, parameters out of range, invalid filter combinations."},[K.SERVER_UNAVAILABLE]:{message:"GitHub API temporarily unavailable",suggestion:"Retry the request after a short delay",explanation:"GitHub servers are temporarily unavailable. Usually resolves quickly. Check https://www.githubstatus.com for service status."},[K.NETWORK_CONNECTION_FAILED]:{message:"Network connection failed",suggestion:"Check internet connection and GitHub API status",explanation:"Cannot establish connection to GitHub API. Check internet connectivity, DNS settings, and firewall/proxy configuration."},[K.REQUEST_TIMEOUT]:{message:"Request timeout",suggestion:"Retry the request or check network connectivity",explanation:"Request exceeded timeout limit. Could be slow network, large response size, or GitHub server delay."},[K.UNKNOWN]:{message:"Unknown error occurred",explanation:"An unexpected error occurred that does not match known error patterns."}},nh={401:K.AUTH_REQUIRED,403:K.FORBIDDEN_PERMISSIONS,404:K.NOT_FOUND,422:K.INVALID_REQUEST,502:K.SERVER_UNAVAILABLE,503:K.SERVER_UNAVAILABLE,504:K.SERVER_UNAVAILABLE},sl={CONNECTION_FAILED:["ENOTFOUND","ECONNREFUSED"],TIMEOUT:["timeout"]},al={SECONDARY:/\bsecondary rate\b/i,GRAPHQL_TYPE:"RATE_LIMITED"},Ps={RESET_BUFFER_SECONDS:1,SECONDARY_FALLBACK_SECONDS:60};var Gw=["cannot be searched","do not exist","does not exist","could not be found","cannot be found"];function Qt(e){if(!(e instanceof rh)||e.status!==422)return!1;let t=e.response?.data?.errors;return!Array.isArray(t)||t.length===0?!1:t.some(n=>{let r=typeof n?.message=="string"?n.message.toLowerCase():"";return Gw.some(o=>r.includes(o))})}function J(e){return e instanceof rh?Bw(e):e instanceof Error?Kw(e):{error:typeof e=="string"?e:Ie[K.UNKNOWN].message,type:"unknown"}}function Bw(e){let{status:t,message:n,response:r}=e;if(t===403)return jw(n,r);if(t===429)return zw(n,r);let o=nh[t];return o?Vw(o,t):_r(K.UNKNOWN,{error:n||Ie[K.UNKNOWN].message,status:t})}function cl(e,t){let n=e?.[t],r=n===void 0?NaN:parseInt(String(n),10);return isNaN(r)?void 0:r}function zw(e,t){let n=t?.headers,r=cl(n,"retry-after"),o=cl(n,"x-ratelimit-reset"),i=cl(n,"x-ratelimit-remaining")??0,s=o?new Date(o*1e3):null,a=r??(s?Math.max(Math.ceil((s.getTime()-Date.now())/1e3)+Ps.RESET_BUFFER_SECONDS,0):void 0);return An({limit_type:"primary",retry_after_seconds:a,rate_limit_remaining:i,rate_limit_reset_ms:s?s.getTime():void 0,provider:"github"}),_r(K.RATE_LIMIT_PRIMARY,{error:e||Ie[K.RATE_LIMIT_PRIMARY].messageWithoutTime,status:429,rateLimitRemaining:i,rateLimitReset:s?s.getTime():void 0,retryAfter:a,scopesSuggestion:Ie[K.RATE_LIMIT_PRIMARY].suggestion})}function jw(e,t){let n=t?.headers;if(al.SECONDARY.test(e))return Qw(n);let r=n?.["x-ratelimit-remaining"],o=Ww(t);return r!==void 0&&String(r)==="0"||o?Uw(n):$w(n)}function Qw(e){let t=Number(e?.["retry-after"]),n=isNaN(t)?Ps.SECONDARY_FALLBACK_SECONDS:t;return An({limit_type:"secondary",retry_after_seconds:n,provider:"github"}),_r(K.RATE_LIMIT_SECONDARY,{error:Ie[K.RATE_LIMIT_SECONDARY].message(n),status:403,rateLimitRemaining:0,retryAfter:n,scopesSuggestion:Ie[K.RATE_LIMIT_SECONDARY].suggestion})}function Uw(e){let t=e?.["x-ratelimit-reset"],n=t?parseInt(String(t),10):NaN,r=isNaN(n)?null:new Date(n*1e3),o=r?Math.max(Math.ceil((r.getTime()-Date.now())/1e3)+Ps.RESET_BUFFER_SECONDS,0):void 0,i=r?Ie[K.RATE_LIMIT_PRIMARY].messageWithTime(r,o):Ie[K.RATE_LIMIT_PRIMARY].messageWithoutTime;return An({limit_type:"primary",retry_after_seconds:o,rate_limit_remaining:0,rate_limit_reset_ms:r?r.getTime():void 0,provider:"github"}),_r(K.RATE_LIMIT_PRIMARY,{error:i,status:403,rateLimitRemaining:0,rateLimitReset:r?r.getTime():void 0,retryAfter:o,scopesSuggestion:Ie[K.RATE_LIMIT_PRIMARY].suggestion})}function $w(e){let t=e?.["x-accepted-oauth-scopes"],n=e?.["x-oauth-scopes"],r=Ie[K.FORBIDDEN_PERMISSIONS].suggestion;return t&&n&&(r=Xw(String(t),String(n))),_r(K.FORBIDDEN_PERMISSIONS,{error:Ie[K.FORBIDDEN_PERMISSIONS].message,status:403,scopesSuggestion:r})}function Ww(e){return e?.data?.errors?.some(n=>n.type===al.GRAPHQL_TYPE)??!1}function Vw(e,t){let n=Ie[e];return _r(e,{error:n.message,status:t,..."suggestion"in n&&{scopesSuggestion:n.suggestion}})}function Kw(e){return sl.CONNECTION_FAILED.some(t=>e.message.includes(t))?{error:Ie[K.NETWORK_CONNECTION_FAILED].message,type:"network",scopesSuggestion:Ie[K.NETWORK_CONNECTION_FAILED].suggestion}:sl.TIMEOUT.some(t=>e.message.includes(t))?{error:Ie[K.REQUEST_TIMEOUT].message,type:"network",scopesSuggestion:Ie[K.REQUEST_TIMEOUT].suggestion}:{error:e.message,type:"unknown"}}function _r(e,t){return{type:"http",...t}}function Xw(e,t){let n=e.split(",").map(i=>i.trim()).filter(Boolean),r=t.split(",").map(i=>i.trim()).filter(Boolean),o=n.filter(i=>!r.includes(i));return o.length>0?Ie[K.FORBIDDEN_PERMISSIONS].suggestionWithScopes(o):Ie[K.FORBIDDEN_PERMISSIONS].fallbackSuggestion}function oh(e){return`user:${e}`}var Yw=/[@/]/,Zw=/^[A-Za-z0-9_-]+$/;function ll(e){return e.startsWith('"')||Zw.test(e)?e:`"${e.replace(/"/g,'\\"')}"`}var nn=class{queryParts=[];addOwnerRepo(t){if(t.owner&&t.repo){let n=Array.isArray(t.owner)?t.owner:[t.owner],r=Array.isArray(t.repo)?t.repo:[t.repo];n.forEach(o=>{r.forEach(i=>{this.queryParts.push(`repo:${o}/${i}`)})})}else t.owner&&(Array.isArray(t.owner)?t.owner:[t.owner]).forEach(r=>{this.queryParts.push(oh(r))});return this}addDateFilters(t){return Object.entries({created:"created",updated:"updated","author-date":"author-date","committer-date":"committer-date","merged-at":"merged",closed:"closed"}).forEach(([r,o])=>{let i=t[r];i&&this.queryParts.push(`${o}:${i}`)}),this}addArrayFilter(t,n,r=!1){return t&&t!==null&&(Array.isArray(t)?t:[t]).forEach(i=>{let s=r?`"${i}"`:i;this.queryParts.push(`${n}:${s}`)}),this}addBooleanFilter(t,n,r){return t===!0?this.queryParts.push(n):t===!1&&this.queryParts.push(r),this}addSimpleFilter(t,n){return t!=null&&this.queryParts.push(`${n}:${t}`),this}addQuotedFilter(t,n){if(t!=null){let o=Yw.test(t)&&!t.startsWith('"')?`"${t}"`:t;this.queryParts.push(`${n}:${o}`)}return this}addEngagementFilters(t){return this.addSimpleFilter(t.comments,"comments"),this.addSimpleFilter(t.reactions,"reactions"),this}addOrganizationFilters(t){return this.addArrayFilter(t.label,"label",!0),t.milestone&&this.queryParts.push(`milestone:"${t.milestone}"`),this}build(){return this.queryParts.join(" ").trim()}};var qw=/(?:^|\/)([^/]+\.[A-Za-z][A-Za-z0-9]{0,9})$/,ul=class extends nn{addQueryTerms(t){if(Array.isArray(t.keywords)&&t.keywords.length>0){let n=t.keywords.filter(r=>r&&r.trim());n.length>0&&this.queryParts.push(...n.map(ll))}return this}addSearchFilters(t){let n=t.path,r=t.filename,o=typeof n=="string"&&!r?n.match(qw):null;return o&&(r=o[1],n=n.slice(0,o.index)||void 0),this.addSimpleFilter(r,"filename"),this.addSimpleFilter(t.extension,"extension"),this.addQuotedFilter(n,"path"),t.language&&this.queryParts.push(`language:${t.language}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="file"?this.queryParts.push("in:file"):r==="path"&&this.queryParts.push("in:path")}),this}},pl=class extends nn{addQueryTerms(t){return Array.isArray(t.keywords)&&t.keywords.length>0&&this.queryParts.push(...t.keywords.map(ll)),this}addRepoFilters(t){this.addArrayFilter(t.topicsToSearch,"topic"),this.addSimpleFilter(t.stars,"stars");let n=t;return typeof n.size=="string"&&this.queryParts.push(`size:${n.size}`),typeof n.created=="string"&&this.queryParts.push(`created:${n.created}`),t.updated&&this.queryParts.push(`pushed:${t.updated}`),t.language&&this.queryParts.push(`language:${t.language}`),typeof n.forks=="string"&&this.queryParts.push(`forks:${n.forks}`),typeof n.license=="string"&&this.queryParts.push(`license:${n.license}`),typeof n.goodFirstIssues=="string"&&this.queryParts.push(`good-first-issues:${n.goodFirstIssues}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="name"?this.queryParts.push("in:name"):r==="description"?this.queryParts.push("in:description"):r==="readme"&&this.queryParts.push("in:readme")}),this}addQualityFilters(t){let n=t,r=n?.archived;this.queryParts.push(r===!0?"archived:true":"is:not-archived");let o=n?.visibility;return o==="public"?this.queryParts.push("is:public"):o==="private"&&this.queryParts.push("is:private"),this}};function dl(e){return new ul().addQueryTerms(e).addSearchFilters(e).addOwnerRepo(e).addMatchFilters(e).build()}function ml(e){return new pl().addQueryTerms(e).addOwnerRepo(e).addRepoFilters(e).addMatchFilters(e).addQualityFilters(e).build()}var fl=class extends nn{addBasicFilters(t){return t.query&&t.query.trim()&&(this.queryParts.push(t.query.trim()),t.match&&t.match.length>0&&this.queryParts.push(`in:${t.match.join(",")}`)),this.queryParts.push("is:pr"),this}addStateFilters(t){return t.merged===!0&&t.state==="closed"||this.addSimpleFilter(t.state,"is"),this.addBooleanFilter(t.draft,"is:draft","-is:draft"),this.addBooleanFilter(t.merged,"is:merged","is:unmerged"),this}addUserFilters(t){return this.addSimpleFilter(t.author,"author"),this.addSimpleFilter(t.assignee,"assignee"),this.addSimpleFilter(t.mentions,"mentions"),this.addSimpleFilter(t.commenter,"commenter"),this.addSimpleFilter(t["reviewed-by"],"reviewed-by"),this.addSimpleFilter(t["review-requested"],"review-requested"),this}addBranchFilters(t){return this.addSimpleFilter(t.head,"head"),this.addSimpleFilter(t.base,"base"),this}addReviewFilters(t){return t.review&&this.queryParts.push(`review:${t.review}`),this}addNegativeFilters(t){return t.locked===!0?this.queryParts.push("is:locked"):t.locked===!1&&this.queryParts.push("is:unlocked"),t.visibility==="public"?this.queryParts.push("is:public"):t.visibility==="private"&&this.queryParts.push("is:private"),t.project&&this.queryParts.push(`project:${t.project}`),this}addMiscFilters(t){return this.queryParts.push(t.archived===!0?"archived:true":"archived:false"),t.language&&this.queryParts.push(`language:${t.language}`),t.checks&&this.queryParts.push(`status:${t.checks}`),this}};function hl(e){return new fl().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addBranchFilters(e).addDateFilters(e).addEngagementFilters(e).addReviewFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function gl(e){return e.draft!==void 0||e.author!==void 0||e.assignee!==void 0||typeof e.query=="string"&&e.query.trim().length>0||e.label&&e.label.length>0||e.mentions!==void 0||e.commenter!==void 0||e["reviewed-by"]!==void 0||e["review-requested"]!==void 0||e.reactions!==void 0||e.comments!==void 0||e.state==="merged"||e.milestone!==void 0||e.language!==void 0||e.checks!==void 0||e.review!==void 0||e.locked!==void 0||e.visibility!==void 0||e.project!==void 0||e.created!==void 0||e.updated!==void 0||e["merged-at"]!==void 0||e.closed!==void 0||e.merged!==void 0||e.match!==void 0&&e.match.length>0||e.sort==="comments"||e.sort==="reactions"||Array.isArray(e.owner)||Array.isArray(e.repo)}var yl=class extends nn{addBasicFilters(t){return t.query&&t.query.trim()&&(this.queryParts.push(t.query.trim()),t.match&&t.match.length>0&&this.queryParts.push(`in:${t.match.join(",")}`)),this.queryParts.push("is:issue"),this}addStateFilters(t){return(t.state==="open"||t.state==="closed")&&this.addSimpleFilter(t.state,"is"),this}addUserFilters(t){return this.addSimpleFilter(t.author,"author"),this.addSimpleFilter(t.assignee,"assignee"),this.addSimpleFilter(t.mentions,"mentions"),this.addSimpleFilter(t.commenter,"commenter"),this}addNegativeFilters(t){return t.locked===!0?this.queryParts.push("is:locked"):t.locked===!1&&this.queryParts.push("is:unlocked"),t.visibility==="public"?this.queryParts.push("is:public"):t.visibility==="private"&&this.queryParts.push("is:private"),this}addMiscFilters(t){return this.queryParts.push(t.archived===!0?"archived:true":"archived:false"),this}};function bl(e){return new yl().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addDateFilters(e).addEngagementFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function Sl(e){return typeof e.query=="string"&&e.query.trim().length>0||e.author!==void 0||e.assignee!==void 0||e.label!==void 0&&(Array.isArray(e.label),e.label.length>0)||e.mentions!==void 0||e.commenter!==void 0||e.reactions!==void 0||e.comments!==void 0||e.milestone!==void 0||e.locked!==void 0||e.visibility!==void 0||e.created!==void 0||e.updated!==void 0||e.closed!==void 0||e.match!==void 0&&e.match.length>0||e.sort==="comments"||e.sort==="reactions"||Array.isArray(e.owner)||Array.isArray(e.repo)}import{DISCOVERY_IGNORED_FILE_EXTENSIONS as qN,DISCOVERY_IGNORED_FILE_NAMES as JN,DISCOVERY_IGNORED_FOLDER_NAMES as eD,getDiscoveryExtension as ih,shouldIgnoreDiscoveryDir as Bo,shouldIgnoreDiscoveryFile as kr}from"@octocodeai/octocode-engine/security";var sh=Symbol.for("octocode.rawResponseChars");function B(e){if(typeof e=="string")return e.length;try{return JSON.stringify(e)?.length??0}catch{return String(e).length}}function ah(e){if(!(typeof e!="number"||!Number.isFinite(e)))return Math.max(0,e)}function W(e,t){let n=typeof t=="number"?ah(t):B(t);if(n===void 0)return e;try{Object.defineProperty(e,sh,{value:n,enumerable:!1,configurable:!0})}catch{}return e}function ie(e){if(!(typeof e!="object"||e===null))return ah(e[sh])}function Ir(e){let t={};if(!e||typeof e!="object")return t;for(let[n,r]of Object.entries(e))typeof r=="string"?t[n]=r:typeof r=="number"&&Number.isFinite(r)&&(t[n]=String(r));return t}function ch(e){let t=Ir(e),n=Number(t["x-ratelimit-remaining"]),r=Number(t["x-ratelimit-limit"]),o=Number(t["x-ratelimit-reset"]);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=0||n>Math.max(3,r*.15))return;let i=Number.isFinite(o)?Math.max(0,Math.round((o*1e3-Date.now())/1e3)):void 0;return`GitHub rate limit low: ${n}/${r} remaining${i!==void 0?` (resets in ~${i}s)`:""} \u2014 pace or narrow further requests.`}function Or(e){let t=Ir(e),n=t.etag||t.ETag||t.Etag||Object.entries(t).find(([r])=>r.toLowerCase()==="etag")?.[1];return n&&n.length>0?n:void 0}function lh(e,t,n){let r=[],o=0;for(let[i,s]of t){let a=e.slice(i,s);if(!a)continue;let c=n.indexOf(a,o);c===-1&&(c=n.indexOf(a),c===-1)||(r.push([c,c+a.length]),o=c+a.length)}return r}var uh=30;async function ph(e,t,n){let r=await ke(t),o=xe("gh-api-code",{keywords:e.keywords,owner:e.owner,repo:e.repo,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,auth:r},n);return await De(o,async()=>await eP(e,t),{shouldCache:s=>"data"in s&&!s.error})}async function eP(e,t){try{let n=await $(t);if(e.keywords&&e.keywords.length>0&&e.keywords.filter(g=>g&&g.trim()).length===0)return{error:Ke.QUERY_EMPTY.message,type:"http",status:400};let r=dl(e);if(!r.trim())return{error:Ke.QUERY_EMPTY.message,type:"http",status:400};let o=Math.min(typeof e.limit=="number"?e.limit:uh,100),i=e.page||1,s={q:r,per_page:o,page:i,headers:{Accept:"application/vnd.github.v3.text-match+json"}},a=await n.rest.search.code(s),c=await tP(a.data.items,a.data.total_count),l=a.data.incomplete_results===!0,u=c.total_count,p=Math.min(u,1e3),d=Math.ceil(p/o),m=Math.min(i,Math.max(1,d)),f=m<d,h=Math.min(p,d*o);return{data:{total_count:c.total_count,items:c.items,...l?{incompleteResults:!0}:{},repository:c.repository,matchLocations:c.matchLocations,minified:c.minified,minificationFailed:c.minificationFailed,minificationTypes:c.minificationTypes,_researchContext:c._researchContext,pagination:{currentPage:m,totalPages:d,perPage:o,totalMatches:p,reportedTotalMatches:u,reachableTotalMatches:h,totalMatchesKind:"reported",totalMatchesCapped:u>p,hasMore:f,...f?{nextPage:m+1}:{},uniqueFileCount:c._researchContext?.uniqueFileCount}},status:200,headers:Ir(a.headers),rawResponseChars:B(a.data)}}catch(n){if(Qt(n)){let o=Math.min(typeof e.limit=="number"?e.limit:uh,100);return{data:{total_count:0,items:[],nonExistentScope:!0,pagination:{currentPage:e.page||1,totalPages:0,perPage:o,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return J(n)}}async function tP(e,t){let n=nP(e),r=new Set,o=!1,i=[],s=new Set,a=e.filter(m=>!kr(m.path)),c=0,l=0,u=await Promise.allSettled(a.map(async m=>{s.add(m.path);let f=[],h=await Promise.allSettled((m.text_matches||[]).map(async C=>{let P=C.fragment,T=Jw.sanitizeContent(P||"",m.path);P=T.content,T.hasSecrets&&r.add(`Secrets detected in ${m.path}: ${T.secretsDetected.join(", ")}`),T.warnings.length>0&&T.warnings.forEach(k=>r.add(`${m.path}: ${k}`));try{let k=await D.minifyContent(P||"",m.path);P=k.content,k.failed?o=!0:k.type!=="failed"&&(f.push(k.type),i.push(k.type))}catch{o=!0}let E=C.matches?.flatMap(k=>Array.isArray(k.indices)&&k.indices.length>=2?[[k.indices[0],k.indices[1]]]:[])||[];return{context:P||"",positions:lh(C.fragment||"",E,P||"")}})),y=h.filter(C=>C.status==="fulfilled").map(C=>C.value),g=h.filter(C=>C.status==="rejected").length;g>0&&(l+=g);let S=m,R=Array.from(new Set(f));return{path:m.path,matches:y,url:m.html_url,repository:{nameWithOwner:m.repository.full_name,url:m.repository.url,pushedAt:m.repository.pushed_at||void 0},...S.last_modified_at&&{lastModifiedAt:S.last_modified_at},...R.length>0&&{minificationType:R.join(",")}}})),p=u.filter(m=>m.status==="fulfilled").map(m=>m.value);c=u.filter(m=>m.status==="rejected").length;let d={items:p,total_count:t!==void 0?t:a.length,_researchContext:{uniqueFileCount:s.size,repositoryContext:n?(()=>{let m=n.full_name.split("/");return m.length===2&&m[0]&&m[1]?{owner:m[0],repo:m[1],branch:n.default_branch||void 0}:void 0})():void 0}};return n&&(d.repository={name:n.full_name,url:n.url,createdAt:n.created_at||void 0,updatedAt:n.updated_at||void 0,pushedAt:n.pushed_at||void 0}),c>0&&r.add(`${c} item(s) dropped due to processing errors`),l>0&&r.add(`${l} match(es) dropped due to processing errors`),r.size>0&&(d.matchLocations=Array.from(r)),d.minified=!o,d.minificationFailed=o,i.length>0&&(d.minificationTypes=Array.from(new Set(i))),d}function nP(e){if(e.length===0)return null;let t=e[0]?.repository;return t&&e.every(r=>r.repository.full_name===t.full_name)?t:null}import{readdirSync as rP,statSync as dh}from"node:fs";import{join as oP}from"node:path";var zo=50,Ts=5*1024*1024,Rl=300*1024,mh=5,iP=1e4,fh=new Set([".png",".jpg",".jpeg",".gif",".bmp",".ico",".svg",".webp",".mp3",".mp4",".wav",".avi",".mov",".mkv",".webm",".zip",".tar",".gz",".bz2",".7z",".rar",".xz",".exe",".dll",".so",".dylib",".bin",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".woff",".woff2",".ttf",".eot",".otf",".pyc",".class",".o",".obj",".lock",".min.js",".min.css"]),Cl={maxDirectoryFiles:zo,maxTotalSize:Ts,maxFileSize:Rl};function xl(){return{nonFile:0,missingDownloadUrl:0,oversized:0,binary:0,fileLimit:0,fetchFailed:0,totalSizeLimit:0,pathTraversal:0}}function hh(e){return Object.values(e).every(t=>t===0)}function wl(e,t){if(!t&&e)return["Cannot verify completeness against remote tree; use forceRefresh or ghCloneRepo if completeness matters."];if(!e)return["Directory materialization is partial; inspect skipped counts or use ghCloneRepo before repo-wide reachability/dead-code conclusions."]}async function gh(e,t,n){let r=[];for(let o=0;o<e.length;o+=t){let i=e.slice(o,o+t),s=await Promise.allSettled(i.map(async a=>{let c=await aP(a.download_url,n);return{entry:a,content:c}}));for(let a of s)a.status==="fulfilled"&&r.push(a.value)}return r}var sP=new Set(["raw.githubusercontent.com","objects.githubusercontent.com","github.com"]);async function aP(e,t){try{let o=new URL(e);if(!sP.has(o.hostname))throw new Error(`Blocked fetch to unexpected host: ${o.hostname}. Only GitHub download URLs are allowed.`)}catch(o){throw o instanceof TypeError?new Error(`Invalid download URL: ${e}`):o}let n=new AbortController,r=setTimeout(()=>n.abort(),iP);try{let o={"User-Agent":"octocode-mcp"};t&&(o.Authorization=`token ${t}`);let i=await fetch(e,{signal:n.signal,headers:o});if(!i.ok)throw new Error(`HTTP ${i.status} fetching ${e}`);return await i.text()}finally{clearTimeout(r)}}function yh(e,t){let n=[],r=0;function o(i){let s;try{s=rP(i)}catch{return}for(let a of s){if(a.startsWith("."))continue;let c=oP(i,a);try{let l=dh(c);if(l.isDirectory())o(c);else if(l.isFile()){let u=c.substring(t.length+1);r+=l.size,n.push({path:u,size:l.size,type:"file"})}}catch{}}}return o(e),{files:n,fileCount:n.length,totalSize:r}}function bh(e){try{return dh(e).size}catch{return 0}}import{writeFileSync as uP,mkdirSync as Rh,existsSync as Pl,rmSync as pP}from"node:fs";import{join as Ch,dirname as dP,resolve as xh,sep as wh}from"node:path";var cP=60;async function Sh(e,t,n,r){let s=(await(await $(r)).rest.repos.getCommit({owner:e,repo:t,ref:n})).data.sha;if(typeof s!="string"||!/^[0-9a-f]{40}$/i.test(s))throw new Error(`GitHub returned an invalid commit SHA for ref "${n}".`);return s.toLowerCase()}async function lP(e,t,n,r){try{return{commitSha:await Sh(e,t,n,r),resolvedRef:n}}catch(o){if(!(n==="main"||n==="master"))throw o;let s=await Be(e,t,r);if(s===n)throw o;return{commitSha:await Sh(e,t,s,r),resolvedRef:s}}}async function Es(e,t,n,r,o=!1){let i=await ke(r),s=xe("gh-api-ref-resolution",{owner:e,repo:t,ref:n,auth:i});return De(s,()=>lP(e,t,n,r),{ttl:cP,forceRefresh:o,cacheRole:"helper"})}async function Tl(e,t,n,r,o,i=!1){let s=At(),{commitSha:a,resolvedRef:c}=await Es(e,t,r,o,i),l=vo(s,e,t,a),u=xh(Ch(l,n));if(!u.startsWith(l+wh)&&u!==l)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let p=xr(l);if(p.hit&&p.meta.commitSha===a&&!i&&Pl(u)){let w=yh(u,l),L=xl();return{localPath:u,repoRoot:l,files:w.files,fileCount:w.fileCount,totalSize:w.totalSize,complete:!0,verified:!1,commitSha:a,directoryEntryCount:w.fileCount,eligibleFileCount:w.fileCount,savedFileCount:w.fileCount,skipped:L,limits:Cl,warnings:wl(!0,!1),cached:!0,expiresAt:p.meta.expiresAt,owner:e,repo:t,branch:c,directoryPath:n}}let d=await $(o),{data:m}=await d.rest.repos.getContent({owner:e,repo:t,path:n,ref:a});if(!Array.isArray(m))throw new Error(`Path "${n}" is not a directory. Use type "file" to fetch file content.`);let f=m,h=xl(),y=[];for(let w of f){if(w.type!=="file"){h.nonFile+=1;continue}if(!w.download_url){h.missingDownloadUrl+=1;continue}if(w.size>Rl){h.oversized+=1;continue}let L=ih(w.name,{lowercase:!0,leadingDot:!0});if(fh.has(L)){h.binary+=1;continue}y.push(w)}h.fileLimit=Math.max(0,y.length-zo);let g=y.slice(0,zo),S=o?.token,R=await gh(g,mh,S);h.fetchFailed=g.length-R.length;let C=0,P=[];for(let w=0;w<R.length;w+=1){let{entry:L,content:O}=R[w];if(C+O.length>Ts){h.totalSizeLimit=R.length-w;break}C+=O.length,P.push({entry:L,content:O})}Pr(s),Pn(l),Pl(u)&&pP(u,{recursive:!0,force:!0}),Rh(u,{recursive:!0,mode:448});let T=[];for(let{entry:w,content:L}of P){let O=xh(Ch(l,w.path));if(!O.startsWith(l+wh)){h.pathTraversal+=1;continue}let v=dP(O);Pl(v)||Rh(v,{recursive:!0,mode:448}),uP(O,L,"utf-8"),T.push({path:w.path,size:L.length,type:"file"})}let E=wr(e,t,c,"treeFetch",void 0,void 0,a);Cr(l,E);let k=hh(h),x=k,b=h.nonFile>0;return{localPath:u,repoRoot:l,files:T,fileCount:T.length,totalSize:C,complete:k,verified:x,commitSha:a,...b?{hasSubdirectories:!0}:{},directoryEntryCount:f.length,eligibleFileCount:y.length,savedFileCount:T.length,skipped:h,limits:Cl,warnings:wl(k,x),cached:!1,expiresAt:E.expiresAt,owner:e,repo:t,branch:c,directoryPath:n}}import{writeFileSync as WP,mkdirSync as VP,existsSync as Fh}from"node:fs";import{join as KP,dirname as XP,resolve as YP,sep as ZP}from"node:path";import{RequestError as Kl}from"octokit";import{z as El}from"zod";var mt={GITHUB_SEARCH:"ghSearch",GITHUB_FETCH_CONTENT:"ghGetFileContent",GITHUB_SEARCH_HISTORY:"ghSearchHistory",GITHUB_GET_HISTORY_ITEM:"ghGetHistoryItem",PACKAGE_SEARCH:"npmSearch",GITHUB_CLONE_REPO:"ghCloneRepo",LOCAL_SEARCH:"localSearch",LOCAL_ANALYZE_GRAPH:"localAnalyzeGraph",LOCAL_FETCH_CONTENT:"localGetFileContent",LSP_GET_SEMANTIC_CONTENT:"lspGetSemantics"},As=El.object({goal:El.string().optional().describe("What this query should accomplish."),reasoning:El.string().optional().describe("Why this query advances the goal.")}),qn=Object.fromEntries(Object.entries(As.shape).map(([e,t])=>[e,t.description??""]));var mP={ghSearch:["Use only fields listed for the selected operation.","match: code=file|path; repositories=name|description|readme.","code cannot select branch; it searches GitHub's indexed default branch."],localSearch:["text needs searchText.","structural needs exactly one of pattern or rule.","Fields from different operations cannot be mixed."],localAnalyzeGraph:["dependencies | dependents -> requires file; depth applies.","path -> requires file + target.","deadCode/reachability use entrypoints and includeTests as roots."],localGetFileContent:["Choose fullContent, a line range, or matchString.","A line range needs startLine and endLine.","matchString options apply with matchString."],lspGetSemantics:["workspaceSymbol needs symbolName and may use workspaceRoot.","documentSymbols/diagnostic need uri.","definition | references | hover | callers | callees | callHierarchy | implementation | typeDefinition | supertypes | subtypes -> requires uri + symbolName + lineHint."],ghGetFileContent:["Choose fullContent, a line range, or matchString.","A line range needs startLine and endLine.","matchString options apply with matchString.",'type:"directory" materializes; extraction fields read files.'],npmSearch:["Set exactly one of packageName or keywords."]};function Ls(e){return[...mP[e]??[]]}var fP={ghSearch:[{name:"code",when:"Search code contents or file paths",requires:["operation"],excludes:["branch"],fields:["keywords","owner","repo","extension","filename","path","language","match","pageSize","page","concise"],example:{operation:"code",keywords:["toolSchemas"],owner:"bgauryy",repo:"octocode"}},{name:"repositories",when:"Discover repositories",requires:["operation"],fields:["keywords","topics","language","owner","stars","forks","goodFirstIssues","updated","created","size","match","sort","pageSize","page","archived","visibility","license","concise"],example:{operation:"repositories",keywords:["octocode"]}},{name:"tree",when:"Browse a known repository tree",requires:["operation","owner","repo"],fields:["owner","repo","branch","path","maxDepth","page","pageSize","include"],example:{operation:"tree",owner:"bgauryy",repo:"octocode",path:"packages",maxDepth:2}}],localSearch:[{name:"text",when:"Search lexical text or regular expressions",requires:["operation","path","searchText"],example:{operation:"text",path:".",searchText:"toolSchemas"}},{name:"structural",when:"Match AST structure",requires:["operation","path","pattern"],example:{operation:"structural",path:".",pattern:"console.log($A)",langType:"typescript"}},{name:"files",when:"Discover paths by name or metadata",requires:["operation","path"],example:{operation:"files",path:".",names:["*.ts"]}},{name:"tree",when:"Browse a directory tree",requires:["operation","path"],example:{operation:"tree",path:".",maxDepth:5}}],localAnalyzeGraph:[{name:"dependencies",when:"Find files imported by a file",requires:["path","operation","file"],example:{path:".",operation:"dependencies",file:"src/index.ts"}},{name:"dependents",when:"Find files importing a file",requires:["path","operation","file"],example:{path:".",operation:"dependents",file:"src/index.ts"}},{name:"path",when:"Find a shortest dependency path",requires:["path","operation","file","target"],example:{path:".",operation:"path",file:"src/a.ts",target:"src/b.ts"}},{name:"cycles",when:"Find dependency cycles",requires:["path","operation"],example:{path:".",operation:"cycles"}},{name:"deadCode",when:"Find unreachable file candidates",requires:["path","operation"],example:{path:".",operation:"deadCode"}},{name:"reachability",when:"Find files unreachable from selected roots",requires:["path","operation","entrypoints"],example:{path:".",operation:"reachability",entrypoints:["src/index.ts"]}}],lspGetSemantics:[{name:"anchored",when:"Query a named symbol near a source line",requires:["uri","type","symbolName","lineHint"],example:{uri:"src/index.ts",type:"definition",symbolName:"main",lineHint:1}},{name:"document",when:"Query a whole document",requires:["uri","type"],example:{uri:"src/index.ts",type:"documentSymbols"}},{name:"workspace",when:"Search symbols across the workspace",requires:["workspaceRoot","type","symbolName"],example:{workspaceRoot:".",type:"workspaceSymbol",symbolName:"Schema"}}]};function Al(e){return fP[e]??[]}import{z as _s}from"zod";var vr=100,jo=1e3,Ph=1e8,Th=5e4,Ze=1e9,Ll=1e5,Qo=20,ks=100,Uo=1e4,Jn=50,_t=100,kt=30,_l=200,kl=100;var Il=1e5,Ol=500,Is=1e5,vl=1e3,Fl=20,Ml=100,Nl=20;function fe(e){return{...e,description:e.instructions}}function H(e,t){return _s.number().int().min(e).max(t)}var Ae=_s.array(_s.string()).optional();function Le(){return H(1,jo).default(1)}function Qe(){return H(1,jo).optional()}function Os(){return H(0,vr).optional()}function Fr(){return H(1,Ze).optional()}function qe(){return H(0,Ph).optional()}function yt(){return H(1,Th).optional()}var ee=As.shape,hP=new Set(Object.keys(ee)),gP={owner:"Repository owner (user or org).",repo:"Repository name, without the owner.",branch:"Branch, tag, or commit SHA; omit for the default branch.",path:"Target path. GitHub tools: repo-relative, exact case, no leading slash. Local tools: absolute path.",page:"Result page, 1-based. Advance only while pagination.hasMore.",itemsPerPage:"Items per result page.",limit:"Total result cap applied before pagination.",pageSize:"Results returned in one page.",contextLines:"Extra source lines around each match/anchor.",charLength:"Content-window length; continue with the returned offset when partial.",charOffset:"Content-window start; copy the returned offset. A partial window cannot prove absence."};function U(e,t,n=""){let r={};for(let o of Object.keys(t)){let i=t[o],s=n?`${n}.${o}`:o,c=n===""&&hP.has(o)?qn[s]:e[s]??(i.description?void 0:gP[o]);r[o]=c?i.describe(c):i}return _s.object(r).strict()}function vs(e,t){let n=e.fullContent===!0,r=e.matchString!==void 0,o=e.startLine!==void 0||e.endLine!==void 0;n&&r&&t.addIssue({code:"custom",message:"Choose fullContent or matchString.",path:["matchString"]}),n&&o&&t.addIssue({code:"custom",message:"Choose fullContent or startLine/endLine.",path:["startLine"]}),r&&o&&t.addIssue({code:"custom",message:"Choose matchString or startLine/endLine.",path:["startLine"]}),e.startLine===void 0!=(e.endLine===void 0)&&t.addIssue({code:"custom",message:"Set startLine and endLine together.",path:[e.startLine===void 0?"startLine":"endLine"]}),e.startLine!==void 0&&e.endLine!==void 0&&e.endLine<e.startLine&&t.addIssue({code:"custom",message:"Set endLine greater than or equal to startLine.",path:["endLine"]})}import{z as Fs}from"zod";import{z as _n}from"zod";var yP={keywords:"ANDed; keep a phrase as one item; alternatives need separate queries.",path:"Repo path prefix, not a full file path.",match:'For ghSearch operation:"code": "file" returns snippets and character matchIndices; "path" returns paths only. Operation:"repositories" uses text-field names.',extension:'File extension filter, e.g. "ts" (no dot).',filename:"Exact filename filter.",language:'GitHub language filter, e.g. "typescript".',concise:'Flat "owner/repo:path" rows.',limit:"Results per page (paginate with page)."},kn=U(yP,{...ee,keywords:Ae,owner:_n.string().optional(),repo:_n.string().optional(),extension:_n.string().optional(),filename:_n.string().optional(),path:_n.string().optional(),language:_n.string().optional(),match:_n.enum(["file","path"]).default("file"),limit:H(1,_t).default(kt),page:Le(),concise:_n.boolean().optional()});import{z as Je}from"zod";var bP={keywords:"ANDed; keep a phrase as one item; alternatives need separate queries.",topicsToSearch:"ANDed topic filters; metadata can be sparse.",match:'For ghSearch operation:"repositories": text fields to search are name, description, and readme; readme is broader and slower. Operation:"code" uses "file" or "path".',sort:"stars, forks, updated, help-wanted-issues, best-match.",language:'Primary language filter, e.g. "rust".',stars:'Star range: ">100", "10..50".',forks:'Fork range: ">50", "10..100".',goodFirstIssues:'Good-first-issue count range, e.g. ">5".',updated:'Last push date: ">2024-01-01" or "a..b".',created:'Creation date: ">2023-01-01" or "a..b".',size:'Repo size in KB: ">1000", "50..500".',license:'SPDX id, e.g. "mit".',archived:"true = archived only; default excludes archived.",visibility:'"public" or "private" (private needs token scope).',concise:'Flat "owner/repo" rows for triage.',limit:"Results per page (paginate with page)."},rn=U(bP,{...ee,keywords:Ae,topicsToSearch:Ae,language:Je.string().optional(),owner:Je.string().optional(),stars:Je.string().optional(),forks:Je.string().optional(),goodFirstIssues:Je.string().optional(),updated:Je.string().optional(),created:Je.string().optional(),size:Je.string().optional(),match:Je.array(Je.enum(["name","description","readme"])).optional(),sort:Je.enum(["stars","forks","help-wanted-issues","updated","best-match"]).default("best-match"),limit:H(1,_t).default(kt),page:Le(),archived:Je.boolean().optional(),visibility:Je.enum(["public","private"]).optional(),license:Je.string().optional(),concise:Je.boolean().optional()});import{z as Mr}from"zod";var SP={path:'Repo-relative directory; ""/"." for root.',branch:"Ref; fallback warning means default branch was used.",maxDepth:"Tree recursion depth.",page:"Advance only on hasMore.",include:"Optional sizes, languages, contributors, branches, or tags; each adds an API call."},er=U(SP,{...ee,owner:Mr.string(),repo:Mr.string(),branch:Mr.string().optional(),path:Mr.string().optional(),maxDepth:H(0,Nl).optional(),page:Le(),itemsPerPage:H(1,_l).default(kl),include:Mr.array(Mr.enum(["sizes","languages","contributors","branches","tags"])).optional()});var JD=fe({name:"ghSearch",type:"Github",shortDescription:"Search GitHub code or repositories, or browse a repository tree.",instructions:`Choose operation:"code" for code contents or file paths, "repositories" to discover repositories, or "tree" to browse a known repository.
11
+ Each operation has a strict input branch; fields from other operations are rejected. Use ghGetFileContent only after a path is known. Empty GitHub search results do not prove absence.`,schema:{operation:'Required: "code", "repositories", or "tree".'}}),RP=kn.omit({limit:!0}).extend({match:kn.shape.match.describe('For operation:"code": "file" returns snippets; "path" returns paths only.'),pageSize:kn.shape.limit.describe("Results returned per page."),operation:Fs.literal("code").describe("Search code contents or file paths.")}).strict(),CP=rn.omit({topicsToSearch:!0,limit:!0}).extend({topics:rn.shape.topicsToSearch.describe("Repository topics; all must match."),pageSize:rn.shape.limit.describe("Results returned per page."),match:rn.shape.match.describe('For operation:"repositories": fields to search: name, description, or readme.'),operation:Fs.literal("repositories").describe("Discover repositories by keywords and repository filters.")}).strict(),xP=er.omit({itemsPerPage:!0}).extend({operation:Fs.literal("tree").describe("Browse the tree of a known repository."),pageSize:er.shape.itemsPerPage.describe("Tree entries returned per page.")}).strict(),Dl=Fs.discriminatedUnion("operation",[RP,CP,xP]);import{z as It}from"zod";var wP=fe({name:"ghGetFileContent",type:"Github",shortDescription:"Read a file or a specific region from a GitHub repository.",instructions:`Read a known GitHub path after search or structure discovery; a complete search snippet needs no reread. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
12
+ Choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; continue with the returned charOffset. matchedLines are LSP anchors; match ranges and offsets are not. type:"directory" returns localPath when local access is enabled; otherwise use ghSearch operation:"tree".`,schema:{startLine:"Requires endLine; exclusive with fullContent/matchString.",endLine:"Requires startLine; must be >= startLine.",fullContent:"Whole small file; exclusive with range/match.",matchString:"Anchor returning padded matchRanges and exact matchedLines.",matchStringIsRegex:"Makes matchString a regex.",matchStringCaseSensitive:"Case-sensitive matchString.",type:'"file" reads; "directory" materializes localPath when clone/local access is enabled\u2014otherwise use ghSearch operation:"tree".',forceRefresh:"Bypass the 24h fetch cache and re-read from GitHub.",charOffset:"Copy pagination.nextCharOffset.",minify:'"symbols" outline, "standard" compact, "none" exact.'}}),Ms=U(wP.schema,{...ee,owner:It.string(),repo:It.string(),branch:It.string().optional(),path:It.string(),startLine:Fr(),endLine:Fr(),fullContent:It.boolean().optional(),matchString:It.string().optional(),matchStringIsRegex:It.boolean().optional(),matchStringCaseSensitive:It.boolean().optional(),forceRefresh:It.boolean().optional(),type:It.enum(["file","directory"]).default("file"),contextLines:H(0,vr).default(5),charOffset:qe(),charLength:yt(),minify:It.enum(["none","standard","symbols"]).default("standard")}).superRefine(vs);import{z as F}from"zod";var PP=fe({name:"githubHistory",type:"Github",shortDescription:"Search and read GitHub pull requests and commit history.",instructions:`Use for PR/commit archaeology \u2014 not current code (ghSearch operation:"code"/ghGetFileContent). type:"prs" lists/reads PRs; type:"commits" walks history.
13
+ Param relations: list mode uses filters+sort/page; detail mode needs owner+repo+prNumber and content selectors. patches.mode:"selected" requires files or ranges. Body/patch/comment windows continue via returned charOffset/commentBodyOffset; file/comment/commit lists use their page fields. For code identity, clone and use local/LSP.`,schema:{type:'"prs" for pull requests; "commits" for commit history.',keywords:"PR search terms; ignored in commits mode.",match:'PR text fields searched by keywords; ghSearch operation:"code" instead uses match to select file content or paths.',prNumber:"Switches to PR detail mode; needs owner+repo.",issueNumber:"Switches to issue detail mode; needs owner+repo.",concise:"PR list triage; ignored with prNumber.",path:"Commit-mode file/dir prefix; trailing / scopes subtree.",includeDiff:"Commit-mode diffs; costly.",order:"asc+created helps archaeology.",comments:'Comment-count range filter (">5"); not comment content.',reactions:'Reaction-count range filter (">10").',interactions:'Combined comment+reaction count range (">20").',project:'Project board: "owner/number".',"team-mentions":'Team mention: "org/team-slug".',filePage:"Changed-files page from contentPagination.",commentPage:"Comments page from contentPagination.",commitPage:"PR commits page from contentPagination.",reviewMode:'"full" fetches all PR detail surfaces.',content:"Detail selector for prNumber.","content.body":"Full PR description; windowed by charOffset.","content.changedFiles":"File list with status and +/- counts.","content.patches.mode":'"none", "selected" (cheapest; needs files or ranges), or "all".',"content.patches.ranges":"Line ranges for selected patch hunks.","content.comments.reviewInline":"Inline review comments; in_reply_to_id marks threads.","content.comments.includeBots":"Include bot/CI comments.","content.reviews":"Review verdicts per reviewer.","content.commits":"PR-bound commits selector.",matchString:"Substring filter for body/patch/comment windows.",charOffset:"Body/patch continuation offset from nextQuery.",commentBodyOffset:"Comment-body continuation offset from nextQuery.",minify:'"standard" compact patches; "none" exact diff; "symbols" not available.'}}),Nr=PP.schema,Ns=U(Nr,{...ee,type:F.enum(["prs","commits"]).default("prs"),since:F.string().optional(),until:F.string().optional(),path:F.string().optional(),branch:F.string().optional(),includeDiff:F.boolean().optional().default(!1),includeAssets:F.boolean().optional(),keywords:F.array(F.string()).optional(),prNumber:H(1,Ze).optional(),issueNumber:H(1,Ze).optional(),owner:F.string().optional(),repo:F.string().optional(),concise:F.boolean().optional(),state:F.enum(["open","closed","merged"]).optional(),assignee:F.string().optional(),author:F.string().optional(),committer:F.string().optional(),commenter:F.string().optional(),mentions:F.string().optional(),"review-requested":F.string().optional(),"reviewed-by":F.string().optional(),label:F.union([F.string(),F.array(F.string())]).optional(),checks:F.enum(["success","failure","pending"]).optional(),review:F.enum(["approved","changes_requested","required","none"]).optional(),head:F.string().optional(),base:F.string().optional(),created:F.string().optional(),updated:F.string().optional(),closed:F.string().optional(),"merged-at":F.string().optional(),comments:F.string().optional(),reactions:F.string().optional(),draft:F.boolean().optional(),match:F.array(F.enum(["title","body","comments"])).optional(),sort:F.enum(["created","updated","best-match","comments","reactions"]).optional(),order:F.enum(["asc","desc"]).optional(),limit:H(1,_t).default(kt),page:Le(),archived:F.boolean().optional(),filePage:Qe(),commentPage:Qe(),commitPage:Qe(),reviewMode:F.literal("full").optional(),content:U(Nr,{metadata:F.boolean().optional(),body:F.boolean().optional(),changedFiles:F.boolean().optional(),patches:U(Nr,{mode:F.enum(["none","selected","all"]).default("none"),files:Ae,ranges:F.array(U(Nr,{file:F.string(),additions:F.array(H(1,Ze)).optional(),deletions:F.array(H(1,Ze)).optional()},"content.patches.ranges")).optional()},"content.patches").optional(),comments:U(Nr,{discussion:F.boolean().optional(),reviewInline:F.boolean().optional(),includeBots:F.boolean().default(!1),file:F.string().optional()},"content.comments").optional(),reviews:F.boolean().optional(),commits:U(Nr,{list:F.boolean().optional(),includeFiles:F.boolean().optional()},"content.commits").optional()},"content").optional(),matchString:F.string().optional(),commentBodyOffset:qe(),charOffset:qe(),charLength:yt(),minify:F.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let n=e.content?.patches;if(!n)return;let r=(n.files?.length??0)>0,o=(n.ranges?.length??0)>0,i=r||o;n.mode==="selected"&&!i&&t.addIssue({code:"custom",message:'content.patches.mode="selected" requires non-empty files or ranges.',path:["content","patches","files"]}),n.mode!=="selected"&&i&&t.addIssue({code:"custom",message:'content.patches.files and content.patches.ranges require mode="selected".',path:["content","patches","mode"]})});import{z as Q}from"zod";var TP=fe({name:"ghSearchHistory",type:"Github",shortDescription:"Search GitHub pull requests, or read one PR's files, diffs, and reviews.",instructions:`Use for PR history, diffs, and review context; use code tools for current bytes, commits for history, and issues for issue threads. Conversation is context: prove landed behavior from selected patches or the merge SHA.
14
+ List mode uses search filters; detail mode needs owner, repo, prNumber, and explicit content selectors. Selected patches need files or ranges. Continue windows and lists with returned offsets/pages. Use local/LSP for symbol identity.`,schema:{keywords:"PR search terms.",match:'PR text fields searched by keywords: title, body, comments. ghSearch operation:"code" instead uses match to select file content or paths.',prNumber:"PR detail mode; requires owner+repo.",concise:"PR list triage; list mode only.",state:"open, closed, or merged.",assignee:"Assigned GitHub login.",author:"PR author login.",commenter:"Commenter login.",mentions:"Mentioned login.","review-requested":"Requested reviewer login.","reviewed-by":"Reviewer login.",checks:"success, failure, or pending.",review:"approved, changes_requested, required, or none.",comments:'Comment-count range filter (">5"); not comment content.',reactions:'Reaction-count range filter (">10").',created:'Created date/range, e.g. ">2024-01-01" or "a..b".',updated:"Updated-date filter (same format as created).",closed:"Closed-date filter (same format as created).","merged-at":"Merged-date filter (same format as created).",head:"Head branch name filter.",base:"Base branch name filter.",label:"Label name(s); multiple are ANDed.",draft:"true = only drafts; false = exclude drafts.",archived:"Include PRs from archived repos.",sort:"created, updated, comments, reactions, best-match.",order:"asc/desc; asc+created helps archaeology.",filePage:"Changed-files page from contentPagination.",commentPage:"Comments page from contentPagination.",commitPage:"PR commits page from contentPagination.",content:"Detail selector for prNumber.","content.body":"Include the PR description body.","content.changedFiles":"Include changed files and +/- counts.","content.patches":"Patch selector for changed files.","content.patches.mode":'"selected" or "all"; selected is cheapest.',"content.patches.files":'Restrict selected patches to these files (mode:"selected").',"content.patches.ranges":"Line ranges for selected patch hunks.","content.patches.ranges.file":"File the line range applies to.","content.patches.ranges.additions":"Added-side line numbers to include.","content.patches.ranges.deletions":"Deleted-side line numbers to include.","content.comments":"Conversation and inline-review selectors.","content.comments.discussion":"Include the PR conversation timeline.","content.comments.reviewInline":"Include inline review threads.","content.comments.includeBots":"Include bot/CI comments.","content.comments.file":"Filter comments to one file path.","content.reviews":"Include review verdicts per reviewer.","content.commits":"PR-bound commits selector.","content.commits.includeFiles":"Attach per-commit file changes.",matchString:"Substring filter for body/patch/comment windows.",charOffset:"Body/patch continuation offset from nextQuery.",commentBodyOffset:"Comment-body continuation offset from nextQuery.",minify:'"standard" compact patches; "none" exact diff; "symbols" not available.',pageSize:"PRs or detail-list items returned per page."}}),Dr=TP.schema,tr=U(Dr,{...ee,keywords:Q.array(Q.string()).optional(),prNumber:H(1,Ze).optional(),owner:Q.string().optional(),repo:Q.string().optional(),concise:Q.boolean().optional(),state:Q.enum(["open","closed","merged"]).optional(),assignee:Q.string().optional(),author:Q.string().optional(),commenter:Q.string().optional(),mentions:Q.string().optional(),"review-requested":Q.string().optional(),"reviewed-by":Q.string().optional(),label:Q.array(Q.string()).optional(),checks:Q.enum(["success","failure","pending"]).optional(),review:Q.enum(["approved","changes_requested","required","none"]).optional(),head:Q.string().optional(),base:Q.string().optional(),created:Q.string().optional(),updated:Q.string().optional(),closed:Q.string().optional(),"merged-at":Q.string().optional(),comments:Q.string().optional(),reactions:Q.string().optional(),draft:Q.boolean().optional(),match:Q.array(Q.enum(["title","body","comments"])).optional(),sort:Q.enum(["created","updated","best-match","comments","reactions"]).optional(),order:Q.enum(["asc","desc"]).optional(),pageSize:H(1,_t).default(kt),page:Qe(),archived:Q.boolean().optional(),filePage:Qe(),commentPage:Qe(),commitPage:Qe(),content:U(Dr,{body:Q.literal(!0).optional(),changedFiles:Q.literal(!0).optional(),patches:U(Dr,{mode:Q.enum(["selected","all"]),files:Ae,ranges:Q.array(U(Dr,{file:Q.string(),additions:Q.array(H(1,Ze)).optional(),deletions:Q.array(H(1,Ze)).optional()},"content.patches.ranges")).optional()},"content.patches").optional(),comments:U(Dr,{discussion:Q.literal(!0).optional(),reviewInline:Q.literal(!0).optional(),includeBots:Q.literal(!0).optional(),file:Q.string().optional()},"content.comments").optional(),reviews:Q.literal(!0).optional(),commits:U(Dr,{includeFiles:Q.literal(!0).optional()},"content.commits").optional()},"content").optional(),matchString:Q.string().optional(),commentBodyOffset:qe(),charOffset:qe(),charLength:yt(),minify:Q.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let n=["content","filePage","commentPage","commitPage","matchString","commentBodyOffset","charOffset","charLength"],r=["keywords","concise","state","assignee","author","commenter","mentions","review-requested","reviewed-by","label","checks","review","head","base","created","updated","closed","merged-at","comments","reactions","draft","match","sort","order","page","archived"];if(e.prNumber===void 0)for(let c of n)e[c]!==void 0&&t.addIssue({code:"custom",message:`${c} requires prNumber detail mode.`,path:[c]});else{e.owner?.trim()||t.addIssue({code:"custom",message:"owner is required with prNumber.",path:["owner"]}),e.repo?.trim()||t.addIssue({code:"custom",message:"repo is required with prNumber.",path:["repo"]});for(let c of r)e[c]!==void 0&&t.addIssue({code:"custom",message:`${c} is only available in list mode.`,path:[c]})}e.content&&Object.keys(e.content).length===0&&t.addIssue({code:"custom",message:"content needs at least one selector.",path:["content"]});let o=e.content?.patches;if(!o)return;let i=(o.files?.length??0)>0,s=(o.ranges?.length??0)>0,a=i||s;o.mode==="selected"&&!a&&t.addIssue({code:"custom",message:'content.patches.mode="selected" requires non-empty files or ranges.',path:["content","patches","files"]}),o.mode!=="selected"&&a&&t.addIssue({code:"custom",message:'content.patches.files and content.patches.ranges require mode="selected".',path:["content","patches","mode"]})});import{z as ce}from"zod";var EP=fe({name:"ghSearchHistory",type:"Github",shortDescription:"Search GitHub issues, or read one issue's body and comments.",instructions:`Use for bug reports and feature threads; use PR or code tools for those surfaces. List mode uses search filters. Detail mode needs owner, repo, issueNumber, and content selectors; continue bodies/comments with returned offsets and pages.
15
+ GitHub issue search also finds PRs, which are filtered out. totalCount is present only for a complete page; an empty page with hasMore still has a nextPage.`,schema:{keywords:"Issue search terms.",match:"Keyword fields: title, body, comments.",issueNumber:"Issue detail mode; requires owner+repo.",concise:"Issue list triage; list mode only.",state:"open or closed.",assignee:"Assigned GitHub login.",author:"Issue author login.",commenter:"Commenter login.",mentions:"Mentioned login.",archived:"Include issues from archived repos.",comments:'Comment-count range filter (">5"); not comment content.',reactions:'Reaction-count range filter (">10").',created:'Created date/range, e.g. ">2024-01-01" or "a..b".',updated:"Updated-date filter (same format as created).",closed:"Closed-date filter (same format as created).",label:"Label name(s); multiple are ANDed.",sort:"created, updated, comments, reactions, best-match.",order:"asc/desc; asc+created helps archaeology.",commentPage:"Comments page from contentPagination.",content:"Detail selector for issueNumber.","content.body":"Include the issue description body.","content.comments":"Comment-thread selector.","content.comments.discussion":"Include the comment thread.","content.comments.includeBots":"Include bot/CI comments.",matchString:"Substring filter for body/comment windows.",charOffset:"Body continuation offset from nextQuery.",commentBodyOffset:"Comment-body continuation offset from nextQuery.",minify:'"standard" (default) compacts body/comment text; "none" keeps it exact.',pageSize:"Issues or detail comments returned per page."}}),Hl=EP.schema,nr=U(Hl,{...ee,owner:ce.string(),repo:ce.string(),keywords:ce.array(ce.string()).optional(),issueNumber:H(1,Ze).optional(),concise:ce.boolean().optional(),state:ce.enum(["open","closed"]).optional(),assignee:ce.string().optional(),author:ce.string().optional(),commenter:ce.string().optional(),mentions:ce.string().optional(),label:ce.array(ce.string()).optional(),created:ce.string().optional(),updated:ce.string().optional(),closed:ce.string().optional(),comments:ce.string().optional(),reactions:ce.string().optional(),match:ce.array(ce.enum(["title","body","comments"])).optional(),sort:ce.enum(["created","updated","best-match","comments","reactions"]).optional(),order:ce.enum(["asc","desc"]).optional(),pageSize:H(1,_t).default(kt),page:Qe(),archived:ce.boolean().optional(),commentPage:Qe(),content:U(Hl,{body:ce.literal(!0).optional(),comments:U(Hl,{discussion:ce.literal(!0).optional(),includeBots:ce.literal(!0).optional()},"content.comments").optional()},"content").optional(),matchString:ce.string().optional(),commentBodyOffset:qe(),charOffset:qe(),charLength:yt(),minify:ce.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let n=["content","commentPage","matchString","commentBodyOffset","charOffset","charLength"],r=["keywords","concise","state","assignee","author","commenter","mentions","label","created","updated","closed","comments","reactions","match","sort","order","page","archived"];if(e.issueNumber===void 0)for(let o of n)e[o]!==void 0&&t.addIssue({code:"custom",message:`${o} requires issueNumber detail mode.`,path:[o]});else{e.owner?.trim()||t.addIssue({code:"custom",message:"owner is required with issueNumber.",path:["owner"]}),e.repo?.trim()||t.addIssue({code:"custom",message:"repo is required with issueNumber.",path:["repo"]});for(let o of r)e[o]!==void 0&&t.addIssue({code:"custom",message:`${o} is only available in list mode.`,path:[o]})}e.content&&Object.keys(e.content).length===0&&t.addIssue({code:"custom",message:"content needs at least one selector.",path:["content"]})});import{z as Ot}from"zod";var AP=fe({name:"ghSearchHistory",type:"Github",shortDescription:"Walk a GitHub repository's commit history for a path or range.",instructions:`Trace when or why code changed; use code tools for current bytes and PR search for review context. History mode filters by path/date/ref/author; compare mode needs base+head. This tool does not search commit messages.
16
+ For one commit's changes, compare base:"SHA^" to head:"SHA" with includeDiff. Scope diffs to one commit or a tight window. Use a clone and LSP for symbol identity.`,schema:{pageSize:"Commits returned per page (walk with page).",owner:"Repository owner.",repo:"Repository name.",path:"File/dir prefix; trailing / scopes the subtree.",since:'Lower date bound: ISO date or relative window such as "30d".',until:"Upper date bound; same formats as since.",branch:"Ref to walk; defaults to the default branch.",includeDiff:"Attach diffs; prefer one commit or a tight window.",author:"Author login or email.",committer:"Committer login or email.",base:"Compare-mode base ref; set with head.",head:"Compare-mode head ref; set with base.",filePage:"Changed-file page from pagination.nextFilePage.",charOffset:"Patch offset from patchPagination.nextCharOffset.",charLength:"Patch-window length."}}),Ds=U(AP.schema,{...ee,owner:Ot.string(),repo:Ot.string(),path:Ot.string().optional(),since:Ot.string().optional(),until:Ot.string().optional(),branch:Ot.string().optional(),author:Ot.string().optional(),committer:Ot.string().optional(),base:Ot.string().optional(),head:Ot.string().optional(),pageSize:H(1,100).optional().default(30),includeDiff:Ot.boolean().optional().default(!1),page:Le(),filePage:Qe(),charOffset:qe(),charLength:yt()}).superRefine((e,t)=>{(e.base&&!e.head||e.head&&!e.base)&&t.addIssue({code:"custom",path:[e.base?"head":"base"],message:"Set base and head together for compare mode."})});import{z as Gl}from"zod";var LP=fe({name:"npmSearch",type:"NPM",shortDescription:"Look up npm packages and find their source repositories.",instructions:"Resolve npm packages to source repositories. Set exactly one of packageName for exact lookup or keywords for discovery. Follow the repository into GitHub tools.",schema:{keywords:"Discovery terms joined with spaces. Mutually exclusive with packageName.",packageName:"Exact package name; include scope for scoped packages.",page:"Keyword-result page only."}}),Hs=U(LP.schema,{...ee,packageName:Gl.string().optional(),keywords:Gl.array(Gl.string()).optional(),page:Le()}).superRefine((e,t)=>{let n=e.keywords?.join(" ").trim();!e.packageName?.trim()&&!n&&t.addIssue({code:"custom",path:["packageName"],message:"Set packageName or keywords."}),e.packageName?.trim()&&n&&t.addIssue({code:"custom",path:["keywords"],message:"Set packageName or keywords, not both."})});import{z as $o}from"zod";var _P=fe({name:"ghCloneRepo",type:"Github",shortDescription:"Clone a GitHub repo or subtree locally for repeated reads, search, or LSP.",instructions:"Best for repeated reads, local AST/regex, or LSP; use ghGetFileContent for one read. Discover a bounded sparsePath first. branch selects the ref and forceRefresh bypasses the cached clone. Pass results[].data.location.localPath to local tools.",schema:{sparsePath:"Bound checkout to a repo-relative file/dir.",forceRefresh:"Bypass cached clone."}}),Bl=U(_P.schema,{...ee,owner:$o.string(),repo:$o.string(),branch:$o.string().optional(),sparsePath:$o.string().optional(),forceRefresh:$o.boolean().optional()});import{z as bt}from"zod";import{z as Oe}from"zod";var zl={searchText:'Single lexical pattern. regex:"fixed" is literal and "perl" enables advanced syntax.',mode:'Search mode: "discovery" paths; "paginated" snippets; "detailed" context; "structural" AST.',pattern:"Structural code pattern: $X matches one node; $$$ARGS matches a list. Include modifiers or use a kind rule.",rule:"Structural YAML ast-grep rule for relational matches.",regex:'"smart" (default), "fixed" (literal), or "perl" (advanced).',caseMode:'"smart" (default), "sensitive", or "insensitive".',wholeWord:"Match whole words only (text/regex modes).",invertMatch:"Return non-matching lines (text/regex modes).",multiline:'"off" (default), "on", or "dotall" (. spans newlines).',include:"Glob(s) of files to include.",exclude:"Glob(s) of files to exclude.",excludeDir:"Directory names to prune from the walk.",noIgnore:"Also search .gitignored files.",hidden:"Include dot-files.",matchContentLength:"Matched-line characters kept per hit; longer lines are truncated.",maxFiles:"Text: page ceiling. Structural: scan cap; stats report truncation.",maxDepth:"Maximum levels below the search root; 0 means root files.",output:'"content" lines; "files"/"filesWithout" paths; count modes totals; "matchOnly" substrings.',unique:'With output:"matchOnly", deduplicate values or count frequency.',sort:'"relevance" (default), "matchCount", "path", "modified", "accessed", or "created".',sortReverse:"Reverse the sort order.",rankingProfile:'Language tuning for sort:"relevance"; "auto" detects.',langType:'Language/file type, e.g. "ts"; structural mode maps it to include globs.',captureText:"Structural: include verbatim $$$ list captures; ranges remain available when omitted.",maxMatchesPerFile:"Pairs with matchPage.",matchWindow:'Requires output:"matchOnly".',matchPage:"Per-file match page."},ft=U(zl,{...ee,searchText:Oe.string().optional(),path:Oe.string(),mode:Oe.enum(["paginated","discovery","detailed","structural"]).default("paginated"),pattern:Oe.string().optional(),rule:Oe.string().optional(),regex:Oe.enum(["smart","fixed","perl"]).default("smart"),caseMode:Oe.enum(["smart","sensitive","insensitive"]).default("smart"),wholeWord:Oe.boolean().optional(),invertMatch:Oe.boolean().optional(),include:Ae,exclude:Ae,excludeDir:Ae,noIgnore:Oe.boolean().optional(),hidden:Oe.boolean().optional(),contextLines:Os(),matchContentLength:H(1,Il).default(Ol),maxMatchesPerFile:H(1,Is).optional(),maxFiles:H(1,Is).optional(),maxDepth:H(0,Qo).optional(),multiline:Oe.enum(["off","on","dotall"]).default("off"),sort:Oe.enum(["relevance","matchCount","path","modified","accessed","created"]).default("relevance"),sortReverse:Oe.boolean().optional(),rankingProfile:Oe.enum(["auto","typescript","javascript","rust","python","go","java","scala","markdown","json","yaml","generic"]).default("auto"),langType:Oe.string().optional(),captureText:Oe.boolean().optional(),output:Oe.enum(["content","files","filesWithout","countLines","countMatches","matchOnly"]).default("content"),unique:Oe.enum(["off","list","count"]).default("off"),matchWindow:H(0,200).optional(),matchPage:Qe(),itemsPerPage:H(1,vl).optional(),page:Le()}).superRefine((e,t)=>{if(e.mode==="structural"){!e.pattern&&!e.rule&&t.addIssue({code:"custom",message:"Set pattern or rule for structural mode.",path:["pattern"]}),e.pattern&&e.rule&&t.addIssue({code:"custom",message:"Choose pattern or rule, not both.",path:["rule"]}),e.wholeWord&&t.addIssue({code:"custom",message:"Remove wholeWord in structural mode.",path:["wholeWord"]}),e.invertMatch&&t.addIssue({code:"custom",message:"Remove invertMatch in structural mode.",path:["invertMatch"]});for(let r of["regex","caseMode","multiline"]){let o=r==="multiline"?"off":"smart";e[r]!==o&&t.addIssue({code:"custom",message:`Remove ${r} in structural mode.`,path:[r]})}e.output!=="content"&&t.addIssue({code:"custom",message:"Remove output in structural mode.",path:["output"]}),e.unique!=="off"&&t.addIssue({code:"custom",message:"Remove unique in structural mode.",path:["unique"]})}else(e.pattern||e.rule)&&t.addIssue({code:"custom",message:"Use structural mode with pattern or rule.",path:[e.pattern?"pattern":"rule"]}),e.searchText||t.addIssue({code:"custom",message:"Set searchText for text modes.",path:["searchText"]});e.matchWindow!==void 0&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'Use output:"matchOnly" with matchWindow.',path:["matchWindow"]}),e.unique!=="off"&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'Use output:"matchOnly" with unique.',path:["unique"]})});import{z as st}from"zod";var Ql={maxDepth:"Maximum levels below path; 0 is direct entries.",minDepth:"Requires <= maxDepth when both set.",names:"Basename globs; ORed.",pathPattern:"Full-path glob.",regex:"Basename Rust regex.",empty:"Match only empty files/dirs.",time:"Time filters using d/h/w/m durations.","time.modifiedWithin":"Modified within this duration, e.g. 2d or 6h.","time.modifiedBefore":"Modified before this duration ago, e.g. 30d.","time.accessedWithin":"Accessed within this duration, e.g. 1w.",size:"Size range, e.g. 100k or 1m.","size.greater":"Minimum file size, e.g. 100k or 1m.","size.less":"Maximum file size, e.g. 500b or 2m.",extensions:'Extensions without dots, e.g. ["ts","tsx"].',excludeDir:"Directory names; generated/vendor dirs are pruned by default. Pass [] to prune nothing.",entryType:'"f" files, "d" dirs.',permissions:"Exact permission filter.",access:'"executable", "readable", or "writable" filter.',detail:'"basic" (default), "modified" (+mtime), or "full" (all metadata).',sortBy:'"modified" (default), "name", "path", or "size".',limit:"Post-sort result cap; pagination stays within it."},jl=Ql,Ut=U(jl,{...ee,path:st.string(),maxDepth:H(0,ks).optional(),minDepth:H(0,ks).optional(),names:Ae,pathPattern:st.string().optional(),regex:st.string().optional(),empty:st.boolean().optional(),time:U(jl,{modifiedWithin:st.string().optional(),modifiedBefore:st.string().optional(),accessedWithin:st.string().optional()},"time").optional(),size:U(jl,{greater:st.string().optional(),less:st.string().optional()},"size").optional(),permissions:st.string().optional(),access:st.enum(["executable","readable","writable"]).optional(),extensions:Ae,excludeDir:Ae,limit:H(1,Uo).optional(),detail:st.enum(["basic","modified","full"]).default("basic"),sortBy:st.enum(["modified","name","path","size"]).default("modified"),entryType:st.enum(["f","d"]).optional(),page:Le(),itemsPerPage:H(1,Jn).optional()}).superRefine((e,t)=>{e.minDepth!==void 0&&e.maxDepth!==void 0&&e.minDepth>e.maxDepth&&t.addIssue({code:"custom",message:"minDepth must be less than or equal to maxDepth.",path:["minDepth"]})});import{z as In}from"zod";var Ul={pattern:"Name glob or substring; use the files operation for regex.",entryType:'"f" files only, "d" dirs only; omit for both.',detail:'"basic" (default), "modified" (+mtime), or "full" (size/perms).',hidden:"Include dot-files/dirs.",recursive:"true enables the default recursive depth; omit with maxDepth for immediate children.",maxDepth:"Recursion depth. Omitted: immediate children, or 5 if recursive:true; maxDepth alone enables recursion, so recursive:true is not required. 0 uses those defaults.",extensions:"Allowlist without dots.",excludeDir:"Directories to prune; [] includes generated/vendor directories.",sortBy:'"name" (default), "size", "time", or "extension".',reverse:"Reverse the sort order.",limit:"Discovery cap before pagination."},$t=U(Ul,{...ee,path:In.string(),detail:In.enum(["basic","modified","full"]).default("basic"),hidden:In.boolean().optional(),sortBy:In.enum(["name","size","time","extension"]).default("name"),reverse:In.boolean().optional(),pattern:In.string().optional(),entryType:In.enum(["f","d"]).optional(),recursive:In.boolean().optional(),extensions:Ae,excludeDir:Ae,maxDepth:H(0,Qo).optional(),limit:H(1,Uo).optional(),page:Le(),itemsPerPage:H(1,Jn).optional()});var Wo={...zl};delete Wo.mode;delete Wo.output;delete Wo.itemsPerPage;delete Wo.sortReverse;var Ah={...Ul};delete Ah.recursive;var NH=fe({name:"localSearch",type:"Local",shortDescription:"Search local text, syntax, paths, or directory trees through one operation.",instructions:'Choose operation:"text" for lexical anchors, "structural" for AST matches, "files" for path or metadata discovery, and "tree" for directory orientation. Each operation has a strict branch, so do not mix fields across operations. Files/tree prune common generated and vendor directories by default; pass excludeDir:[] to prune nothing. Read exact hits with localGetFileContent and prove symbol identity with lspGetSemantics.',schema:{...Ql,...Ah,...Wo,operation:'Required branch: "text", "structural", "files", or "tree".',resultView:'Text/structural result shape. Text also supports "paginated", "discovery", and "detailed".',pattern:"Structural AST pattern.",namePattern:"Tree entry name glob or substring.",pathRegex:"Files operation: basename Rust regex.",limit:"Files/tree discovery cap before pagination.",pageSize:"Results returned per page.",sort:"Operation-specific sort order.",reverse:"Reverse the selected sort order."}}),Lh=bt.object(ft.shape),kP=bt.object(Ut.shape),IP=bt.enum(["paginated","discovery","detailed","content","files","filesWithout","countLines","countMatches","matchOnly"]),OP=bt.enum(["content","files","countLines","countMatches","matchOnly"]),vP=Lh.omit({pattern:!0,rule:!0,captureText:!0,mode:!0,output:!0,itemsPerPage:!0,sortReverse:!0}).extend({operation:bt.literal("text").describe('Use "text" for lexical search.'),searchText:bt.string().describe("Single lexical pattern."),resultView:IP.optional().default("paginated").describe("Text result shape; paginated is the default."),pageSize:ft.shape.itemsPerPage.describe("Matches returned per page."),reverse:ft.shape.sortReverse.describe("Reverse the selected sort order."),unique:ft.shape.unique.describe('With resultView:"matchOnly", deduplicate values or count frequency.'),matchWindow:ft.shape.matchWindow.describe('Requires resultView:"matchOnly".')}).strict(),_h=Lh.omit({searchText:!0,pattern:!0,rule:!0,mode:!0,regex:!0,caseMode:!0,wholeWord:!0,invertMatch:!0,multiline:!0,unique:!0,matchWindow:!0,output:!0,itemsPerPage:!0,sortReverse:!0}).extend({operation:bt.literal("structural").describe('Use "structural" for AST matching.'),resultView:OP.optional().default("content").describe("Structural result shape; content is the default."),pageSize:ft.shape.itemsPerPage.describe("Matches returned per page."),reverse:ft.shape.sortReverse.describe("Reverse the selected sort order.")}).strict(),FP=_h.extend({pattern:bt.string().describe("Structural AST pattern.")}).strict(),MP=_h.extend({rule:bt.string().describe("Structural YAML ast-grep rule.")}).strict(),NP=kP.omit({regex:!0,limit:!0,sortBy:!0,itemsPerPage:!0}).extend({operation:bt.literal("files").describe('Use "files" for path and metadata discovery.'),pathRegex:Ut.shape.regex.describe("Basename Rust regex."),limit:Ut.shape.limit.describe("Post-sort discovery cap."),sort:Ut.shape.sortBy.describe("File sort order."),pageSize:Ut.shape.itemsPerPage.describe("Files returned per page.")}).strict(),DP=$t.omit({pattern:!0,recursive:!0,limit:!0,sortBy:!0,itemsPerPage:!0}).extend({operation:bt.literal("tree").describe('Use "tree" for directory orientation.'),namePattern:$t.shape.pattern.describe("Entry name glob or substring."),limit:$t.shape.limit.describe("Discovery cap before pagination."),sort:$t.shape.sortBy.describe("Tree sort order."),pageSize:$t.shape.itemsPerPage.describe("Entries returned per page.")}).strict();function Eh(e,t){if("error"in e)for(let n of e.error.issues)n.code==="custom"&&t.addIssue({code:"custom",message:n.message,path:n.path})}var $l=bt.union([vP,FP,MP,NP,DP]).superRefine((e,t)=>{if(e.operation==="text"){let n=e.resultView,r={...e,itemsPerPage:e.pageSize,sortReverse:e.reverse};delete r.operation,delete r.resultView,delete r.pageSize,delete r.reverse;let o=["paginated","discovery","detailed"].includes(n)?{...r,mode:n}:{...r,mode:"paginated",output:n};Eh(ft.safeParse(o),t);return}if(e.operation!=="structural"&&e.operation==="files"){let n={...e,regex:e.pathRegex,limit:e.limit,sortBy:e.sort,itemsPerPage:e.pageSize};delete n.operation,delete n.pathRegex,delete n.pageSize,delete n.sort,Eh(Ut.safeParse(n),t)}});import{z as ve}from"zod";var HP="localAnalyzeGraph",BH=fe({name:HP,type:"Local",shortDescription:"Analyze a repository file graph through one bounded operation.",instructions:"Map file topology, not symbol identity. dependencies/dependents need file; path needs file+target; deadCode/reachability accept roots; cycles needs no selector. Import edges and dead-code results are candidates\u2014verify changes and deletions with exact reads plus LSP.",schema:{path:"Absolute repository or package root to scan.",operation:"One bounded operation: deadCode, cycles, dependencies, dependents, path, or reachability.",file:"Repository-relative source file for dependencies, dependents, or path.",target:"Repository-relative destination file for path.",depth:"Traversal depth for dependencies or dependents.",entrypoints:"Repository-relative roots for deadCode or reachability.",includeTests:"Treat test files as reachability roots.",excludeDir:"Directory names to prune from graph construction.",maxFiles:"Maximum source files scanned; truncation is reported.",limit:"Result cap applied before pagination.",page:"Result page, 1-based; advance only while pagination.hasMore.",pageSize:"Results returned per page."}}),Vo=(e,t)=>ve.preprocess(n=>typeof n=="number"&&Number.isFinite(n)?Math.min(Math.max(n,e),t):n,ve.number().int().min(e).max(t)),Hr=(e,t)=>ve.literal(e).describe(t),Gr={...ee,path:ve.string().describe("Absolute repository or package root to scan."),excludeDir:ve.array(ve.string()).optional().describe("Directory names to prune from graph construction."),maxFiles:Vo(1,5e4).optional().describe("Maximum source files scanned; truncation is reported."),limit:Vo(1,5e3).optional().describe("Result cap applied before pagination."),page:Vo(1,jo).optional().default(1).describe("Result page, 1-based."),pageSize:Vo(1,Jn).optional().describe("Results returned per page.")},kh={entrypoints:ve.array(ve.string()).optional().describe("Repo-relative reachability roots; omit to detect package.json main/exports/bin."),includeTests:ve.boolean().optional().default(!0).describe("Treat tests as reachability roots (default true).")},Ih={file:ve.string().describe("Repo-relative source file."),depth:Vo(1,50).optional().default(1).describe("Maximum traversal depth (default 1).")},On=ve.discriminatedUnion("operation",[ve.object({...Gr,...kh,operation:Hr("deadCode","Find unreachable or unretained exported symbols and dead SCCs.")}).strict(),ve.object({...Gr,operation:Hr("cycles","Find strongly connected file components.")}).strict(),ve.object({...Gr,...Ih,operation:Hr("dependencies","Traverse files imported or re-exported by the source file; results include edgeKinds and syntactic confidence.")}).strict(),ve.object({...Gr,...Ih,operation:Hr("dependents","Traverse files that import or re-export the source file; results include edgeKinds and syntactic confidence.")}).strict(),ve.object({...Gr,file:ve.string().describe("Repo-relative source file."),target:ve.string().describe("Repo-relative destination file."),operation:Hr("path","Find the shortest directed import/re-export path with per-edge provenance.")}).strict(),ve.object({...Gr,...kh,operation:Hr("reachability","Classify scanned files by reachability from entrypoints.")}).strict()]);import{z as Br}from"zod";var GP=fe({name:"localGetFileContent",type:"Local",shortDescription:"Read a local file or a specific region.",instructions:`Read a known local path after search, find, or structure discovery. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
17
+ Choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; continue with the returned charOffset. matchedLines are LSP anchors; match ranges and character offsets are not. Report fetched bytes only.`,schema:{fullContent:"Whole file; small files only; exclusive with range/match.",matchString:"Anchor returning padded matchRanges and exact matchedLines.",matchStringIsRegex:"Makes matchString a regex.",matchStringCaseSensitive:"Case-sensitive matchString.",startLine:"Requires endLine; exclusive with fullContent/matchString.",endLine:"Requires startLine; must be >= startLine.",charOffset:"Copy pagination.nextCharOffset.",minify:'"symbols" outline, "standard" compact, "none" exact.'}}),Gs=U(GP.schema,{...ee,path:Br.string(),fullContent:Br.boolean().optional(),matchString:Br.string().optional(),matchStringIsRegex:Br.boolean().optional(),matchStringCaseSensitive:Br.boolean().optional(),startLine:Fr(),endLine:Fr(),contextLines:H(0,vr).default(5),charOffset:qe(),charLength:yt(),minify:Br.enum(["none","standard","symbols"]).default("standard")}).superRefine(vs);import{z as rr}from"zod";var BP=fe({name:"lspGetSemantics",type:"Local",shortDescription:"Run LSP semantic queries \u2014 definitions, references, call hierarchy, symbols, type hierarchy, diagnostics.",instructions:`Use a real search/read line anchor for semantic proof. references finds usages; callers incoming calls; callees outgoing calls; callHierarchy both. Fall back to references if call hierarchy is unavailable.
18
+ documentSymbols/diagnostic need uri; workspaceSymbol needs symbolName; other operations need uri+symbolName+lineHint. orderHint resolves same-line names. format:"compact" saves tokens. Empty/unavailable results call for a new anchor or text search.`,schema:{pageSize:"References or symbols returned per page.",page:"Reference/symbol result page.",type:"Identity, usage, hierarchy, hover, symbol, or diagnostic operation.",uri:"Target file path/URI; required for every type except workspaceSymbol.",symbolName:"Bare anchored identifier, or fuzzy workspace symbol query.",lineHint:"Observed line containing symbolName.",orderHint:"Disambiguate repeated symbols on one line.",depth:"Call/type hierarchy depth; 0 is direct only.",includeDeclaration:"references: include the declaration; disable before unused analysis.",groupByFile:"references summary mode.",contextLines:"Lines of surrounding source shown around each result location.",format:'"compact" saves tokens; "structured" has typed locations.',workspaceRoot:"Use when auto-root is wrong."}}),Bs=U(BP.schema,{...ee,uri:rr.string().optional(),type:rr.enum(["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation","workspaceSymbol","supertypes","subtypes","diagnostic"]).default("definition"),symbolName:rr.string().min(1).optional(),lineHint:H(1,Ze).optional(),orderHint:H(0,Ll).default(0),depth:H(0,Fl).optional(),includeDeclaration:rr.boolean().default(!0),groupByFile:rr.boolean().optional(),page:Le(),pageSize:H(1,Ml).optional(),contextLines:Os(),format:rr.enum(["structured","compact"]).default("structured"),workspaceRoot:rr.string().optional()}).superRefine((e,t)=>{if(e.type==="workspaceSymbol"){e.symbolName||t.addIssue({code:"custom",path:["symbolName"],message:"Set symbolName for workspaceSymbol."});return}e.uri||t.addIssue({code:"custom",path:["uri"],message:"Set uri for file-scoped operations."}),!(e.type==="documentSymbols"||e.type==="diagnostic")&&(e.symbolName||t.addIssue({code:"custom",path:["symbolName"],message:"Set symbolName for anchored operations."}),Number.isInteger(e.lineHint)||t.addIssue({code:"custom",path:["lineHint"],message:"Set lineHint for anchored operations."}))});var Wt=mt.LOCAL_ANALYZE_GRAPH,et="localSearch",St=mt.GITHUB_SEARCH,le="ghSearchHistory",ye="ghGetHistoryItem",oe={GITHUB_SEARCH:mt.GITHUB_SEARCH,GITHUB_FETCH_CONTENT:mt.GITHUB_FETCH_CONTENT,PACKAGE_SEARCH:mt.PACKAGE_SEARCH,GITHUB_CLONE_REPO:mt.GITHUB_CLONE_REPO,LOCAL_FETCH_CONTENT:mt.LOCAL_FETCH_CONTENT,LOCAL_ANALYZE_GRAPH:mt.LOCAL_ANALYZE_GRAPH,LSP_GET_SEMANTIC_CONTENT:mt.LSP_GET_SEMANTIC_CONTENT,GITHUB_SEARCH_HISTORY:le,GITHUB_GET_HISTORY_ITEM:ye},we=oe.LSP_GET_SEMANTIC_CONTENT,zP=new Set([et,oe.LOCAL_FETCH_CONTENT,Wt,we]);function RG(e){return zP.has(e)}var I={...oe,LOCAL_SEARCH:"localSearch",GITHUB_SEARCH_CODE:"github.code",GITHUB_VIEW_REPO_STRUCTURE:"github.tree",GITHUB_SEARCH_REPOSITORIES:"github.repositories",LOCAL_RIPGREP:"local.text",LOCAL_VIEW_STRUCTURE:"local.tree",LOCAL_FIND_FILES:"local.files"};var Ue={ghSearch:`Choose operation:"code" for code contents or file paths, "repositories" to discover repositories, or "tree" to browse a known repository.
19
+ Each operation has a strict input branch; fields from other operations are rejected. Use ghGetFileContent only after a path is known. Empty GitHub search results do not prove absence.`,ghGetFileContent:`Read a known GitHub path after search or structure discovery; a complete search snippet needs no reread. A path-only call returns a bounded standard-minified view. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
20
+ Optionally choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; run the returned continuation. matchedLines are LSP anchors; match ranges and offsets are not. type:"directory" returns localPath when local access is enabled; otherwise use ghSearch operation:"tree".`,ghSearchHistory:'Search or list repository history. Choose operation:"pullRequests", "issues", or "commits"; fields from other operations are rejected. Pull-request search may be global, while issue and commit history require owner+repo. Search branches never accept detail identities, content selectors, or diff pagination. Follow a result with ghGetHistoryItem.',ghGetHistoryItem:'Retrieve exact GitHub history. Choose operation:"pullRequest" or "issue" with number, "commit" with ref, or "compare" with base+head. Every branch requires owner+repo and rejects fields from other branches. PR/issue content and commit/compare diffs keep their branch-specific page and character windows; copy returned continuations exactly.',npmSearch:"Resolve npm packages to source repositories. Set exactly one of packageName for exact lookup or keywords for discovery. Follow the repository into GitHub tools.",ghCloneRepo:"Best for repeated reads, local AST/regex, or LSP; use ghGetFileContent for one read. Discover a bounded sparsePath first; complete is relative to that requested scope. branch selects the ref and forceRefresh bypasses the cached clone. Pass results[].data.location.localPath to local tools.",localSearch:'Choose operation:"text" for lexical anchors, "structural" for AST matches, "files" for path or metadata discovery, and "tree" for directory orientation. Each operation has a strict branch, so do not mix fields across operations. Files/tree prune common generated and vendor directories by default; pass excludeDir:[] to prune nothing. Read exact hits with localGetFileContent and prove symbol identity with lspGetSemantics.',localAnalyzeGraph:"Map file topology, not symbol identity. dependencies/dependents need file; path needs file+target; deadCode/reachability accept roots; cycles needs no selector. Import edges and dead-code results are candidates\u2014verify changes and deletions with exact reads plus LSP.",localGetFileContent:`Read a known local path after search, find, or structure discovery. A path-only call returns a bounded standard-minified view. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
21
+ Optionally choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; run the returned continuation. matchedLines are LSP anchors; match ranges and character offsets are not. Report fetched bytes only.`,lspGetSemantics:`Use a real search/read line anchor for semantic proof. references finds usages; callers incoming calls; callees outgoing calls; callHierarchy both. Fall back to references if call hierarchy is unavailable.
22
+ documentSymbols/diagnostic need uri; workspaceSymbol needs symbolName; other operations need uri+symbolName+lineHint. orderHint resolves same-line names. format:"compact" saves tokens. Empty/unavailable results call for a new anchor or text search.`};function jP(e){return Object.prototype.hasOwnProperty.call(Ue,e)}function Wl(e,t){let n=e.split("/").pop()||"",r=t.some(i=>{let s=i.split("/").pop()||"";return s.toLowerCase()===n.toLowerCase()&&s!==n}),o=[];return r&&o.push('GitHub paths are case-sensitive. Verify exact casing with ghSearch operation:"tree".'),o.push(`Did you mean: ${t.join(", ")}?`),o}async function Vl(e,t,n,r,o){try{let i=r.split("/").slice(0,-1).join("/"),s=r.split("/").pop();if(!s)return[];let a=await e.rest.repos.getContent({owner:t,repo:n,path:i,ref:o});if(!Array.isArray(a.data))return[];let c=a.data,l=[],u=c.find(m=>m.name.toLowerCase()===s.toLowerCase());u&&l.push(u.path);let p=s.replace(/\.[^/.]+$/,"");return c.filter(m=>m.name===s?!1:!!m.name.startsWith(p+".")).forEach(m=>l.push(m.path)),l.length===0&&p.length>=3&&c.filter(f=>{let h=f.name.replace(/\.[^/.]+$/,"");return h!==p&&h.length>=3&&(p.startsWith(h)||h.startsWith(p))}).forEach(f=>l.push(f.path)),Array.from(new Set(l)).slice(0,3)}catch{return[]}}async function QP(e,t,n,r,o,i,s,a){let c=await Be(r,o,a);if((s==="main"||s==="master")&&s!==c)try{return{result:await e.rest.repos.getContent({...n,ref:c}),actualBranch:c}}catch{throw t}let u=J(t),p=s===c?void 0:`Branch '${s}' not found. Default branch is '${c}'. Ask user: Do you want to get the file from '${c}' instead?`,d=await Vl(e,r,o,i,s||c);return d.length>0&&(u.hints=[...u.hints||[],...Wl(i,d)]),{...u,...p&&{scopesSuggestion:p}}}async function UP(e,t,n,r,o,i){let s=J(t),a=await Vl(e,n,r,o,i||"main");return a.length>0&&(s.hints=[...s.hints||[],...Wl(o,a)]),s}async function Oh(e,t){let n=e.replace(/\s/g,"");if(!n)return{error:fn.FILE_EMPTY.message,type:"unknown",status:404};try{let r=Buffer.from(n,"base64");return r.indexOf(0)!==-1?{error:fn.BINARY_FILE.message,type:"unknown",status:415}:{data:r.toString("utf-8"),status:200}}catch{return{error:fn.DECODE_FAILED.message,type:"unknown",status:422}}}async function vh(e,t,n,r,o){try{let i=await e.rest.git.getBlob({owner:t,repo:n,file_sha:r}),{content:s,encoding:a}=i.data;return a==="base64"?Oh(s,o):a==="utf-8"?{data:s,status:200}:{error:`Unsupported blob encoding: ${a}`,type:"unknown",status:415}}catch(i){return J(i)}}async function $P(e,t,n,r,o,i){try{let s=r.split("/").slice(0,-1).join("/"),a=r.split("/").pop();if(!a)return{error:`Cannot determine file name from path: ${r}`,type:"unknown",status:400};let c=o||await Be(t,n,i).catch(()=>"HEAD"),l=await e.rest.repos.getContent({owner:t,repo:n,path:s||"",ref:c});if(!Array.isArray(l.data))return{error:`Expected directory listing for ${s||"root"}`,type:"unknown",status:500};let u=l.data.find(d=>d.name===a&&d.type==="file");if(!u)return{error:`File ${a} not found in ${s||"root"}`,type:"unknown",status:404};let p=await vh(e,t,n,u.sha,r);return"error"in p?p:{data:{rawContent:p.data,branch:typeof c=="string"?c:void 0,resolvedRef:typeof c=="string"?c:"HEAD"},status:200}}catch(s){return J(s)}}async function Ko(e,t,n={}){try{let r=await $(t),{owner:o,repo:i,path:s,branch:a}=e,c={owner:o,repo:i,path:s,...a&&{ref:a},...n.ifNoneMatch?{headers:{"If-None-Match":n.ifNoneMatch}}:{}},l,u=a;try{l=await r.rest.repos.getContent(c)}catch(m){if(m instanceof Kl&&m.status===304)return{data:{rawContent:"",resolvedRef:a||"HEAD"},status:304,etag:n.ifNoneMatch,notModified:!0};if(m instanceof Kl&&m.status===404)if(a){let f=await QP(r,m,c,o,i,s,a,t);if("result"in f)l=f.result,u=f.actualBranch;else return f}else return await UP(r,m,o,i,s,a);else{if(m instanceof Kl&&m.status===413)return await $P(r,o,i,s,a||u,t);throw m}}let p=l.data,d=Or(l.headers);if(Array.isArray(p))return{error:fn.PATH_IS_DIRECTORY.message(I.GITHUB_VIEW_REPO_STRUCTURE),type:"unknown",status:400};if("content"in p&&p.type==="file"){let m=typeof p.content=="string"?p.content:"",f=p.size??0,h;if(m.length>0)h=await Oh(m,s);else if(f>0&&"sha"in p&&typeof p.sha=="string"&&p.sha)h=await vh(r,o,i,p.sha,s);else return{error:fn.FILE_EMPTY.message,type:"unknown",status:404};if("error"in h)return h;if(!u&&!a)try{u=await Be(o,i,t)}catch{}return{data:{rawContent:h.data,branch:u||void 0,resolvedRef:u||a||"HEAD"},status:200,rawResponseChars:B(p),...d?{etag:d}:{}}}return{error:fn.UNSUPPORTED_TYPE.message(p.type),type:"unknown",status:415}}catch(r){return J(r)}}async function Xl(e,t,n,r,o,i=!1){let s=At(),{commitSha:a,resolvedRef:c}=await Es(e,t,r,o,i),l=vo(s,e,t,a),u=YP(KP(l,n));if(!u.startsWith(l+ZP)&&u!==l)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let p=xr(l);if(!i&&p.hit&&p.meta.commitSha===a&&Fh(u))return{localPath:u,repoRoot:l,path:n,size:bh(u),cached:!0,expiresAt:p.meta.expiresAt,owner:e,repo:t,branch:c,commitSha:a};let d=await Ko({owner:e,repo:t,path:n,type:"file",branch:a,fullContent:!0,contextLines:0,minify:"none",goal:`Save ${e}/${t}/${n} locally`,reasoning:"GitHub file materialization"},o);if(!("data"in d)||!d.data){let h="error"in d?d.error:void 0;throw new Error(h||`Failed to fetch ${e}/${t}/${n}`)}Pr(s),Pn(l);let m=XP(u);Fh(m)||VP(m,{recursive:!0,mode:448}),WP(u,d.data.rawContent,"utf-8");let f=wr(e,t,c,"treeFetch",void 0,void 0,a);return Cr(l,f),{localPath:u,repoRoot:l,path:n,size:d.data.rawContent.length,cached:!1,expiresAt:f.expiresAt,owner:e,repo:t,branch:c,commitSha:a}}import{ContentSanitizer as eu}from"@octocodeai/octocode-engine/contentSanitizer";function Xo(e){if(e.length===0)return[];let t=e.split(/\r?\n/);return t.length>0&&t[t.length-1]===""&&t.pop(),t}function Vt(e){return Xo(e).length}function zs(e,t,n,r=!1,o=!1,i){if(r)try{new RegExp(t)}catch(l){let u=l instanceof Error?l.message:String(l);throw new Error(`Invalid regex pattern: ${u}`)}if(i!==void 0&&i<=0)return{lines:[],matchRanges:[],matchCount:0,matchingLines:[]};let s=e.join(`
23
+ `),a={isRegex:r,caseSensitive:o,contextLines:n,maxMatches:i},c=D.extractMatchingLines(s,t,a);return{lines:c.lines,matchRanges:c.matchRanges.map(l=>({start:l.start,end:l.end})),matchCount:c.matchCount,matchingLines:c.matchingLines.map(l=>l)}}var qP=/\.(?:md|markdown|mdx)$/i;function JP(e){return qP.test(e.split(/[?#]/,1)[0]??e)}function Mh(e,t){return JP(t)?tT(eT(e)):null}function js(e,t){let n=Mh(e,t);if(n===null||n.length===0)return null;let r=[];return Dh(n,r),r.join(`
24
+ `)}function Nh(e,t){let n=Mh(e,t);return n===null?null:n.map(Hh)}function eT(e){let t=[],n=e.split(/\r?\n/),r;return n.forEach((o,i)=>{let s=o.match(/^[ \t]{0,3}(`{3,}|~{3,})/);if(s?.[1]){let l=s[1][0],u=s[1].length;r?r.marker===l&&u>=r.length&&(r=void 0):r={marker:l,length:u};return}if(r)return;let a=o.match(/^[ \t]{0,3}(#{1,6})(?:[ \t]+|$)(.*)$/);if(!a?.[1])return;let c=(a[2]??"").replace(/[ \t]+#+[ \t]*$/,"").trim();t.push({line:i+1,level:a[1].length,text:c.length>0?c:"(untitled heading)",children:[]})}),t}function tT(e){let t=[],n=[];for(let r of e){for(;n.length>0&&n[n.length-1].level>=r.level;)n.pop();let o=n[n.length-1];o?o.children.push(r):t.push(r),n.push(r)}return t}function Dh(e,t){for(let n of e){let r=String(n.line).padStart(4," "),o=" ".repeat(Math.max(0,n.level-1));t.push(`${r}| ${o}${"#".repeat(n.level)} ${n.text}`),Dh(n.children,t)}}function Hh(e){let t=`${"#".repeat(e.level)} ${e.text}`;return{name:t,kind:"markdownHeading",range:{start:{line:e.line-1,character:0},end:{line:e.line-1,character:t.length}},selectionRange:{start:{line:e.line-1,character:0},end:{line:e.line-1,character:t.length}},children:e.children.map(Hh)}}import{getConfigSync as nT,DEFAULT_OUTPUT_CONFIG as rT}from"@octocodeai/config";function or(){try{return nT().output.pagination.defaultCharLength}catch{return rT.pagination.defaultCharLength}}function oT(e,t,n){return D.byteSliceContent(e,t,n)}function Qs(e,t){return D.byteToCharOffset(e,t)}function Gh(e,t){return D.charToByteOffset(e,t)}function Bh(e){return D.charToByteOffset(e,e.length)}function fB(e,t,n){let r=oT(e,t,t+n);return{charOffset:Qs(e,t),charLength:r.length,text:r}}function Yl(e,t,n,r){return D.sliceContent(e,t,n,r)}function Us(e,t=0,n,r={}){let o=r.mode??"characters",i=e.length,s=Bh(e);if(n===void 0)return{paginatedContent:e,byteOffset:0,byteLength:s,totalBytes:s,nextByteOffset:void 0,charOffset:0,charLength:i,totalChars:i,nextCharOffset:void 0,hasMore:!1,estimatedTokens:Math.ceil(e.length/4),currentPage:1,totalPages:1};let a=Math.max(1,r.pageSize??n),c,l,u,p,d,m,f,h;if(o==="bytes"){let y=Math.min(t,s),g=Math.min(y+n,s);p=Qs(e,y),d=Qs(e,g),d<i&&Gh(e,d)<g&&(d+=1);let S=Yl(e,p,d-p);c=S.text,p=S.charOffset,d=S.charOffset+S.charLength,l=S.byteOffset,u=S.byteOffset+S.byteLength,m=u<s;let R=r.actualOffset??y;f=Math.floor(R/a)+1,h=Math.max(f,Math.ceil(s/a))}else{let y=Yl(e,t,n);c=y.text,p=y.charOffset,d=y.charOffset+y.charLength,l=y.byteOffset,u=y.byteOffset+y.byteLength,m=d<i;let g=r.actualOffset??p;f=Math.floor(g/a)+1,h=Math.max(f,Math.ceil(i/a))}return{paginatedContent:c,byteOffset:l,byteLength:u-l,totalBytes:s,nextByteOffset:m?u:void 0,charOffset:p,charLength:c.length,totalChars:i,nextCharOffset:m?d:void 0,hasMore:m,estimatedTokens:Math.ceil(c.length/4),currentPage:f,totalPages:h}}function yB(e,t=!1){return t?JSON.stringify(e,null,2):JSON.stringify(e)}function Zl(e){return{currentPage:e.currentPage,totalPages:e.totalPages,hasMore:e.hasMore,charOffset:e.charOffset,charLength:e.charLength,totalChars:e.totalChars,...e.nextCharOffset!==void 0&&{nextCharOffset:e.nextCharOffset}}}function bB(e,t,n){let r=e.length;if(r===0)return{sliced:"",actualOffset:0,actualLength:0,hasMore:!1,lineCount:0,totalChars:0};if(t>=r)return{sliced:"",actualOffset:r,actualLength:0,hasMore:!1,lineCount:0,totalChars:r,nextOffset:r};let o=t;if(o>0&&e[o-1]!==`
25
+ `){let l=e.lastIndexOf(`
26
+ `,o-1);o=l===-1?0:l+1}let i=o,s=0;for(;i<r;){let l=e.indexOf(`
27
+ `,i);if(l===-1){i=r;break}if(i=l+1,s++,i-o>=n)break}let a=e.substring(o,i),c=i<r;return{sliced:a,actualOffset:o,actualLength:a.length,hasMore:c,lineCount:s,totalChars:r,nextOffset:c?i:void 0}}var iT=8e3,sT="__octocode_generic__.unknown";function aT(e){return e&&e.trim().length>0?e:sT}async function zh(e,t){return(await D.getSemanticBoundaryOffsets(e,aT(t))).filter(r=>Number.isInteger(r)&&r>=0&&r<=e.length)}function cT(e,t){let n=e.indexOf(`
28
+ `,t);return n===-1?void 0:n+1}function Yo(e){let t=e.trimEnd().split(`
29
+ `).at(-1)??"";return t.length>0&&(t[0]===" "||t[0]===" ")}async function Zo(e,t,n){let r=cT(e,Math.max(0,t));return r===void 0?void 0:(await zh(e,n)).find(i=>i>=r&&i>t)}async function CB(e,t,n,r,o){if(!Yo(e))return;let i=await Zo(t,n,o);if(i===void 0)return;let s=i-n,a=`Page cut mid-block at char ${n}. Next top-level definition at char ${i}. Re-request with charLength=${r+s} to extend this page to the next boundary, or use charOffset=${n} to continue page-by-page.`;return{nextBlockChar:i,hint:a}}async function $s(e,t,n,r){let o=Math.min(Math.max(0,t),e.length),i=Math.max(1,n),s=o+i;if(s>=e.length)return{length:e.length-o,chunkMode:"char-limit"};let a=await zh(e,r);if(a.length===0)return{length:i,chunkMode:"char-limit"};let c=a.find(u=>u>s);return c===void 0?{length:i,chunkMode:"char-limit"}:c-s<=iT?{length:c-o,chunkMode:"semantic"}:{length:i,chunkMode:"char-limit"}}function lT(){let e=or();return Math.min(e,8e3)}async function ql(e,t,n){let r=e.content??"",o=n??lT();if(r.length<=o&&t===0)return e;let i=e.path??void 0,{length:s,chunkMode:a}=await $s(r,t,o,i),c=Us(r,t,s,{pageSize:o}),l;if(c.hasMore&&a==="char-limit"&&Yo(c.paginatedContent)){let u=c.charOffset+c.charLength;l=await Zo(r,u,i)}return{...e,content:c.paginatedContent,pagination:{currentPage:c.currentPage,totalPages:c.totalPages,hasMore:c.hasMore,charOffset:c.charOffset,charLength:c.charLength,totalChars:c.totalChars,...c.nextCharOffset!==void 0&&{nextCharOffset:c.nextCharOffset},chunkMode:a,...l!==void 0&&{nextBlockChar:l}}}}async function Jl(e,t,n,r,o){try{let i=await e.rest.repos.listCommits({owner:t,repo:n,path:r,per_page:1,...o&&{sha:o}});if(i.data.length>0){let s=i.data[0],a=s?.commit?.committer?.date,c=s?.commit?.author?.name||s?.author?.login||"Unknown";return{lastModified:a||"Unknown",lastModifiedBy:c}}return null}catch{return null}}function qo(e,t){return{sourceChars:e,sourceBytes:t}}async function jh(e,t,n,r,o,i,s,a,c=5,l,u,p,d="standard"){let m=e.length,f=Buffer.byteLength(e,"utf-8"),h=d==="standard"||d==="symbols",y=h?"standard":"none",g;if(d==="symbols"){let v=D.extractSignatures(e,o);if(v===null){let A=js(e,o);if(A!==null){let q=eu.sanitizeContent(A,o),ne=[D.SIGNATURES_ONLY_HINT];return q.hasSecrets&&ne.push(`Secrets detected and redacted: ${q.secretsDetected.join(", ")}`),{owner:t,repo:n,path:o,content:q.content,contentView:"symbols",branch:r,totalLines:Vt(e),...qo(m,f),isPartial:!1,signaturesExtracted:!0,hints:ne}}g=`minify:"symbols" is not supported for this file type (${o.split(".").pop()??"unknown"}) \u2014 falling back to standard content view.`}if(v!==null){let A=eu.sanitizeContent(v,o),q=D.applyContentViewMinification(A.content,o),ne=[D.SIGNATURES_ONLY_HINT];return l&&ne.push('matchString was ignored \u2014 minify:"symbols" returns the full skeleton index. Use startLine/endLine from the gutter to read the matching body.'),A.hasSecrets&&ne.push(`Secrets detected and redacted: ${A.secretsDetected.join(", ")}`),{owner:t,repo:n,path:o,content:q,contentView:"symbols",branch:r,totalLines:Vt(e),...qo(m,f),isPartial:!1,signaturesExtracted:!0,hints:ne}}}let S=new Set,R=e,C=R.split(`
30
+ `),P=Vt(R),T=e,E,k,x=!1,b,w;if(i)T=e;else if(l){let v=p===!0,A;try{A=zs(C,l,c,u??!1,v)}catch{return{owner:t,repo:n,path:o,content:"",branch:r,totalLines:P,...qo(m,f),matchNotFound:!0,searchedFor:l,hints:["Fix the regex or set matchStringIsRegex:false for a literal."]}}if(A.matchCount===0){let re=u?[`No lines matched "${l}" (case-${v?"sensitive":"insensitive"}). Check the pattern or use fullContent:true.`]:[`"${l}" not found in file${v?" (case-sensitive)":""}. Try matchStringIsRegex=true for pattern matching, broaden the search, or use fullContent=true.`];return{owner:t,repo:n,path:o,content:"",branch:r,totalLines:P,...qo(m,f),matchNotFound:!0,searchedFor:l,hints:re}}T=A.lines.join(`
31
+ `);let q=A.matchRanges[0],ne=A.matchRanges[A.matchRanges.length-1];s=q.start,a=ne.end,E=q.start,k=ne.end,x=!1,b=A.matchRanges,w=A.matchingLines;let Me=A.matchingLines.slice(0,5).join(", "),X=A.matchingLines.length>5?` and ${A.matchingLines.length-5} more`:"";S.add(A.matchCount>1?`Found ${A.matchCount} occurrences of "${l}" on lines ${Me}${X} \u2014 all shown as ${A.matchRanges.length} slice${A.matchRanges.length===1?"":"s"}, \xB1${c} lines of context each.`:`Found "${l}" on line ${A.matchingLines[0]}`)}else if(s!==void 0||a!==void 0){let v=s||1,A=a||P;if(v<1||v>P)T=e,S.add(`Requested startLine ${v} is out of range for this ${P}-line file \u2014 returning the full file instead of a range.`);else if(A<v)T=e,S.add(`Requested range startLine=${v}, endLine=${A} is invalid (endLine before startLine) \u2014 returning the full file instead of a range.`);else{let q=Math.max(1,v),ne=Math.min(P,A),Me=C.slice(q-1,ne);E=q,k=ne,x=ne<P,T=Me.join(`
32
+ `),A>P&&S.add(`Requested endLine ${A} adjusted to ${P} (file end)`)}}let L=eu.sanitizeContent(T,o);if(T=h?D.applyContentViewMinification(L.content,o):L.content,L.hasSecrets&&S.add(`Secrets detected and redacted: ${L.secretsDetected.join(", ")}`),L.warnings.length>0&&L.warnings.forEach(v=>S.add(v)),P>2e3&&d!=="symbols"&&!l&&!s&&!a&&!i){let v=Math.max(1,P-200);S.add(`Large file (${P} lines) \u2014 minify:"symbols" for an export index, or startLine=${v} for the tail.`)}let O=Array.from(S);return{owner:t,repo:n,path:o,content:T,contentView:y,branch:r,totalLines:P,...qo(m,f),...x&&{startLine:E,endLine:k,isPartial:x},...b&&{matchRanges:b},...w&&{matchedLines:w},...O.length>0&&{matchLocations:O},...(O.length>0||g)&&{warnings:[...g?[g]:[],...O]}}}async function Qh(e,t,n){let r=await ke(t),o=xe("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,auth:r},n),i=await Rs(o,async({ifNoneMatch:h})=>{let y=await Ko(e,t,{ifNoneMatch:h}),{etag:g,notModified:S,...R}=y;return{value:R,etag:g,notModified:S}},{shouldCache:h=>"data"in h&&!h.error,forceRefresh:e.forceRefresh===!0});if(!("data"in i)||!i.data)return i;let s=i.data.branch||i.data.resolvedRef||e.branch||"",a=await jh(i.data.rawContent,e.owner,e.repo,s,e.path,e.fullContent||!1,e.startLine,e.endLine,e.contextLines??5,e.matchString,e.matchStringIsRegex,e.matchStringCaseSensitive,e.minify??"standard");if("error"in a)return{error:a.error||"Unknown error",status:500,type:"unknown"};let{signaturesExtracted:c,...l}=a,u=e.charOffset??0,p=e.charLength,d=e.fullContent===!0&&u===0&&p===void 0,m=c||d?l:await ql(l,u,p),f=(e.charOffset??0)>0;if(!e.noTimestamp&&!f)try{let h=await $(t),y=await De(xe("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,ts:!0,auth:r},n),()=>Jl(h,e.owner,e.repo,e.path,e.branch),{shouldCache:g=>g!==null,forceRefresh:e.forceRefresh===!0,cacheRole:"helper"});y&&(m.lastModified=y.lastModified,m.lastModifiedBy=y.lastModifiedBy)}catch{}return{data:m,status:200,rawResponseChars:i.rawResponseChars}}import{ContentSanitizer as Wh}from"@octocodeai/octocode-engine/contentSanitizer";var uT=2,pT=20;function jB(e,t=pT){let n=e?Xo(e):[];return{lines:n.slice(0,t),moreCount:Math.max(0,n.length-t)}}function Uh(e,t,n){if(!e)return"";if(t===void 0&&n===void 0)return e;let r={additions:t,deletions:n};return D.filterPatch(e,r)}function $h(e){return e?D.filterPatch(e,{trimContext:!0,contextLines:uT}):""}function tu(e){let t=Wh.sanitizeContent(e.title??""),n=e.body?Wh.sanitizeContent(e.body):{content:void 0,warnings:[]},r=new Set([...t.warnings,...n.warnings]),i=e.state?.toLowerCase()==="closed"?"closed":"open";return{prData:{number:e.number,title:t.content,body:n.content,state:i,author:e.user?.login??"",labels:e.labels?.map(a=>typeof a=="string"?a:a.name??"")??[],created_at:e.created_at??"",updated_at:e.updated_at??"",closed_at:e.closed_at??null,url:e.html_url,comments:[],...typeof e.comments=="number"&&e.comments>0?{total_comment_count:e.comments}:{},reactions:0,draft:e.draft??!1,head:e.head?.ref,head_sha:e.head?.sha,base:e.base?.ref,base_sha:e.base?.sha,...e.merged_at&&{merged_at:e.merged_at}},sanitizationWarnings:r}}var dT=or(),mT=Math.round(or()/4),Vh=3;function Kh(e,t,n,r){if(typeof e!="string"||!r)return{value:e};let o=e.length,i=Math.min(Math.max(0,t),o),s=Math.max(1,n),a=Math.min(i+s,o),c=a<o;return i===0&&a===o?{value:e}:{value:e.slice(i,a),pagination:{charOffset:i,charLength:a-i,totalChars:o,hasMore:c,...c?{nextCharOffset:a}:{}}}}function zr(e,t={}){let n=t.charOffset??0,r=t.charLength??dT,o=t.charLength??mT,i=typeof e.body=="string"?D.minifyMarkdownCore(e.body):e.body,s=Kh(i,n,r,!t.includeFullBody),a=(e.comments??[]).sort((f,h)=>{let y=f.commentType==="review_inline"?0:1,g=h.commentType==="review_inline"?0:1;return y-g}),c=a.filter(f=>f.commentType==="review_inline").length,l=a.length-c,u=t.includeFullCommentDetails?a:a.slice(0,Vh),p=u.map(f=>{let h=Kh(f.body,n,o,!t.includeFullCommentDetails);return{...f,body:h.value??"",...h.pagination?{bodyPagination:h.pagination}:{}}}),d=!t.includeFullCommentDetails&&(a.length>u.length||p.some(f=>"bodyPagination"in f)),m=[...s.pagination&&t.includeFullBody?[`PR body paginated at charOffset=${s.pagination.charOffset}, charLength=${s.pagination.charLength}, totalChars=${s.pagination.totalChars}. Re-call with prNumber and charOffset=${s.pagination.nextCharOffset??s.pagination.totalChars} to continue this body.`]:[],...d?[`PR comments are paginated/summarized to ${Vh} comment(s) per search result with ${o} chars each. Use prNumber with content.comments={discussion:true,reviewInline:true} and charOffset to continue specific comment bodies.`]:[]];return{number:e.number,title:e.title,state:e.state,draft:e.draft??!1,merged:e.state==="closed"&&!!e.merged_at,createdAt:e.created_at,updatedAt:e.updated_at,closedAt:e.closed_at??void 0,mergedAt:e.merged_at,author:e.author,...e.labels?.length?{labels:e.labels.map(f=>({id:0,name:f,color:""}))}:{},headRef:e.head||"",...e.head_sha?{headSha:e.head_sha}:{},baseRef:e.base||"",...e.base_sha?{baseSha:e.base_sha}:{},body:s.value,...s.pagination?{bodyPagination:s.pagination}:{},comments:e.total_comment_count??a.length,...a.length>0&&{commentDetailsBreakdown:{inlineReview:c,discussion:l}},commits:e.commits?.length||0,additions:e.file_changes?.files.reduce((f,h)=>f+h.additions,0)||e.additions||0,deletions:e.file_changes?.files.reduce((f,h)=>f+h.deletions,0)||e.deletions||0,changedFiles:e.file_changes?.total_count||0,...e.file_changes&&{fileChanges:e.file_changes.files?.map(f=>({filename:f.filename,status:f.status,additions:f.additions,deletions:f.deletions,patch:f.patch}))},...e.reviews&&{reviews:e.reviews},...e.commits&&{commitDetails:e.commits},...p.length>0&&{commentDetails:p,commentDetailsShown:p.length,commentDetailsTotal:a.length,...d?{commentDetailsPaginated:!0}:{}},...(e._sanitization_warnings||m.length>0)&&{sanitizationWarnings:[...e._sanitization_warnings||[],...m]}}}function Jo(e){let t=Array.isArray(e.owner)?e.owner[0]||void 0:e.owner,n=Array.isArray(e.repo)?e.repo[0]||void 0:e.repo;return{owner:t,repo:n}}function ei(e,t){let r=t.content?.patches,o=r?.mode??"none",i=new Map(r?.ranges?.map(a=>[a.file,a])||[]),s=new Set([...r?.files??[],...i.keys()]);return o==="none"?e.map(a=>({...a,patch:void 0})):o==="selected"?e.filter(a=>s.has(a.filename)).map(a=>{let c=i.get(a.filename);return{...a,patch:a.patch?Uh(a.patch,c?.additions,c?.deletions):void 0}}):e.map(a=>({...a,patch:a.patch?$h(a.patch):a.patch}))}function jr(e){let t=e.content;return!!(t?.changedFiles||t?.patches?.mode&&t.patches.mode!=="none")}function Xh(e){return e.content?.comments??null}function Ws(e){let t=Xh(e);return t?t.discussion!==!1:!1}function Vs(e){let t=Xh(e);return t?t.reviewInline!==!1:!1}function Ks(e){return!!e.content?.commits}function Xs(e){return!!e.content?.reviews}function nu(e){return e.prNumber!==void 0?!0:jr(e)||Ws(e)||Vs(e)||Ks(e)||Xs(e)}function ru(e){return!!e.content?.comments?.includeBots}function Ys(e){return e.replace(/<!--[\s\S]*?-->/g,"").replace(/^\[vc\]:\s*#.*$/gm,"").replace(/^[A-Za-z0-9+/]{120,}={0,2}$/gm,"").replace(/\n{3,}/g,`
21
33
 
22
- `).trim()}import{ContentSanitizer as Na}from"@octocodeai/octocode-engine/contentSanitizer";var nb=new Set(["vercel","pkg-pr-new","coderabbitai","github-actions","codecov","changeset-bot","netlify","sonarcloud","socket-security"]);function qt(e){let t=e.toLowerCase();return t.endsWith("[bot]")||nb.has(t)}async function Pi(e){let t=[],n=0,r=1,o=!0;do{let i=await e(r);n+=N(i.data),t.push(...i.data),o=i.data.length===100,r++}while(o);return{items:t,rawResponseChars:n}}async function Da(e,t,n,r){let o=await Q(r),{items:i,rawResponseChars:s}=await Pi(a=>o.rest.pulls.listFiles({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return $({total_count:i.length,files:i},s)}async function rb(e,t,n,r){let o=await Q(r),{items:i,rawResponseChars:s}=await Pi(a=>o.rest.pulls.listCommits({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return $(i,s)}async function ob(e,t,n,r){try{let i=await(await Q(r)).rest.repos.getCommit({owner:e,repo:t,ref:n});return $(i.data.files||[],i.data)}catch{return null}}var ib=5;async function sb(e,t,n){if(e.length===0)return[];let r=new Array(e.length),o=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let s=o++;if(s>=e.length)break;r[s]=await n(e[s],s)}});return await Promise.all(i),r}async function Ma(e,t,n,r,o){let i=await rb(e,t,n,o);if(!i)return null;let s=ne(i)??0,a=[...i].sort((u,l)=>{let p=u.commit.author?.date?new Date(u.commit.author.date).getTime():0;return(l.commit.author?.date?new Date(l.commit.author.date).getTime():0)-p}),c=await sb(a,ib,async u=>{let l=await ob(e,t,u.sha,o),p=[];return l&&(s+=ne(l)??0,p=vr(l,r)),{sha:u.sha,message:u.commit.message,author:u.commit.author?.name||"unknown",date:u.commit.author?.date||"",files:p}});return $(c,s)}async function Ga(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let d=await e.rest.issues.listComments({owner:t,repo:n,issue_number:r,per_page:100,page:a});s+=N(d.data),i.push(...d.data),c=d.data.length===100,a++}while(c);let u=o?i:i.filter(d=>!qt(d.user?.login??"")),l=i.length-u.length,p=u.map(d=>{let f=O.minifyMarkdownCore(xi(d.body??""));return{id:String(d.id),user:d.user?.login??"unknown",body:Na.sanitizeContent(f).content,createdAt:d.created_at??"",updatedAt:d.updated_at??"",commentType:"discussion"}}),m=[];return l>0&&m.push(`${l} bot comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:$(p,s),note:m.length>0?m.join("; "):void 0}}catch{return{comments:$([],0)}}}async function Ha(e,t,n,r){try{let{items:o,rawResponseChars:i}=await Pi(s=>e.rest.pulls.listReviews({owner:t,repo:n,pull_number:r,per_page:100,page:s}));return $(o.map(s=>({id:String(s.id),user:s.user?.login??"unknown",state:s.state??"",body:Na.sanitizeContent(O.minifyMarkdownCore(xi(s.body??""))).content,submittedAt:s.submitted_at??void 0,commitId:s.commit_id??void 0})),i)}catch{return $([],0)}}async function Ba(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let d=await e.rest.pulls.listReviewComments({owner:t,repo:n,pull_number:r,per_page:100,page:a});s+=N(d.data),i.push(...d.data),c=d.data.length===100,a++}while(c);let u=o?i:i.filter(d=>!qt(d.user?.login??"")),l=i.length-u.length,p=u.map(d=>{let f=O.minifyMarkdownCore(xi(d.body??""));return{id:String(d.id),user:d.user?.login??"unknown",body:Na.sanitizeContent(f).content,createdAt:d.created_at??"",updatedAt:d.updated_at??"",commentType:"review_inline",path:d.path,line:d.line??d.original_line??void 0,...d.in_reply_to_id!=null?{inReplyToId:d.in_reply_to_id}:{}}}),m=[];return l>0&&m.push(`${l} bot inline comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:$(p,s),note:m.length>0?m.join("; "):void 0}}catch{return{comments:$([],0)}}}async function Ua(e,t,n){let r=e,{prData:o,sanitizationWarnings:i}=Oa(r);i.size>0&&(o._sanitization_warnings=Array.from(i));let s=0;if(e.pull_request&&Fa(t))try{let{owner:u,repo:l}=Fr(t);if(u&&l){let p=await n.rest.pulls.get({owner:u,repo:l,pull_number:e.number});if(p.data&&(s+=N(p.data),o.head=p.data.head?.ref,o.head_sha=p.data.head?.sha,o.base=p.data.base?.ref,o.base_sha=p.data.base?.sha,o.draft=p.data.draft??!1,p.data.merged_at&&(o.merged_at=p.data.merged_at),o.additions=p.data.additions??0,o.deletions=p.data.deletions??0,kn(t)||(o.file_changes={total_count:p.data.changed_files??0,files:[]}),kn(t))){let m=await Da(u,l,e.number);m&&(s+=ne(m)??0,m.files=vr(m.files,t),o.file_changes=m)}}}catch(u){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${u instanceof Error?u.message:String(u)}`]}let a=Ri(t),c=Si(t);if(a||c){let{owner:u,repo:l}=Fr(t);if(u&&l){let p=va(t),m=()=>Promise.resolve({comments:$([],0)}),[{comments:d,note:f},{comments:g,note:R}]=await Promise.all([a?Ga(n,u,l,e.number,p):m(),c?Ba(n,u,l,e.number,p):m()]);o.comments=[...d,...g],s+=(ne(d)??0)+(ne(g)??0);let h=[f,R].filter(y=>typeof y=="string");h.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...h])}}if(Ci(t))try{let{owner:u,repo:l}=Fr(t);if(u&&l){let p=await Ha(n,u,l,e.number);s+=ne(p)??0,o.reviews=p}}catch(u){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${u instanceof Error?u.message:String(u)}`]}if(bi(t))try{let{owner:u,repo:l}=Fr(t);if(u&&l){let p=await Ma(u,l,e.number,t);p&&(s+=ne(p)??0,o.commits=p)}}catch(u){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${u instanceof Error?u.message:String(u)}`]}return $(o,s)}async function Dr(e,t,n,r){let{prData:o,sanitizationWarnings:i}=Oa(e);i.size>0&&(o._sanitization_warnings=Array.from(i));let s=0,a=t.owner,c=t.repo;if(o.additions="additions"in e?e.additions??0:0,o.deletions="deletions"in e?e.deletions??0:0,kn(t)||(o.file_changes={total_count:"changed_files"in e?e.changed_files??0:0,files:[]}),kn(t))try{let p=await Da(a,c,e.number,r);p&&(s+=ne(p)??0,p.files=vr(p.files,t),o.file_changes=p)}catch(p){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${p instanceof Error?p.message:String(p)}`]}let u=Ri(t),l=Si(t);if(u||l){let p=va(t),m=()=>Promise.resolve({comments:$([],0)}),[{comments:d,note:f},{comments:g,note:R}]=await Promise.all([u?Ga(n,a,c,e.number,p):m(),l?Ba(n,a,c,e.number,p):m()]);o.comments=[...d,...g],s+=(ne(d)??0)+(ne(g)??0);let h=[f,R].filter(y=>typeof y=="string");h.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...h])}if(Ci(t))try{let p=await Ha(n,a,c,e.number);s+=ne(p)??0,o.reviews=p}catch(p){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${p instanceof Error?p.message:String(p)}`]}if(bi(t))try{let p=await Ma(a,c,e.number,t,r);p&&(s+=ne(p)??0,o.commits=p)}catch(p){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${p instanceof Error?p.message:String(p)}`]}return $(o,s)}function ab(e,t,n){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}async function BF(e,t,n){let r=await fe(t),o=ce("gh-api-prs",{owner:e.owner,repo:e.repo,prNumber:e.prNumber,content:e.content,reviewMode:e.reviewMode,auth:r},n);return await he(o,async()=>await Qa(e,t),{shouldCache:s=>!s.error})}async function Qa(e,t){let{owner:n,repo:r,prNumber:o}=e;if(!n||!r||!o)return{pullRequests:[],totalCount:0,error:Ee.PR_REQUIRED_PARAMS.message,hints:["Provide owner, repo, and prNumber"]};if(Array.isArray(n)||Array.isArray(r))return{pullRequests:[],totalCount:0,error:Ee.PR_SINGLE_VALUES.message,hints:["Do not use array for owner or repo when fetching by number"]};try{let i=await Q(t),s=await i.rest.pulls.get({owner:n,repo:r,pull_number:o}),a=s.data,c=await Dr(a,e,i,t);return{pullRequests:[An(c,{includeFullBody:!0,includeFullCommentDetails:!0})],totalCount:1,rawResponseChars:N(s.data)+(ne(c)??0)}}catch(i){let s=V(i);return ab(s,Ee.PULL_REQUEST_FETCH_FAILED.message(o,s.error),[`Verify that pull request #${o} exists in ${n}/${r}`,"Check if you have access to this repository","Ensure the PR number is correct"])}}function $a(e,t,n){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}function ja(e){let t=Math.min(e.limit||30,100);return{pullRequests:[],totalCount:0,pagination:{currentPage:e.page||1,totalPages:0,perPage:t,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}}}async function od(e,t){try{let n=t.owner,r=t.repo,o=Math.min(t.limit||30,100),i=t.page||1,s=await e.rest.pulls.list({owner:n,repo:r,state:(t.state==="merged"?"closed":t.state)||"open",per_page:o,page:i,sort:t.sort==="updated"?"updated":"created",direction:t.order||"desc",...t.head&&{head:t.head},...t.base&&{base:t.base}}),a=await Promise.all(s.data.map(async m=>await Dr(m,t,e))),c=a.reduce((m,d)=>m+(ne(d)??0),0),u=a.map(m=>An(m,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:t.charOffset,charLength:t.charLength})),l=s.data.length===o,p=(i-1)*o+u.length;return{pullRequests:u,totalCount:u.length,pagination:{currentPage:i,totalPages:l?i+1:i,perPage:o,totalMatches:p+(l?1:0),reachableTotalMatches:p,totalMatchesKind:l?"lowerBound":"exact",hasMore:l,...l?{nextPage:i+1}:{}},rawResponseChars:N(s.data)+c}}catch(n){if(nt(n))return ja(t);let r=V(n);return $a(r,Ee.PULL_REQUEST_LIST_FAILED.message(r.error),["Verify repository access and authentication"])}}async function cb(e,t){if(!t.owner||!t.repo||Array.isArray(t.owner)||Array.isArray(t.repo))return t;try{let n=await e.rest.repos.get({owner:t.owner,repo:t.repo}),[r,o]=n.data.full_name?.split("/")??[];return!r||!o||r===t.owner&&o===t.repo?t:{...t,owner:r,repo:o}}catch{return t}}function ub(e,t,n="anon"){return ce("gh-api-prs",{query:e.query,owner:e.owner,repo:e.repo,prNumber:e.prNumber,state:e.state,draft:e.draft,merged:e.merged,author:e.author,assignee:e.assignee,mentions:e.mentions,commenter:e.commenter,"reviewed-by":e["reviewed-by"],"review-requested":e["review-requested"],head:e.head,base:e.base,created:e.created,updated:e.updated,"merged-at":e["merged-at"],closed:e.closed,comments:e.comments,reactions:e.reactions,label:e.label,milestone:e.milestone,language:e.language,checks:e.checks,review:e.review,locked:e.locked,visibility:e.visibility,project:e.project,archived:e.archived,match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,reviewMode:e.reviewMode,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,auth:n},t)}async function id(e,t,n){let r=await fe(t),o=ub(e,n,r);return await he(o,async()=>await lb(e,t,n),{shouldCache:s=>!s.error})}async function lb(e,t,n){try{if(e.prNumber&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await Qa(e,t);let r=await Q(t);if(!sa(e)&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await od(r,e);let i=await cb(r,e),s=ia(i);if(!s)return{pullRequests:[],totalCount:0,error:Ee.NO_VALID_PARAMETERS.message,hints:["Provide search query or filters like owner/repo"]};let a=i.sort&&i.sort!=="best-match"?i.sort:void 0,c=Math.min(i.limit||30,100),u=i.page||1,l=s,p=await r.rest.search.issuesAndPullRequests({q:s,sort:a,order:e.order||"desc",per_page:c,page:u}),m=p.data.items?.filter(T=>!!T.pull_request)||[],d=await Promise.all(m.map(async T=>await Ua(T,i,r))),f=d.reduce((T,L)=>T+(ne(L)??0),0),g=d.map(T=>An(T,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:i.charOffset,charLength:i.charLength})),R=p.data.total_count,h=Math.min(R,1e3),y=Math.min(Math.ceil(h/c),10),S=Math.min(u,Math.max(1,y)),C=S<y,P=Math.min(h,y*c);return{pullRequests:g,totalCount:p.data.total_count,effectiveQuery:l,...p.data.incomplete_results&&{incompleteResults:!0},pagination:{currentPage:S,totalPages:y,perPage:c,totalMatches:h,reportedTotalMatches:R,reachableTotalMatches:P,totalMatchesKind:"reported",totalMatchesCapped:R>h,hasMore:C,...C?{nextPage:S+1}:{}},rawResponseChars:N(p.data)+f}}catch(r){if(nt(r))return ja(e);let o=V(r);return $a(o,Ee.PULL_REQUEST_SEARCH_FAILED.message(o.error),["Verify authentication and search parameters"])}}var pb=/^(\d+)\s*([hdwmy])$/i;function za(e){let t=e.trim(),n=pb.exec(t);if(n){let r=Number(n[1]),o=n[2].toLowerCase(),i=new Date;switch(o){case"h":i.setUTCHours(i.getUTCHours()-r);break;case"d":i.setUTCDate(i.getUTCDate()-r);break;case"w":i.setUTCDate(i.getUTCDate()-r*7);break;case"m":i.setUTCMonth(i.getUTCMonth()-r);break;case"y":i.setUTCFullYear(i.getUTCFullYear()-r);break}return{value:i.toISOString()}}return Number.isNaN(Date.parse(t))?{warning:`"${e}" is not a valid date or relative window \u2014 use e.g. "30d", "2w", "6m", "1y", or an ISO date like "2026-01-01". Filter skipped.`}:{value:t}}function Wa(e,t,n){if(!e)return;if(!n&&!t)return{patch:e};let r=e.length,o=Math.min(Math.max(0,t??0),r),i=Math.max(1,n??r),s=Math.min(o+i,r),a=s<r;return{patch:e.slice(o,s),patchPagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function Mr(e,t){let n=e.map(l=>{let p=l.patch!==void 0?Wa(l.patch,t.charOffset,t.charLength):void 0;return{filename:l.filename,status:l.status,additions:l.additions,deletions:l.deletions,...p!==void 0?{patch:p.patch,...p.patchPagination?{patchPagination:p.patchPagination}:{}}:{},...l.previous_filename?{previousFilename:l.previous_filename}:{}}}),r=Math.max(1,t.filePage??1),o=Math.max(1,t.itemsPerPage??20),i=n.length,s=Math.max(1,Math.ceil(i/o)),a=Math.min(r,s),c=(a-1)*o;return{files:n.slice(c,c+o),filesPagination:{currentPage:a,totalPages:s,itemsPerPage:o,totalFiles:i,hasMore:a<s,...a<s?{nextFilePage:a+1}:{}}}}var db=5;function _n(e){return e?e.includes('rel="next"'):!1}async function mb(e,t,n){if(e.length===0)return[];let r=new Array(e.length),o=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let s=o++;if(s>=e.length)return;r[s]=await n(e[s],s)}});return await Promise.all(i),r}async function sd(e,t,n){let r=await fe(t),o=ce("gh-api-history",{type:e.type,owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,since:e.since,until:e.until,author:e.author,committer:e.committer,page:e.page,perPage:e.perPage,filePage:e.filePage,itemsPerPage:e.itemsPerPage,includeDiff:e.includeDiff,charOffset:e.charOffset,charLength:e.charLength,auth:r},n);return he(o,()=>fb(e,t),{shouldCache:i=>"data"in i&&!("error"in i)})}async function fb(e,t){try{let n=await Q(t),r=[],o=e.since?za(e.since):void 0,i=e.until?za(e.until):void 0;o?.warning&&r.push(`since ${o.warning}`),i?.warning&&r.push(`until ${i.warning}`);let s={owner:e.owner,repo:e.repo,per_page:e.perPage,page:e.page,...e.path?{path:e.path}:{},...e.branch?{sha:e.branch}:{},...o?.value?{since:o.value}:{},...i?.value?{until:i.value}:{},...e.author?{author:e.author}:{},...e.committer?{committer:e.committer}:{}},a=await n.rest.repos.listCommits(s),c=a.headers.link,u=_n(c),l=a.data.map(h=>{let y=h.commit.author,S=h.commit.committer,C=S?.date??y?.date??"",P=h.commit.message,T=P.split(`
23
- `)[0]??P,L=P.slice(T.length).trim(),k=L.length>500,w=L.length===0?T:`${T}
24
- ${k?`${L.slice(0,500)}\u2026`:L}`,b=S?.name===y?.name&&S?.email===y?.email||h.committer?.login==="web-flow";return{sha:h.sha,date:C,...w===T?{}:{message:w},...k?{messageTruncated:!0}:{},messageHeadline:T,author:{name:y?.name??"unknown",email:y?.email??"",...h.author?.login?{login:h.author.login}:{}},...S&&!b?{committer:{name:S.name??"unknown",email:S.email??"",...h.committer?.login?{login:h.committer.login}:{}}}:{}}});l.length===0&&(o?.value!==void 0||i?.value!==void 0)&&r.push("no commits matched the since/until window \u2014 GitHub filters by committer date (not author date; rebases and squash-merges reset it), and a path-scoped walk does not follow renames. Widen or drop since/until and inspect commit dates directly.");let p={currentPage:e.page,perPage:e.perPage,hasMore:u,...u?{nextPage:e.page+1}:{}};if(!e.includeDiff)return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:l,pagination:p,...r.length?{warnings:r}:{}},status:200};let m=!1,d=!1,f=await mb(l,db,async(h,y)=>{try{let S=a.data[y]?.sha??h.sha,C=await n.rest.repos.getCommit({owner:e.owner,repo:e.repo,ref:S});if(e.type==="file"&&e.path){let P=e.path,T=C.data.files?.find(w=>w.filename===P||w.previous_filename===P);if(T){let w=T.patch!==void 0?Wa(T.patch,e.charOffset,e.charLength):void 0;return{...h,additions:T.additions,deletions:T.deletions,status:T.status,...w!==void 0?{patch:w.patch,...w.patchPagination?{patchPagination:w.patchPagination}:{}}:{},...T.previous_filename?{previousFilename:T.previous_filename}:{}}}let L=P.endsWith("/")?P:`${P}/`,k=(C.data.files??[]).filter(w=>w.filename.startsWith(L));return k.length>0?(m=!0,{...h,...Mr(k,e)}):(d=!0,h)}else{let P=e.path,T=(C.data.files??[]).filter(L=>!P||L.filename.startsWith(P));return{...h,...Mr(T,e)}}}catch{}return h}),g=[];m&&g.push(`path '${e.path}' matched no single file in these commits but matches files under it \u2014 treated as a directory filter and returned per-commit changed files (append '/' to select directory mode explicitly).`),d&&g.push(`includeDiff: some commits contain no file matching '${e.path}' (rename or shallow diff?) \u2014 those commits are listed without a diff.`);let R=[...r,...g];return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:f,pagination:p,...R.length?{warnings:R}:{}},status:200}}catch(n){return V(n)}}var ad=30;function cd(e){let t={},n=e.license;n?.spdx_id&&n.spdx_id!=="NOASSERTION"&&(t.license=n.spdx_id);let r=e.homepage;return r&&(t.homepage=r),t}async function ud(e,t,n){let r=await fe(t),o=e,i=ce("gh-api-repos",{keywords:e.keywords,topicsToSearch:e.topicsToSearch,owner:e.owner,repo:o.repo,stars:e.stars,updated:e.updated,language:o.language,match:e.match,sort:e.sort,limit:e.limit,page:e.page,archived:o.archived,visibility:o.visibility,forks:o.forks,license:o.license,goodFirstIssues:o.goodFirstIssues,auth:r},n);return await he(i,async()=>await gb(e,t),{shouldCache:a=>"data"in a&&!a.error})}async function hb(e,t){let n=Math.min(e.limit||100,100),r=e.page||1,o=e.sort==="updated"?"updated":"full_name",i,s;try{i=(await t.rest.repos.listForOrg({org:e.owner,per_page:n,page:r,sort:o})).data,s=void 0}catch(d){if(d?.status!==404)return V(d);try{i=(await t.rest.repos.listForUser({username:e.owner,per_page:n,page:r,sort:o})).data,s=void 0}catch(g){return V(g)}}let a=i.map(d=>{let g=d.full_name.split("/"),R=g[0]||"",h=g[1]||"";return{owner:R,repo:h,defaultBranch:d.default_branch,stars:d.stargazers_count||0,description:d.description?d.description:"No description",url:d.html_url,createdAt:d.created_at,updatedAt:d.updated_at,pushedAt:d.pushed_at,visibility:d.visibility,...d.topics&&d.topics.length>0&&{topics:d.topics},...d.forks_count&&d.forks_count>0&&{forksCount:d.forks_count},...d.open_issues_count&&d.open_issues_count>0&&{openIssuesCount:d.open_issues_count},...d.language&&{language:d.language},...cd(d)}}),c=a.length,u=c===n,l=(r-1)*n+c,p=s??l+(u?1:0),m=s!==void 0||!u?"exact":"lowerBound";return{data:{repositories:a,pagination:{currentPage:r,totalPages:u?r+1:r,perPage:n,totalMatches:p,reachableTotalMatches:l,totalMatchesKind:m,hasMore:u,...u?{nextPage:r+1}:{}}},status:200,rawResponseChars:N(i)}}async function gb(e,t){try{let n=await Q(t),r=(e.keywords?.length??0)>0||(e.topicsToSearch?.length??0)>0,o=typeof e.owner=="string"?e.owner:Array.isArray(e.owner)?e.owner[0]:void 0;if(!r&&o)return await hb({owner:o,sort:e.sort,limit:e.limit,page:e.page},n);let i=ra(e);if(!i.trim())return{error:Ee.QUERY_EMPTY.message,type:"http",status:400};let s=Math.min(e.limit||ad,100),a=e.page||1,c={q:i,per_page:s,page:a},u=["stars","forks","help-wanted-issues","updated"];e.sort&&u.includes(e.sort)&&(c.sort=e.sort);let l=await n.rest.search.repos(c),p=l.data.items.map(y=>{let C=y.full_name.split("/"),P=C[0]||"",T=C[1]||"";return{owner:P,repo:T,defaultBranch:y.default_branch,stars:y.stargazers_count||0,description:y.description?y.description:"No description",url:y.html_url,createdAt:y.created_at,updatedAt:y.updated_at,pushedAt:y.pushed_at,visibility:y.visibility,...y.topics&&y.topics.length>0&&{topics:y.topics},...y.forks_count&&y.forks_count>0&&{forksCount:y.forks_count},...y.open_issues_count&&y.open_issues_count>0&&{openIssuesCount:y.open_issues_count},...y.language&&{language:y.language},...cd(y)}}),m=l.data.total_count,d=Math.min(m,1e3),f=Math.min(Math.ceil(d/s),10),g=Math.min(a,Math.max(1,f)),R=g<f,h=Math.min(d,f*s);return{data:{repositories:p,pagination:{currentPage:g,totalPages:f,perPage:s,totalMatches:d,reportedTotalMatches:m,reachableTotalMatches:h,totalMatchesKind:"reported",totalMatchesCapped:m>d,hasMore:R,...R?{nextPage:g+1}:{}}},status:200,headers:Cn(l.headers),rawResponseChars:N(l.data)}}catch(n){if(nt(n)){let r=Math.min(e.limit||ad,100);return{data:{repositories:[],nonExistentScope:!0,pagination:{currentPage:e.page||1,totalPages:0,perPage:r,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return V(n)}}var Mt={ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200};function yb(e,t){return t?e>5e4?[`Response ~${e.toLocaleString()} tokens \u2014 exceeds typical context. Reduce charLength or refine the query.`]:e>3e4?[`Response ~${e.toLocaleString()} tokens \u2014 approaching context limit. Consider reducing charLength.`]:[]:[]}function Rb(e){if(e.hasMore&&e.nextCharOffset!==void 0){let t=e.charOffset+1,n=e.charOffset+e.charLength;return[`Page ${e.currentPage}/${e.totalPages} (chars ${t}-${n} of ${e.totalChars}). Next: charOffset=${e.nextCharOffset}`]}return[]}function Ev(e,t={}){let{enableWarnings:n=!0,customHints:r=[]}=t,o=[];return o.push(...r),e.estimatedTokens&&o.push(...yb(e.estimatedTokens,n)),o.push(...Rb(e)),o}function wi(e,t){return e.hasMore?[`Page ${e.currentPage}/${e.totalPages}. Next: page=${e.currentPage+1}`]:[]}function ld(e,t){let n=e._cachedItems;if(!n||n.length===0){let{_cachedItems:w,...b}=e;return b}let r=t.itemsPerPage??Mt.ENTRIES_PER_PAGE,o=t.page??1,i=n.length,s=Math.max(1,Math.ceil(i/r)),a=(o-1)*r,c=Math.min(a+r,i),u=n.slice(a,c),l=Object.create(null),p=e.path==="/"?"":e.path,m=w=>{let b=w;p&&w.startsWith(p)&&(b=w.slice(p.length),b.startsWith("/")&&(b=b.slice(1)));let A=b.lastIndexOf("/");return A===-1?".":b.slice(0,A)},d=w=>{let b=w.lastIndexOf("/");return b===-1?w:w.slice(b+1)};for(let w of u){let b=m(w.path);l[b]||(l[b]={files:[],folders:[]});let A=d(w.path);w.type==="file"?l[b].files.push(A):l[b].folders.push(A)}for(let w of Object.keys(l)){let b=l[w];b&&(b.files.sort(),b.folders.sort())}let f=Object.create(null),g=Object.keys(l).sort((w,b)=>w==="."?-1:b==="."?1:w.localeCompare(b));for(let w of g){let b=l[w];b&&(f[w]=b)}let R=u.filter(w=>w.type==="file").length,h=u.filter(w=>w.type==="dir").length,y=n.filter(w=>w.type==="file").length,S=n.filter(w=>w.type==="dir").length,C=o<s,P={currentPage:o,totalPages:s,hasMore:C,...C?{nextPage:o+1}:{},entriesPerPage:r,totalEntries:i},T=wi(P,{owner:e.owner,repo:e.repo,branch:e.branch,path:p,depth:t.maxDepth??1,pageFiles:R,pageFolders:h,allFiles:y,allFolders:S}),L,k=e._cachedFileSizeMap;if(k){let w=new Set(u.filter(M=>M.type==="file").map(M=>M.path)),b=e.path==="/"?"":e.path,A=Object.create(null);for(let[M,B]of Object.entries(k))for(let[I,U]of Object.entries(B)){let ee=M==="."?b?`${b}/${I}`:I:b?`${b}/${M}/${I}`:`${M}/${I}`;w.has(ee)&&(A[M]||(A[M]=Object.create(null)),A[M][I]=U)}Object.keys(A).length>0&&(L=A)}return{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,apiSource:e.apiSource,summary:{totalFiles:y,totalFolders:S,truncated:C,filtered:!0,originalCount:i},structure:f,...L!==void 0&&{fileSizeMap:L},...k!==void 0&&{_cachedFileSizeMap:k},pagination:P,hints:T,rawResponseChars:e.rawResponseChars}}import{RequestError as Sb}from"octokit";var dd=Symbol.for("octocode.recursiveFetchFailures"),bb=new Set([401,403,429]);function pd(e){return e instanceof Sb&&bb.has(e.status)}function Va(e,t){try{Object.defineProperty(e,dd,{value:t,enumerable:!1,configurable:!0})}catch{}return e}function Nr(e){if(typeof e!="object"||e===null)return 0;let t=e[dd];return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}async function Gr(e,t,n,r,o,i,s,a=new Set){if(i>s||a.has(o))return Va($([],0),0);a.add(o);let c;try{c=await e.rest.repos.getContent({owner:t,repo:n,path:o||"",ref:r})}catch(f){if(pd(f))throw f;return Va($([],0),1)}let u=N(c.data),p=(Array.isArray(c.data)?c.data:[c.data]).filter(f=>f.type==="file"||f.type==="dir").map(f=>({name:f.name,path:f.path,type:f.type,size:"size"in f?f.size:void 0,download_url:"download_url"in f?f.download_url:void 0,url:f.url,html_url:f.html_url,git_url:f.git_url,sha:f.sha})),m=[...p],d=0;if(i<s){let f=p.filter(R=>R.type==="dir"),g=3;for(let R=0;R<f.length;R+=g){let h=f.slice(R,R+g),y=await Promise.allSettled(h.map(S=>Gr(e,t,n,r,S.path,i+1,s,a)));for(let S of y)if(S.status==="fulfilled"){let C=S.value;u+=ne(C)??0,d+=Nr(C),m.push(...C)}else{if(pd(S.reason))throw S.reason;d+=1}}}return Va($(m,u),d)}import{RequestError as Cb}from"octokit";function xb(e,t){let n=(t.pathPrefix??"").replace(/^\/+|\/+$/g,""),r=n?`${n}/`:"",o=Math.max(1,t.maxDepth),i=[];for(let s of e){if(!s.path||s.type!=="blob"&&s.type!=="tree")continue;let a=s.path;if(n){if(s.path===n||!s.path.startsWith(r))continue;a=s.path.slice(r.length)}let c=a.split("/").filter(Boolean).length;if(c===0||c>o)continue;let u=a.lastIndexOf("/"),l=u===-1?a:a.slice(u+1);i.push({name:l,path:s.path,type:s.type==="tree"?"dir":"file",size:s.type==="blob"?s.size:void 0,sha:s.sha,url:s.url,html_url:void 0,git_url:void 0,download_url:void 0})}return i}function md(e=process.env){return e.OCTOCODE_GH_STRUCTURE_TREES!=="0"}async function fd(e,t){let{data:n}=await e.rest.repos.getBranch({owner:t.owner,repo:t.repo,branch:t.workingBranch}),r=n.commit.commit.tree.sha;if(!r)throw new Error(`Could not resolve tree SHA for ${t.owner}/${t.repo}@${t.workingBranch}`);let o;try{o=await e.rest.git.getTree({owner:t.owner,repo:t.repo,tree_sha:r,recursive:"true",...t.ifNoneMatch?{headers:{"If-None-Match":t.ifNoneMatch}}:{}})}catch(c){if(c instanceof Cb&&c.status===304)return{items:[],truncated:!1,rawResponseChars:0,etag:t.ifNoneMatch,notModified:!0};throw c}let i=o.data,s=xn(o.headers);return{items:xb(i.tree,{pathPrefix:t.pathPrefix,maxDepth:t.maxDepth}),truncated:!!i.truncated,rawResponseChars:N(n)+N(i),...s?{etag:s}:{}}}import{RequestError as hd}from"octokit";async function Ka(e,t,n,r,o,i,s){let a,c;try{o?a=o:(c=await Ae(t,n,i),a=c)}catch(u){let l=V(u);return{error:xt.NOT_FOUND.message(t,n,l.error),status:l.status}}try{let u=await e.rest.repos.getContent({owner:t,repo:n,path:r||"",ref:a,...s?{headers:{"If-None-Match":s}}:{}}),l=xn(u.headers);return{data:u.data,workingBranch:a,...c!==void 0?{repoDefaultBranch:c}:{},...l?{etag:l}:{}}}catch(u){if(u instanceof hd&&u.status===304)return{data:null,workingBranch:a,...c!==void 0?{repoDefaultBranch:c}:{},etag:s,notModified:!0};if(!(u instanceof hd&&u.status===404)){let p=V(u);return{error:xt.ACCESS_FAILED.message(t,n,p.error),status:p.status,rateLimitRemaining:p.rateLimitRemaining,rateLimitReset:p.rateLimitReset,retryAfter:p.retryAfter}}let l=V(u);return{error:xt.PATH_NOT_FOUND.message(r,t,n,a),status:l.status}}}function gd(e){return e.map(t=>{let n=t;return{name:n.name,path:n.path,type:n.type,size:"size"in n?n.size:void 0,download_url:"download_url"in n?n.download_url:void 0,url:n.url,html_url:n.html_url,git_url:n.git_url,sha:n.sha}})}function Pb(e,t){let n=Object.create(null),r=a=>{let c=a;t&&a.startsWith(t)&&(c=a.slice(t.length),c.startsWith("/")&&(c=c.slice(1)));let u=c.lastIndexOf("/");return u===-1?".":c.slice(0,u)},o=a=>{let c=a.lastIndexOf("/");return c===-1?a:a.slice(c+1)};for(let a of e){let c=r(a.path);n[c]||(n[c]={files:[],folders:[]});let u=o(a.path);a.type==="file"?n[c].files.push(u):n[c].folders.push(u)}for(let a of Object.values(n))a&&(a.files.sort(),a.folders.sort());let i=Object.keys(n).sort((a,c)=>a==="."?-1:c==="."?1:a.localeCompare(c)),s=Object.create(null);for(let a of i){let c=n[a];c&&(s[a]=c)}return s}function yd(e,t){let n=Object.create(null);for(let r of e){if(r.type!=="file"||r.size===void 0)continue;let o=r.path;t&&r.path.startsWith(t)&&(o=r.path.slice(t.length).replace(/^\//,""));let i=o.lastIndexOf("/"),s=i===-1?".":o.slice(0,i),a=i===-1?o:o.slice(i+1);n[s]||(n[s]=Object.create(null)),n[s][a]=r.size}return n}function Ti(e){let{owner:t,repo:n,workingBranch:r,repoDefaultBranch:o,cleanPath:i,depth:s,partialTreeFailures:a,incompleteTree:c,rawResponseChars:u,includeSizes:l,extraHints:p=[]}=e,m=e.allItems.filter(I=>I.type==="dir"?!Cr(I.name):!bn(I.path));m.sort((I,U)=>{if(I.type!==U.type)return I.type==="dir"?-1:1;let ee=I.path.split("/").length,v=U.path.split("/").length;return ee!==v?ee-v:I.path.localeCompare(U.path)});let d=e.itemsPerPage??Mt.ENTRIES_PER_PAGE,f=e.page??1,g=m.length,R=Math.max(1,Math.ceil(g/d)),h=(f-1)*d,y=Math.min(h+d,g),S=m.slice(h,y),C=Pb(S,i),P=l?yd(m,i):void 0,T=P!==void 0?yd(S,i):void 0,L=S.filter(I=>I.type==="file").length,k=S.filter(I=>I.type==="dir").length,w=m.filter(I=>I.type==="file").length,b=m.filter(I=>I.type==="dir").length,A=f<R,M={currentPage:f,totalPages:R,hasMore:A,...A?{nextPage:f+1}:{},entriesPerPage:d,totalEntries:g},B=wi(M,{owner:t,repo:n,branch:r,path:i,depth:s,pageFiles:L,pageFolders:k,allFiles:w,allFolders:b});a>0&&B.unshift(`Partial tree: ${a} subdirectory subtree(s) failed to load and are missing from this structure. The listing is incomplete \u2014 retry or narrow the path/depth.`);for(let I of p)B.unshift(I);return{owner:t,repo:n,branch:r,...o!==void 0&&{defaultBranch:o},path:i||"/",apiSource:!0,summary:{totalFiles:w,totalFolders:b,truncated:A,filtered:!0,originalCount:m.length,...c?{incompleteTree:!0}:{}},structure:C,...T!==void 0&&{fileSizeMap:T},...P!==void 0&&{_cachedFileSizeMap:P},pagination:M,hints:B,rawResponseChars:u,_cachedItems:m.map(I=>({path:I.path,type:I.type}))}}async function Ya(e,t,n){let r=await fe(t),o=ce("gh-repo-structure-api",{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,depth:e.maxDepth,auth:r},n),i=await ai(o,async({ifNoneMatch:s})=>{let a=await wb({...e,itemsPerPage:e.itemsPerPage??Mt.ENTRIES_PER_PAGE,page:e.page??1},t,s);return{value:a.result,etag:a.etag,notModified:a.notModified}},{shouldCache:s=>!("error"in s)});return!("error"in i)&&i.structure?ld(i,e):i}async function wb(e,t,n){try{let r=await Q(t),{owner:o,repo:i,branch:s,path:a="",maxDepth:c=1}=e,u=a.replace(/^\/+|\/+$/g,"");if(c>1&&md())return await Tb(r,e,u,c,t,n);let l=await Ka(r,o,i,u,s,t,c===1?n:void 0);if("error"in l)return{result:l};if(l.notModified)return{result:{error:"not-modified",status:304},etag:l.etag??n,notModified:!0};let{data:p,workingBranch:m,repoDefaultBranch:d,etag:f}=l,g=N(p),R=Array.isArray(p)?p:[p],h=gd(R),y=0;if(c>1){let S=await Gr(r,o,i,m,u,1,c);y=Nr(S),g=ne(S)??0,h=S}return{result:Ti({owner:o,repo:i,workingBranch:m,repoDefaultBranch:d,cleanPath:u,depth:c,allItems:h,partialTreeFailures:y,incompleteTree:!1,rawResponseChars:g,includeSizes:e.includeSizes===!0,itemsPerPage:e.itemsPerPage,page:e.page}),...c===1&&f?{etag:f}:{}}}catch(r){let o=V(r);return{result:{error:xt.STRUCTURE_EXPLORATION_FAILED.message,status:o.status,rateLimitRemaining:o.rateLimitRemaining,rateLimitReset:o.rateLimitReset,retryAfter:o.retryAfter}}}}async function Tb(e,t,n,r,o,i){let{owner:s,repo:a,branch:c}=t,u,l;try{c?u=c:(l=await Ae(s,a,o),u=l)}catch(h){let y=V(h);return{result:{error:xt.NOT_FOUND.message(s,a,y.error),status:y.status}}}let p;try{p=await fd(e,{owner:s,repo:a,workingBranch:u,pathPrefix:n,maxDepth:r,ifNoneMatch:i})}catch(h){let y=await Ka(e,s,a,n,u,o);if("error"in y)return{result:y};let S=await Gr(e,s,a,y.workingBranch,n,1,r);return{result:Ti({owner:s,repo:a,workingBranch:y.workingBranch,repoDefaultBranch:l,cleanPath:n,depth:r,allItems:S,partialTreeFailures:Nr(S),incompleteTree:!1,rawResponseChars:ne(S)??0,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:[`Git Trees fetch failed (${h instanceof Error?h.message:String(h)}); used Contents recursion instead.`]})}}if(p.notModified)return{result:{error:"not-modified",status:304},etag:p.etag??i,notModified:!0};let m=p.items,d=0,f=p.rawResponseChars,g=p.truncated,R=[];if(g){R.push("Git Trees response was truncated by GitHub \u2014 this structure listing may be incomplete. Narrow path/depth or set OCTOCODE_GH_STRUCTURE_TREES=0 for Contents recursion.");try{let h=await Gr(e,s,a,u,n,1,r);d=Nr(h),f+=ne(h)??0,m=[...m,...h].filter((S,C,P)=>P.findIndex(T=>T.path===S.path)===C)}catch{}}return{result:Ti({owner:s,repo:a,workingBranch:u,repoDefaultBranch:l,cleanPath:n,depth:r,allItems:m,partialTreeFailures:d,incompleteTree:g,rawResponseChars:f,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:R}),...p.etag&&!g?{etag:p.etag}:{}}}var Rd={github:{cloneRepo:!0,fetchDirectoryToDisk:!0,requiresScopedCodeSearch:!1,supportsMergedState:!1,supportsMultiTopicSearch:!0}};function Oe(e){return!!(e&&typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&"type"in e)}function Eb(e){return!!(e&&typeof e=="object"&&e!==null&&"data"in e&&"status"in e&&typeof e.status=="number")}function Lb(e){return!!(e&&typeof e=="object"&&e!==null&&"id"in e&&typeof e.id=="number"&&"name"in e&&typeof e.name=="string"&&"full_name"in e&&typeof e.full_name=="string"&&"private"in e&&typeof e.private=="boolean")}function Re(e){if(!e)return{owner:void 0,repo:void 0};let t=e.split("/");if(t.length!==2||!t[0]||!t[1])throw new Error(`Invalid GitHub projectId format: '${e}'. Expected 'owner/repo'.`);return{owner:t[0],repo:t[1]}}function Ab(e){if(e.rateLimitRemaining===void 0&&e.retryAfter===void 0&&e.rateLimitReset===void 0)return;let t=e.rateLimitReset,n=t&&!isNaN(t)?Math.floor(t/1e3):Math.floor(Date.now()/1e3)+(e.retryAfter??3600);return{remaining:e.rateLimitRemaining??0,reset:n,retryAfter:e.retryAfter}}function mt(e){return{error:e.error,status:e.status||500,provider:"github",hints:e.hints,rateLimit:Ab(e)}}function Ei(e){return kb(e)?mt({error:typeof e.error=="string"?e.error:String(e.error),status:e.status||500,hints:e.hints,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}):null}function kb(e){if(typeof e!="object"||e===null||!("error"in e))return!1;let n=e.error;return typeof n=="string"||_b(n)}function _b(e){return typeof e=="object"&&e!==null&&typeof e.toString=="function"}function Hr(e){let t=typeof e?.totalMatchesCapped=="boolean"?e.totalMatchesCapped:typeof e?.reportedTotalMatches=="number"&&typeof e?.reachableTotalMatches=="number"?e.reportedTotalMatches>e.reachableTotalMatches:void 0;return{...typeof t=="boolean"?{totalMatchesCapped:t}:{},...typeof e?.uniqueFileCount=="number"?{uniqueFileCount:e.uniqueFileCount}:{}}}function Ib(e){return{items:e.items.map(n=>({path:n.path,matches:n.matches.map(r=>({context:r.context,positions:r.positions})),url:n.url||"",repository:{id:n.repository.nameWithOwner,name:n.repository.nameWithOwner,url:n.repository.url},lastModifiedAt:n.lastModifiedAt})),totalCount:e.total_count,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...Hr(e.pagination)},repositoryContext:e._researchContext?.repositoryContext,nonExistentScope:e.nonExistentScope,incompleteResults:e.incompleteResults}}function Ob(e){let t=e.repositories.map(n=>({id:`${n.owner}/${n.repo}`,name:n.repo,fullPath:`${n.owner}/${n.repo}`,description:n.description||null,url:n.url,cloneUrl:`https://github.com/${n.owner}/${n.repo}.git`,defaultBranch:n.defaultBranch||"main",stars:n.stars||0,forks:n.forksCount||0,visibility:n.visibility||"public",topics:n.topics||[],createdAt:n.createdAt,updatedAt:n.updatedAt,lastActivityAt:n.pushedAt||n.updatedAt,openIssuesCount:n.openIssuesCount,language:n.language}));return{repositories:t,totalCount:e.pagination?.totalMatches||t.length,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...Hr(e.pagination)},nonExistentScope:e.nonExistentScope}}async function Sd(e,t,n=Re){let{owner:r,repo:o}=n(e.projectId),i=r||e.owner,s={keywords:e.keywords,owner:i,repo:o,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},a=await bp(s,t);return Oe(a)?mt(a):a.data?{data:Ib(a.data),status:200,provider:"github",rawResponseChars:a.rawResponseChars??N(a.data)}:{error:"No data returned from GitHub API",status:500,provider:"github"}}async function bd(e,t){let n={keywords:e.keywords,topicsToSearch:e.topics,owner:e.owner,stars:e.stars??(e.minStars?`>=${e.minStars}`:void 0),size:e.size,created:e.created,updated:e.updated,language:e.language,match:e.match,archived:e.archived,visibility:e.visibility,forks:e.forks,license:e.license,goodFirstIssues:e.goodFirstIssues,sort:e.sort==="best-match"?void 0:e.sort,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},r=await ud(n,t);return"error"in r?Ei(r)??{error:"Unknown GitHub API error",status:500,provider:"github"}:!("data"in r)||!r.data?{error:"No data returned from GitHub API",status:500,provider:"github"}:{data:Ob(r.data),status:200,provider:"github",rawResponseChars:r.rawResponseChars??N(r.data)}}function vb(e,t){return{path:e.path||t.path,content:e.content||"",encoding:"utf-8",size:e.content?.length||0,totalLines:e.totalLines,sourceChars:e.sourceChars,contentView:e.contentView,ref:e.branch||t.ref||"",lastModified:e.lastModified,lastModifiedBy:e.lastModifiedBy,pagination:e.pagination,isPartial:e.isPartial,startLine:e.startLine,endLine:e.endLine,matchRanges:e.matchRanges,matchedLines:e.matchedLines,warnings:Db(e,t),matchNotFound:e.matchNotFound,searchedFor:e.searchedFor}}function Db(e,t){if(e.matchNotFound===!0){let n=e;if(Array.isArray(n.hints)&&n.hints.length>0){let a=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"";return n.hints.map(c=>c.replace(" in file",` in file${a}`))}let r=e.searchedFor??t.matchString??"",o=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"",s=t.matchStringIsRegex===!0?"Try a different pattern, widen the anchor, or use fullContent=true to inspect the file.":"Try matchStringIsRegex=true for pattern matching, a different anchor, or fullContent=true.";return[`No matches for "${r}" in file${o}. ${s}`]}return e.warnings??e.matchLocations}async function Cd(e,t,n=Re){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for file content",status:400,provider:"github"};let i={owner:r,repo:o,path:e.path,type:"file",branch:e.ref,startLine:e.startLine,endLine:e.endLine,matchString:e.matchString,contextLines:e.contextLines??5,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,charOffset:e.charOffset,charLength:e.charLength,fullContent:e.fullContent,forceRefresh:e.forceRefresh,minify:e.minify??"standard",mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},s=await qp(i,t);if(Oe(s))return mt(s);if(!s.data)return{error:"No data returned from GitHub API",status:500,provider:"github"};let a=s.data.hints;return{data:vb(s.data,e),status:200,provider:"github",rawResponseChars:s.rawResponseChars??N(s.data),...a?.length?{hints:a}:{}}}function Nb(e,t,n=Re){let r=(e.pullRequests||[]).map(a=>({number:a.number,title:a.title,body:a.body||null,...a.bodyPagination&&{bodyPagination:a.bodyPagination},state:a.merged?"merged":a.state,draft:a.draft||!1,author:a.author,assignees:a.assignees?.map(c=>typeof c=="string"?c:String(c.login??""))||[],labels:a.labels?.map(c=>typeof c=="string"?c:c.name??"")||[],sourceBranch:a.headRef||"",targetBranch:a.baseRef||"",sourceSha:a.headSha,targetSha:a.baseSha,createdAt:a.createdAt,updatedAt:a.updatedAt,closedAt:a.closedAt,mergedAt:a.mergedAt,commentsCount:a.comments,changedFilesCount:a.changedFiles,additions:a.additions,deletions:a.deletions,comments:a.commentDetails?.map(c=>({id:c.id,author:c.user,body:c.body,...c.bodyPagination&&{bodyPagination:c.bodyPagination},createdAt:c.createdAt,updatedAt:c.updatedAt,...c.commentType&&{commentType:c.commentType},...c.path&&{path:c.path},...c.line!==void 0&&{line:c.line},...c.inReplyToId!=null&&{inReplyToId:c.inReplyToId}})),reviews:a.reviews?.map(c=>({id:c.id,user:c.user,state:c.state,body:c.body,submittedAt:c.submittedAt,commitId:c.commitId})),commits:a.commitDetails?.map(c=>({sha:c.sha,message:c.message,author:c.author,date:c.date})),fileChanges:a.fileChanges?.map(c=>({path:c.filename,status:c.status,additions:c.additions,deletions:c.deletions,patch:c.patch})),...Array.isArray(a.sanitizationWarnings)&&a.sanitizationWarnings.length>0?{sanitizationWarnings:a.sanitizationWarnings}:{}})),{owner:o,repo:i}=t.projectId?n(t.projectId):{owner:void 0,repo:void 0},s=o||t.owner;return{items:r,totalCount:e.totalCount||r.length,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...Hr(e.pagination)},...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},repositoryContext:s&&i?{owner:s,repo:i}:void 0}}function Gb(e,t,n){return{owner:t,repo:n,query:e.query,prNumber:e.number,state:e.state==="merged"?"closed":e.state==="all"?void 0:e.state,merged:e.state==="merged"?!0:void 0,draft:e.draft,author:e.author,assignee:e.assignee,commenter:e.commenter,mentions:e.mentions,"reviewed-by":e.reviewedBy,"review-requested":e.reviewRequested,label:e.labels,base:e.baseBranch,head:e.headBranch,created:e.created,updated:e.updated,closed:e.closed,"merged-at":e.mergedAt,comments:e.comments,reactions:e.reactions,match:e.match,checks:e.checks,review:e.review,archived:e.archived,content:e.content,reviewMode:e.reviewMode,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,sort:e.sort,order:e.order,limit:e.limit,page:e.page,charOffset:e.charOffset,charLength:e.charLength}}async function xd(e,t,n=Re){let{owner:r,repo:o}=e.projectId?n(e.projectId):{owner:void 0,repo:void 0},i=r||e.owner,s=Gb(e,i,o),a=await id(s,t);return a.error?mt({error:typeof a.error=="string"?a.error:String(a.error),status:a.status||500,hints:a.hints,rateLimitRemaining:a.rateLimitRemaining,rateLimitReset:a.rateLimitReset,retryAfter:a.retryAfter}):{data:Nb(a,e,n),status:200,provider:"github",rawResponseChars:a.rawResponseChars??N(a)}}async function Bb(e,t,n){try{let o=await(await Q(n)).rest.repos.listLanguages({owner:e,repo:t}),i=Object.entries(o.data).sort((s,a)=>a[1]-s[1]);return i.length===0?void 0:{languages:Object.fromEntries(i),dominantLanguage:i[0][0]}}catch{return}}async function Ub(e,t,n){try{let i=(await(await Q(n)).rest.repos.listContributors({owner:e,repo:t,per_page:30})).data.filter(s=>typeof s.login=="string").map(s=>({login:s.login,contributions:s.contributions??0}));return i.length>0?{contributors:i}:void 0}catch{return}}async function Qb(e,t,n){try{let i=(await(await Q(n)).rest.repos.listBranches({owner:e,repo:t,per_page:100})).data.map(s=>s.name).filter(s=>typeof s=="string");return i.length>0?{branches:i}:void 0}catch{return}}async function $b(e,t,n){try{let i=(await(await Q(n)).rest.repos.listTags({owner:e,repo:t,per_page:50})).data.filter(s=>typeof s.name=="string").map(s=>({name:s.name,sha:s.commit?.sha??""}));return i.length>0?{tags:i}:void 0}catch{return}}function jb(e){return{projectPath:`${e.owner}/${e.repo}`,branch:e.branch||"",...e.defaultBranch!==void 0&&{defaultBranch:e.defaultBranch},path:e.path||"/",structure:e.structure||{},...e.fileSizeMap!==void 0&&{fileSizeMap:e.fileSizeMap},summary:{totalFiles:e.summary?.totalFiles||0,totalFolders:e.summary?.totalFolders||0,truncated:e.summary?.truncated||!1},pagination:e.pagination,hints:e.hints}}async function Pd(e,t,n=Re){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for repository structure",status:400,provider:"github"};let i={owner:r,repo:o,branch:e.ref||"HEAD",path:e.path,maxDepth:e.depth,itemsPerPage:e.itemsPerPage,page:e.page,includeSizes:e.includeSizes,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},[s,a,c,u,l]=await Promise.all([Ya(i,t),e.includeLanguages?Bb(r,o,t):Promise.resolve(void 0),e.includeContributors?Ub(r,o,t):Promise.resolve(void 0),e.includeBranches?Qb(r,o,t):Promise.resolve(void 0),e.includeTags?$b(r,o,t):Promise.resolve(void 0)]);return"error"in s?Ei(s)??{error:"Unknown GitHub API error",status:500,provider:"github"}:{data:{...jb(s),...a?{languages:a.languages,dominantLanguage:a.dominantLanguage}:{},...c?{contributors:c.contributors}:{},...u?{branches:u.branches}:{},...l?{tags:l.tags}:{}},status:200,provider:"github",rawResponseChars:s.rawResponseChars??N(s)}}var Li=class{type="github";capabilities=Rd.github;authInfo;constructor(t){t?.authInfo?this.authInfo=t.authInfo:t?.token&&(this.authInfo={token:t.token})}async searchCode(t){try{return await Sd(t,this.authInfo,Re)}catch(n){return this.handleError(n)}}async getFileContent(t){try{return await Cd(t,this.authInfo,Re)}catch(n){return this.handleError(n)}}async searchRepos(t){try{return await bd(t,this.authInfo)}catch(n){return this.handleError(n)}}async searchPullRequests(t){try{return await xd(t,this.authInfo,Re)}catch(n){return this.handleError(n)}}async getRepoStructure(t){try{return await Pd(t,this.authInfo,Re)}catch(n){return this.handleError(n)}}async resolveDefaultBranch(t){let{owner:n,repo:r}=Re(t);if(!n||!r)throw new Error(`Cannot resolve default branch: invalid projectId '${t}'.`);return Ae(n,r,this.authInfo)}handleError(t){let n=V(t);return mt(n)}};import{createHash as Wb}from"crypto";var Vb=3600*1e3,Xa=20,We=new Map;function wd(e){return Date.now()-e.createdAt<Vb}function Kb(){for(let[e,t]of We.entries())wd(t)||We.delete(e);if(We.size>Xa){let e=[...We.entries()].sort((n,r)=>n[1].lastAccessedAt-r[1].lastAccessedAt),t=We.size-Xa;for(let n=0;n<t&&n<e.length;n++){let r=e[n];r&&We.delete(r[0])}}}function Yb(e){return e?Wb("sha256").update(e).digest("hex").slice(0,16):"default"}function Xb(e){if(e==="default")return e;try{let t=new URL(e),n=`${t.protocol}//${t.hostname.toLowerCase()}`;return t.port&&(n+=`:${t.port}`),n+=t.pathname.replace(/\/+$/,"")||"",n}catch{return e.replace(/\/+$/,"")}}function qb(e,t){let n=Xb(t?.baseUrl||"default"),r=Yb(t?.token||t?.authInfo?.token);return`${e}:${n}:${r}`}function qa(e="github",t){if(e!=="github")throw new Error(`Unknown provider type: '${e}'. Only 'github' is supported.`);let n=qb(e,t),r=We.get(n);if(r&&wd(r))return r.lastAccessedAt=Date.now(),r.provider;r&&We.delete(n),We.size>=Xa&&Kb();let o=new Li({...t,type:e}),i=Date.now();return We.set(n,{provider:o,createdAt:i,lastAccessedAt:i}),o}function U0(){We.clear()}async function Td(){try{return qa("github"),[{provider:"github",ok:!0}]}catch(e){let t=e instanceof Error?e.message:String(e);return process.stderr.write(`\u26A0\uFE0F github provider failed to initialize: ${t}
25
- `),[{provider:"github",ok:!1,error:t}]}}import{ContentSanitizer as Jb}from"@octocodeai/octocode-engine/contentSanitizer";import{getConfigSync as Zb}from"@octocodeai/config";function eC(){try{return Zb().output.format}catch{return"yaml"}}function W0(e){if(e==null||typeof e!="object")return{content:[{type:"text",text:`error: "Invalid result options"
26
- `}],isError:!0};let{data:t,instructions:n,isError:r}=e;return{content:[{type:"text",text:Nt({data:t,instructions:n})}],isError:!!r}}function Ve(e){if(e==null)return e;if(typeof e=="string")return Jb.sanitizeContent(e).content;if(Array.isArray(e))return e.map(t=>Ve(t));if(typeof e=="object"){let t={};for(let[n,r]of Object.entries(e))n!=="warnings"&&(t[n]=Ve(r));return t}return e}function V0(e,t){if(t==="json")return JSON.stringify(e);let n=Array.isArray(e.content)?e.content.map(r=>"text"in r&&typeof r.text=="string"?r.text:"").filter(r=>r.length>0):[];return n.length>0?n.join(`
34
+ `).trim()}import{ContentSanitizer as su}from"@octocodeai/octocode-engine/contentSanitizer";var fT=new Set(["vercel","pkg-pr-new","coderabbitai","github-actions","codecov","changeset-bot","netlify","sonarcloud","socket-security"]);function ir(e){let t=e.toLowerCase();return t.endsWith("[bot]")||fT.has(t)}async function Zs(e){let t=[],n=0,r=1,o=!0;do{let i=await e(r);n+=B(i.data),t.push(...i.data),o=i.data.length===100,r++}while(o);return{items:t,rawResponseChars:n}}async function ou(e,t,n,r){let o=await $(r),{items:i,rawResponseChars:s}=await Zs(a=>o.rest.pulls.listFiles({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return W({total_count:i.length,files:i},s)}async function hT(e,t,n,r){let o=await $(r),{items:i,rawResponseChars:s}=await Zs(a=>o.rest.pulls.listCommits({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return W(i,s)}async function gT(e,t,n,r){try{let i=await(await $(r)).rest.repos.getCommit({owner:e,repo:t,ref:n});return W(i.data.files||[],i.data)}catch{return null}}var yT=5;async function bT(e,t,n){if(e.length===0)return[];let r=new Array(e.length),o=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let s=o++;if(s>=e.length)break;r[s]=await n(e[s],s)}});return await Promise.all(i),r}async function iu(e,t,n,r,o){let i=await hT(e,t,n,o);if(!i)return null;let s=ie(i)??0,a=[...i].sort((l,u)=>{let p=l.commit.author?.date?new Date(l.commit.author.date).getTime():0;return(u.commit.author?.date?new Date(u.commit.author.date).getTime():0)-p}),c=await bT(a,yT,async l=>{let u=await gT(e,t,l.sha,o),p=[];return u&&(s+=ie(u)??0,p=ei(u,r)),{sha:l.sha,message:l.commit.message,author:l.commit.author?.name||"unknown",date:l.commit.author?.date||"",files:p}});return W(c,s)}async function au(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let m=await e.rest.issues.listComments({owner:t,repo:n,issue_number:r,per_page:100,page:a});s+=B(m.data),i.push(...m.data),c=m.data.length===100,a++}while(c);let l=o?i:i.filter(m=>!ir(m.user?.login??"")),u=i.length-l.length,p=l.map(m=>{let f=D.minifyMarkdownCore(Ys(m.body??""));return{id:String(m.id),user:m.user?.login??"unknown",body:su.sanitizeContent(f).content,createdAt:m.created_at??"",updatedAt:m.updated_at??"",commentType:"discussion"}}),d=[];return u>0&&d.push(`${u} bot comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:W(p,s),note:d.length>0?d.join("; "):void 0}}catch{return{comments:W([],0)}}}async function cu(e,t,n,r){try{let{items:o,rawResponseChars:i}=await Zs(s=>e.rest.pulls.listReviews({owner:t,repo:n,pull_number:r,per_page:100,page:s}));return W(o.map(s=>({id:String(s.id),user:s.user?.login??"unknown",state:s.state??"",body:su.sanitizeContent(D.minifyMarkdownCore(Ys(s.body??""))).content,submittedAt:s.submitted_at??void 0,commitId:s.commit_id??void 0})),i)}catch{return W([],0)}}async function lu(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let m=await e.rest.pulls.listReviewComments({owner:t,repo:n,pull_number:r,per_page:100,page:a});s+=B(m.data),i.push(...m.data),c=m.data.length===100,a++}while(c);let l=o?i:i.filter(m=>!ir(m.user?.login??"")),u=i.length-l.length,p=l.map(m=>{let f=D.minifyMarkdownCore(Ys(m.body??""));return{id:String(m.id),user:m.user?.login??"unknown",body:su.sanitizeContent(f).content,createdAt:m.created_at??"",updatedAt:m.updated_at??"",commentType:"review_inline",path:m.path,line:m.line??m.original_line??void 0,...m.in_reply_to_id!=null?{inReplyToId:m.in_reply_to_id}:{}}}),d=[];return u>0&&d.push(`${u} bot inline comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:W(p,s),note:d.length>0?d.join("; "):void 0}}catch{return{comments:W([],0)}}}async function uu(e,t,n){let r=e,{prData:o,sanitizationWarnings:i}=tu(r);i.size>0&&(o._sanitization_warnings=Array.from(i));let s=0;if(e.pull_request&&nu(t))try{let{owner:l,repo:u}=Jo(t);if(l&&u){let p=await n.rest.pulls.get({owner:l,repo:u,pull_number:e.number});if(p.data&&(s+=B(p.data),o.head=p.data.head?.ref,o.head_sha=p.data.head?.sha,o.base=p.data.base?.ref,o.base_sha=p.data.base?.sha,o.draft=p.data.draft??!1,p.data.merged_at&&(o.merged_at=p.data.merged_at),o.additions=p.data.additions??0,o.deletions=p.data.deletions??0,jr(t)||(o.file_changes={total_count:p.data.changed_files??0,files:[]}),jr(t))){let d=await ou(l,u,e.number);d&&(s+=ie(d)??0,d.files=ei(d.files,t),o.file_changes=d)}}}catch(l){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${l instanceof Error?l.message:String(l)}`]}let a=Ws(t),c=Vs(t);if(a||c){let{owner:l,repo:u}=Jo(t);if(l&&u){let p=ru(t),d=()=>Promise.resolve({comments:W([],0)}),[{comments:m,note:f},{comments:h,note:y}]=await Promise.all([a?au(n,l,u,e.number,p):d(),c?lu(n,l,u,e.number,p):d()]);o.comments=[...m,...h],s+=(ie(m)??0)+(ie(h)??0);let g=[f,y].filter(S=>typeof S=="string");g.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...g])}}if(Xs(t))try{let{owner:l,repo:u}=Jo(t);if(l&&u){let p=await cu(n,l,u,e.number);s+=ie(p)??0,o.reviews=p}}catch(l){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${l instanceof Error?l.message:String(l)}`]}if(Ks(t))try{let{owner:l,repo:u}=Jo(t);if(l&&u){let p=await iu(l,u,e.number,t);p&&(s+=ie(p)??0,o.commits=p)}}catch(l){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${l instanceof Error?l.message:String(l)}`]}return W(o,s)}async function ti(e,t,n,r){let{prData:o,sanitizationWarnings:i}=tu(e);i.size>0&&(o._sanitization_warnings=Array.from(i));let s=0,a=t.owner,c=t.repo;if(o.additions="additions"in e?e.additions??0:0,o.deletions="deletions"in e?e.deletions??0:0,jr(t)||(o.file_changes={total_count:"changed_files"in e?e.changed_files??0:0,files:[]}),jr(t))try{let p=await ou(a,c,e.number,r);p&&(s+=ie(p)??0,p.files=ei(p.files,t),o.file_changes=p)}catch(p){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${p instanceof Error?p.message:String(p)}`]}let l=Ws(t),u=Vs(t);if(l||u){let p=ru(t),d=()=>Promise.resolve({comments:W([],0)}),[{comments:m,note:f},{comments:h,note:y}]=await Promise.all([l?au(n,a,c,e.number,p):d(),u?lu(n,a,c,e.number,p):d()]);o.comments=[...m,...h],s+=(ie(m)??0)+(ie(h)??0);let g=[f,y].filter(S=>typeof S=="string");g.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...g])}if(Xs(t))try{let p=await cu(n,a,c,e.number);s+=ie(p)??0,o.reviews=p}catch(p){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${p instanceof Error?p.message:String(p)}`]}if(Ks(t))try{let p=await iu(a,c,e.number,t,r);p&&(s+=ie(p)??0,o.commits=p)}catch(p){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${p instanceof Error?p.message:String(p)}`]}return W(o,s)}function ST(e,t,n){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}async function Pz(e,t,n){let r=await ke(t),o=xe("gh-api-prs",{owner:e.owner,repo:e.repo,prNumber:e.prNumber,content:e.content,auth:r},n);return await De(o,async()=>await pu(e,t),{shouldCache:s=>!s.error})}async function pu(e,t){let{owner:n,repo:r,prNumber:o}=e;if(!n||!r||!o)return{pullRequests:[],totalCount:0,error:Ke.PR_REQUIRED_PARAMS.message,hints:["Provide owner, repo, and prNumber"]};if(Array.isArray(n)||Array.isArray(r))return{pullRequests:[],totalCount:0,error:Ke.PR_SINGLE_VALUES.message,hints:["Do not use array for owner or repo when fetching by number"]};try{let i=await $(t),s=await i.rest.pulls.get({owner:n,repo:r,pull_number:o}),a=s.data,c=await ti(a,e,i,t);return{pullRequests:[zr(c,{includeFullBody:!0,includeFullCommentDetails:!0})],totalCount:1,rawResponseChars:B(s.data)+(ie(c)??0)}}catch(i){let s=J(i);return ST(s,Ke.PULL_REQUEST_FETCH_FAILED.message(o,s.error),[`Verify that pull request #${o} exists in ${n}/${r}`,"Check if you have access to this repository","Ensure the PR number is correct"])}}function du(e,t,n){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}function mu(e){let t=Math.min(e.limit||30,100);return{pullRequests:[],totalCount:0,pagination:{currentPage:e.page||1,totalPages:0,perPage:t,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}}}async function Yh(e,t){try{let n=t.owner,r=t.repo,o=Math.min(t.limit||30,100),i=t.page||1,s=await e.rest.pulls.list({owner:n,repo:r,state:(t.state==="merged"?"closed":t.state)||"open",per_page:o,page:i,sort:t.sort==="updated"?"updated":"created",direction:t.order||"desc",...t.head&&{head:t.head},...t.base&&{base:t.base}}),a=await Promise.all(s.data.map(async d=>await ti(d,t,e))),c=a.reduce((d,m)=>d+(ie(m)??0),0),l=a.map(d=>zr(d,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:t.charOffset,charLength:t.charLength})),u=s.data.length===o,p=(i-1)*o+l.length;return{pullRequests:l,totalCount:l.length,pagination:{currentPage:i,totalPages:u?i+1:i,perPage:o,totalMatches:p+(u?1:0),reachableTotalMatches:p,totalMatchesKind:u?"lowerBound":"exact",hasMore:u,...u?{nextPage:i+1}:{}},rawResponseChars:B(s.data)+c}}catch(n){if(Qt(n))return mu(t);let r=J(n);return du(r,Ke.PULL_REQUEST_LIST_FAILED.message(r.error),["Verify repository access and authentication"])}}async function RT(e,t){if(!t.owner||!t.repo||Array.isArray(t.owner)||Array.isArray(t.repo))return t;try{let n=await e.rest.repos.get({owner:t.owner,repo:t.repo}),[r,o]=n.data.full_name?.split("/")??[];return!r||!o||r===t.owner&&o===t.repo?t:{...t,owner:r,repo:o}}catch{return t}}function CT(e,t,n="anon"){return xe("gh-api-prs",{query:e.query,owner:e.owner,repo:e.repo,prNumber:e.prNumber,state:e.state,draft:e.draft,merged:e.merged,author:e.author,assignee:e.assignee,mentions:e.mentions,commenter:e.commenter,"reviewed-by":e["reviewed-by"],"review-requested":e["review-requested"],head:e.head,base:e.base,created:e.created,updated:e.updated,"merged-at":e["merged-at"],closed:e.closed,comments:e.comments,reactions:e.reactions,label:e.label,milestone:e.milestone,language:e.language,checks:e.checks,review:e.review,locked:e.locked,visibility:e.visibility,project:e.project,archived:e.archived,match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,auth:n},t)}async function Zh(e,t,n){let r=await ke(t),o=CT(e,n,r);return await De(o,async()=>await xT(e,t,n),{shouldCache:s=>!s.error})}async function xT(e,t,n){try{if(e.prNumber&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await pu(e,t);let r=await $(t);if(!gl(e)&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await Yh(r,e);let i=await RT(r,e),s=hl(i);if(!s)return{pullRequests:[],totalCount:0,error:Ke.NO_VALID_PARAMETERS.message,hints:["Provide search query or filters like owner/repo"]};let a=i.sort&&i.sort!=="best-match"?i.sort:void 0,c=Math.min(i.limit||30,100),l=i.page||1,u=s,p=await r.rest.search.issuesAndPullRequests({q:s,sort:a,order:e.order||"desc",per_page:c,page:l}),d=p.data.items?.filter(T=>!!T.pull_request)||[],m=await Promise.all(d.map(async T=>await uu(T,i,r))),f=m.reduce((T,E)=>T+(ie(E)??0),0),h=m.map(T=>zr(T,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:i.charOffset,charLength:i.charLength})),y=p.data.total_count,g=Math.min(y,1e3),S=Math.ceil(g/c),R=Math.min(l,Math.max(1,S)),C=R<S,P=Math.min(g,S*c);return{pullRequests:h,totalCount:p.data.total_count,effectiveQuery:u,...p.data.incomplete_results&&{incompleteResults:!0},pagination:{currentPage:R,totalPages:S,perPage:c,totalMatches:g,reportedTotalMatches:y,reachableTotalMatches:P,totalMatchesKind:"reported",totalMatchesCapped:y>g,hasMore:C,...C?{nextPage:R+1}:{}},rawResponseChars:B(p.data)+f}}catch(r){if(Qt(r))return mu(e);let o=J(r);return du(o,Ke.PULL_REQUEST_SEARCH_FAILED.message(o.error),["Verify authentication and search parameters"])}}var wT=/^(\d+)\s*([hdwmy])$/i;function fu(e){let t=e.trim(),n=wT.exec(t);if(n){let r=Number(n[1]),o=n[2].toLowerCase(),i=new Date;switch(o){case"h":i.setUTCHours(i.getUTCHours()-r);break;case"d":i.setUTCDate(i.getUTCDate()-r);break;case"w":i.setUTCDate(i.getUTCDate()-r*7);break;case"m":i.setUTCMonth(i.getUTCMonth()-r);break;case"y":i.setUTCFullYear(i.getUTCFullYear()-r);break}return{value:i.toISOString()}}return Number.isNaN(Date.parse(t))?{warning:`"${e}" is not a valid date or relative window \u2014 use e.g. "30d", "2w", "6m", "1y", or an ISO date like "2026-01-01". Filter skipped.`}:{value:t}}function hu(e,t,n){if(!e)return;if(!n&&!t)return{patch:e};let r=e.length,o=Math.min(Math.max(0,t??0),r),i=Math.max(1,n??r),s=Math.min(o+i,r),a=s<r;return{patch:e.slice(o,s),patchPagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function sr(e,t){let n=e.map(u=>{let p=u.patch!==void 0?hu(u.patch,t.charOffset,t.charLength):void 0;return{filename:u.filename,status:u.status,additions:u.additions,deletions:u.deletions,...p!==void 0?{patch:p.patch,...p.patchPagination?{patchPagination:p.patchPagination}:{}}:{},...u.previous_filename?{previousFilename:u.previous_filename}:{}}}),r=Math.max(1,t.filePage??1),o=Math.max(1,t.itemsPerPage??20),i=n.length,s=Math.max(1,Math.ceil(i/o)),a=Math.min(r,s),c=(a-1)*o;return{files:n.slice(c,c+o),filesPagination:{currentPage:a,totalPages:s,itemsPerPage:o,totalFiles:i,hasMore:a<s,...a<s&&a<1e3?{nextFilePage:a+1}:{},...a<s&&a>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}}var PT=5;function qs(e){return e?e.includes('rel="next"'):!1}async function TT(e,t,n){if(e.length===0)return[];let r=new Array(e.length),o=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let s=o++;if(s>=e.length)return;r[s]=await n(e[s],s)}});return await Promise.all(i),r}async function qh(e,t,n){let r=await ke(t),o=xe("gh-api-history",{type:e.type,owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,since:e.since,until:e.until,author:e.author,committer:e.committer,page:e.page,perPage:e.perPage,filePage:e.filePage,itemsPerPage:e.itemsPerPage,includeDiff:e.includeDiff,charOffset:e.charOffset,charLength:e.charLength,auth:r},n);return De(o,()=>ET(e,t),{shouldCache:i=>"data"in i&&!("error"in i)})}async function ET(e,t){try{let n=await $(t),r=[],o=e.since?fu(e.since):void 0,i=e.until?fu(e.until):void 0;o?.warning&&r.push(`since ${o.warning}`),i?.warning&&r.push(`until ${i.warning}`);let s={owner:e.owner,repo:e.repo,per_page:e.perPage,page:e.page,...e.path?{path:e.path}:{},...e.branch?{sha:e.branch}:{},...o?.value?{since:o.value}:{},...i?.value?{until:i.value}:{},...e.author?{author:e.author}:{},...e.committer?{committer:e.committer}:{}},a=await n.rest.repos.listCommits(s),c=a.headers.link,l=qs(c),u=a.data.map(g=>{let S=g.commit.author,R=g.commit.committer,C=R?.date??S?.date??"",P=g.commit.message,T=P.split(`
35
+ `)[0]??P,E=P.slice(T.length).trim(),k=E.length>500,x=E.length===0?T:`${T}
36
+ ${k?`${E.slice(0,500)}\u2026`:E}`,b=R?.name===S?.name&&R?.email===S?.email||g.committer?.login==="web-flow";return{sha:g.sha,date:C,...x===T?{}:{message:x},...k?{messageTruncated:!0}:{},messageHeadline:T,author:{name:S?.name??"unknown",email:S?.email??"",...g.author?.login?{login:g.author.login}:{}},...R&&!b?{committer:{name:R.name??"unknown",email:R.email??"",...g.committer?.login?{login:g.committer.login}:{}}}:{}}});u.length===0&&(o?.value!==void 0||i?.value!==void 0)&&r.push("no commits matched the since/until window \u2014 GitHub filters by committer date (not author date; rebases and squash-merges reset it), and a path-scoped walk does not follow renames. Widen or drop since/until and inspect commit dates directly.");let p={currentPage:e.page,perPage:e.perPage,hasMore:l,...l?{nextPage:e.page+1}:{}};if(!e.includeDiff)return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:u,pagination:p,...r.length?{warnings:r}:{}},status:200};let d=!1,m=!1,f=await TT(u,PT,async(g,S)=>{try{let R=a.data[S]?.sha??g.sha,C=await n.rest.repos.getCommit({owner:e.owner,repo:e.repo,ref:R});if(e.type==="file"&&e.path){let P=e.path,T=C.data.files?.find(x=>x.filename===P||x.previous_filename===P);if(T){let x=T.patch!==void 0?hu(T.patch,e.charOffset,e.charLength):void 0;return{...g,additions:T.additions,deletions:T.deletions,status:T.status,...x!==void 0?{patch:x.patch,...x.patchPagination?{patchPagination:x.patchPagination}:{}}:{},...T.previous_filename?{previousFilename:T.previous_filename}:{}}}let E=P.endsWith("/")?P:`${P}/`,k=(C.data.files??[]).filter(x=>x.filename.startsWith(E));return k.length>0?(d=!0,{...g,...sr(k,e)}):(m=!0,g)}else{let P=e.path,T=(C.data.files??[]).filter(E=>!P||E.filename.startsWith(P));return{...g,...sr(T,e)}}}catch{}return g}),h=[];d&&h.push(`path '${e.path}' matched no single file in these commits but matches files under it \u2014 treated as a directory filter and returned per-commit changed files (append '/' to select directory mode explicitly).`),m&&h.push(`includeDiff: some commits contain no file matching '${e.path}' (rename or shallow diff?) \u2014 those commits are listed without a diff.`);let y=[...r,...h];return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:f,pagination:p,...y.length?{warnings:y}:{}},status:200}}catch(n){return J(n)}}var Jh=30;function eg(e){let t={},n=e.license;n?.spdx_id&&n.spdx_id!=="NOASSERTION"&&(t.license=n.spdx_id);let r=e.homepage;return r&&(t.homepage=r),t}async function tg(e,t,n){let r=await ke(t),o=e,i=xe("gh-api-repos",{keywords:e.keywords,topicsToSearch:e.topicsToSearch,owner:e.owner,repo:o.repo,stars:e.stars,size:o.size,created:o.created,updated:e.updated,language:o.language,match:e.match,sort:e.sort,limit:e.limit,page:e.page,archived:o.archived,visibility:o.visibility,forks:o.forks,license:o.license,goodFirstIssues:o.goodFirstIssues,auth:r},n);return await De(i,async()=>await LT(e,t),{shouldCache:a=>"data"in a&&!a.error})}async function AT(e,t){let n=Math.min(e.limit||100,100),r=e.page||1,o=e.sort==="updated"?"updated":"full_name",i,s;try{i=(await t.rest.repos.listForOrg({org:e.owner,per_page:n,page:r,sort:o})).data,s=void 0}catch(m){if(m?.status!==404)return J(m);try{i=(await t.rest.repos.listForUser({username:e.owner,per_page:n,page:r,sort:o})).data,s=void 0}catch(h){return J(h)}}let a=i.map(m=>{let h=m.full_name.split("/"),y=h[0]||"",g=h[1]||"";return{owner:y,repo:g,defaultBranch:m.default_branch,stars:m.stargazers_count||0,description:m.description?m.description:"No description",url:m.html_url,createdAt:m.created_at,updatedAt:m.updated_at,pushedAt:m.pushed_at,visibility:m.visibility,...m.topics&&m.topics.length>0&&{topics:m.topics},...m.forks_count&&m.forks_count>0&&{forksCount:m.forks_count},...m.open_issues_count&&m.open_issues_count>0&&{openIssuesCount:m.open_issues_count},...m.language&&{language:m.language},...eg(m)}}),c=a.length,l=c===n,u=(r-1)*n+c,p=s??u+(l?1:0),d=s!==void 0||!l?"exact":"lowerBound";return{data:{repositories:a,pagination:{currentPage:r,totalPages:l?r+1:r,perPage:n,totalMatches:p,reachableTotalMatches:u,totalMatchesKind:d,hasMore:l,...l?{nextPage:r+1}:{}}},status:200,rawResponseChars:B(i)}}async function LT(e,t){try{let n=await $(t),r=(e.keywords?.length??0)>0||(e.topicsToSearch?.length??0)>0,o=e,i=!!(e.stars||e.updated||e.language||e.match||o.forks||o.goodFirstIssues||o.created||o.size||o.license||o.visibility||o.archived!==void 0||e.sort&&!["best-match","updated"].includes(e.sort)),s=typeof e.owner=="string"?e.owner:Array.isArray(e.owner)?e.owner[0]:void 0;if(!r&&!i&&s)return await AT({owner:s,sort:e.sort,limit:e.limit,page:e.page},n);let a=ml(e);if(!a.trim())return{error:Ke.QUERY_EMPTY.message,type:"http",status:400};let c=Math.min(e.limit||Jh,100),l=e.page||1,u={q:a,per_page:c,page:l},p=["stars","forks","help-wanted-issues","updated"];e.sort&&p.includes(e.sort)&&(u.sort=e.sort);let d=await n.rest.search.repos(u),m=d.data.items.map(C=>{let T=C.full_name.split("/"),E=T[0]||"",k=T[1]||"";return{owner:E,repo:k,defaultBranch:C.default_branch,stars:C.stargazers_count||0,description:C.description?C.description:"No description",url:C.html_url,createdAt:C.created_at,updatedAt:C.updated_at,pushedAt:C.pushed_at,visibility:C.visibility,...C.topics&&C.topics.length>0&&{topics:C.topics},...C.forks_count&&C.forks_count>0&&{forksCount:C.forks_count},...C.open_issues_count&&C.open_issues_count>0&&{openIssuesCount:C.open_issues_count},...C.language&&{language:C.language},...eg(C)}}),f=d.data.total_count,h=Math.min(f,1e3),y=Math.ceil(h/c),g=Math.min(l,Math.max(1,y)),S=g<y,R=Math.min(h,y*c);return{data:{repositories:m,pagination:{currentPage:g,totalPages:y,perPage:c,totalMatches:h,reportedTotalMatches:f,reachableTotalMatches:R,totalMatchesKind:"reported",totalMatchesCapped:f>h,hasMore:S,...S?{nextPage:g+1}:{}}},status:200,headers:Ir(d.headers),rawResponseChars:B(d.data)}}catch(n){if(Qt(n)){let r=Math.min(e.limit||Jh,100);return{data:{repositories:[],nonExistentScope:!0,pagination:{currentPage:e.page||1,totalPages:0,perPage:r,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return J(n)}}var vn={ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200};function _T(e,t){return t?e>5e4?[`Response ~${e.toLocaleString()} tokens \u2014 exceeds typical context. Reduce charLength or refine the query.`]:e>3e4?[`Response ~${e.toLocaleString()} tokens \u2014 approaching context limit. Consider reducing charLength.`]:[]:[]}function kT(e){if(e.hasMore&&e.nextCharOffset!==void 0){let t=e.charOffset+1,n=e.charOffset+e.charLength;return[`Page ${e.currentPage}/${e.totalPages} (chars ${t}-${n} of ${e.totalChars}). Next: charOffset=${e.nextCharOffset}`]}return[]}function pj(e,t={}){let{enableWarnings:n=!0,customHints:r=[]}=t,o=[];return o.push(...r),e.estimatedTokens&&o.push(..._T(e.estimatedTokens,n)),o.push(...kT(e)),o}function Js(e,t){return e.hasMore?[`Page ${e.currentPage}/${e.totalPages}. Next: page=${e.currentPage+1}`]:[]}function ng(e,t){let n=e._cachedItems;if(!n||n.length===0){let{_cachedItems:x,...b}=e;return b}let r=t.itemsPerPage??vn.ENTRIES_PER_PAGE,o=t.page??1,i=n.length,s=Math.max(1,Math.ceil(i/r)),a=(o-1)*r,c=Math.min(a+r,i),l=n.slice(a,c),u=Object.create(null),p=e.path==="/"?"":e.path,d=x=>{let b=x;p&&x.startsWith(p)&&(b=x.slice(p.length),b.startsWith("/")&&(b=b.slice(1)));let w=b.lastIndexOf("/");return w===-1?".":b.slice(0,w)},m=x=>{let b=x.lastIndexOf("/");return b===-1?x:x.slice(b+1)};for(let x of l){let b=d(x.path);u[b]||(u[b]={files:[],folders:[]});let w=m(x.path);x.type==="file"?u[b].files.push(w):u[b].folders.push(w)}for(let x of Object.keys(u)){let b=u[x];b&&(b.files.sort(),b.folders.sort())}let f=Object.create(null),h=Object.keys(u).sort((x,b)=>x==="."?-1:b==="."?1:x.localeCompare(b));for(let x of h){let b=u[x];b&&(f[x]=b)}let y=l.filter(x=>x.type==="file").length,g=l.filter(x=>x.type==="dir").length,S=n.filter(x=>x.type==="file").length,R=n.filter(x=>x.type==="dir").length,C=o<s,P={currentPage:o,totalPages:s,hasMore:C,...C?{nextPage:o+1}:{},entriesPerPage:r,totalEntries:i},T=Js(P,{owner:e.owner,repo:e.repo,branch:e.branch,path:p,depth:t.maxDepth??1,pageFiles:y,pageFolders:g,allFiles:S,allFolders:R}),E,k=e._cachedFileSizeMap;if(k){let x=new Set(l.filter(L=>L.type==="file").map(L=>L.path)),b=e.path==="/"?"":e.path,w=Object.create(null);for(let[L,O]of Object.entries(k))for(let[v,A]of Object.entries(O)){let q=L==="."?b?`${b}/${v}`:v:b?`${b}/${L}/${v}`:`${L}/${v}`;x.has(q)&&(w[L]||(w[L]=Object.create(null)),w[L][v]=A)}Object.keys(w).length>0&&(E=w)}return{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,apiSource:e.apiSource,summary:{totalFiles:S,totalFolders:R,truncated:C,filtered:!0,originalCount:i},structure:f,...E!==void 0&&{fileSizeMap:E},...k!==void 0&&{_cachedFileSizeMap:k},pagination:P,hints:T,rawResponseChars:e.rawResponseChars}}import{RequestError as IT}from"octokit";var og=Symbol.for("octocode.recursiveFetchFailures"),OT=new Set([401,403,429]);function rg(e){return e instanceof IT&&OT.has(e.status)}function gu(e,t){try{Object.defineProperty(e,og,{value:t,enumerable:!1,configurable:!0})}catch{}return e}function ni(e){if(typeof e!="object"||e===null)return 0;let t=e[og];return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}async function ri(e,t,n,r,o,i,s,a=new Set){if(i>s||a.has(o))return gu(W([],0),0);a.add(o);let c;try{c=await e.rest.repos.getContent({owner:t,repo:n,path:o||"",ref:r})}catch(f){if(rg(f))throw f;return gu(W([],0),1)}let l=B(c.data),p=(Array.isArray(c.data)?c.data:[c.data]).filter(f=>f.type==="file"||f.type==="dir").map(f=>({name:f.name,path:f.path,type:f.type,size:"size"in f?f.size:void 0,download_url:"download_url"in f?f.download_url:void 0,url:f.url,html_url:f.html_url,git_url:f.git_url,sha:f.sha})),d=[...p],m=0;if(i<s){let f=p.filter(y=>y.type==="dir"),h=3;for(let y=0;y<f.length;y+=h){let g=f.slice(y,y+h),S=await Promise.allSettled(g.map(R=>ri(e,t,n,r,R.path,i+1,s,a)));for(let R of S)if(R.status==="fulfilled"){let C=R.value;l+=ie(C)??0,m+=ni(C),d.push(...C)}else{if(rg(R.reason))throw R.reason;m+=1}}}return gu(W(d,l),m)}import{RequestError as vT}from"octokit";function FT(e,t){let n=(t.pathPrefix??"").replace(/^\/+|\/+$/g,""),r=n?`${n}/`:"",o=Math.max(1,t.maxDepth),i=[];for(let s of e){if(!s.path||s.type!=="blob"&&s.type!=="tree")continue;let a=s.path;if(n){if(s.path===n||!s.path.startsWith(r))continue;a=s.path.slice(r.length)}let c=a.split("/").filter(Boolean).length;if(c===0||c>o)continue;let l=a.lastIndexOf("/"),u=l===-1?a:a.slice(l+1);i.push({name:u,path:s.path,type:s.type==="tree"?"dir":"file",size:s.type==="blob"?s.size:void 0,sha:s.sha,url:s.url,html_url:void 0,git_url:void 0,download_url:void 0})}return i}function ig(e=process.env){return e.OCTOCODE_GH_STRUCTURE_TREES!=="0"}async function sg(e,t){let{data:n}=await e.rest.repos.getBranch({owner:t.owner,repo:t.repo,branch:t.workingBranch}),r=n.commit.commit.tree.sha;if(!r)throw new Error(`Could not resolve tree SHA for ${t.owner}/${t.repo}@${t.workingBranch}`);let o;try{o=await e.rest.git.getTree({owner:t.owner,repo:t.repo,tree_sha:r,recursive:"true",...t.ifNoneMatch?{headers:{"If-None-Match":t.ifNoneMatch}}:{}})}catch(c){if(c instanceof vT&&c.status===304)return{items:[],truncated:!1,rawResponseChars:0,etag:t.ifNoneMatch,notModified:!0};throw c}let i=o.data,s=Or(o.headers);return{items:FT(i.tree,{pathPrefix:t.pathPrefix,maxDepth:t.maxDepth}),truncated:!!i.truncated,rawResponseChars:B(n)+B(i),...s?{etag:s}:{}}}import{RequestError as ag}from"octokit";async function yu(e,t,n,r,o,i,s){let a,c;try{o?a=o:(c=await Be(t,n,i),a=c)}catch(l){let u=J(l);return{error:hn.NOT_FOUND.message(t,n,u.error),status:u.status}}try{let l=await e.rest.repos.getContent({owner:t,repo:n,path:r||"",ref:a,...s?{headers:{"If-None-Match":s}}:{}}),u=Or(l.headers);return{data:l.data,workingBranch:a,...c!==void 0?{repoDefaultBranch:c}:{},...u?{etag:u}:{}}}catch(l){if(l instanceof ag&&l.status===304)return{data:null,workingBranch:a,...c!==void 0?{repoDefaultBranch:c}:{},etag:s,notModified:!0};if(!(l instanceof ag&&l.status===404)){let p=J(l);return{error:hn.ACCESS_FAILED.message(t,n,p.error),status:p.status,rateLimitRemaining:p.rateLimitRemaining,rateLimitReset:p.rateLimitReset,retryAfter:p.retryAfter}}let u=J(l);return{error:hn.PATH_NOT_FOUND.message(r,t,n,a),status:u.status}}}function cg(e){return e.map(t=>{let n=t;return{name:n.name,path:n.path,type:n.type,size:"size"in n?n.size:void 0,download_url:"download_url"in n?n.download_url:void 0,url:n.url,html_url:n.html_url,git_url:n.git_url,sha:n.sha}})}function MT(e,t){let n=Object.create(null),r=a=>{let c=a;t&&a.startsWith(t)&&(c=a.slice(t.length),c.startsWith("/")&&(c=c.slice(1)));let l=c.lastIndexOf("/");return l===-1?".":c.slice(0,l)},o=a=>{let c=a.lastIndexOf("/");return c===-1?a:a.slice(c+1)};for(let a of e){let c=r(a.path);n[c]||(n[c]={files:[],folders:[]});let l=o(a.path);a.type==="file"?n[c].files.push(l):n[c].folders.push(l)}for(let a of Object.values(n))a&&(a.files.sort(),a.folders.sort());let i=Object.keys(n).sort((a,c)=>a==="."?-1:c==="."?1:a.localeCompare(c)),s=Object.create(null);for(let a of i){let c=n[a];c&&(s[a]=c)}return s}function lg(e,t){let n=Object.create(null);for(let r of e){if(r.type!=="file"||r.size===void 0)continue;let o=r.path;t&&r.path.startsWith(t)&&(o=r.path.slice(t.length).replace(/^\//,""));let i=o.lastIndexOf("/"),s=i===-1?".":o.slice(0,i),a=i===-1?o:o.slice(i+1);n[s]||(n[s]=Object.create(null)),n[s][a]=r.size}return n}function ea(e){let{owner:t,repo:n,workingBranch:r,repoDefaultBranch:o,cleanPath:i,depth:s,partialTreeFailures:a,incompleteTree:c,rawResponseChars:l,includeSizes:u,extraHints:p=[]}=e,d=e.allItems.filter(A=>A.type==="dir"?!Bo(A.name):!kr(A.path));d.sort((A,q)=>{if(A.type!==q.type)return A.type==="dir"?-1:1;let ne=A.path.split("/").length,Me=q.path.split("/").length;return ne!==Me?ne-Me:A.path.localeCompare(q.path)});let m=e.itemsPerPage??vn.ENTRIES_PER_PAGE,f=e.page??1,h=d.length,y=Math.max(1,Math.ceil(h/m)),g=(f-1)*m,S=Math.min(g+m,h),R=d.slice(g,S),C=MT(R,i),P=u?lg(d,i):void 0,T=P!==void 0?lg(R,i):void 0,E=R.filter(A=>A.type==="file").length,k=R.filter(A=>A.type==="dir").length,x=d.filter(A=>A.type==="file").length,b=d.filter(A=>A.type==="dir").length,w=f<y,L={currentPage:f,totalPages:y,hasMore:w,...w?{nextPage:f+1}:{},entriesPerPage:m,totalEntries:h},O=Js(L,{owner:t,repo:n,branch:r,path:i,depth:s,pageFiles:E,pageFolders:k,allFiles:x,allFolders:b});a>0&&O.unshift(`Partial tree: ${a} subdirectory subtree(s) failed to load and are missing from this structure. The listing is incomplete \u2014 retry or narrow the path/depth.`);for(let A of p)O.unshift(A);let v=[...c?["providerTreeTruncated"]:[],...a>0?["partialTreeFailures"]:[]];return{owner:t,repo:n,branch:r,...o!==void 0&&{defaultBranch:o},path:i||"/",apiSource:!0,summary:{totalFiles:x,totalFolders:b,truncated:w,filtered:!0,originalCount:d.length,...c?{incompleteTree:!0}:{}},structure:C,...T!==void 0&&{fileSizeMap:T},...P!==void 0&&{_cachedFileSizeMap:P},pagination:L,...v.length>0?{isPartial:!0,partialReasons:v}:{},...c?{terminalLimit:!0}:{},hints:O,rawResponseChars:l,_cachedItems:d.map(A=>({path:A.path,type:A.type}))}}async function bu(e,t,n){let r=await ke(t),o=xe("gh-repo-structure-api",{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,depth:e.maxDepth,auth:r},n),i=await Rs(o,async({ifNoneMatch:s})=>{let a=await NT({...e,itemsPerPage:e.itemsPerPage??vn.ENTRIES_PER_PAGE,page:e.page??1},t,s);return{value:a.result,etag:a.etag,notModified:a.notModified}},{shouldCache:s=>!("error"in s)});return!("error"in i)&&i.structure?ng(i,e):i}async function NT(e,t,n){try{let r=await $(t),{owner:o,repo:i,branch:s,path:a="",maxDepth:c=1}=e,l=a.replace(/^\/+|\/+$/g,"");if(c>1&&ig())return await DT(r,e,l,c,t,n);let u=await yu(r,o,i,l,s,t,c===1?n:void 0);if("error"in u)return{result:u};if(u.notModified)return{result:{error:"not-modified",status:304},etag:u.etag??n,notModified:!0};let{data:p,workingBranch:d,repoDefaultBranch:m,etag:f}=u,h=B(p),y=Array.isArray(p)?p:[p],g=cg(y),S=0;if(c>1){let R=await ri(r,o,i,d,l,1,c);S=ni(R),h=ie(R)??0,g=R}return{result:ea({owner:o,repo:i,workingBranch:d,repoDefaultBranch:m,cleanPath:l,depth:c,allItems:g,partialTreeFailures:S,incompleteTree:!1,rawResponseChars:h,includeSizes:e.includeSizes===!0,itemsPerPage:e.itemsPerPage,page:e.page}),...c===1&&f?{etag:f}:{}}}catch(r){let o=J(r);return{result:{error:hn.STRUCTURE_EXPLORATION_FAILED.message,status:o.status,rateLimitRemaining:o.rateLimitRemaining,rateLimitReset:o.rateLimitReset,retryAfter:o.retryAfter}}}}async function DT(e,t,n,r,o,i){let{owner:s,repo:a,branch:c}=t,l,u;try{c?l=c:(u=await Be(s,a,o),l=u)}catch(g){let S=J(g);return{result:{error:hn.NOT_FOUND.message(s,a,S.error),status:S.status}}}let p;try{p=await sg(e,{owner:s,repo:a,workingBranch:l,pathPrefix:n,maxDepth:r,ifNoneMatch:i})}catch(g){let S=await yu(e,s,a,n,l,o);if("error"in S)return{result:S};let R=await ri(e,s,a,S.workingBranch,n,1,r);return{result:ea({owner:s,repo:a,workingBranch:S.workingBranch,repoDefaultBranch:u,cleanPath:n,depth:r,allItems:R,partialTreeFailures:ni(R),incompleteTree:!1,rawResponseChars:ie(R)??0,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:[`Git Trees fetch failed (${g instanceof Error?g.message:String(g)}); used Contents recursion instead.`]})}}if(p.notModified)return{result:{error:"not-modified",status:304},etag:p.etag??i,notModified:!0};let d=p.items,m=0,f=p.rawResponseChars,h=p.truncated,y=[];if(h){y.push("Git Trees response was truncated by GitHub \u2014 this structure listing may be incomplete. Narrow path/depth or set OCTOCODE_GH_STRUCTURE_TREES=0 for Contents recursion.");try{let g=await ri(e,s,a,l,n,1,r);m=ni(g),f+=ie(g)??0,d=[...d,...g].filter((R,C,P)=>P.findIndex(T=>T.path===R.path)===C)}catch{}}return{result:ea({owner:s,repo:a,workingBranch:l,repoDefaultBranch:u,cleanPath:n,depth:r,allItems:d,partialTreeFailures:m,incompleteTree:h,rawResponseChars:f,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:y}),...p.etag&&!h?{etag:p.etag}:{}}}var ug={github:{cloneRepo:!0,fetchDirectoryToDisk:!0,requiresScopedCodeSearch:!1,supportsMergedState:!1,supportsMultiTopicSearch:!0}};function Rt(e){return!!(e&&typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&"type"in e)}function HT(e){return!!(e&&typeof e=="object"&&e!==null&&"data"in e&&"status"in e&&typeof e.status=="number")}function GT(e){return!!(e&&typeof e=="object"&&e!==null&&"id"in e&&typeof e.id=="number"&&"name"in e&&typeof e.name=="string"&&"full_name"in e&&typeof e.full_name=="string"&&"private"in e&&typeof e.private=="boolean")}function Fe(e){if(!e)return{owner:void 0,repo:void 0};let t=e.split("/");if(t.length!==2||!t[0]||!t[1])throw new Error(`Invalid GitHub projectId format: '${e}'. Expected 'owner/repo'.`);return{owner:t[0],repo:t[1]}}function BT(e){if(e.rateLimitRemaining===void 0&&e.retryAfter===void 0&&e.rateLimitReset===void 0)return;let t=e.rateLimitReset,n=t&&!isNaN(t)?Math.floor(t/1e3):Math.floor(Date.now()/1e3)+(e.retryAfter??3600);return{remaining:e.rateLimitRemaining??0,reset:n,retryAfter:e.retryAfter}}function on(e){return{error:e.error,status:e.status||500,provider:"github",hints:e.hints,rateLimit:BT(e)}}function ta(e){return zT(e)?on({error:typeof e.error=="string"?e.error:String(e.error),status:e.status||500,hints:e.hints,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}):null}function zT(e){if(typeof e!="object"||e===null||!("error"in e))return!1;let n=e.error;return typeof n=="string"||jT(n)}function jT(e){return typeof e=="object"&&e!==null&&typeof e.toString=="function"}function oi(e){let t=typeof e?.totalMatchesCapped=="boolean"?e.totalMatchesCapped:typeof e?.reportedTotalMatches=="number"&&typeof e?.reachableTotalMatches=="number"?e.reportedTotalMatches>e.reachableTotalMatches:void 0;return{...e?.totalMatchesKind==="lowerBound"?{totalMatchesKind:"lowerBound"}:{},...typeof t=="boolean"?{totalMatchesCapped:t}:{},...typeof e?.uniqueFileCount=="number"?{uniqueFileCount:e.uniqueFileCount}:{}}}function QT(e){return{items:e.items.map(n=>({path:n.path,matches:n.matches.map(r=>({context:r.context,positions:r.positions})),url:n.url||"",repository:{id:n.repository.nameWithOwner,name:n.repository.nameWithOwner,url:n.repository.url},lastModifiedAt:n.lastModifiedAt})),totalCount:e.total_count,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...oi(e.pagination)},repositoryContext:e._researchContext?.repositoryContext,nonExistentScope:e.nonExistentScope,incompleteResults:e.incompleteResults}}function UT(e){let t=e.repositories.map(n=>({id:`${n.owner}/${n.repo}`,name:n.repo,fullPath:`${n.owner}/${n.repo}`,description:n.description||null,url:n.url,cloneUrl:`https://github.com/${n.owner}/${n.repo}.git`,defaultBranch:n.defaultBranch||"main",stars:n.stars||0,forks:n.forksCount||0,visibility:n.visibility||"public",topics:n.topics||[],createdAt:n.createdAt,updatedAt:n.updatedAt,lastActivityAt:n.pushedAt||n.updatedAt,openIssuesCount:n.openIssuesCount,language:n.language}));return{repositories:t,totalCount:e.pagination?.totalMatches||t.length,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...oi(e.pagination)},nonExistentScope:e.nonExistentScope}}async function pg(e,t,n=Fe){let{owner:r,repo:o}=n(e.projectId),i=r||e.owner,s={keywords:e.keywords,owner:i,repo:o,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning},a=await ph(s,t);return Rt(a)?on(a):a.data?{data:QT(a.data),status:200,provider:"github",rawResponseChars:a.rawResponseChars??B(a.data)}:{error:"No data returned from GitHub API",status:500,provider:"github"}}async function dg(e,t){let n={keywords:e.keywords,topicsToSearch:e.topics,owner:e.owner,stars:e.stars??(e.minStars?`>=${e.minStars}`:void 0),size:e.size,created:e.created,updated:e.updated,language:e.language,match:e.match,archived:e.archived,visibility:e.visibility,forks:e.forks,license:e.license,goodFirstIssues:e.goodFirstIssues,sort:e.sort==="best-match"?void 0:e.sort,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning},r=await tg(n,t);return"error"in r?ta(r)??{error:"Unknown GitHub API error",status:500,provider:"github"}:!("data"in r)||!r.data?{error:"No data returned from GitHub API",status:500,provider:"github"}:{data:UT(r.data),status:200,provider:"github",rawResponseChars:r.rawResponseChars??B(r.data)}}function WT(e,t){return{path:e.path||t.path,content:e.content||"",encoding:"utf-8",size:e.content?.length||0,totalLines:e.totalLines,sourceChars:e.sourceChars,contentView:e.contentView,ref:e.branch||t.ref||"",lastModified:e.lastModified,lastModifiedBy:e.lastModifiedBy,pagination:e.pagination,isPartial:e.isPartial,startLine:e.startLine,endLine:e.endLine,matchRanges:e.matchRanges,matchedLines:e.matchedLines,warnings:VT(e,t),matchNotFound:e.matchNotFound,searchedFor:e.searchedFor}}function VT(e,t){if(e.matchNotFound===!0){let n=e;if(Array.isArray(n.hints)&&n.hints.length>0){let a=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"";return n.hints.map(c=>c.replace(" in file",` in file${a}`))}let r=e.searchedFor??t.matchString??"",o=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"",s=t.matchStringIsRegex===!0?"Try a different pattern, widen the anchor, or use fullContent=true to inspect the file.":"Try matchStringIsRegex=true for pattern matching, a different anchor, or fullContent=true.";return[`No matches for "${r}" in file${o}. ${s}`]}return e.warnings??e.matchLocations}async function mg(e,t,n=Fe){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for file content",status:400,provider:"github"};let i={owner:r,repo:o,path:e.path,type:"file",branch:e.ref,startLine:e.startLine,endLine:e.endLine,matchString:e.matchString,contextLines:e.contextLines??5,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,charOffset:e.charOffset,charLength:e.charLength,fullContent:e.fullContent,forceRefresh:e.forceRefresh,minify:e.minify??"standard",goal:e.goal,reasoning:e.reasoning},s=await Qh(i,t);if(Rt(s))return on(s);if(!s.data)return{error:"No data returned from GitHub API",status:500,provider:"github"};let a=s.data.hints;return{data:WT(s.data,e),status:200,provider:"github",rawResponseChars:s.rawResponseChars??B(s.data),...a?.length?{hints:a}:{}}}function XT(e,t,n=Fe){let r=(e.pullRequests||[]).map(a=>({number:a.number,title:a.title,body:a.body||null,...a.bodyPagination&&{bodyPagination:a.bodyPagination},state:a.merged?"merged":a.state,draft:a.draft||!1,author:a.author,assignees:a.assignees?.map(c=>typeof c=="string"?c:String(c.login??""))||[],labels:a.labels?.map(c=>typeof c=="string"?c:c.name??"")||[],sourceBranch:a.headRef||"",targetBranch:a.baseRef||"",sourceSha:a.headSha,targetSha:a.baseSha,createdAt:a.createdAt,updatedAt:a.updatedAt,closedAt:a.closedAt,mergedAt:a.mergedAt,commentsCount:a.comments,changedFilesCount:a.changedFiles,additions:a.additions,deletions:a.deletions,comments:a.commentDetails?.map(c=>({id:c.id,author:c.user,body:c.body,...c.bodyPagination&&{bodyPagination:c.bodyPagination},createdAt:c.createdAt,updatedAt:c.updatedAt,...c.commentType&&{commentType:c.commentType},...c.path&&{path:c.path},...c.line!==void 0&&{line:c.line},...c.inReplyToId!=null&&{inReplyToId:c.inReplyToId}})),reviews:a.reviews?.map(c=>({id:c.id,user:c.user,state:c.state,body:c.body,submittedAt:c.submittedAt,commitId:c.commitId})),commits:a.commitDetails?.map(c=>({sha:c.sha,message:c.message,author:c.author,date:c.date})),fileChanges:a.fileChanges?.map(c=>({path:c.filename,status:c.status,additions:c.additions,deletions:c.deletions,patch:c.patch})),...Array.isArray(a.sanitizationWarnings)&&a.sanitizationWarnings.length>0?{sanitizationWarnings:a.sanitizationWarnings}:{}})),{owner:o,repo:i}=t.projectId?n(t.projectId):{owner:void 0,repo:void 0},s=o||t.owner;return{items:r,totalCount:e.totalCount||r.length,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...oi(e.pagination)},...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},repositoryContext:s&&i?{owner:s,repo:i}:void 0}}function YT(e,t,n){return{owner:t,repo:n,query:e.query,prNumber:e.number,state:e.state==="merged"?"closed":e.state==="all"?void 0:e.state,merged:e.state==="merged"?!0:void 0,draft:e.draft,author:e.author,assignee:e.assignee,commenter:e.commenter,mentions:e.mentions,"reviewed-by":e.reviewedBy,"review-requested":e.reviewRequested,label:e.labels,base:e.baseBranch,head:e.headBranch,created:e.created,updated:e.updated,closed:e.closed,"merged-at":e.mergedAt,comments:e.comments,reactions:e.reactions,match:e.match,checks:e.checks,review:e.review,archived:e.archived,content:e.content,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,sort:e.sort,order:e.order,limit:e.limit,page:e.page,charOffset:e.charOffset,charLength:e.charLength}}async function fg(e,t,n=Fe){let{owner:r,repo:o}=e.projectId?n(e.projectId):{owner:void 0,repo:void 0},i=r||e.owner,s=YT(e,i,o),a=await Zh(s,t);return a.error?on({error:typeof a.error=="string"?a.error:String(a.error),status:a.status||500,hints:a.hints,rateLimitRemaining:a.rateLimitRemaining,rateLimitReset:a.rateLimitReset,retryAfter:a.retryAfter}):{data:XT(a,e,n),status:200,provider:"github",rawResponseChars:a.rawResponseChars??B(a)}}async function qT(e,t,n){try{let o=await(await $(n)).rest.repos.listLanguages({owner:e,repo:t}),i=Object.entries(o.data).sort((s,a)=>a[1]-s[1]);return i.length===0?void 0:{languages:Object.fromEntries(i),dominantLanguage:i[0][0]}}catch{return}}async function JT(e,t,n){try{let i=(await(await $(n)).rest.repos.listContributors({owner:e,repo:t,per_page:30})).data.filter(s=>typeof s.login=="string").map(s=>({login:s.login,contributions:s.contributions??0}));return i.length>0?{contributors:i}:void 0}catch{return}}async function eE(e,t,n){try{let i=(await(await $(n)).rest.repos.listBranches({owner:e,repo:t,per_page:100})).data.map(s=>s.name).filter(s=>typeof s=="string");return i.length>0?{branches:i}:void 0}catch{return}}async function tE(e,t,n){try{let i=(await(await $(n)).rest.repos.listTags({owner:e,repo:t,per_page:50})).data.filter(s=>typeof s.name=="string").map(s=>({name:s.name,sha:s.commit?.sha??""}));return i.length>0?{tags:i}:void 0}catch{return}}function nE(e){return{projectPath:`${e.owner}/${e.repo}`,branch:e.branch||"",...e.defaultBranch!==void 0&&{defaultBranch:e.defaultBranch},path:e.path||"/",structure:e.structure||{},...e.fileSizeMap!==void 0&&{fileSizeMap:e.fileSizeMap},summary:{totalFiles:e.summary?.totalFiles||0,totalFolders:e.summary?.totalFolders||0,truncated:e.summary?.truncated||!1},pagination:e.pagination,hints:e.hints}}async function hg(e,t,n=Fe){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for repository structure",status:400,provider:"github"};let i={owner:r,repo:o,branch:e.ref||"HEAD",path:e.path,maxDepth:e.depth,itemsPerPage:e.itemsPerPage,page:e.page,includeSizes:e.includeSizes,goal:e.goal,reasoning:e.reasoning},[s,a,c,l,u]=await Promise.all([bu(i,t),e.includeLanguages?qT(r,o,t):Promise.resolve(void 0),e.includeContributors?JT(r,o,t):Promise.resolve(void 0),e.includeBranches?eE(r,o,t):Promise.resolve(void 0),e.includeTags?tE(r,o,t):Promise.resolve(void 0)]);return"error"in s?ta(s)??{error:"Unknown GitHub API error",status:500,provider:"github"}:{data:{...nE(s),...a?{languages:a.languages,dominantLanguage:a.dominantLanguage}:{},...c?{contributors:c.contributors}:{},...l?{branches:l.branches}:{},...u?{tags:u.tags}:{}},status:200,provider:"github",rawResponseChars:s.rawResponseChars??B(s)}}var na=class{type="github";capabilities=ug.github;authInfo;constructor(t){t?.authInfo?this.authInfo=t.authInfo:t?.token&&(this.authInfo={token:t.token})}async searchCode(t){try{return await pg(t,this.authInfo,Fe)}catch(n){return this.handleError(n)}}async getFileContent(t){try{return await mg(t,this.authInfo,Fe)}catch(n){return this.handleError(n)}}async searchRepos(t){try{return await dg(t,this.authInfo)}catch(n){return this.handleError(n)}}async searchPullRequests(t){try{return await fg(t,this.authInfo,Fe)}catch(n){return this.handleError(n)}}async getRepoStructure(t){try{return await hg(t,this.authInfo,Fe)}catch(n){return this.handleError(n)}}async resolveDefaultBranch(t){let{owner:n,repo:r}=Fe(t);if(!n||!r)throw new Error(`Cannot resolve default branch: invalid projectId '${t}'.`);return Be(n,r,this.authInfo)}handleError(t){let n=J(t);return on(n)}};import{createHash as oE}from"crypto";var iE=3600*1e3,gg=20,vt=new Map;function yg(e){return Date.now()-e.createdAt<iE}function sE(e=0){for(let[n,r]of vt.entries())yg(r)||vt.delete(n);let t=Math.max(0,gg-e);if(vt.size>t){let n=[...vt.entries()].sort((o,i)=>o[1].lastAccessedAt-i[1].lastAccessedAt),r=vt.size-t;for(let o=0;o<r&&o<n.length;o++){let i=n[o];i&&vt.delete(i[0])}}}function aE(e){return e?oE("sha256").update(e).digest("hex").slice(0,16):"default"}function cE(e){if(e==="default")return e;try{let t=new URL(e),n=`${t.protocol}//${t.hostname.toLowerCase()}`;return t.port&&(n+=`:${t.port}`),n+=t.pathname.replace(/\/+$/,"")||"",n}catch{return e.replace(/\/+$/,"")}}function lE(e,t){let n=cE(t?.baseUrl||"default"),r=aE(t?.token||t?.authInfo?.token);return`${e}:${n}:${r}`}function Su(e="github",t){if(e!=="github")throw new Error(`Unknown provider type: '${e}'. Only 'github' is supported.`);let n=lE(e,t),r=vt.get(n);if(r&&yg(r))return r.lastAccessedAt=Date.now(),r.provider;r&&vt.delete(n),vt.size>=gg&&sE(1);let o=new na({...t,type:e}),i=Date.now();return vt.set(n,{provider:o,createdAt:i,lastAccessedAt:i}),o}function EQ(){vt.clear()}async function bg(){try{return Su("github"),[{provider:"github",ok:!0}]}catch(e){let t=e instanceof Error?e.message:String(e);return process.stderr.write(`\u26A0\uFE0F github provider failed to initialize: ${t}
37
+ `),[{provider:"github",ok:!1,error:t}]}}import{ContentSanitizer as uE}from"@octocodeai/octocode-engine/contentSanitizer";import{getConfigSync as pE}from"@octocodeai/config";function dE(){try{return pE().output.format}catch{return"yaml"}}function IQ(e){if(e==null||typeof e!="object")return{content:[{type:"text",text:`error: "Invalid result options"
38
+ `}],isError:!0};let{data:t,instructions:n,isError:r}=e;return{content:[{type:"text",text:Qr({data:t,instructions:n})}],isError:!!r}}function sn(e){if(e==null)return e;if(typeof e=="string")return uE.sanitizeContent(e).content;if(Array.isArray(e))return e.map(t=>sn(t));if(typeof e=="object"){let t={};for(let[n,r]of Object.entries(e))n!=="warnings"&&(t[n]=sn(r));return t}return e}function OQ(e,t){if(t==="json")return JSON.stringify(e);let n=Array.isArray(e.content)?e.content.map(r=>"text"in r&&typeof r.text=="string"?r.text:"").filter(r=>r.length>0):[];return n.length>0?n.join(`
27
39
 
28
- `):e.structuredContent!==void 0?JSON.stringify(e.structuredContent,null,2):JSON.stringify(e,null,2)}function Nt(e,t){let n=Jt(e)??{},r=Ve(n),o=eC(),i="results"in r?["results","id","status","data"]:["instructions","status","data"];return o==="json"?JSON.stringify(Ai(r,t||i),null,2):O.jsonToYamlString(r,{keysPriority:t||i})}function Ai(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(o=>Ai(o,t));if(typeof e!="object")return e;let n=e,r={};for(let o of t)o in n&&(r[o]=Ai(n[o],t));for(let o of Object.keys(n))o in r||(r[o]=Ai(n[o],t));return r}var tC=new Set(["currentPage","totalPages","perPage","itemsPerPage","entriesPerPage","filesPerPage","totalMatches","totalFiles","totalEntries","totalItems","totalResults","totalReferences","reportedTotalMatches","reachableTotalMatches","totalMatchesKind","totalMatchesCapped","hasMore","nextPage","charOffset","charLength","totalChars","totalBytes","nextCharOffset"]),nC=["totalMatches","totalItems","totalFiles","totalEntries","totalResults","totalReferences","reportedTotalMatches","reachableTotalMatches"];function rC(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=e,n=Object.keys(t);return n.length===0||!n.every(r=>tC.has(r))||nC.some(r=>typeof t[r]=="number"&&t[r]>0)||t.hasMore!==!1?!1:typeof t.totalPages=="number"?t.totalPages<=1:"charOffset"in t||"nextCharOffset"in t?(t.charOffset??0)===0:!0}function Jt(e,t={}){if(e==null||Number.isNaN(e))return;let{inFilesObject:n=!1,depth:r=0}=t;if(Array.isArray(e)){let o=e.map(s=>Jt(s,{inFilesObject:n,depth:r+1})).filter(s=>s!==void 0),i=n&&r>=2;return o.length>0||i?o:void 0}if(typeof e=="object"&&e!==null){let o={},i=!1;for(let[s,a]of Object.entries(e)){if(s==="results"&&r===0&&Array.isArray(a)&&a.length===0){o[s]=[],i=!0;continue}if(s==="warnings"||rC(a))continue;let c=(s==="files"||s==="repositories")&&!n,u=Jt(a,{inFilesObject:n||c,depth:c?0:r+1});u!==void 0&&(o[s]=u,i=!0)}return i?o:void 0}return e}import{z as ki}from"zod";function _(e,t){return ki.preprocess(n=>typeof n=="number"&&Number.isFinite(n)?Math.min(Math.max(n,e),t):n,ki.number().int().min(e).max(t))}var K=_(1,1e3).optional().default(1),In=_(0,100).optional(),On=_(1,1e9).optional(),oC={responseCharOffset:_(0,1e8).optional().describe("Full-response char offset; re-call with returned value when hasMore."),responseCharLength:_(1,5e4).optional().describe("Full-response char window.")};function Y(e,t={}){let{maxQueries:n=5}=t;return ki.object({queries:ki.array(e).min(1).max(n).describe("Parallel queries."),...oC}).superRefine((r,o)=>{let i=new Set;r.queries.forEach((s,a)=>{s&&typeof s=="object"&&"id"in s&&typeof s.id=="string"&&(i.has(s.id)&&o.addIssue({code:"custom",message:`Duplicate query id "${s.id}" at index ${a}`,path:["queries",a,"id"]}),i.add(s.id))})})}import{z as ie}from"zod";import{z as j}from"zod";var iC=j.object({currentPage:j.number(),totalPages:j.number(),hasMore:j.boolean(),nextPage:j.number().optional(),pageSize:j.number().optional(),totalItems:j.number().optional(),perPage:j.number().optional(),totalFound:j.number().optional(),returned:j.number().optional(),totalMatches:j.number().optional(),reportedTotalMatches:j.number().optional().describe("Provider-reported raw total (e.g. GitHub's match count) \u2014 may exceed what pagination can actually reach."),reachableTotalMatches:j.number().optional().describe("Matches reachable by walking pages (bounded by the provider's result window, e.g. GitHub caps at 1000); totalPages is computed from this, not from reportedTotalMatches."),totalMatchesKind:j.enum(["exact","reported","lowerBound"]).optional(),totalMatchesCapped:j.boolean().optional(),totalResults:j.number().optional(),itemsPerPage:j.number().optional()}),Z0=j.object({charOffset:j.number(),charLength:j.number(),totalChars:j.number(),hasMore:j.boolean(),nextCharOffset:j.number().optional(),currentPage:j.number().optional(),totalPages:j.number().optional(),chunkMode:j.enum(["semantic","char-limit"]).optional()}),Ja=j.object({tool:j.string(),query:j.record(j.string(),j.unknown()),why:j.string().optional(),confidence:j.enum(["exact","high","medium","low"]).optional()}),eD=iC.extend({filesPerPage:j.number().optional(),entriesPerPage:j.number().optional(),matchesPerPage:j.number().optional(),totalFiles:j.number().optional(),totalEntries:j.number().optional(),totalMatches:j.number().optional(),totalFilesFound:j.number().optional(),nextMatchPage:j.number().optional()}),sC=["id","mainResearchGoal","researchGoal","reasoning"];function aC(e){let t;for(let n of sC)n in e&&(t??={...e},delete t[n]);return t??e}function Fn(e,t,n="Continue to the next page of results."){return{tool:e,query:aC(t),why:n,confidence:"exact"}}function _i(e,t,n,r){if(!n||!n.hasMore||n.nextCharOffset===void 0)return;let o=r?.includeCharLength!==!1;return{continueChars:{tool:e,query:{...t,charOffset:n.nextCharOffset,...o&&n.charLength!==void 0?{charLength:n.charLength}:{}}}}}var cC=ie.object({currentPage:ie.number(),totalPages:ie.number(),hasMore:ie.boolean(),charOffset:ie.number(),charLength:ie.number(),totalChars:ie.number(),nextCharOffset:ie.number().optional()}).optional(),Ed={base:ie.string().optional(),shared:ie.record(ie.string(),ie.union([ie.string(),ie.number(),ie.boolean()])).optional(),responsePagination:cC,next:ie.record(ie.string(),Ja).optional()};function oD(e){return e.extend(Ed)}function uC(e){return ie.object({id:ie.string(),status:ie.enum(["empty","error"]).optional(),data:e,next:ie.record(ie.string(),Ja).optional()})}var iD=uC(ie.record(ie.string(),ie.unknown()).optional()),sD=Ed;function lC(e){return typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&("type"in e||"status"in e||"scopesSuggestion"in e)}function F(e,t,n={}){let{extra:r}=n,o={status:"error"};if(lC(e))o.error=e;else if(Es(e))o.error=e.message,o.errorCode=e.errorCode;else if(typeof e=="string")o.error=e;else if(e instanceof Error){let i=el(e);o.error=i.message,o.errorCode=i.errorCode}else o.error="Unknown error occurred";if(n.toolName&&(o.toolName=n.toolName),r){let{hints:i,...s}=r;Object.assign(o,s)}return n.rawResponse===void 0?o:$(o,n.rawResponse)}function ke(e,t,n={}){let r=e.safeParse(t);if(r.success)return{ok:!0,data:r.data};let o=r.error.issues.map(s=>s.message).join("; "),i=n.prefix===!1?o:`Validation error: ${o}`;return{ok:!1,error:F(i,t,{toolName:n.toolName})}}async function mD(e,t,n){if(e)try{await e(t,n)}catch{return}}function se(e,t,n,r,o){let i=n?void 0:"empty",s={...i!==void 0?{status:i}:{},...t};return o?.rawResponse===void 0?s:$(s,o.rawResponse)}function Ii(e,t){let n={error:e.error||"Provider error",type:"http",status:e.status,rateLimitRemaining:e.rateLimit?.remaining,rateLimitReset:e.rateLimit?.reset?e.rateLimit.reset*1e3:void 0,retryAfter:e.rateLimit?.retryAfter};return F(n,t,{rawResponse:e.rawResponseChars??e.data??(e.error?e:void 0)})}function be(e,t,n,r){let o=e instanceof Error?e.message:"Unknown error occurred",i=n?`${n}: ${o}`:o;return F(i,t,{toolName:r})}async function Fe({toolName:e,query:t,execute:n,contextMessage:r}){try{return await n()}catch(o){return be(o,t,r,e)}}import{existsSync as mC,mkdirSync as tc,renameSync as fC,rmSync as hC}from"fs";import{join as Ur}from"path";import{createHash as gC}from"crypto";var yD=["NODE_OPTIONS","GITHUB_TOKEN","GH_TOKEN","OCTOCODE_TOKEN","GITHUB_PERSONAL_ACCESS_TOKEN","NPM_TOKEN","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN"],Br=["PATH","TMPDIR","TMP","TEMP","SYSTEMROOT","WINDIR","COMSPEC","PATHEXT"],vn=[...Br,"HOME","USERPROFILE","APPDATA","LOCALAPPDATA"],Ld=["HTTP_PROXY","HTTPS_PROXY","NO_PROXY","http_proxy","https_proxy","no_proxy"];function Oi(e={},t=Br){let n={};for(let o of t){let i=process.env[o];i!==void 0&&(n[o]=i)}let r=new Set(t);for(let[o,i]of Object.entries(e))r.has(o)&&(i===void 0?delete n[o]:n[o]=i);return n}import{spawn as Za}from"child_process";var pC=10*1024*1024,ec=5e3;function Zt(e,t,n={}){let{timeout:r=3e4,cwd:o,env:i={},allowEnvVars:s=Br,maxOutputSize:a=pC}=n;return new Promise(c=>{let u={killed:!1,stdoutChunks:[],stderrChunks:[],totalOutputSize:0},l=()=>u.stdoutChunks.join(""),p=()=>u.stderrChunks.join(""),m={cwd:o,env:Oi(i,s),stdio:["ignore","pipe","pipe"]},d;try{d=Za(e,t,m)}catch(y){c({stdout:"",stderr:"",exitCode:null,success:!1,error:y instanceof Error?y:new Error(`Failed to spawn command '${e}'`)});return}let f,g=setTimeout(()=>{if(!u.killed){u.killed=!0;try{d.kill("SIGTERM")}catch{}f=setTimeout(()=>{try{d.kill("SIGKILL")}catch{}},ec),c({stdout:l(),stderr:p(),exitCode:null,success:!1,error:new Error(`Command timeout after ${r}ms`),timedOut:!0})}},r),R=()=>{clearTimeout(g),f!==void 0&&(clearTimeout(f),f=void 0)},h=()=>{if(u.totalOutputSize>a){if(!u.killed){u.killed=!0;try{d.kill("SIGKILL")}catch{}R(),c({stdout:l(),stderr:p(),exitCode:null,success:!1,error:new Error("Output size limit exceeded"),outputLimitExceeded:!0})}return!0}return!1};d.stdout?.on("data",y=>{if(u.killed)return;let S=y.toString();u.totalOutputSize+=Buffer.byteLength(S),!h()&&u.stdoutChunks.push(S)}),d.stderr?.on("data",y=>{if(u.killed)return;let S=y.toString();u.totalOutputSize+=Buffer.byteLength(S),!h()&&u.stderrChunks.push(S)}),d.on("close",y=>{u.killed||(R(),c({stdout:l(),stderr:p(),exitCode:y,success:y===0}))}),d.on("error",y=>{u.killed||(u.killed=!0,R(),c({stdout:l(),stderr:p(),exitCode:null,success:!1,error:y}))})})}function Ad(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,{allowEnvVars:s=Br}=r,a;try{a=Za(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:Oi({},s)})}catch{o(!1);return}let c,u=()=>{clearTimeout(l),c!==void 0&&(clearTimeout(c),c=void 0)},l=setTimeout(()=>{if(!i){i=!0;try{a.kill("SIGTERM")}catch{}c=setTimeout(()=>{try{a.kill("SIGKILL")}catch{}},ec),o(!1)}},n);a.on("close",p=>{u(),i||o(p===0)}),a.on("error",()=>{u(),i||o(!1)})})}var dC=1*1024*1024;function PD(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,s=[],a=0,{allowEnvVars:c=vn,maxOutputSize:u=dC}=r,l;try{l=Za(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:Oi({},c)})}catch{o(null);return}let p,m=()=>{clearTimeout(d),p!==void 0&&(clearTimeout(p),p=void 0)};l.stdout?.on("data",f=>{if(i)return;let g=f.toString();if(a+=Buffer.byteLength(g),a>u){if(!i){i=!0;try{l.kill("SIGKILL")}catch{}m(),o(null)}return}s.push(g)}),l.stderr?.on("data",()=>{});let d=setTimeout(()=>{if(!i){i=!0;try{l.kill("SIGTERM")}catch{}p=setTimeout(()=>{try{l.kill("SIGKILL")}catch{}},ec),o(null)}},n);l.on("close",f=>{if(m(),!i)if(f===0){let g=s.join("").trim();o(g||null)}else o(null)}),l.on("error",()=>{m(),i||o(null)})})}function Fi(e,t=1e3){for(let n of e){if(n.includes("\0"))return{valid:!1,error:"Null bytes not allowed in arguments"};if(n.length>t)return{valid:!1,error:"Argument too long"}}return{valid:!0}}var kd=120*1e3,yC=30*1e3,RC=300*1e3,SC=100,_d="clone-locks",bC="clone-tmp",Id=[...vn,"GIT_TERMINAL_PROMPT"];async function Od(e,t,n){let r=e.owner,o=e.repo,{sparsePath:i,forceRefresh:s}=e;await kC();let a=e.branch??await Ae(r,o,t),c=zt(),u=ha(c,r,o,a,i);return CC(c,u,async()=>{let l=En(u);if(!s&&l.hit&&l.meta.source==="clone")return{localPath:u,cached:!0,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}};pi(c),vt(u);let p=AC(t,n),m=PC(c,u);di(m);try{if(i){if(await LC(r,o,a,m,i,p),!mC(Ur(m,i)))throw new Error(`sparsePath "${i}" does not exist in ${r}/${o}@${a} \u2014 nothing was checked out for it. Verify the path with ghViewRepoStructure, then retry with the correct sparsePath (or omit it for a full clone).`)}else await EC(r,o,a,m,p);let d=Ln(r,o,a,"clone",i);return Tn(m,d),wC(m,u),{localPath:u,cached:!1,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}}}catch(d){throw di(m),d}})}async function CC(e,t,n){vt(t);let r=xC(e,t);tc(Ur(e,"tmp",_d),{recursive:!0,mode:448});let o=Date.now();for(;;)try{tc(r,{mode:448});break}catch(i){if(i.code!=="EEXIST")throw i;if(Date.now()-o>RC)throw new Error(`Timed out waiting for clone cache lock '${r}'.`);await TC(SC)}try{return await n()}finally{hC(r,{recursive:!0,force:!0})}}function Fd(e){return gC("sha256").update(e).digest("hex").slice(0,16)}function xC(e,t){return Ur(e,"tmp",_d,Fd(t))}function PC(e,t){let n=`${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`,r=Ur(e,"tmp",bC);return tc(r,{recursive:!0,mode:448}),Ur(r,`${Fd(t)}-${n}`)}function wC(e,t){di(t),vt(t),fC(e,t)}function TC(e){return new Promise(t=>setTimeout(t,e))}async function EC(e,t,n,r,o){let i=Dd(o);i.push("clone","--depth","1","--single-branch","--branch",n,"--",vd(e,t),r),await nc(i,kd,`full clone of ${e}/${t}`,o)}async function LC(e,t,n,r,o,i){let s=Dd(i);s.push("clone","--filter","blob:none","--sparse","--depth","1","--single-branch","--branch",n,"--",vd(e,t),r),await nc(s,kd,`sparse clone of ${e}/${t}`,i),await nc(["-C",r,"sparse-checkout","set","--skip-checks","--",o],yC,`sparse-checkout set ${o}`,void 0)}function vd(e,t){return`https://github.com/${e}/${t}.git`}function Dd(e){return e?["-c",`http.extraHeader=Authorization: Bearer ${e}`]:[]}function AC(e,t){return e?.token&&typeof e.token=="string"?e.token:t}async function kC(){try{if(!(await Zt("git",["--version"],{timeout:5e3,maxOutputSize:1024,allowEnvVars:Id,env:{GIT_TERMINAL_PROMPT:"0"}})).success)throw new Error("git --version returned non-zero")}catch{throw new Error("git is not installed or not on PATH. The ghCloneRepo tool requires git to be available.")}}function _C(e,t){let n=e;return t&&(n=n.replaceAll(t,"[REDACTED]")),n=n.replace(/Authorization:\s*Bearer\s+\S+/gi,"Authorization: Bearer [REDACTED]"),n=n.replace(/Authorization:\s*token\s+\S+/gi,"Authorization: token [REDACTED]"),n}async function nc(e,t,n,r){let o=await Zt("git",e,{timeout:t,maxOutputSize:5242880,allowEnvVars:Id,env:{GIT_TERMINAL_PROMPT:"0"}});if(!o.success){let i=_C(o.stderr?.trim()||"",r),s=i?`: ${i}`:"";throw new Error(`git ${n} failed${s}`)}}import{existsSync as IC,readdirSync as OC,lstatSync as FC}from"node:fs";import{join as vC}from"node:path";function Md(e){if(!IC(e))return 0;let t;try{t=OC(e)}catch{return 0}let n=0;for(let r of t){if(r===".git")continue;let o=vC(e,r);try{let i=FC(o);if(i.isSymbolicLink())continue;i.isDirectory()?n+=hr(o):i.isFile()&&(n+=i.size)}catch{}}return n}async function Nd(e,t={}){if(!Array.isArray(e))throw new Error(tr.PROMISES_NOT_ARRAY.message);if(e.length===0)return[];let{timeout:n=3e4,concurrency:r=e.length,onError:o}=t;if(n<=0)throw new Error(tr.TIMEOUT_NOT_POSITIVE.message);if(r<=0)throw new Error(tr.CONCURRENCY_NOT_POSITIVE.message);let i=e.map((c,u)=>typeof c=="function"?c:()=>Promise.reject(new Error(rr.NOT_A_FUNCTION.message(u))));if(r<i.length)return DC(i,r,n,o);let s=i.map((c,u)=>Gd(c,u,n,o));return(await Promise.allSettled(s)).map((c,u)=>c.status==="fulfilled"?c.value:{success:!1,error:c.reason instanceof Error?c.reason:new Error(String(c.reason)),index:u})}async function Gd(e,t,n,r){let o,i=()=>{o!==void 0&&(clearTimeout(o),o=void 0)};try{let s=new Promise((c,u)=>{o=setTimeout(()=>{u(new Error(rr.TIMEOUT.message(t,n)))},n)}),a=await Promise.race([e(),s]);return i(),{success:!0,data:a,index:t}}catch(s){i();let a=s instanceof Error?s:new Error(String(s));if(r)try{r(a,t)}catch(c){}return{success:!1,error:a,index:t}}}async function DC(e,t,n,r){let o=new Array(e.length),i=0,s=async()=>{for(;i<e.length;){let c=i++,u=e[c];if(!u){o[c]={success:!1,error:new Error(rr.FUNCTION_UNDEFINED.message),index:c};continue}try{let l=await Gd(u,c,n,r);o[c]=l}catch(l){o[c]={success:!1,error:l instanceof Error?l:new Error(String(l)),index:c}}}},a=[];for(let c=0;c<Math.min(t,e.length);c++)a.push(s());return await Promise.all(a),o}var Hd=parseInt(process.env.OCTOCODE_BULK_QUERY_TIMEOUT_MS||"60000",10)||6e4,MC=parseInt(process.env.OCTOCODE_TOOL_TIMEOUT_MS||"60000",10)||6e4,NC=5e3;function Bd(e,t,n){if(e<=1)return Hd;let r=Math.min(Math.max(t,1),e),o=Math.ceil(e/r),i=Math.floor(MC/o),s=Math.max(NC,Math.min(i,Hd));return n?Math.max(s,n):s}async function Ud(e,t,n,r){let o=[],i=[];if(!e||e.length===0)return{results:o,errors:i};let s=e.map((c,u)=>()=>t(c,u).then(l=>({result:l,queryIndex:u,originalQuery:c})));return(await Nd(s,{timeout:Bd(e.length,n,r),continueOnError:!0,concurrency:n,onError:(c,u)=>{i.push({queryIndex:u,error:c.message})}})).forEach(c=>{if(c.success&&c.data){let u=c.data.result,l=u&&Object.keys(u).some(m=>m!=="status"&&m!=="error"&&m!=="data");if(u&&u.error===void 0&&(u.data===null||u.data===void 0)&&!l&&u.status!=="error"){i.push({queryIndex:c.data.queryIndex,error:"Query resolved without a payload (possible timeout or resource exhaustion) \u2014 retry this query alone, with tighter caps if it was large"});return}o.push({result:c.data.result,queryIndex:c.data.queryIndex,originalQuery:c.data.originalQuery})}else c.success&&i.push({queryIndex:c.index,error:"Query produced no result"})}),{results:o,errors:i}}function Qr(e,t){let r=e.id;return typeof r=="string"&&r.trim().length>0?r:typeof r=="number"&&Number.isFinite(r)?String(r):`q${t+1}`}function $r(e){let t=new Set;return e.map((n,r)=>{let o=Qr(n,r);if(t.has(o)){let i=2;for(;t.has(`${o}#${i}`);)i+=1;o=`${o}#${i}`}return t.add(o),o})}import Qd from"node:path";import{fileURLToPath as GC}from"node:url";function HC(e){if(e.length===0)return"";let t=e[0]??"";for(let r=1;r<e.length;r++){let o=e[r]??"",i=0,s=Math.min(t.length,o.length);for(;i<s&&t[i]===o[i];)i++;if(t=t.slice(0,i),t==="")break}let n=t.lastIndexOf("/");return n>0?t.slice(0,n):""}var $d=["path","uri","absolutePath"],jd=new Set(["next","location"]);function rc(e,t,n){if(n>8||!e||typeof e!="object")return;if(Array.isArray(e)){for(let i of e)rc(i,t,n+1);return}let r=e,o=BC(r);o&&t.push({obj:r,abs:o});for(let[i,s]of Object.entries(r))jd.has(i)||s&&typeof s=="object"&&rc(s,t,n+1)}function BC(e){let t=e.absolutePath;if(typeof t=="string"&&Qd.isAbsolute(t))return t;let n=e.uri;if(typeof n=="string"&&n.startsWith("file://"))try{return GC(n)}catch{return}let r=e.path;if(typeof r=="string"&&Qd.isAbsolute(r))return r}function Dn(e){let t=[];for(let i of e)rc(i?.data,t,0);if(t.length===0)return;let n=HC(t.map(i=>i.abs));if(n.length<=1)return;let r=n+"/",o=r.length;for(let{obj:i,abs:s}of t)s.startsWith(r)&&(i.path=s.slice(o),delete i.absolutePath,delete i.uri);return UC(e,r),n}function UC(e,t){function n(r,o){if(o>8||!r||typeof r!="object")return;if(Array.isArray(r)){for(let s=0;s<r.length;s++){let a=r[s];if(typeof a=="string"){let c="file://"+t;a.includes(c)?r[s]=a.replaceAll(c,""):a.includes(t)&&(r[s]=a.replaceAll(t,""))}else n(a,o+1)}return}let i=r;for(let s of Object.keys(i)){if(jd.has(s))continue;let a=i[s];typeof a=="string"?!$d.includes(s)&&a.includes(t)&&(i[s]=a.replaceAll(t,"")):n(a,o+1)}}for(let r of e)n(r?.data,0)}function QC(e){let t=[];for(let n of e){let r=n?.data;if(!(!r||typeof r!="object")){for(let o of Object.values(r))if(Array.isArray(o))for(let i of o)i&&typeof i=="object"&&!Array.isArray(i)&&t.push(i)}}return t}function $C(e){return typeof e=="string"&&e!==""||typeof e=="number"||typeof e=="boolean"}var jC=new Set([...$d,"owner","repo","name","id","type","kind","reason"]);function Mn(e){let t=QC(e);if(t.length<2)return;let n=t[0],r;for(let i of Object.keys(n)){if(jC.has(i))continue;let s=n[i];$C(s)&&t.every(a=>a[i]===s)&&((r??={})[i]=s)}if(!r)return;let o=Object.keys(r);for(let i of t)for(let s of o)delete i[s];return r}function oc(e,t,n){let r=Math.min(t+n,e.length);if(r>=e.length)return e.length;let o=Math.max(1,Math.floor(n/2)),i=[e.lastIndexOf(`
29
- `,r-1)+1,e.lastIndexOf("\\n",r-1)+2].filter(a=>a>t&&a<=r),s=Math.max(...i,-1);return s-t>=o?s:r}function zC(e,t,n){let r=1,o=0;for(;o<t&&o<e.length;){let i=oc(e,o,n);if(i<=o)break;o=i,r+=1}return o===t?r:Math.floor(t/n)+1}function WC(e,t){if(e.length===0)return 1;let n=0,r=0;for(;r<e.length;){let o=oc(e,r,t);if(o<=r)return Math.max(1,Math.ceil(e.length/t));r=o,n+=1}return Math.max(1,n)}function ic(e,t){let n=t?.responseCharLength,r=t?.responseCharOffset??0;if(n===void 0)return{text:e};let o=e.length,i=Math.max(1,n),s=Math.min(Math.max(0,r),o),a=oc(e,s,i),c=a<o,u=zC(e,s,i),l=WC(e,i),p=e.slice(s,a);return{text:`${c?`# Response page ${u}/${l}. Next: responseCharOffset=${a}
30
- `:`# Response page ${u}/${l}.
31
- `}${p}`,pagination:{currentPage:u,totalPages:l,hasMore:c,charOffset:s,charLength:a-s,totalChars:o,...c?{nextCharOffset:a}:{}}}}function sc(e,t){return t?{...e,responsePagination:t}:e}var VC=3;async function te(e,t,n,r){let o=n.concurrency??VC,{results:i,errors:s}=await Ud(e,t,o,n.minQueryTimeoutMs);return KC(n,i,s,e,r)}function KC(e,t,n,r,o){let i=["results","base","shared"],s=["id","status","data"],a=[...new Set([...i,...s,...e.keysPriority||[]])],c=new Array(r.length),u=$r(r);t.forEach(R=>{let h=R.result.status;c[R.queryIndex]={id:u[R.queryIndex]??Qr(R.originalQuery,R.queryIndex),...h!==void 0?{status:h}:{},data:YC(R.result)}}),n.forEach(R=>{let h=r[R.queryIndex];h&&(c[R.queryIndex]={id:u[R.queryIndex]??Qr(h,R.queryIndex),status:"error",data:{error:R.error}})});let l=c.filter(R=>R!==void 0);if(e.finalize){let R=e.finalize({queries:r,results:l,config:e}),h=ic(R.text,o),y=sc(R.structuredContent,h.pagination);return zd(e.toolName,t,n,h.text.length),{content:[{type:"text",text:h.text}],structuredContent:y,isError:R.isError??(l.length>0&&l.every(C=>C.status==="error"))}}let p={results:l};if(Array.isArray(p.results)){let R=Dn(p.results);R&&(p.base=R);let h=Mn(p.results);h&&(p.shared=h)}let m=Nt(p,a),d=ic(m,o),f=sc(Ve(Jt(p)??{}),d.pagination);return zd(e.toolName,t,n,d.text.length),{content:[{type:"text",text:d.text}],structuredContent:f,isError:l.length>0&&l.every(R=>R.status==="error")}}function zd(e,t,n,r){let o=t.reduce((i,s)=>i+(ne(s.result)??N(s.result)),0)+n.reduce((i,s)=>i+N(s),0);try{ti(e,o,r)}catch{}}function YC(e){let t=new Set(["status","mainResearchGoal","researchGoal","reasoning","researchSuggestions","query"]);e.status!=="error"&&t.add("error");let n={};for(let[r,o]of Object.entries(e))t.has(r)||(n[r]=o);return n}function vi(e){return e.data!==void 0&&!e.error}function XC(e){return e.error!==void 0}import{maskSensitiveData as Wd}from"@octocodeai/octocode-engine/mask";var ac=class extends Error{providerType;constructor(t,n){super(n),this.name="ProviderInitializationError",this.providerType=t}};function qC(){return Vs().provider??Ws()}function JC(e){let t=Vs(),n=t.provider??Ws(),{baseUrl:r,token:o}=t;try{let i=qa(n,{type:n,baseUrl:r,token:o,authInfo:e});return{providerType:n,provider:i,capabilities:i.capabilities,baseUrl:r,token:o,authInfo:e}}catch(i){let s=i instanceof Error?i.message:"Unknown provider error",a=Wd(s);throw new ac(n,`Failed to initialize ${n} provider: ${a}`)}}function Be(e){let t;return()=>t??=JC(e)}function Di(e,t){return e.capabilities[t]}async function ft(e,t){let n=await t();return vi(n)?{ok:!0,response:n}:{ok:!1,result:Ii(n,e)}}async function Vd(e,t){let n=t??qC(),r=await Promise.all(e.map(async s=>{try{return{meta:s.meta,response:await s.operation()}}catch(a){let c=a instanceof Error?a.message:String(a);return{meta:s.meta,response:{error:Wd(c),status:500,provider:n}}}})),o=[],i=[];for(let s of r)vi(s.response)?o.push({meta:s.meta,response:s.response}):i.push({meta:s.meta,response:s.response});return{successes:o,failures:i}}async function Kd(e){let{queries:t,authInfo:n}=e,r=Be(n);return te(t,async(o,i)=>Fe({toolName:x.GITHUB_CLONE_REPO,query:o,contextMessage:`Clone failed for ${o.owner}/${o.repo}`,execute:async()=>{let s=r();if(!Di(s,"cloneRepo"))return be(new Error("ghCloneRepo is only available with the GitHub provider."),o,"Provider not supported",x.GITHUB_CLONE_REPO);let a;try{a=await Od(o,n,s.token)}catch(m){let d=m instanceof Error?m.message:String(m);return F(`Clone failed for ${o.owner}/${o.repo}: ${d}`,o)}let c=Md(a.localPath),u={kind:o.sparsePath?"tree":"repo",localPath:a.localPath,source:"clone",cached:a.cached,complete:!o.sparsePath,resolvedBranch:a.branch,...o.sparsePath?{requestedPath:o.sparsePath}:{}},l={viewStructure:{tool:"localViewStructure",query:{path:a.localPath},why:"Browse the cloned directory; once you know what to search for, call localSearchCode with real keywords against this localPath",confidence:"exact"}},p={owner:o.owner,repo:o.repo,totalSize:c,location:u,next:l};return se(o,p,!0,x.GITHUB_CLONE_REPO,{rawResponse:c})}}),{toolName:x.GITHUB_CLONE_REPO,keysPriority:["totalSize","location","error"]},e)}import{CloneRepoQuerySchema as tx}from"@octocodeai/octocode-core/schemas";import{z as Yd}from"zod";function ZC(e,t){return e?.description&&!t.description?t.describe(e.description):t}function Xd(e,t){let n={};for(let[r,o]of Object.entries(t))n[r]=ZC(e.shape[r],o);return n}function ex(e,t){let n=e;return n.safeExtend?n.safeExtend(t):e.extend(t)}function qd(e,t){if(!t?.length)return e;let n=new Set(t);return Yd.object(Object.fromEntries(Object.entries(e.shape).filter(([r])=>!n.has(r))))}function X(e,t={},n={}){let r=qd(e,n.omit),o=ex(r,Xd(r,t));return n.strict?o.strict():o}function Z(e,t={},n={}){let r=qd(e,n.omit),o=Yd.object({...r.shape,...Xd(r,t)});return n.strict?o.strict():o}var Nn=X(tx),jr=Y(Nn);import{z as nx}from"zod";import{FileContentQuerySchema as Jd}from"@octocodeai/octocode-core/schemas";var rx=nx.enum(["none","standard","symbols"]).optional(),Zd={startLine:On,endLine:On,contextLines:In,charOffset:_(0,1e8).optional(),charLength:_(1,5e4).optional(),minify:rx},ox=Z(Jd,Zd),en=X(Jd,Zd),zr=Y(ox);function Mi(e,t){return e&&t?`${e}/${t}`:void 0}function Ni(e){let t=e.lastIndexOf("/");return t<=0?{owner:"",repo:e}:{owner:e.substring(0,t),repo:e.substring(t+1)}}function Gi(e){return{...typeof e?.reportedTotalMatches=="number"?{reportedTotalMatches:e.reportedTotalMatches}:{},...typeof e?.reachableTotalMatches=="number"?{reachableTotalMatches:e.reachableTotalMatches}:{},...e?.totalMatchesKind?{totalMatchesKind:e.totalMatchesKind}:{},...typeof e?.totalMatchesCapped=="boolean"?{totalMatchesCapped:e.totalMatchesCapped}:{},...typeof e?.uniqueFileCount=="number"?{uniqueFileCount:e.uniqueFileCount}:{}}}function ix(e,t=500){if(t<=0)return"";let n=[...e];return n.length<=t?e:t<=3?".".repeat(t):n.slice(0,t-3).join("")+"..."}function em(e){return{keywords:e.keywords??[],projectId:Mi(e.owner,e.repo),owner:e.owner,path:e.path,filename:e.filename,extension:e.extension,language:e.language,match:e.match,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function tm(e,t){let n=t.match==="path",r=new Map;for(let i of e.items){let s=i.repository.name||"",{owner:a,repo:c}=Ni(s),u=`${a}/${c}`,l=r.get(u);if(l||(l={id:u,owner:a,repo:c,matches:[]},r.set(u,l)),n||!i.matches?.length){l.matches.push({path:i.path,...n?{}:{pathOnly:!0}});continue}let p=!1;for(let m of i.matches){if(!m.context)continue;let d=ix(m.context),f={path:i.path,value:d};if(m.positions?.length>0){let g=m.positions.filter(([,R])=>R<=d.length);g.length>0&&(f.matchIndices=g.map(([R,h])=>({start:R,end:h,lineOffset:(m.context??"").substring(0,R).split(`
32
- `).length-1})))}l.matches.push(f),p=!0}p||l.matches.push({path:i.path,pathOnly:!0})}let o={results:Array.from(r.values()),...e.nonExistentScope?{nonExistentScope:!0}:{},...e.incompleteResults?{incompleteResults:!0}:{}};return e.pagination&&e.pagination.totalPages>1&&(o.pagination={currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,totalMatches:e.pagination.totalMatches||0,...Gi(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}),o}function nm(e){let t=e;return{keywords:e.keywords,topics:e.topicsToSearch,owner:e.owner,stars:e.stars,updated:e.updated,language:e.language,archived:t.archived,visibility:t.visibility,license:t.license,match:e.match,sort:e.sort,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function rm(e){return e.map(t=>{let{owner:n,repo:r}=Ni(t.fullPath);return{owner:n||"",repo:r||t.name,defaultBranch:t.defaultBranch,stars:t.stars,description:t.description||"",url:t.url,createdAt:t.createdAt,updatedAt:t.updatedAt,pushedAt:t.lastActivityAt,visibility:t.visibility,topics:t.topics,forksCount:t.forks,openIssuesCount:t.openIssuesCount,...t.language&&{language:t.language}}})}function Hi(e){return e.startsWith('"')?e:/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}function om(e){let t=(e.keywordsToSearch??[]).filter(o=>o.trim()).map(Hi),n=e.query?.trim()??"",r=[...t,...n?[n]:[]].join(" ")||void 0;return{projectId:Mi(e.owner,e.repo),owner:e.owner,query:r,number:e.prNumber,state:e.state,author:e.author,assignee:e.assignee,commenter:e.commenter,mentions:e.mentions,reviewRequested:e["review-requested"],reviewedBy:e["reviewed-by"],labels:(()=>{let o=e.label;if(o)return Array.isArray(o)?o:[o]})(),baseBranch:e.base,headBranch:e.head,created:e.created,updated:e.updated,closed:e.closed,mergedAt:e["merged-at"],comments:e.comments,reactions:e.reactions,draft:e.draft,match:e.match,checks:e.checks,review:e.review,archived:e.archived,content:e.content,reviewMode:e.reviewMode,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,sort:e.sort,order:e.order,limit:e.limit??30,page:e.page,charOffset:e.charOffset,charLength:e.charLength,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function sx(e,t){let n=[];t.some(o=>o.state==="APPROVED")&&n.push("approval"),t.some(o=>o.state==="CHANGES_REQUESTED")&&n.push("changes-requested");let r=e.filter(o=>!qt(o.author??"")).map(o=>o.body.toLowerCase());return n.length===0&&r.some(o=>/\b(lgtm|looks good|approved|ship it)\b/.test(o))&&n.push("approval"),!n.includes("changes-requested")&&r.some(o=>/\b(change|fix|concern|blocker|blocking|request changes?)\b/.test(o))&&n.push("changes-requested"),r.some(o=>o.includes("?"))&&n.push("question"),n.length>0?n:["discussion"]}function ax(e,t){if(!e||e.length===0)return;let n=Array.from(new Set(e.map(i=>i.author))),r=e.map(i=>i.updatedAt||i.createdAt).filter(Boolean).sort().at(-1),o=e.filter(i=>i.commentType==="review_inline").length;return{totalComments:e.length,inlineComments:o,discussionComments:e.length-o,commenters:n.slice(0,8),...r?{latestCommentAt:r}:{},themes:sx(e,t??[])}}function im(e,t={}){let{includeFileChanges:n=!0}=t,r=e.items.map(i=>{let s=i.fileChanges,a=s?.length??0,c=Array.isArray(i.comments)?i.comments:void 0,u=ax(c,i.reviews);return{number:i.number,title:i.title,body:i.body??void 0,...i.bodyPagination&&{bodyPagination:i.bodyPagination},state:i.state,draft:i.draft,author:i.author,assignees:i.assignees,labels:i.labels,sourceBranch:i.sourceBranch,targetBranch:i.targetBranch,sourceSha:i.sourceSha,targetSha:i.targetSha,createdAt:i.createdAt,updatedAt:i.updatedAt,closedAt:i.closedAt,mergedAt:i.mergedAt,commentsCount:i.commentsCount,changedFilesCount:i.changedFilesCount??a,additions:i.additions,deletions:i.deletions,...Array.isArray(i.comments)&&i.comments.length>0&&{comments:i.comments.map(l=>({...l,...l.bodyPagination&&{bodyPagination:l.bodyPagination}}))},...i.reviews&&{reviews:i.reviews},...i.commits&&{commits:i.commits},...u&&{reviewSummary:u},...s&&n?{fileChanges:s}:{},...Array.isArray(i.sanitizationWarnings)&&i.sanitizationWarnings.length>0?{sanitizationWarnings:i.sanitizationWarnings}:{}}}),o=e.pagination?{currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,...typeof e.pagination.totalMatches=="number"?{totalMatches:e.pagination.totalMatches}:{},...Gi(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}:void 0;return{pullRequests:r,resultData:{pullRequests:r,...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},...o?{pagination:o}:{totalCount:e.totalCount||r.length}},pagination:o}}function sm(e){let t=!!e.fullContent;return{projectId:`${e.owner}/${e.repo}`,path:String(e.path),ref:e.branch?String(e.branch):void 0,startLine:t?void 0:e.startLine,endLine:t?void 0:e.endLine,matchString:t||!e.matchString?void 0:String(e.matchString),contextLines:e.contextLines??5,fullContent:t,forceRefresh:!!e.forceRefresh,charOffset:e.charOffset,charLength:e.charLength,minify:e.minify,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function am(e,t){return{path:e.path,content:e.content,...typeof e.size=="number"&&e.size>0&&{fileSize:e.size},...typeof e.totalLines=="number"&&{totalLines:e.totalLines},...typeof e.sourceChars=="number"&&{sourceChars:e.sourceChars},...typeof e.sourceBytes=="number"&&{sourceBytes:e.sourceBytes},...e.contentView&&{contentView:e.contentView},...e.isPartial&&{isPartial:e.isPartial},...e.startLine&&{startLine:e.startLine},...e.endLine&&{endLine:e.endLine},...e.matchRanges?.length&&{matchRanges:e.matchRanges},...e.matchedLines?.length&&{matchedLines:e.matchedLines},...e.lastModified&&{lastModified:e.lastModified},...e.lastModifiedBy&&{lastModifiedBy:e.lastModifiedBy},...e.pagination&&{pagination:e.pagination},...e.warnings?.length&&{warnings:e.warnings},...e.matchNotFound===!0&&{matchNotFound:!0},...e.searchedFor&&{searchedFor:e.searchedFor},...e.ref&&t.branch!==e.ref?{resolvedBranch:e.ref}:{}}}function cc(e,t){let n=e.include??[];return{projectId:`${e.owner}/${e.repo}`,ref:t,path:e.path?String(e.path):void 0,depth:typeof e.maxDepth=="number"?e.maxDepth:void 0,itemsPerPage:e.itemsPerPage??Mt.ENTRIES_PER_PAGE,page:(()=>{let r=e.page;return typeof r=="number"?r:void 0})(),includeSizes:n.includes("sizes"),includeLanguages:n.includes("languages"),includeContributors:n.includes("contributors"),includeBranches:n.includes("branches"),includeTags:n.includes("tags"),mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function cm(e,t,n,r){let o=r,i=e.branch??r,s=o&&i&&o!==i&&o!=="HEAD",a=Object.entries(n).sort(([d],[f])=>d==="."?-1:f==="."?1:d.localeCompare(f)).map(([d,f])=>({dir:d,files:f.files,folders:f.folders})),c=e.fileSizeMap,u={};if(c){for(let[d,f]of Object.entries(c))if(n[d]){let g=new Set(n[d].files);for(let[R,h]of Object.entries(f))if(g.has(R)){let y=d==="."?R:`${d}/${R}`;u[y]=h}}}let l=Object.values(n).reduce((d,f)=>(d.totalFiles+=f.files.length,d.totalFolders+=f.folders.length,d),{totalFiles:0,totalFolders:0}),p=e,m={structure:a,...Object.keys(u).length>0&&{fileSizes:u},...p.languages?{languages:p.languages,dominantLanguage:p.dominantLanguage}:{},...p.contributors?{contributors:p.contributors,totalContributors:p.contributors.length}:{},...p.branches?{branches:p.branches,totalBranches:p.branches.length}:{},...p.tags?{tags:p.tags,totalTags:p.tags.length}:{},summary:{totalFiles:l.totalFiles,totalFolders:l.totalFolders}};return i&&(m.resolvedBranch=i),s&&(m.branchFallback={requestedBranch:o,actualBranch:i,...e.defaultBranch!==void 0&&{defaultBranch:e.defaultBranch},warning:`Branch '${o}' not found. Showing '${i}' (default branch). Re-query with the correct branch name if branch-specific results are required.`}),e.pagination&&(e.pagination.hasMore||e.pagination.totalPages>1)&&(m.pagination=e.pagination),m}function Bi(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function cx(e){if(typeof e=="string")return{message:e};if(typeof e=="object"&&e!==null){let t=e;return{message:typeof t.error=="string"&&t.error.length>0?t.error:"Provider error",status:Bi(t.status),retryAfterSeconds:Bi(t.retryAfter),rateLimitRemaining:Bi(t.rateLimitRemaining),rateLimitReset:Bi(t.rateLimitReset)}}return{message:"Provider error"}}function Ui(e){let t=[];for(let n of e){if(n.status!=="error")continue;let{message:r,status:o,retryAfterSeconds:i,rateLimitRemaining:s,rateLimitReset:a}=cx(n.data.error),c=o!==void 0?`${r} (HTTP ${o})`:r;t.push({id:n.id,error:c,...o!==void 0?{status:o}:{},...i!==void 0?{retryAfterSeconds:i}:{},...s!==void 0?{rateLimitRemaining:s}:{},...a!==void 0?{rateLimitReset:a}:{}})}return t}function Qi(e,t,n){let r=t,o=e.results;if(Array.isArray(o)){let s=o,a=Dn(s);a&&(e.base=a);let c=Mn(s);c&&(e.shared=c),(a||c)&&(r=[...a?["base"]:[],...c?["shared"]:[],...t])}let i=Nt(e,[...r]);return{structuredContent:Ve(Jt(e)??{}),text:i,isError:n}}var ux=["package.json",".yarnrc.yml","pnpm-workspace.yaml","tsconfig.json","jsconfig.json","turbo.json","lerna.json","nx.json","babel.config.js","vite.config.ts","vite.config.js","webpack.config.js","rollup.config.js","jest.config.js","vitest.config.ts","commitlint.config.js","deno.json","deno.jsonc",".npmrc",".nvmrc",".node-version",".prettierrc",".prettierignore",".eslintignore",".stylelintrc",".editorconfig",".tool-versions","requirements.txt","pyproject.toml","setup.py","setup.cfg","Pipfile","tox.ini","environment.yml",".python-version","Gemfile",".ruby-version","composer.json","Cargo.toml","go.mod","go.work","mix.exs","rebar.config","pubspec.yaml","build.sbt","deps.edn","project.clj","Package.swift","CMakeLists.txt","Makefile.am","configure.ac","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","global.json","Directory.Build.props","Directory.Build.targets","packages.config","nuget.config","Dockerfile","docker-compose.yml","docker-compose.yaml",".dockerignore","Makefile","Vagrantfile","Chart.yaml","Procfile","Brewfile","serverless.yml","netlify.toml","vercel.json","renovate.json",".gitlab-ci.yml",".travis.yml","Jenkinsfile",".gitignore",".gitattributes",".gitmodules",".env",".env.example"],lx=new Set(ux),px=["package-lock.json","npm-shrinkwrap.json","yarn.lock","pnpm-lock.yaml","bun.lockb","bun.lock","deno.lock","Pipfile.lock","poetry.lock","uv.lock","pdm.lock","pixi.lock","Gemfile.lock","composer.lock","Cargo.lock","Cargo.toml.orig","go.sum","Gopkg.lock","glide.lock","Package.resolved","pubspec.lock","flake.lock","MODULE.bazel.lock",".terraform.lock.hcl","mise.lock"],dx=new Set(px),mx=[/\.lock$/],fx=[/^\.eslintrc(\..+)?$/,/^\.prettierrc(\..+)?$/,/^\.babelrc(\..+)?$/,/^eslint\.config\.(c|m)?js$/,/^\.env(\..+)?$/,/^tsconfig\..+\.json$/,/^\.stylelintrc(\..+)?$/,/^\.renovaterc(\..+)?$/,/\.csproj$/,/\.fsproj$/,/\.vbproj$/,/\.sln$/,/\.gemspec$/,/\.tf(vars)?$/],hx=[".toml",".ini",".cfg",".conf",".properties"],lm=new Set(hx),gx=new Set(".md .mdx .markdown .rst .adoc .asciidoc .txt .text .rtf .org .textile .rdoc .pod .creole .wiki".split(" ")),um=new Set(["readme","license","licence","copying","notice","changelog","changes","history","authors","contributors","contributing","code_of_conduct","codeowners","install","citation"]),pm=new Set(".js .jsx .mjs .cjs .ts .tsx .mts .cts .py .pyi .pyx .rb .rake .php .go .rs .java .kt .kts .scala .groovy .clj .cljs .cljc .c .h .cc .cpp .cxx .hpp .hh .m .mm .cs .fs .vb .swift .dart .sh .bash .zsh .fish .ps1 .bat .cmd .vue .svelte .css .scss .sass .less .html .htm .sql .graphql .gql .proto .ex .exs .erl .lua .hs .pl .pm .r .jl".split(" "));function uc(e){let t=e.replace(/\\/g,"/"),n=t.lastIndexOf("/");return n===-1?t:t.slice(n+1)}function lc(e){let t=e.lastIndexOf(".");return t>0?e.slice(t).toLowerCase():""}function yx(e){if(!e)return!1;let t=uc(e);if(!t)return!1;if(lx.has(t))return!0;for(let r of fx)if(r.test(t))return!0;let n=lc(t);return!!(n&&lm.has(n))}function Rx(e){if(!e)return!1;let t=uc(e);if(!t)return!1;if(dx.has(t))return!0;for(let n of mx)if(n.test(t))return!0;return!1}function Sx(e){let t=lc(e);if(t&&gx.has(t))return!0;if(t&&(pm.has(t)||lm.has(t)))return!1;let n=(t?e.slice(0,e.length-t.length):e).toLowerCase().replace(/\..*$/,""),r=n.split(/[-_.]/)[0]??n;return um.has(n)||um.has(r)}function bx(e){let t=lc(e);return t!==""&&pm.has(t)}function $i(e){if(!e)return;let t=uc(e);if(t){if(Rx(t))return"lock";if(yx(t))return"config";if(Sx(t))return"doc";if(bx(t))return"code"}}function ji(e){return typeof e=="object"&&e!==null}function Ue(e){return typeof e=="string"&&e.length>0?e:void 0}function Ye(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function dm(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string");return t.length>0?t:void 0}function Ke(e,t){return Ye(e[t])??0}function Cx(e){if(ji(e))return{nonFile:Ke(e,"nonFile"),missingDownloadUrl:Ke(e,"missingDownloadUrl"),oversized:Ke(e,"oversized"),binary:Ke(e,"binary"),fileLimit:Ke(e,"fileLimit"),fetchFailed:Ke(e,"fetchFailed"),totalSizeLimit:Ke(e,"totalSizeLimit"),pathTraversal:Ke(e,"pathTraversal")}}function xx(e){if(ji(e))return{maxDirectoryFiles:Ke(e,"maxDirectoryFiles"),maxTotalSize:Ke(e,"maxTotalSize"),maxFileSize:Ke(e,"maxFileSize")}}var Px=["charOffset","charLength","totalChars","nextCharOffset","nextBlockChar","nextPage","nextMatchPage","filesPerPage","totalFiles","entriesPerPage","totalEntries","matchesPerPage","totalMatches"];function wx(e){if(!ji(e))return;let{currentPage:t,totalPages:n,hasMore:r}=e;if(typeof t!="number"||typeof n!="number"||typeof r!="boolean")return;let o={currentPage:t,totalPages:n,hasMore:r};for(let i of Px){let s=e[i];typeof s=="number"&&Number.isFinite(s)&&(o[i]=s)}return o}function Tx(e,t){return _i("ghGetFileContent",{owner:t.owner,repo:t.repo,...t.branch!==void 0?{branch:t.branch}:{},path:t.path,...t.minify!==void 0?{minify:t.minify}:{}},e)}function Ex(e){return{tool:"ghCloneRepo",query:{owner:e.owner,repo:e.repo,...e.branch!==void 0?{branch:e.branch}:{},sparsePath:e.path},why:"lspGetSemantics (definitions/references) only works on local files \u2014 clone this path locally, then run localSearchCode or lspGetSemantics on it",confidence:"exact"}}function mm(e,t){let n=wx(e.pagination),r=!1;try{r=ep()}catch{r=!1}let o={...Tx(n,t),...r?{cloneForSemantics:Ex(t)}:{}},i=Ue(e.path)??String(t.path??""),s=i?$i(i):void 0;return{path:i,content:typeof e.content=="string"?e.content:"",...s?{fileType:s}:{},localPath:Ue(e.localPath),repoRoot:Ue(e.repoRoot),contentView:e.contentView==="none"||e.contentView==="standard"||e.contentView==="symbols"?e.contentView:void 0,totalLines:Ye(e.totalLines),sourceChars:Ye(e.sourceChars),resolvedBranch:Ue(e.resolvedBranch),pagination:n,...Object.keys(o).length>0?{next:o}:{},...e.isPartial===!0||n?.hasMore===!0?{isPartial:!0}:{},startLine:Ye(e.startLine),endLine:Ye(e.endLine),...Array.isArray(e.matchRanges)&&e.matchRanges.length>0?{matchRanges:e.matchRanges}:{},...Array.isArray(e.matchedLines)&&e.matchedLines.length>0?{matchedLines:e.matchedLines}:{},lastModified:Ue(e.lastModified),lastModifiedBy:Ue(e.lastModifiedBy),warnings:dm(e.warnings),...e.matchNotFound===!0?{matchNotFound:!0}:{},searchedFor:Ue(e.searchedFor),...e.cached===!0?{cached:!0}:{}}}function fm(e,t){let r=(Array.isArray(e.files)?e.files:[]).filter(ji).map(c=>({path:Ue(c.path)??"",size:Ye(c.size)??0,type:Ue(c.type)??"file"})),o=Cx(e.skipped),i=e.hasSubdirectories===!0||(o?o.nonFile>0:!1),s=o?Object.entries(o).filter(([,c])=>c>0):[],a=s.length>0?Object.fromEntries(s):void 0;return{path:String(t.path??""),localPath:Ue(e.localPath)??"",repoRoot:Ue(e.repoRoot),fileCount:Ye(e.fileCount)??r.length,totalSize:Ye(e.totalSize)??0,complete:e.complete===!0,verified:e.verified===!0,...typeof e.commitSha=="string"&&e.commitSha.length===40?{commitSha:e.commitSha}:{},...i?{hasSubdirectories:!0}:{},...a?{skippedSummary:a}:{},directoryEntryCount:Ye(e.directoryEntryCount),eligibleFileCount:Ye(e.eligibleFileCount),savedFileCount:Ye(e.savedFileCount),skipped:o,limits:xx(e.limits),warnings:dm(e.warnings),...r.length>0?{files:r}:{},...e.cached===!0?{cached:!0}:{},resolvedBranch:Ue(e.resolvedBranch)}}function Lx(e,t){return`${e}/${t}`}function Ax(e,t,n){let r=Lx(t,n),o=e.get(r);if(o)return o;let i={id:r,owner:t,repo:n};return e.set(r,i),i}function kx(e,t){let n=new Map;return e.forEach(r=>{if(r.status==="error")return;let o=t.get(r.id);if(!o)return;let i=String(o.owner??""),s=String(o.repo??"");if(!i||!s)return;let a=Ax(n,i,s),c=r.data;if(o.type==="directory"){let l=a.directories??[];l.push(fm(c,o)),a.directories=l;return}let u=a.files??[];u.push(mm(c,o)),a.files=u}),Array.from(n.values()).map(r=>{let o={owner:r.owner,repo:r.repo,...r.files?{files:r.files}:{},...r.directories?{directories:r.directories}:{}};return{id:r.id,data:o}})}function _x(e,t){return Ui(e).map(r=>{let o=t.get(r.id),s=/\b404\b|not found/i.test(r.error)&&o?.owner&&o?.repo?`${r.error} \u2014 verify the path (exact case, no leading slash) and the branch (a bad ref also 404s); list the tree with ghViewRepoStructure(owner:"${o.owner}", repo:"${o.repo}")`:r.error;return{id:r.id,owner:o?.owner,repo:o?.repo,path:o?.path?String(o.path):void 0,error:s}})}function hm(){return({queries:e,results:t})=>{let n=new Map,r=$r(e);e.forEach((a,c)=>{n.set(r[c],a)});let o=kx(t,n),i=_x(t,n),s={results:o};return i&&i.length>0&&(s.errors=i),Qi(s,["results","id","owner","repo","files","directories","path","content","fileType","totalLines","startLine","endLine","isPartial","pagination","errors"],o.length===0&&!!(i&&i.length>0))}}async function gm(e){let{queries:t,authInfo:n}=e,r=Be(n);return te(t,async(o,i)=>{try{let s=ke(en,o,{prefix:!1});if(s.ok===!1)return s.error;let a=s.data,c=a.minify??(a.fullContent===!0?"none":"standard"),u={...a,minify:c},l=r();return u.type==="directory"?Ix(u,n,l):Ox(u,n,l)}catch(s){return be(s,o,void 0,x.GITHUB_FETCH_CONTENT)}},{toolName:x.GITHUB_FETCH_CONTENT,finalize:hm()},e)}async function Ix(e,t,n){if(!Di(n,"fetchDirectoryToDisk"))return be(new Error('Directory fetch (type: "directory") is only available with the GitHub provider. Use file mode (type: "file") instead.'),e,"Provider not supported",x.GITHUB_FETCH_CONTENT);if(!e.owner||!e.repo)return F("Directory fetch requires both owner and repo.",e,{rawResponse:0});let r=e.branch??await Ae(e.owner,e.repo,t),o=await Ra(e.owner,e.repo,String(e.path),r,t,!!e.forceRefresh),i=(o.skipped?.nonFile??0)>0,s=o.skipped?Object.fromEntries(Object.entries(o.skipped).filter(([,l])=>l>0)):void 0,a={kind:"directory",localPath:o.localPath,repoRoot:o.repoRoot,source:"treeFetch",cached:o.cached,complete:o.complete,verified:o.verified,...o.commitSha?{commitSha:o.commitSha}:{},...i?{hasSubdirectories:!0}:{},...s&&Object.keys(s).length>0?{skippedSummary:s}:{},owner:e.owner,repo:e.repo},c={localSearch:{tool:"localSearchCode",query:{path:o.localPath,mode:"discovery"}},viewStructure:{tool:"localViewStructure",query:{path:o.localPath}},...i?{escalateToClone:{tool:"ghCloneRepo",why:"nonFile skips indicate subdirectories were not fetched; clone for full coverage",query:{owner:e.owner,repo:e.repo,...e.branch?{branch:e.branch}:{},...e.path?{sparsePath:String(e.path)}:{}}}}:{}},u={localPath:o.localPath,repoRoot:o.repoRoot,fileCount:o.fileCount,totalSize:o.totalSize,complete:o.complete,verified:o.verified,...o.commitSha?{commitSha:o.commitSha}:{},directoryEntryCount:o.directoryEntryCount,eligibleFileCount:o.eligibleFileCount,savedFileCount:o.savedFileCount,...s&&Object.keys(s).length>0?{skipped:o.skipped}:{},limits:o.limits,...o.warnings?{warnings:o.warnings}:{},files:o.files,...o.cached?{cached:!0}:{},...e.branch!==o.branch?{resolvedBranch:o.branch}:{},location:a,next:c};return se(e,u,!0,x.GITHUB_FETCH_CONTENT,{rawResponse:o.totalSize??N(o)})}async function Ox(e,t,n){let r=await ft(e,()=>n.provider.getFileContent(sm(e)));if(r.ok===!1)return r.result;let o=e.fullContent===!0&&e.minify==="none"?await Fx(e,t):void 0,i={...am(r.response.data,e),...o?{localPath:o.localPath,repoRoot:o.repoRoot,cached:o.cached,...o.branch?{resolvedBranch:o.branch}:{}}:{}},s=!!(r.response.data.matchNotFound===!0||r.response.data.content&&r.response.data.content.length>0);return se(e,i,s,x.GITHUB_FETCH_CONTENT,{rawResponse:r.response.rawResponseChars})}async function Fx(e,t){if(!e.owner||!e.repo||typeof e.path!="string")return;let n=e.branch??await Ae(e.owner,e.repo,t);return Ea(e.owner,e.repo,e.path,n,t,!!e.forceRefresh)}function Wr(e){let t=new Map;for(let n of e)typeof n.id=="string"&&t.set(n.id,n);return t}function ym(e,t){let n=Wr(t);return e.some(r=>{let o=n.get(r.id);return typeof o?.owner=="string"&&typeof o?.repo=="string"})}function Rm(e){let t=e.data;return{results:Array.isArray(t?.results)?t.results:[],pagination:t?.pagination,...t?.nonExistentScope?{nonExistentScope:!0}:{},...t?.incompleteResults?{incompleteResults:!0}:{},...t?.repoState?{repoState:t.repoState}:{}}}function vx(e){return[...e].sort((t,n)=>{let r=n.matches.length-t.matches.length;return r!==0?r:t.id.localeCompare(n.id)})}function Dx(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Mx(e,t){let n=(e.path.split("/").pop()??"").toLowerCase(),r=n.replace(/\.[^.]+$/,""),o=e.value??"",i=0;for(let s of t){let a=s.trim();if(!a)continue;let c=a.toLowerCase();if(n===c||r===c)return 2;(/^[A-Za-z0-9_]+$/.test(a)?new RegExp(`\\b${Dx(a)}\\b`,"i").test(o):o.toLowerCase().includes(c))&&(i=Math.max(i,1))}return i}function Nx(e,t){return{...e,matches:t}}function pc(e,t){let n=t.filter(o=>typeof o=="string"&&o.trim());return n.length===0?vx(e):e.map(o=>{let i=o.matches.map((s,a)=>({match:s,index:a,score:Mx(s,n)}));return i.sort((s,a)=>s.score!==a.score?a.score-s.score:s.index-a.index),{group:Nx(o,i.map(s=>s.match)),hasExact:i.some(s=>s.score>0)}}).sort((o,i)=>{if(o.hasExact!==i.hasExact)return o.hasExact?-1:1;let s=i.group.matches.length-o.group.matches.length;return s!==0?s:o.group.id.localeCompare(i.group.id)}).map(o=>o.group)}function bm(e){let t=new Map;for(let{id:n,groups:r}of e)for(let o of r){let i=`${n}\0${o.id}`,s=t.get(i);if(!s){t.set(i,{id:o.id,queryId:n,owner:o.owner,repo:o.repo,matches:[...o.matches]});continue}s.matches.push(...o.matches)}return Array.from(t.values())}function Sm(e){let t=new Map;for(let n of e)for(let r of n.matches){let o=`${n.queryId??""}\0${n.owner}\0${n.repo}\0${r.path}`,i=t.get(o),{path:s,...a}=r;if(i){i.matches.push(a);continue}t.set(o,{owner:n.owner,repo:n.repo,path:r.path,matches:[a]})}return Array.from(t.values())}function Cm(e,t,n){if(t.length===0)return[];if(e.length===1){let i=typeof e[0]?.id=="string"?e[0].id:"ghSearchCode",s=typeof e[0]?.id=="string"?e[0].id:void 0,a=s?n.get(s):void 0;return[{id:i,data:{files:Sm(t),...a?{pagination:a}:{}}}]}let r=new Map,o=[];for(let i of t){let s=i.queryId??"ghSearchCode",a=r.get(s);a||(a=[],r.set(s,a),o.push(s)),a.push(i)}return o.map(i=>{let s=n.get(i);return{id:i,data:{files:Sm(r.get(i)),...s?{pagination:s}:{}}}})}function xm(e,t,n){let r=Wr(t),o={};for(let i of e){let s=i.data.files[0];if(!s)continue;let a=r.get(i.id),u=(Array.isArray(a?.keywords)?a.keywords.filter(p=>typeof p=="string"):[])[0]??n[0];if(!u)continue;let l=e.length===1?"getLines":`getLines:${i.id}`;o[l]={tool:"ghGetFileContent",query:{owner:s.owner,repo:s.repo,path:s.path,matchString:u},why:"GitHub code search returns no line numbers; fetch the top hit with matchString to get exact file:line anchors",confidence:"low"}}return Object.keys(o).length>0?o:void 0}function dc(){return({queries:e,results:t})=>{let n=[],r=new Map,o=[],i=!1,s=[],a=Wr(e);t.forEach((S,C)=>{if(S.status==="error")return;let P=Rm(S);P.repoState&&s.push({id:S.id,state:P.repoState,query:a.get(S.id)}),P.incompleteResults&&(i=!0),P.results.reduce((k,w)=>k+w.matches.length,0)===0&&o.push({id:S.id,...P.nonExistentScope?{nonExistentScope:!0}:{},...P.incompleteResults?{incompleteResults:!0}:{}});let L=P.results;n.push({id:S.id,groups:L}),P.pagination&&r.set(S.id,P.pagination)});let c=Array.from(new Set(e.flatMap(S=>{let C=S.keywords;return Array.isArray(C)?C.filter(P=>typeof P=="string"):[]}))),u=pc(bm(n),c),l=Ui(t),p=e.some(S=>S.concise===!0),m=Cm(e,u,r),d=xm(m,e,c);if(p)for(let S of m)S.data.files=S.data.files.map(C=>`${C.owner}/${C.repo}:${C.path}`);let f={results:m,...d?{next:d}:{}};o.length>0&&(f.emptyQueries=o.map(({id:S,nonExistentScope:C,incompleteResults:P})=>({id:S,...C?{nonExistentScope:C}:{},...P?{incompleteResults:P}:{}}))),l.length>0&&(f.errors=l);let g=[],R=(S,C)=>{g.push(C)};i&&R("ghIncompleteResults","GitHub code search returned incomplete_results: the search index did not fully complete. Empty or partial results may be a false negative \u2014 retry, narrow scope (owner/repo/path), or materialize the repo and search locally before concluding absence."),o.length>0&&ym(o,e)&&R("ghScopedZeroUnproven","GitHub code search returned no results for a scoped repository query. Treat this as unproven absence: verify the repo/path with ghViewRepoStructure, then materialize or clone a bounded path and search locally before concluding.");let h=8,y=o.filter(({id:S,nonExistentScope:C,incompleteResults:P})=>{if(C||P)return!1;let T=a.get(S)?.keywords;return Array.isArray(T)&&T.length>h});y.length>0&&R("ghQueryPossiblyTooComplex",`Quer${y.length>1?"ies":"y"} ${y.map(S=>S.id).join(", ")} used more than ${h} keywords and returned zero results. GitHub code search can silently under-match an overly long/complex query instead of erroring \u2014 narrow to fewer, more specific keywords before concluding absence.`);for(let{id:S,state:C,query:P}of s)if(C.kind==="renamed"){let[T,L]=C.fullName.split("/");R("ghRepoRenamed",`Query ${S}: the repository was RENAMED to ${C.fullName} \u2014 searches against the old name silently miss. Retry with the new name (see next.retryRenamed).`);let k=P?.keywords;f.next={...f.next??{},[`retryRenamed:${S}`]:{tool:"ghSearchCode",query:{owner:T,repo:L,...Array.isArray(k)?{keywords:k}:{}},why:"Re-run the same search against the renamed repository",confidence:"exact"}}}else C.kind==="archived"?R("ghRepoArchived",`Query ${S}: the repository is ARCHIVED \u2014 the code-search index may lag or exclude it; zero matches is not proof of absence. Materialize the repo and search locally to verify.`):R("ghRepoNotFound",`Query ${S}: the repository was NOT FOUND \u2014 it does not exist (or is private to this token). Check the owner/repo spelling.`);return Qi(f,["results","id","data","files","path","owner","repo","queryId","matches","value","pathOnly","matchIndices","pagination","next","tool","query","why","confidence","emptyQueries","nonExistentScope","incompleteResults","errors"],u.length===0&&l.length>0)}}function Gx(e){return!!((e.keywords??[]).some(n=>n.trim().length>0)||e.owner||e.path||e.extension||e.filename||e.language)}function Hx(e){if(e.repo&&!e.owner)return{error:"Repository scope requires owner. Provide both owner and repo, or omit repo for a broader search."}}async function Bx(e,t,n){try{let r=await Q(n),{data:o}=await r.rest.repos.get({owner:e,repo:t}),i=`${e}/${t}`.toLowerCase();return o.full_name&&o.full_name.toLowerCase()!==i?{kind:"renamed",fullName:o.full_name}:o.archived?{kind:"archived"}:void 0}catch(r){return r.status===404?{kind:"notFound"}:void 0}}async function Pm(e){let{queries:t}=e,n=Be(e.authInfo);return te(t,async(r,o)=>{try{let i=Hx(r);if(i)return F(i.error,r);if(!Gx(r))return F("At least one search term or scope filter is required.",r);let s=n(),a=await ft(r,()=>s.provider.searchCode(em(r)));if(a.ok===!1)return a.result;let c=tm(a.response.data,r);if(c.results.length===0&&r.owner&&r.repo){let u=await Bx(String(r.owner),String(r.repo),e.authInfo);u&&(c.repoState=u)}return se(r,c,c.results.length>0,x.GITHUB_SEARCH_CODE,{rawResponse:a.response.rawResponseChars})}catch(i){return be(i,r,void 0,x.GITHUB_SEARCH_CODE)}},{toolName:x.GITHUB_SEARCH_CODE,finalize:dc()},e)}import{z as Ux}from"zod";import{GitHubCodeSearchQuerySchema as wm}from"@octocodeai/octocode-core/schemas";var Tm={limit:_(1,100).optional(),page:K.default(1),match:Ux.enum(["file","path"]).default("file").describe('"file" searches file contents and returns snippets with matchIndices. "path" searches only file paths/names \u2014 no snippets, far cheaper; use it to confirm a file exists before reading it. (Unlike ghSearchRepos/ghSearchPullRequests, where `match` instead selects which text FIELDS to search \u2014 a different concept sharing this name.)')},Vr=X(wm,Tm),Kr=Y(Z(wm,Tm));function Qx(e,t){let n=e?.patches;return n?.mode?{mode:n.mode,...n.files?{files:n.files}:{},...n.ranges?{ranges:n.ranges}:{}}:t==="full"?{mode:"all"}:{mode:"none"}}function $x(e,t){let n=e?.comments;return n?{discussion:n.discussion??!0,reviewInline:n.reviewInline??!0,includeBots:n.includeBots??!1,...n.file?{file:n.file}:{}}:t==="full"?{discussion:!0,reviewInline:!0,includeBots:!1}:!1}function jx(e,t){let n=e?.commits;return n?{list:n.list??!0,includeFiles:n.includeFiles??!1}:t==="full"?{list:!0,includeFiles:!1}:!1}function Em(e){let{content:t,reviewMode:n}=e,r=Qx(t,n),o=$x(t,n),i=jx(t,n),s=n==="full";return{body:t?.body??s,changedFiles:(t?.changedFiles??s)||r.mode!=="none",patches:r,comments:o,reviews:t?.reviews??s,commits:i,...n?{reviewMode:n}:{}}}function WN(e){return!!(e.body||e.changedFiles||e.patches.mode!=="none"||e.comments||e.reviews||e.commits)}function Yr(e){let t=e.matchString;if(typeof t!="string")return;let n=t.trim().toLowerCase();return n.length>0?n:void 0}function Gn(e,t){return typeof e=="string"&&e.toLowerCase().includes(t)}function Xr(e,t=1,n=20){let r=Math.min(Math.max(1,n),100),o=e.length,i=Math.max(1,Math.ceil(o/r)),s=Math.min(Math.max(1,t),i),a=(s-1)*r,c=Math.min(a+r,o);return{items:e.slice(a,c),pagination:{currentPage:s,totalPages:i,itemsPerPage:r,totalItems:o,hasMore:s<i,...s<i?{nextPage:s+1}:{}}}}function tn(e,t=0,n=12e3){if(typeof e!="string")return;let r=e.length,o=Math.min(Math.max(0,t),r),i=Math.min(Math.max(1,n),5e4),s=Math.min(o+i,r),a=s<r;return{content:e.slice(o,s),pagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function zi(e,t=500){if(!(typeof e!="string"||e.length===0))return e.length<=t?e:`${e.slice(0,t-3)}...`}function mc(e,t){return{owner:e.owner,repo:e.repo,prNumber:t}}function zx(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function qr(e,t,n){return zx({...mc(e,t),...n})}function fc(e,t,n,r,o={}){if(!(!r.hasMore||r.nextCharOffset===void 0))return qr(e,t,{content:n,...o,charOffset:r.nextCharOffset,charLength:e.charLength})}function Wi(e,t,n,r,o){if(!(!o.hasMore||o.nextPage===void 0))return qr(e,t,{content:n,[r]:o.nextPage,itemsPerPage:e.itemsPerPage})}function Hn(e){return typeof e=="object"&&e!==null}function Vi(e){if(Hn(e)&&!(typeof e.currentPage!="number"||typeof e.totalPages!="number"||typeof e.itemsPerPage!="number"||typeof e.totalItems!="number"||typeof e.hasMore!="boolean"))return e}function Ki(e){if(Hn(e)&&!(typeof e.charOffset!="number"||typeof e.charLength!="number"||typeof e.totalChars!="number"||typeof e.hasMore!="boolean"))return e}function Wx(e,t){return e.filter(n=>{let r=n.commentType;return t.file&&n.path!==t.file?!1:r==="review_inline"?t.reviewInline:t.discussion})}function Lm(e,t,n){if(!n.comments)return{};let r=Array.isArray(e.comments)?e.comments:[],o=Wx(r,n.comments),i=Yr(t),s=i?o.filter(u=>Gn(u.body,i)):o,{items:a,pagination:c}=Xr(s,t.commentPage??t.page??1,t.itemsPerPage??20);return{comments:a.map(u=>{let l=tn(typeof u.body=="string"?u.body:"",t.commentBodyOffset??0,t.charLength??12e3);return{id:u.id,author:u.author,commentType:u.commentType??"discussion",path:u.path,line:u.line,...u.in_reply_to_id!=null?{in_reply_to_id:u.in_reply_to_id}:{},...l?{body:l.content,bodyPagination:l.pagination}:{bodyPreview:zi(typeof u.body=="string"?u.body:"")},createdAt:u.createdAt,updatedAt:u.updatedAt}}),commentPagination:c}}function Am(e,t,n){if(!n.reviews)return{};let r=Array.isArray(e.reviews)?e.reviews:[],o=Yr(t);return{reviews:(o?r.filter(s=>Gn(s.body,o)):r).map(s=>{let a=typeof s.body=="string"?s.body:"",c=tn(a||void 0,0,t.charLength??12e3);return{id:s.id,user:s.user,state:s.state,...c?{body:c.content,bodyPagination:c.pagination}:{},submittedAt:s.submittedAt??s.submitted_at,commitId:s.commitId??s.commit_id}})}}function km(e,t,n){if(!n.commits)return{};let r=Array.isArray(e.commits)?e.commits:[],{items:o,pagination:i}=Xr(r,t.commitPage??t.page??1,t.itemsPerPage??20);return{commits:o.map(s=>({sha:s.sha,message:s.message,author:s.author,date:s.date,...n.commits&&n.commits.includeFiles&&Array.isArray(s.files)?{files:s.files}:{}})),commitPagination:i}}function Yi(e){return String(e.path??e.filename??"")}function Vx(e,t){return{path:Yi(e),status:String(e.status??""),additions:Number(e.additions??0),deletions:Number(e.deletions??0),...t&&typeof e.patch=="string"?{patch:e.patch}:{}}}function _m(e,t,n){let r=Array.isArray(e.fileChanges)?e.fileChanges:[],o=n.patches.files,i=o&&o.length>0?r.filter(m=>o.includes(Yi(m))):r,s=Yr(t),a=s?i.filter(m=>Gn(Yi(m),s)||Gn(m.patch,s)):i,{items:c,pagination:u}=Xr(a,t.filePage??t.page??1,t.itemsPerPage??20),l=n.patches.mode!=="none",p=c.map(m=>{let d=Vx(m,!1);if(!l||typeof m.patch!="string")return d;let f=tn(m.patch,t.charOffset??0,t.charLength??12e3);return{...d,patch:f?.content??"",...f?{patchPagination:f.pagination}:{}}});return n.changedFiles||n.patches.mode!=="none"?{changedFiles:p,filePagination:u}:r.length===0?{}:{filePathsPreview:r.slice(0,20).map(Yi).filter(Boolean),filePathsPagination:{totalFiles:r.length,filesPerPage:20,hasMore:r.length>20,...r.length>20?{nextFilePage:2}:{}}}}function nn(e,t){return{...e,content:t}}function Kx(e,t){return{...e,...t}}function Im(e,t,n,r){let o=mc(e,t);return{target:o,...n.body?{}:{getBody:nn(o,{body:!0})},...n.changedFiles?{}:{getChangedFiles:nn(o,{changedFiles:!0})},...n.patches.mode!=="none"?{}:{getSelectedPatches:nn(o,{patches:{mode:"selected",files:[r??"path/from/changedFiles"]}}),getAllPatches:nn(o,{patches:{mode:"all"}})},...n.comments?{}:{getComments:nn(o,{comments:{discussion:!0,reviewInline:!0}})},...n.reviews?{}:{getReviews:nn(o,{reviews:!0})},...n.commits?{}:{getCommits:nn(o,{commits:{list:!0}})},...n.reviewMode==="full"?{}:{fullReview:Kx(o,{reviewMode:"full"})}}}function Yx(e){return e.replace(/\n{3,}/g,`
40
+ `):e.structuredContent!==void 0?JSON.stringify(e.structuredContent,null,2):JSON.stringify(e,null,2)}function Qr(e,t){let n=ii(e)??{},r=sn(n),o=dE(),i="results"in r?["results","index","status","cache","meta","data"]:["instructions","status","data"];return o==="json"?JSON.stringify(ra(r,t||i),null,2):D.jsonToYamlString(r,{keysPriority:t||i})}function ra(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(o=>ra(o,t));if(typeof e!="object")return e;let n=e,r={};for(let o of t)o in n&&(r[o]=ra(n[o],t));for(let o of Object.keys(n))o in r||(r[o]=ra(n[o],t));return r}var mE=new Set(["currentPage","totalPages","perPage","itemsPerPage","entriesPerPage","filesPerPage","totalMatches","totalFiles","totalEntries","totalItems","totalResults","totalReferences","reportedTotalMatches","reachableTotalMatches","totalMatchesKind","totalMatchesCapped","hasMore","nextPage","charOffset","charLength","totalChars","totalBytes","nextCharOffset"]),fE=["totalMatches","totalItems","totalFiles","totalEntries","totalResults","totalReferences","reportedTotalMatches","reachableTotalMatches"];function hE(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=e,n=Object.keys(t);return n.length===0||!n.every(r=>mE.has(r))||fE.some(r=>typeof t[r]=="number"&&t[r]>0)||t.hasMore!==!1?!1:typeof t.totalPages=="number"?t.totalPages<=1:"charOffset"in t||"nextCharOffset"in t?(t.charOffset??0)===0:!0}function ii(e,t={}){if(e==null||Number.isNaN(e))return;let{inFilesObject:n=!1,depth:r=0}=t;if(Array.isArray(e)){let o=e.map(s=>ii(s,{inFilesObject:n,depth:r+1})).filter(s=>s!==void 0),i=n&&r>=2;return o.length>0||i?o:void 0}if(typeof e=="object"&&e!==null){let o={},i=!1;for(let[s,a]of Object.entries(e)){if(s==="results"&&r===0&&Array.isArray(a)&&a.length===0){o[s]=[],i=!0;continue}if(s==="warnings"||hE(a))continue;let c=(s==="files"||s==="repositories")&&!n,l=ii(a,{inFilesObject:n||c,depth:c?0:r+1});l!==void 0&&(o[s]=l,i=!0)}return i?o:void 0}return e}import{z as Ur}from"zod";function M(e,t){return Ur.preprocess(n=>typeof n=="number"&&Number.isFinite(n)?Math.min(Math.max(n,e),t):n,Ur.number().int().min(e).max(t))}var be=M(1,1e3).optional().default(1),$r=M(0,100).optional(),Wr=M(1,1e9).optional(),at=Ur.preprocess(e=>typeof e=="number"&&Number.isFinite(e)?Math.max(e,0):e,Ur.number().nonnegative().refine(Number.isSafeInteger,"Expected a safe non-negative integer")),gE={responseCharOffset:at.optional().describe("Full-response char offset; re-call with returned value when hasMore."),responseCharLength:M(1,5e4).optional().describe("Full-response char window.")};function Z(e,t={}){let{maxQueries:n=5}=t;return Ur.object({queries:Ur.array(e).min(1).max(n).describe("Parallel queries; response rows use matching zero-based indexes."),...gE}).strict()}function yE(e){return typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&("type"in e||"status"in e||"scopesSuggestion"in e)}function N(e,t,n={}){let{extra:r}=n,o={status:"error"};if(yE(e))o.error=e;else if(Ec(e))o.error=e.message,o.errorCode=e.errorCode;else if(typeof e=="string")o.error=e;else if(e instanceof Error){let i=cm(e);o.error=i.message,o.errorCode=i.errorCode}else o.error="Unknown error occurred";if(r){let{hints:i,...s}=r;Object.assign(o,s)}return n.rawResponse===void 0?o:W(o,n.rawResponse)}function tt(e,t,n={}){let r=e.safeParse(t);if(r.success)return{ok:!0,data:r.data};let o=r.error.issues.map(s=>s.message).join("; "),i=n.prefix===!0?`Validation error: ${o}`:o;return{ok:!1,error:N(i,t,{toolName:n.toolName})}}async function jQ(e,t,n){if(e)try{await e(t,n)}catch{return}}function ge(e,t,n,r,o){let i=n?void 0:"empty",s={...i!==void 0?{status:i}:{},...t};return o?.rawResponse===void 0?s:W(s,o.rawResponse)}function oa(e,t){let n={error:e.error||"Provider error",type:"http",status:e.status,rateLimitRemaining:e.rateLimit?.remaining,rateLimitReset:e.rateLimit?.reset?e.rateLimit.reset*1e3:void 0,retryAfter:e.rateLimit?.retryAfter};return N(n,t,{rawResponse:e.rawResponseChars??e.data??(e.error?e:void 0)})}function He(e,t,n,r){let o=N(e,t,{toolName:r});return n&&typeof o.error=="string"&&(o.error=`${n}: ${o.error}`),o}async function Ct({toolName:e,query:t,execute:n,contextMessage:r}){try{return await n()}catch(o){return He(o,t,r,e)}}import{existsSync as RE,mkdirSync as xu,renameSync as CE,rmSync as xE}from"fs";import{join as ai}from"path";import{createHash as wE}from"crypto";var WQ=["NODE_OPTIONS","GITHUB_TOKEN","GH_TOKEN","OCTOCODE_TOKEN","GITHUB_PERSONAL_ACCESS_TOKEN","NPM_TOKEN","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN"],si=["PATH","TMPDIR","TMP","TEMP","SYSTEMROOT","WINDIR","COMSPEC","PATHEXT"],Vr=[...si,"HOME","USERPROFILE","APPDATA","LOCALAPPDATA"],Sg=["HTTP_PROXY","HTTPS_PROXY","NO_PROXY","http_proxy","https_proxy","no_proxy"];function ia(e={},t=si){let n={};for(let o of t){let i=process.env[o];i!==void 0&&(n[o]=i)}let r=new Set(t);for(let[o,i]of Object.entries(e))r.has(o)&&(i===void 0?delete n[o]:n[o]=i);return n}import{spawn as Ru}from"child_process";var bE=10*1024*1024,Cu=5e3;function ar(e,t,n={}){let{timeout:r=3e4,cwd:o,env:i={},allowEnvVars:s=si,maxOutputSize:a=bE}=n;return new Promise(c=>{let l={killed:!1,stdoutChunks:[],stderrChunks:[],totalOutputSize:0},u=()=>l.stdoutChunks.join(""),p=()=>l.stderrChunks.join(""),d={cwd:o,env:ia(i,s),stdio:["ignore","pipe","pipe"]},m;try{m=Ru(e,t,d)}catch(S){c({stdout:"",stderr:"",exitCode:null,success:!1,error:S instanceof Error?S:new Error(`Failed to spawn command '${e}'`)});return}let f,h=setTimeout(()=>{if(!l.killed){l.killed=!0;try{m.kill("SIGTERM")}catch{}f=setTimeout(()=>{try{m.kill("SIGKILL")}catch{}},Cu),c({stdout:u(),stderr:p(),exitCode:null,success:!1,error:new Error(`Command timeout after ${r}ms`),timedOut:!0})}},r),y=()=>{clearTimeout(h),f!==void 0&&(clearTimeout(f),f=void 0)},g=()=>{if(l.totalOutputSize>a){if(!l.killed){l.killed=!0;try{m.kill("SIGKILL")}catch{}y(),c({stdout:u(),stderr:p(),exitCode:null,success:!1,error:new Error("Output size limit exceeded"),outputLimitExceeded:!0})}return!0}return!1};m.stdout?.on("data",S=>{if(l.killed)return;let R=S.toString();l.totalOutputSize+=Buffer.byteLength(R),!g()&&l.stdoutChunks.push(R)}),m.stderr?.on("data",S=>{if(l.killed)return;let R=S.toString();l.totalOutputSize+=Buffer.byteLength(R),!g()&&l.stderrChunks.push(R)}),m.on("close",S=>{l.killed||(y(),c({stdout:u(),stderr:p(),exitCode:S,success:S===0}))}),m.on("error",S=>{l.killed||(l.killed=!0,y(),c({stdout:u(),stderr:p(),exitCode:null,success:!1,error:S}))})})}function Rg(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,{allowEnvVars:s=si}=r,a;try{a=Ru(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:ia({},s)})}catch{o(!1);return}let c,l=()=>{clearTimeout(u),c!==void 0&&(clearTimeout(c),c=void 0)},u=setTimeout(()=>{if(!i){i=!0;try{a.kill("SIGTERM")}catch{}c=setTimeout(()=>{try{a.kill("SIGKILL")}catch{}},Cu),o(!1)}},n);a.on("close",p=>{l(),i||o(p===0)}),a.on("error",()=>{l(),i||o(!1)})})}var SE=1*1024*1024;function qQ(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,s=[],a=0,{allowEnvVars:c=Vr,maxOutputSize:l=SE}=r,u;try{u=Ru(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:ia({},c)})}catch{o(null);return}let p,d=()=>{clearTimeout(m),p!==void 0&&(clearTimeout(p),p=void 0)};u.stdout?.on("data",f=>{if(i)return;let h=f.toString();if(a+=Buffer.byteLength(h),a>l){if(!i){i=!0;try{u.kill("SIGKILL")}catch{}d(),o(null)}return}s.push(h)}),u.stderr?.on("data",()=>{});let m=setTimeout(()=>{if(!i){i=!0;try{u.kill("SIGTERM")}catch{}p=setTimeout(()=>{try{u.kill("SIGKILL")}catch{}},Cu),o(null)}},n);u.on("close",f=>{if(d(),!i)if(f===0){let h=s.join("").trim();o(h||null)}else o(null)}),u.on("error",()=>{d(),i||o(null)})})}function sa(e,t=1e3){for(let n of e){if(n.includes("\0"))return{valid:!1,error:"Null bytes not allowed in arguments"};if(n.length>t)return{valid:!1,error:"Argument too long"}}return{valid:!0}}var Cg=120*1e3,PE=30*1e3,TE=300*1e3,EE=100,xg="clone-locks",AE="clone-tmp",wg=[...Vr,"GIT_TERMINAL_PROMPT"];async function Pg(e,t,n){let r=e.owner,o=e.repo,{sparsePath:i,forceRefresh:s}=e;await NE();let a=e.branch??await Be(r,o,t),c=At(),l=Qc(c,r,o,a,i);return LE(c,l,async()=>{let u=xr(l);if(!s&&u.hit&&u.meta.source==="clone")return{localPath:l,cached:!0,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}};ms(c),Pn(l);let p=ME(t,n),d=kE(c,l);ds(d);try{if(i){if(await FE(r,o,a,d,i,p),!RE(ai(d,i)))throw new Error(`sparsePath "${i}" does not exist in ${r}/${o}@${a} \u2014 nothing was checked out for it. Verify the path with ghSearch operation:"tree", then retry with the correct sparsePath (or omit it for a full clone).`)}else await vE(r,o,a,d,p);let m=wr(r,o,a,"clone",i);return Cr(d,m),IE(d,l),{localPath:l,cached:!1,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}}}catch(m){throw ds(d),m}})}async function LE(e,t,n){Pn(t);let r=_E(e,t);xu(ai(e,"tmp",xg),{recursive:!0,mode:448});let o=Date.now();for(;;)try{xu(r,{mode:448}),Uc(r);break}catch(i){if(i.code!=="EEXIST")throw i;if(ps(r))continue;if(Date.now()-o>TE)throw new Error(`Timed out waiting for clone cache lock '${r}'.`);await OE(EE)}try{return await n()}finally{xE(r,{recursive:!0,force:!0})}}function Tg(e){return wE("sha256").update(e).digest("hex").slice(0,16)}function _E(e,t){return ai(e,"tmp",xg,Tg(t))}function kE(e,t){let n=`${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`,r=ai(e,"tmp",AE);return xu(r,{recursive:!0,mode:448}),ai(r,`${Tg(t)}-${n}`)}function IE(e,t){ds(t),Pn(t),CE(e,t)}function OE(e){return new Promise(t=>setTimeout(t,e))}async function vE(e,t,n,r,o){let i=Ag(o);i.push("clone","--depth","1","--single-branch","--branch",n,"--",Eg(e,t),r),await wu(i,Cg,`full clone of ${e}/${t}`,o)}async function FE(e,t,n,r,o,i){let s=Ag(i);s.push("clone","--filter","blob:none","--sparse","--depth","1","--single-branch","--branch",n,"--",Eg(e,t),r),await wu(s,Cg,`sparse clone of ${e}/${t}`,i),await wu(["-C",r,"sparse-checkout","set","--skip-checks","--",o],PE,`sparse-checkout set ${o}`,void 0)}function Eg(e,t){return`https://github.com/${e}/${t}.git`}function Ag(e){return e?["-c",`http.extraHeader=Authorization: Bearer ${e}`]:[]}function ME(e,t){return e?.token&&typeof e.token=="string"?e.token:t}async function NE(){try{if(!(await ar("git",["--version"],{timeout:5e3,maxOutputSize:1024,allowEnvVars:wg,env:{GIT_TERMINAL_PROMPT:"0"}})).success)throw new Error("git --version returned non-zero")}catch{throw new Error("git is not installed or not on PATH. The ghCloneRepo tool requires git to be available.")}}function DE(e,t){let n=e;return t&&(n=n.replaceAll(t,"[REDACTED]")),n=n.replace(/Authorization:\s*Bearer\s+\S+/gi,"Authorization: Bearer [REDACTED]"),n=n.replace(/Authorization:\s*token\s+\S+/gi,"Authorization: token [REDACTED]"),n}async function wu(e,t,n,r){let o=await ar("git",e,{timeout:t,maxOutputSize:5242880,allowEnvVars:wg,env:{GIT_TERMINAL_PROMPT:"0"}});if(!o.success){let i=DE(o.stderr?.trim()||"",r),s=i?`: ${i}`:"";throw new Error(`git ${n} failed${s}`)}}import{existsSync as HE,readdirSync as GE,lstatSync as BE}from"node:fs";import{join as zE}from"node:path";function Lg(e){if(!HE(e))return 0;let t;try{t=GE(e)}catch{return 0}let n=0;for(let r of t){if(r===".git")continue;let o=zE(e,r);try{let i=BE(o);if(i.isSymbolicLink())continue;i.isDirectory()?n+=Io(o):i.isFile()&&(n+=i.size)}catch{}}return n}async function _g(e,t={}){if(!Array.isArray(e))throw new Error(yo.PROMISES_NOT_ARRAY.message);if(e.length===0)return[];let{timeout:n=3e4,concurrency:r=e.length,onError:o}=t;if(n<=0)throw new Error(yo.TIMEOUT_NOT_POSITIVE.message);if(r<=0)throw new Error(yo.CONCURRENCY_NOT_POSITIVE.message);let i=e.map((c,l)=>typeof c=="function"?c:()=>Promise.reject(new Error(So.NOT_A_FUNCTION.message(l))));if(r<i.length)return jE(i,r,n,o);let s=i.map((c,l)=>kg(c,l,n,o));return(await Promise.allSettled(s)).map((c,l)=>c.status==="fulfilled"?c.value:{success:!1,error:c.reason instanceof Error?c.reason:new Error(String(c.reason)),index:l})}async function kg(e,t,n,r){let o,i=()=>{o!==void 0&&(clearTimeout(o),o=void 0)};try{let s=new Promise((c,l)=>{o=setTimeout(()=>{l(new Error(So.TIMEOUT.message(t,n)))},n)}),a=await Promise.race([e(),s]);return i(),{success:!0,data:a,index:t}}catch(s){i();let a=s instanceof Error?s:new Error(String(s));if(r)try{r(a,t)}catch(c){}return{success:!1,error:a,index:t}}}async function jE(e,t,n,r){let o=new Array(e.length),i=0,s=async()=>{for(;i<e.length;){let c=i++,l=e[c];if(!l){o[c]={success:!1,error:new Error(So.FUNCTION_UNDEFINED.message),index:c};continue}try{let u=await kg(l,c,n,r);o[c]=u}catch(u){o[c]={success:!1,error:u instanceof Error?u:new Error(String(u)),index:c}}}},a=[];for(let c=0;c<Math.min(t,e.length);c++)a.push(s());return await Promise.all(a),o}var Pu=parseInt(process.env.OCTOCODE_BULK_QUERY_TIMEOUT_MS||"60000",10)||6e4,QE=parseInt(process.env.OCTOCODE_TOOL_TIMEOUT_MS||"60000",10)||6e4,UE=5e3;function Ig(e,t,n){if(e<=1)return n?Math.max(Pu,n):Pu;let r=Math.min(Math.max(t,1),e),o=Math.ceil(e/r),i=Math.floor(QE/o),s=Math.max(UE,Math.min(i,Pu));return n?Math.max(s,n):s}async function Og(e,t,n,r){let o=[],i=[];if(!e||e.length===0)return{results:o,errors:i};let s=e.map((c,l)=>async()=>{let{value:u,cacheHit:p}=await vf(()=>t(c,l));return{result:p&&u.status!=="error"?{...u,cache:1}:u,queryIndex:l,originalQuery:c}});return(await _g(s,{timeout:Ig(e.length,n,r),continueOnError:!0,concurrency:n,onError:(c,l)=>{i.push({queryIndex:l,error:c.message})}})).forEach(c=>{if(c.success&&c.data){let l=c.data.result,u=l&&Object.keys(l).some(d=>d!=="status"&&d!=="error"&&d!=="data");if(l&&l.error===void 0&&(l.data===null||l.data===void 0)&&!u&&l.status!=="error"){i.push({queryIndex:c.data.queryIndex,error:"Query resolved without a payload (possible timeout or resource exhaustion) \u2014 retry this query alone, with tighter caps if it was large"});return}o.push({result:c.data.result,queryIndex:c.data.queryIndex,originalQuery:c.data.originalQuery})}else c.success&&i.push({queryIndex:c.index,error:"Query produced no result"})}),{results:o,errors:i}}import vg from"node:path";import{fileURLToPath as $E}from"node:url";function WE(e){if(e.length===0)return"";let t=e[0]??"";for(let r=1;r<e.length;r++){let o=e[r]??"",i=0,s=Math.min(t.length,o.length);for(;i<s&&t[i]===o[i];)i++;if(t=t.slice(0,i),t==="")break}let n=t.lastIndexOf("/");return n>0?t.slice(0,n):""}var Fg=["path","uri","absolutePath"],Mg=new Set(["next","location"]);function Tu(e,t,n){if(n>8||!e||typeof e!="object")return;if(Array.isArray(e)){for(let i of e)Tu(i,t,n+1);return}let r=e,o=VE(r);o&&t.push({obj:r,abs:o});for(let[i,s]of Object.entries(r))Mg.has(i)||s&&typeof s=="object"&&Tu(s,t,n+1)}function VE(e){let t=e.absolutePath;if(typeof t=="string"&&vg.isAbsolute(t))return t;let n=e.uri;if(typeof n=="string"&&n.startsWith("file://"))try{return $E(n)}catch{return}let r=e.path;if(typeof r=="string"&&vg.isAbsolute(r))return r}function aa(e){let t=[];for(let i of e)Tu(i?.data,t,0);if(t.length===0)return;let n=WE(t.map(i=>i.abs));if(n.length<=1)return;let r=n+"/",o=r.length;for(let{obj:i,abs:s}of t)s.startsWith(r)&&(i.path=s.slice(o),delete i.absolutePath,delete i.uri);return KE(e,r),n}function KE(e,t){function n(r,o){if(o>8||!r||typeof r!="object")return;if(Array.isArray(r)){for(let s=0;s<r.length;s++){let a=r[s];if(typeof a=="string"){let c="file://"+t;a.includes(c)?r[s]=a.replaceAll(c,""):a.includes(t)&&(r[s]=a.replaceAll(t,""))}else n(a,o+1)}return}let i=r;for(let s of Object.keys(i)){if(Mg.has(s))continue;let a=i[s];typeof a=="string"?!Fg.includes(s)&&a.includes(t)&&(i[s]=a.replaceAll(t,"")):n(a,o+1)}}for(let r of e)n(r?.data,0)}function XE(e){let t=[];for(let n of e){let r=n?.data;if(!(!r||typeof r!="object")){for(let o of Object.values(r))if(Array.isArray(o))for(let i of o)i&&typeof i=="object"&&!Array.isArray(i)&&t.push(i)}}return t}function YE(e){return typeof e=="string"&&e!==""||typeof e=="number"||typeof e=="boolean"}var ZE=new Set([...Fg,"owner","repo","name","id","type","kind","reason","isPartial"]);function ca(e){let t=XE(e);if(t.length<2)return;let n=t[0],r;for(let i of Object.keys(n)){if(ZE.has(i))continue;let s=n[i];YE(s)&&t.every(a=>a[i]===s)&&((r??={})[i]=s)}if(!r)return;let o=Object.keys(r);for(let i of t)for(let s of o)delete i[s];return r}function Eu(e,t){let n=e,r=t,o=e.results;if(Array.isArray(o)){let i=o,s=aa(i);s&&(n.base=s);let a=ca(i);a&&(n.shared=a),(s||a)&&(r=[...s?["base"]:[],...a?["shared"]:[],...t])}return{text:Qr(n,[...r]),structuredContent:sn(ii(n)??{})}}function Au(e,t,n){let r=Math.min(t+n,e.length);if(r>=e.length)return e.length;let o=Math.max(1,Math.floor(n/2)),i=[e.lastIndexOf(`
41
+ `,r-1)+1,e.lastIndexOf("\\n",r-1)+2].filter(a=>a>t&&a<=r),s=Math.max(...i,-1);return s-t>=o?s:r}function qE(e,t,n){let r=1,o=0;for(;o<t&&o<e.length;){let i=Au(e,o,n);if(i<=o)break;o=i,r+=1}return o===t?r:Math.floor(t/n)+1}function JE(e,t){if(e.length===0)return 1;let n=0,r=0;for(;r<e.length;){let o=Au(e,r,t);if(o<=r)return Math.max(1,Math.ceil(e.length/t));r=o,n+=1}return Math.max(1,n)}function Lu(e,t){let n=t?.responseCharLength,r=t?.responseCharOffset??0;if(n===void 0)return{text:e};let o=e.length,i=Math.max(1,n),s=Math.min(Math.max(0,r),o),a=Au(e,s,i),c=a<o,l=qE(e,s,i),u=JE(e,i),p=e.slice(s,a);return{text:`${c?`# Response page ${l}/${u}. Next: responseCharOffset=${a}
42
+ `:`# Response page ${l}/${u}.
43
+ `}${p}`,pagination:{scope:"content.text",currentPage:l,totalPages:u,hasMore:c,charOffset:s,charLength:a-s,totalChars:o,...c?{nextCharOffset:a}:{}}}}function _u(e,t,n){return t?{...e,responsePagination:{...t,...t.hasMore&&n?{next:n}:{}}}:e}function ku(e,t,n,r){if(!r?.hasMore||r.nextCharOffset===void 0)return;let o=t.map(i=>{let{goal:s,reasoning:a,...c}=i;return c});return{tool:e,query:{queries:o,responseCharLength:n?.responseCharLength,responseCharOffset:r.nextCharOffset}}}function cr(e,t){if(e===null||typeof e!="object")return!1;if(Array.isArray(e))return e.some(r=>cr(r,t));let n=e;return t(n)||Object.values(n).some(r=>cr(r,t))}function la(e,t){return e===null||typeof e!="object"?!1:Array.isArray(e)?e.some(n=>la(n,t)):Object.entries(e).some(([n,r])=>{if(r!==null&&typeof r=="object"&&!Array.isArray(r)){let o=r;if(t(n.toLowerCase())&&typeof o.tool=="string"&&o.query!==null&&typeof o.query=="object")return!0}return la(r,t)})}function Ng(e){return e.truncated===!0||e.capReached===!0||e.capped===!0||e.capturesTruncated===!0||e.totalMatchesCapped===!0||e.complete===!1||e.incompleteResults===!0||e.incompleteTree===!0||e.possiblyTruncated===!0||e.truncatedByDepth===!0||e.truncatedByBudget===!0||Array.isArray(e.partialTreeFailures)&&e.partialTreeFailures.length>0}function ua(e){return cr(e,t=>t.isPartial===!0||t.hasMore===!0||Ng(t))}function Iu(e){if(!ua(e))return[];if(cr(e,a=>a.terminalLimit===!0))return["terminalLimitReached"];let t=cr(e,a=>a.hasMore===!0),n=cr(e,Ng),r=cr(e,a=>a.isPartial===!0),o=la(e,a=>a.startsWith("next")||a.startsWith("continue")),i=la(e,a=>a.startsWith("expand")||a.startsWith("retry")||a.startsWith("narrow")||a.startsWith("fallback")||a.startsWith("escalate")||a.startsWith("read")||a.includes("search")||a.includes("completeness"));return t&&!o||n&&!i||r&&!o&&!i?["continuationMissing"]:[]}var eA=3;async function he(e,t,n,r){let o=n.concurrency??eA,{results:i,errors:s}=await Og(e,t,o,n.minQueryTimeoutMs);return tA(n,i,s,e,r)}function tA(e,t,n,r,o){let i=["results","base","shared"],s=["index","status","cache","meta","evidence","diagnostics","data"],a=[...new Set([...i,...s,...e.keysPriority||[]])],c=new Array(r.length);t.forEach(y=>{let g=y.result.status,S=iA(y.result);c[y.queryIndex]={index:y.queryIndex,...g!==void 0?{status:g}:{},...y.result.cache===1?{cache:1}:{},meta:Dg(e.toolName,y.originalQuery,S,g),data:S}}),n.forEach(y=>{let g=r[y.queryIndex];g&&(c[y.queryIndex]={index:y.queryIndex,status:"error",meta:Dg(e.toolName,g,{error:y.error},"error"),data:{error:y.error}})});let l=c.filter(y=>y!==void 0);if(e.finalize){let y=e.finalize({queries:r,results:l,config:e}),g=nA(y.structuredContent,l),S=Eu(g,y.keysPriority??a),R=y.renderText?y.renderText(S.structuredContent):S.text,C=Lu(R,o),P=_u(S.structuredContent,C.pagination,ku(e.toolName,r,o,C.pagination));return Hg(e.toolName,t,n,C.text.length),{content:[{type:"text",text:C.text}],structuredContent:P,isError:y.isError??(l.length>0&&l.every(T=>T.status==="error"))}}let p=Eu({results:l},a),d=p.text,m=Lu(d,o),f=_u(p.structuredContent,m.pagination,ku(e.toolName,r,o,m.pagination));return Hg(e.toolName,t,n,m.text.length),{content:[{type:"text",text:m.text}],structuredContent:f,isError:l.length>0&&l.every(y=>y.status==="error")}}function nA(e,t){if(!Array.isArray(e.results))return e;let n=new Map(t.map(i=>[i.index,i])),r=e.shared!==null&&typeof e.shared=="object"&&!Array.isArray(e.shared)?e.shared:void 0,o=e.results.map((i,s)=>{if(i===null||typeof i!="object"||Array.isArray(i))return i;let a=i,c=(typeof a.index=="number"?n.get(a.index):void 0)??t[s];if(!c)return a;let{cache:l,...u}=a,p=a.data!==null&&typeof a.data=="object"&&!Array.isArray(a.data)?a.data:c.data,d=rA(a.meta??c.meta,r?{...r,...p}:p);return{...u,...c.cache===1?{cache:1}:{},meta:d}});return{...e,results:o}}function Dg(e,t,n,r){let o=oA(e,t),i=n.confidence,s=r==="error"||i==="low"?"low":i==="high"||i==="medium"?i:o==="provider"||o==="lexical"||o==="syntactic"?"medium":"high",a=ua(n),c=[...typeof n.errorCode=="string"?[n.errorCode]:[],...Iu(n)],l=c.length>0||a;return{evidence:{kind:o,confidence:s},...l?{diagnostics:{...c.length>0?{codes:c}:{},...a?{partial:!0}:{}}}:{}}}function rA(e,t){let{diagnostics:n,...r}=e,o=[...(n?.codes??[]).filter(a=>a!=="continuationMissing"&&a!=="terminalLimitReached"),...Iu(t)],i=ua(t),s=o.length>0||i||(n?.hints?.length??0)>0;return{...r,...s?{diagnostics:{...o.length>0?{codes:o}:{},...n?.hints?.length?{hints:n.hints}:{},...i?{partial:!0}:{}}}:{}}}function oA(e,t){if(e==="localAnalyzeGraph")return"syntactic";if(e==="lspGetSemantics")return"semantic";if(e==="local.text")return t.mode==="structural"?"structural":"lexical";if(e==="localSearch"){let n=t.operation;return n==="structural"?"structural":n==="text"?"lexical":"exact"}return e.startsWith("gh")||e.startsWith("github.")||e==="npmSearch"?"provider":"exact"}function Hg(e,t,n,r){let o=t.reduce((i,s)=>i+(ie(s.result)??B(s.result)),0)+n.reduce((i,s)=>i+B(s),0);try{ss(e,o,r)}catch{}}function iA(e){let t=new Set(["status","cache","goal","reasoning","researchSuggestions","query"]);e.status!=="error"&&t.add("error");let n={};for(let[r,o]of Object.entries(e))t.has(r)||(n[r]=o);return n}function pa(e){return e.data!==void 0&&!e.error}function sA(e){return e.error!==void 0}import{maskSensitiveData as Gg}from"@octocodeai/octocode-engine/mask";var Ou=class extends Error{providerType;constructor(t,n){super(n),this.name="ProviderInitializationError",this.providerType=t}};function aA(){return rl().provider??nl()}function cA(e){let t=rl(),n=t.provider??nl(),{baseUrl:r,token:o}=t;try{let i=Su(n,{type:n,baseUrl:r,token:o,authInfo:e});return{providerType:n,provider:i,capabilities:i.capabilities,baseUrl:r,token:o,authInfo:e}}catch(i){let s=i instanceof Error?i.message:"Unknown provider error",a=Gg(s);throw new Ou(n,`Failed to initialize ${n} provider: ${a}`)}}function $e(e){let t;return()=>t??=cA(e)}function da(e,t){return e.capabilities[t]}async function an(e,t){let n=await t();return pa(n)?{ok:!0,response:n}:{ok:!1,result:oa(n,e)}}async function Bg(e,t){let n=t??aA(),r=await Promise.all(e.map(async s=>{try{return{meta:s.meta,response:await s.operation()}}catch(a){let c=a instanceof Error?a.message:String(a);return{meta:s.meta,response:{error:Gg(c),status:500,provider:n}}}})),o=[],i=[];for(let s of r)pa(s.response)?o.push({meta:s.meta,response:s.response}):i.push({meta:s.meta,response:s.response});return{successes:o,failures:i}}import{getConfigSync as lA}from"@octocodeai/config";async function zg(e){let{queries:t,authInfo:n}=e,r=$e(n);return he(t,async(o,i)=>Ct({toolName:I.GITHUB_CLONE_REPO,query:o,contextMessage:`Clone failed for ${o.owner}/${o.repo}`,execute:async()=>{if(lA().storage.mode==="memory")return N('Clone requires persistent local storage. Set storage.mode="persistent" or OCTOCODE_STORAGE_MODE=persistent to use ghCloneRepo.',o,{extra:{errorCode:"persistentStorageDisabled"}});let s=r();if(!da(s,"cloneRepo"))return He(new Error("ghCloneRepo is only available with the GitHub provider."),o,"Provider not supported",I.GITHUB_CLONE_REPO);let a;try{a=await Pg(o,n,s.token)}catch(d){let m=d instanceof Error?d.message:String(d);return N(`Clone failed for ${o.owner}/${o.repo}: ${m}`,o)}a.cached&&tn();let c=Lg(a.localPath),l={kind:o.sparsePath?"tree":"repo",localPath:a.localPath,source:"clone",cached:a.cached,complete:!0,resolvedBranch:a.branch,...o.sparsePath?{requestedPath:o.sparsePath}:{}},u={viewStructure:{tool:"localSearch",query:{operation:"tree",path:a.localPath},why:"Browse the cloned directory before choosing a text, structural, or file-discovery operation.",confidence:"exact"}},p={owner:o.owner,repo:o.repo,totalSize:c,location:l,next:u};return ge(o,p,!0,I.GITHUB_CLONE_REPO,{rawResponse:c})}}),{toolName:I.GITHUB_CLONE_REPO,keysPriority:["totalSize","location","error"],minQueryTimeoutMs:13e4},e)}import{z as jg}from"zod";function uA(e,t){return e?.description&&!t.description?t.describe(e.description):t}function Qg(e,t){let n={};for(let[r,o]of Object.entries(t))n[r]=uA(e.shape[r],o);return n}function pA(e,t){let n=e;return n.safeExtend?n.safeExtend(t):e.extend(t)}function Ug(e,t){if(!t?.length)return e;let n=new Set(t);return jg.object(Object.fromEntries(Object.entries(e.shape).filter(([r])=>!n.has(r))))}function se(e,t={},n={}){let r=Ug(e,n.omit);return pA(r,Qg(r,t)).strict()}function pe(e,t={},n={}){let r=Ug(e,n.omit);return jg.object({...r.shape,...Qg(r,t)}).strict()}var ma=se(Bl),vu=Z(ma);import{z as mA}from"zod";import{z as Ft}from"zod";var Wg=["fullContent","matchString","matchStringIsRegex","matchStringCaseSensitive","startLine","endLine"],dA=[...Wg,"contextLines","charOffset","charLength","minify"];function Vg(e,t){let n=new Set(t);return Object.fromEntries(Object.entries(e).filter(([r])=>!n.has(r)))}function fa(e,t){return e.description?t.describe(e.description):t}function Pe(e,t){let n=e[t];if(!n)throw new TypeError(`Expected schema field: ${t}`);return n}function Te(e,t){return Pe(e,t).nonoptional()}function $g(e,t){let n=Vg(e.shape,[...Wg,...t?["type"]:[]]),r=t?{type:t}:{},o=fa(Pe(e.shape,"fullContent"),Ft.literal(!1).optional()),i=fa(Pe(e.shape,"fullContent"),Ft.literal(!0)),s=Ft.object({...n,...r,fullContent:o}).strict(),a=Ft.object({...n,...r,fullContent:i}).strict(),c=Ft.object({...n,...r,fullContent:o,matchString:Te(e.shape,"matchString"),matchStringIsRegex:Pe(e.shape,"matchStringIsRegex"),matchStringCaseSensitive:Pe(e.shape,"matchStringCaseSensitive")}).strict(),l=Ft.object({...n,...r,fullContent:o,startLine:Te(e.shape,"startLine"),endLine:Te(e.shape,"endLine")}).strict().superRefine((u,p)=>{typeof u.startLine=="number"&&typeof u.endLine=="number"&&u.endLine<u.startLine&&p.addIssue({code:"custom",path:["endLine"],message:"Set endLine greater than or equal to startLine."})});return[s,a,c,l]}function ha(e,t={}){if(!t.githubDirectoryMode)return Ft.union($g(e));let n=fa(Pe(e.shape,"type"),Ft.literal("file").optional()),r=fa(Pe(e.shape,"type"),Ft.literal("directory")),o=Vg(e.shape,[...dA,"type"]),i=Ft.object({...o,type:r}).strict();return Ft.union([...$g(e,n),i])}var fA=mA.enum(["none","standard","symbols"]).optional(),Kg={startLine:Wr,endLine:Wr,contextLines:$r,charOffset:at.optional(),charLength:M(1,5e4).optional(),minify:fA},hA=pe(Ms,Kg),ci=se(Ms,Kg),Fu=Z(ha(hA,{githubDirectoryMode:!0}));function ga(e,t){return e&&t?`${e}/${t}`:void 0}function ya(e){let t=e.lastIndexOf("/");return t<=0?{owner:"",repo:e}:{owner:e.substring(0,t),repo:e.substring(t+1)}}function ba(e){return{...typeof e?.reportedTotalMatches=="number"?{reportedTotalMatches:e.reportedTotalMatches}:{},...typeof e?.reachableTotalMatches=="number"?{reachableTotalMatches:e.reachableTotalMatches}:{},...e?.totalMatchesKind?{totalMatchesKind:e.totalMatchesKind}:{},...typeof e?.totalMatchesCapped=="boolean"?{totalMatchesCapped:e.totalMatchesCapped}:{},...typeof e?.uniqueFileCount=="number"?{uniqueFileCount:e.uniqueFileCount}:{}}}function gA(e,t=500){if(t<=0)return"";let n=[...e];return n.length<=t?e:t<=3?".".repeat(t):n.slice(0,t-3).join("")+"..."}function Xg(e){return{keywords:e.keywords??[],projectId:ga(e.owner,e.repo),owner:e.owner,path:e.path,filename:e.filename,extension:e.extension,language:e.language,match:e.match,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning}}function Yg(e,t){let n=t.match==="path",r=new Map;for(let i of e.items){let s=i.repository.name||"",{owner:a,repo:c}=ya(s),l=`${a}/${c}`,u=r.get(l);if(u||(u={id:l,owner:a,repo:c,matches:[]},r.set(l,u)),n||!i.matches?.length){u.matches.push({path:i.path,...n?{}:{pathOnly:!0}});continue}let p=!1;for(let d of i.matches){if(!d.context)continue;let m=gA(d.context),f={path:i.path,value:m};if(d.positions?.length>0){let h=d.positions.filter(([,y])=>y<=m.length);h.length>0&&(f.matchIndices=h.map(([y,g])=>({start:y,end:g,lineOffset:(d.context??"").substring(0,y).split(`
44
+ `).length-1})))}u.matches.push(f),p=!0}p||u.matches.push({path:i.path,pathOnly:!0})}let o={results:Array.from(r.values()),...e.nonExistentScope?{nonExistentScope:!0}:{},...e.incompleteResults?{incompleteResults:!0}:{}};return e.pagination&&e.pagination.totalPages>1&&(o.pagination={currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,totalMatches:e.pagination.totalMatches||0,...ba(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}),o}function Zg(e){let t=e;return{keywords:e.keywords,topics:e.topicsToSearch,owner:e.owner,stars:e.stars,size:t.size,created:t.created,updated:e.updated,language:e.language,archived:t.archived,visibility:t.visibility,license:t.license,forks:t.forks,goodFirstIssues:t.goodFirstIssues,match:e.match,sort:e.sort,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning}}function qg(e){return e.map(t=>{let{owner:n,repo:r}=ya(t.fullPath);return{owner:n||"",repo:r||t.name,defaultBranch:t.defaultBranch,stars:t.stars,description:t.description||"",url:t.url,createdAt:t.createdAt,updatedAt:t.updatedAt,pushedAt:t.lastActivityAt,visibility:t.visibility,topics:t.topics,forksCount:t.forks,openIssuesCount:t.openIssuesCount,...t.language&&{language:t.language}}})}function Sa(e){return e.startsWith('"')?e:/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}function Jg(e){let t=(e.keywords??[]).filter(o=>o.trim()).map(Sa),n=e.query?.trim()??"",r=[...t,...n?[n]:[]].join(" ")||void 0;return{projectId:ga(e.owner,e.repo),owner:e.owner,query:r,number:e.prNumber,state:e.state,author:e.author,assignee:e.assignee,commenter:e.commenter,mentions:e.mentions,reviewRequested:e["review-requested"],reviewedBy:e["reviewed-by"],labels:(()=>{let o=e.label;if(o)return Array.isArray(o)?o:[o]})(),baseBranch:e.base,headBranch:e.head,created:e.created,updated:e.updated,closed:e.closed,mergedAt:e["merged-at"],comments:e.comments,reactions:e.reactions,draft:e.draft,match:e.match,checks:e.checks,review:e.review,archived:e.archived,content:e.content,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.pageSize,sort:e.sort,order:e.order,limit:e.pageSize??30,page:e.page,charOffset:e.charOffset,charLength:e.charLength,goal:e.goal,reasoning:e.reasoning}}function yA(e,t){let n=[];t.some(o=>o.state==="APPROVED")&&n.push("approval"),t.some(o=>o.state==="CHANGES_REQUESTED")&&n.push("changes-requested");let r=e.filter(o=>!ir(o.author??"")).map(o=>o.body.toLowerCase());return n.length===0&&r.some(o=>/\b(lgtm|looks good|approved|ship it)\b/.test(o))&&n.push("approval"),!n.includes("changes-requested")&&r.some(o=>/\b(change|fix|concern|blocker|blocking|request changes?)\b/.test(o))&&n.push("changes-requested"),r.some(o=>o.includes("?"))&&n.push("question"),n.length>0?n:["discussion"]}function bA(e,t){if(!e||e.length===0)return;let n=Array.from(new Set(e.map(i=>i.author))),r=e.map(i=>i.updatedAt||i.createdAt).filter(Boolean).sort().at(-1),o=e.filter(i=>i.commentType==="review_inline").length;return{totalComments:e.length,inlineComments:o,discussionComments:e.length-o,commenters:n.slice(0,8),commenterCount:n.length,...n.length>8?{commentersTruncated:!0}:{},...r?{latestCommentAt:r}:{},themes:yA(e,t??[])}}function ey(e,t={}){let{includeFileChanges:n=!0}=t,r=e.items.map(i=>{let s=i.fileChanges,a=s?.length??0,c=Array.isArray(i.comments)?i.comments:void 0,l=bA(c,i.reviews);return{number:i.number,title:i.title,body:i.body??void 0,...i.bodyPagination&&{bodyPagination:i.bodyPagination},state:i.state,draft:i.draft,author:i.author,assignees:i.assignees,labels:i.labels,sourceBranch:i.sourceBranch,targetBranch:i.targetBranch,sourceSha:i.sourceSha,targetSha:i.targetSha,createdAt:i.createdAt,updatedAt:i.updatedAt,closedAt:i.closedAt,mergedAt:i.mergedAt,commentsCount:i.commentsCount,changedFilesCount:i.changedFilesCount??a,additions:i.additions,deletions:i.deletions,...Array.isArray(i.comments)&&i.comments.length>0&&{comments:i.comments.map(u=>({...u,...u.bodyPagination&&{bodyPagination:u.bodyPagination}}))},...i.reviews&&{reviews:i.reviews},...i.commits&&{commits:i.commits},...l&&{reviewSummary:l},...s&&n?{fileChanges:s}:{},...Array.isArray(i.sanitizationWarnings)&&i.sanitizationWarnings.length>0?{sanitizationWarnings:i.sanitizationWarnings}:{}}}),o=e.pagination?{currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,...typeof e.pagination.totalMatches=="number"?{totalMatches:e.pagination.totalMatches}:{},...ba(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}:void 0;return{pullRequests:r,resultData:{pullRequests:r,...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},...o?{pagination:o}:{totalCount:e.totalCount||r.length}},pagination:o}}function ty(e){let t=!!e.fullContent;return{projectId:`${e.owner}/${e.repo}`,path:String(e.path),ref:e.branch?String(e.branch):void 0,startLine:t?void 0:e.startLine,endLine:t?void 0:e.endLine,matchString:t||!e.matchString?void 0:String(e.matchString),contextLines:e.contextLines??5,fullContent:t,forceRefresh:!!e.forceRefresh,charOffset:e.charOffset,charLength:e.charLength,minify:e.minify,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,goal:e.goal,reasoning:e.reasoning}}function ny(e,t){return{path:e.path,content:e.content,...typeof e.size=="number"&&e.size>0&&{fileSize:e.size},...typeof e.totalLines=="number"&&{totalLines:e.totalLines},...typeof e.sourceChars=="number"&&{sourceChars:e.sourceChars},...typeof e.sourceBytes=="number"&&{sourceBytes:e.sourceBytes},...e.contentView&&{contentView:e.contentView},...e.isPartial&&{isPartial:e.isPartial},...e.startLine&&{startLine:e.startLine},...e.endLine&&{endLine:e.endLine},...e.matchRanges?.length&&{matchRanges:e.matchRanges},...e.matchedLines?.length&&{matchedLines:e.matchedLines},...e.lastModified&&{lastModified:e.lastModified},...e.lastModifiedBy&&{lastModifiedBy:e.lastModifiedBy},...e.pagination&&{pagination:e.pagination},...e.warnings?.length&&{warnings:e.warnings},...e.matchNotFound===!0&&{matchNotFound:!0},...e.searchedFor&&{searchedFor:e.searchedFor},...e.ref&&t.branch!==e.ref?{resolvedBranch:e.ref}:{}}}function Mu(e,t){let n=e.include??[];return{projectId:`${e.owner}/${e.repo}`,ref:t,path:e.path?String(e.path):void 0,depth:typeof e.maxDepth=="number"?e.maxDepth:void 0,itemsPerPage:e.itemsPerPage??vn.ENTRIES_PER_PAGE,page:(()=>{let r=e.page;return typeof r=="number"?r:void 0})(),includeSizes:n.includes("sizes"),includeLanguages:n.includes("languages"),includeContributors:n.includes("contributors"),includeBranches:n.includes("branches"),includeTags:n.includes("tags"),goal:e.goal,reasoning:e.reasoning}}function ry(e,t,n,r){let o=r,i=e.branch??r,s=o&&i&&o!==i&&o!=="HEAD",a=Object.entries(n).sort(([g],[S])=>g==="."?-1:S==="."?1:g.localeCompare(S)).map(([g,S])=>({dir:g,files:S.files,folders:S.folders})),c=e.fileSizeMap,l={};if(c){for(let[g,S]of Object.entries(c))if(n[g]){let R=new Set(n[g].files);for(let[C,P]of Object.entries(S))if(R.has(C)){let T=g==="."?C:`${g}/${C}`;l[T]=P}}}let u=Object.values(n).reduce((g,S)=>(g.totalFiles+=S.files.length,g.totalFolders+=S.folders.length,g),{totalFiles:0,totalFolders:0}),p=e,d=e.summary.incompleteTree===!0,m=e.partialReasons&&e.partialReasons.length>0?e.partialReasons:d?["providerTreeTruncated"]:void 0,f=e.isPartial===!0||d,h=e.terminalLimit===!0||d,y={structure:a,...Object.keys(l).length>0&&{fileSizes:l},...p.languages?{languages:p.languages,dominantLanguage:p.dominantLanguage}:{},...p.contributors?{contributors:p.contributors,totalContributors:p.contributors.length}:{},...p.branches?{branches:p.branches,totalBranches:p.branches.length}:{},...p.tags?{tags:p.tags,totalTags:p.tags.length}:{},summary:{totalFiles:u.totalFiles,totalFolders:u.totalFolders,...d?{incompleteTree:!0}:{}},...f?{isPartial:!0}:{},...h?{terminalLimit:!0}:{},...m?{partialReasons:m}:{}};return i&&(y.resolvedBranch=i),s&&(y.branchFallback={requestedBranch:o,actualBranch:i,...e.defaultBranch!==void 0&&{defaultBranch:e.defaultBranch},warning:`Branch '${o}' not found. Showing '${i}' (default branch). Re-query with the correct branch name if branch-specific results are required.`}),e.pagination&&(e.pagination.hasMore||e.pagination.totalPages>1)&&(y.pagination=e.pagination),y}function Ra(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function SA(e){if(typeof e=="string")return{message:e};if(typeof e=="object"&&e!==null){let t=e;return{message:typeof t.error=="string"&&t.error.length>0?t.error:"Provider error",status:Ra(t.status),retryAfterSeconds:Ra(t.retryAfter),rateLimitRemaining:Ra(t.rateLimitRemaining),rateLimitReset:Ra(t.rateLimitReset)}}return{message:"Provider error"}}function oy(e){let t=[];for(let n of e){if(n.status!=="error")continue;let{message:r,status:o,retryAfterSeconds:i,rateLimitRemaining:s,rateLimitReset:a}=SA(n.data.error),c=o!==void 0?`${r} (HTTP ${o})`:r;t.push({index:n.index,error:c,...o!==void 0?{status:o}:{},...i!==void 0?{retryAfterSeconds:i}:{},...s!==void 0?{rateLimitRemaining:s}:{},...a!==void 0?{rateLimitReset:a}:{}})}return t}function Kr(e,t,n){return{structuredContent:e,keysPriority:t,isError:n}}import{z as V}from"zod";var RA=V.object({currentPage:V.number(),totalPages:V.number(),hasMore:V.boolean(),nextPage:V.number().optional(),pageSize:V.number().optional(),totalItems:V.number().optional(),perPage:V.number().optional(),totalFound:V.number().optional(),returned:V.number().optional(),totalMatches:V.number().optional(),reportedTotalMatches:V.number().optional().describe("Provider-reported raw total (e.g. GitHub's match count) \u2014 may exceed what pagination can actually reach."),reachableTotalMatches:V.number().optional().describe("Matches reachable by walking pages (bounded by the provider's result window, e.g. GitHub caps at 1000); totalPages is computed from this, not from reportedTotalMatches."),totalMatchesKind:V.enum(["exact","reported","lowerBound"]).optional(),totalMatchesCapped:V.boolean().optional(),totalResults:V.number().optional(),itemsPerPage:V.number().optional()}),G1=V.object({charOffset:V.number(),charLength:V.number(),totalChars:V.number(),hasMore:V.boolean(),nextCharOffset:V.number().optional(),currentPage:V.number().optional(),totalPages:V.number().optional(),chunkMode:V.enum(["semantic","char-limit"]).optional()}),B1=V.object({tool:V.string(),query:V.record(V.string(),V.unknown()),why:V.string().optional(),confidence:V.enum(["exact","high","medium","low"]).optional()}),z1=RA.extend({filesPerPage:V.number().optional(),entriesPerPage:V.number().optional(),matchesPerPage:V.number().optional(),totalFiles:V.number().optional(),totalEntries:V.number().optional(),totalMatches:V.number().optional(),totalFilesFound:V.number().optional(),nextMatchPage:V.number().optional()}),CA=["goal","reasoning"];function xA(e){let t;for(let n of CA)n in e&&(t??={...e},delete t[n]);return t??e}function We(e,t,n="Continue to the next page of results."){return{tool:e,query:xA(t),why:n,confidence:"exact"}}function Ca(e,t,n,r){if(!n||!n.hasMore||n.nextCharOffset===void 0)return;let o=r?.includeCharLength!==!1;return{continueChars:{tool:e,query:{...t,charOffset:n.nextCharOffset,...o&&n.charLength!==void 0?{charLength:n.charLength}:{}}}}}var wA=["package.json",".yarnrc.yml","pnpm-workspace.yaml","tsconfig.json","jsconfig.json","turbo.json","lerna.json","nx.json","babel.config.js","vite.config.ts","vite.config.js","webpack.config.js","rollup.config.js","jest.config.js","vitest.config.ts","commitlint.config.js","deno.json","deno.jsonc",".npmrc",".nvmrc",".node-version",".prettierrc",".prettierignore",".eslintignore",".stylelintrc",".editorconfig",".tool-versions","requirements.txt","pyproject.toml","setup.py","setup.cfg","Pipfile","tox.ini","environment.yml",".python-version","Gemfile",".ruby-version","composer.json","Cargo.toml","go.mod","go.work","mix.exs","rebar.config","pubspec.yaml","build.sbt","deps.edn","project.clj","Package.swift","CMakeLists.txt","Makefile.am","configure.ac","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","global.json","Directory.Build.props","Directory.Build.targets","packages.config","nuget.config","Dockerfile","docker-compose.yml","docker-compose.yaml",".dockerignore","Makefile","Vagrantfile","Chart.yaml","Procfile","Brewfile","serverless.yml","netlify.toml","vercel.json","renovate.json",".gitlab-ci.yml",".travis.yml","Jenkinsfile",".gitignore",".gitattributes",".gitmodules",".env",".env.example"],PA=new Set(wA),TA=["package-lock.json","npm-shrinkwrap.json","yarn.lock","pnpm-lock.yaml","bun.lockb","bun.lock","deno.lock","Pipfile.lock","poetry.lock","uv.lock","pdm.lock","pixi.lock","Gemfile.lock","composer.lock","Cargo.lock","Cargo.toml.orig","go.sum","Gopkg.lock","glide.lock","Package.resolved","pubspec.lock","flake.lock","MODULE.bazel.lock",".terraform.lock.hcl","mise.lock"],EA=new Set(TA),AA=[/\.lock$/],LA=[/^\.eslintrc(\..+)?$/,/^\.prettierrc(\..+)?$/,/^\.babelrc(\..+)?$/,/^eslint\.config\.(c|m)?js$/,/^\.env(\..+)?$/,/^tsconfig\..+\.json$/,/^\.stylelintrc(\..+)?$/,/^\.renovaterc(\..+)?$/,/\.csproj$/,/\.fsproj$/,/\.vbproj$/,/\.sln$/,/\.gemspec$/,/\.tf(vars)?$/],_A=[".toml",".ini",".cfg",".conf",".properties"],sy=new Set(_A),kA=new Set(".md .mdx .markdown .rst .adoc .asciidoc .txt .text .rtf .org .textile .rdoc .pod .creole .wiki".split(" ")),iy=new Set(["readme","license","licence","copying","notice","changelog","changes","history","authors","contributors","contributing","code_of_conduct","codeowners","install","citation"]),ay=new Set(".js .jsx .mjs .cjs .ts .tsx .mts .cts .py .pyi .pyx .rb .rake .php .go .rs .java .kt .kts .scala .groovy .clj .cljs .cljc .c .h .cc .cpp .cxx .hpp .hh .m .mm .cs .fs .vb .swift .dart .sh .bash .zsh .fish .ps1 .bat .cmd .vue .svelte .css .scss .sass .less .html .htm .sql .graphql .gql .proto .ex .exs .erl .lua .hs .pl .pm .r .jl".split(" "));function Nu(e){let t=e.replace(/\\/g,"/"),n=t.lastIndexOf("/");return n===-1?t:t.slice(n+1)}function Du(e){let t=e.lastIndexOf(".");return t>0?e.slice(t).toLowerCase():""}function IA(e){if(!e)return!1;let t=Nu(e);if(!t)return!1;if(PA.has(t))return!0;for(let r of LA)if(r.test(t))return!0;let n=Du(t);return!!(n&&sy.has(n))}function OA(e){if(!e)return!1;let t=Nu(e);if(!t)return!1;if(EA.has(t))return!0;for(let n of AA)if(n.test(t))return!0;return!1}function vA(e){let t=Du(e);if(t&&kA.has(t))return!0;if(t&&(ay.has(t)||sy.has(t)))return!1;let n=(t?e.slice(0,e.length-t.length):e).toLowerCase().replace(/\..*$/,""),r=n.split(/[-_.]/)[0]??n;return iy.has(n)||iy.has(r)}function FA(e){let t=Du(e);return t!==""&&ay.has(t)}function xa(e){if(!e)return;let t=Nu(e);if(t){if(OA(t))return"lock";if(IA(t))return"config";if(vA(t))return"doc";if(FA(t))return"code"}}function wa(e){return typeof e=="object"&&e!==null}function xt(e){return typeof e=="string"&&e.length>0?e:void 0}function ct(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function cy(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string");return t.length>0?t:void 0}function Mt(e,t){return ct(e[t])??0}function MA(e){if(wa(e))return{nonFile:Mt(e,"nonFile"),missingDownloadUrl:Mt(e,"missingDownloadUrl"),oversized:Mt(e,"oversized"),binary:Mt(e,"binary"),fileLimit:Mt(e,"fileLimit"),fetchFailed:Mt(e,"fetchFailed"),totalSizeLimit:Mt(e,"totalSizeLimit"),pathTraversal:Mt(e,"pathTraversal")}}function NA(e){if(wa(e))return{maxDirectoryFiles:Mt(e,"maxDirectoryFiles"),maxTotalSize:Mt(e,"maxTotalSize"),maxFileSize:Mt(e,"maxFileSize")}}var DA=["charOffset","charLength","totalChars","nextCharOffset","nextBlockChar","nextPage","nextMatchPage","filesPerPage","totalFiles","entriesPerPage","totalEntries","matchesPerPage","totalMatches"];function HA(e){if(!wa(e))return;let{currentPage:t,totalPages:n,hasMore:r}=e;if(typeof t!="number"||typeof n!="number"||typeof r!="boolean")return;let o={currentPage:t,totalPages:n,hasMore:r};for(let i of DA){let s=e[i];typeof s=="number"&&Number.isFinite(s)&&(o[i]=s)}return o}function GA(e,t){let{goal:n,reasoning:r,charOffset:o,...i}=t;return Ca("ghGetFileContent",{...i,charLength:e?.charLength??t.charLength},e)}function BA(e,t){if(t.matchString!==void 0)return;let n=ct(e.startLine),r=ct(e.endLine),o=ct(e.totalLines);if(e.isPartial!==!0||n===void 0||r===void 0||o===void 0||r>=o)return;let i=Math.max(1,r-n+1),s=r+1,a=Math.min(o,r+i);return{tool:"ghGetFileContent",query:{owner:t.owner,repo:t.repo,...t.branch!==void 0?{branch:t.branch}:{},path:t.path,startLine:s,endLine:a,...t.minify!==void 0?{minify:t.minify}:{}},why:`Continue the file at lines ${s}-${a}.`,confidence:"exact"}}function zA(e){return{tool:"ghCloneRepo",query:{owner:e.owner,repo:e.repo,...e.branch!==void 0?{branch:e.branch}:{},sparsePath:e.path},why:"lspGetSemantics (definitions/references) only works on local files \u2014 clone this path locally, then run localSearch or lspGetSemantics on it",confidence:"exact"}}function ly(){try{return Wf()}catch{return!1}}function jA(e){return{tool:"ghCloneRepo",query:{owner:e.owner,repo:e.repo,...e.branch!==void 0?{branch:e.branch}:{},sparsePath:e.path},why:"Clone this directory to retrieve content omitted by remote directory-fetch limits or failures.",confidence:"exact"}}function uy(e,t){let n=HA(e.pagination),r=ly(),o=n?.hasMore===!0?void 0:BA(e,t),i={...GA(n,t),...o?{continueLines:o}:{},...r?{cloneForSemantics:zA(t)}:{}},s=xt(e.path)??String(t.path??""),a=s?xa(s):void 0;return{path:s,content:typeof e.content=="string"?e.content:"",...a?{fileType:a}:{},localPath:xt(e.localPath),repoRoot:xt(e.repoRoot),contentView:e.contentView==="none"||e.contentView==="standard"||e.contentView==="symbols"?e.contentView:void 0,totalLines:ct(e.totalLines),sourceChars:ct(e.sourceChars),resolvedBranch:xt(e.resolvedBranch),...typeof e.commitSha=="string"&&e.commitSha.length===40?{commitSha:e.commitSha}:{},pagination:n,...Object.keys(i).length>0?{next:i}:{},...e.isPartial===!0||n?.hasMore===!0?{isPartial:!0}:{},startLine:ct(e.startLine),endLine:ct(e.endLine),...Array.isArray(e.matchRanges)&&e.matchRanges.length>0?{matchRanges:e.matchRanges}:{},...Array.isArray(e.matchedLines)&&e.matchedLines.length>0?{matchedLines:e.matchedLines}:{},lastModified:xt(e.lastModified),lastModifiedBy:xt(e.lastModifiedBy),warnings:cy(e.warnings),...e.matchNotFound===!0?{matchNotFound:!0}:{},searchedFor:xt(e.searchedFor),...e.cached===!0?{cached:!0}:{}}}function py(e,t){let r=(Array.isArray(e.files)?e.files:[]).filter(wa).map(p=>({path:xt(p.path)??"",size:ct(p.size)??0,type:xt(p.type)??"file"})),o=MA(e.skipped),i=e.hasSubdirectories===!0||(o?o.nonFile>0:!1),s=o?Object.entries(o).filter(([,p])=>p>0):[],a=s.length>0?Object.fromEntries(s):void 0,c=e.complete===!1,l=c?s.length>0?s.map(([p])=>p):["providerDirectoryIncomplete"]:[],u=c&&ly();return{path:String(t.path??""),localPath:xt(e.localPath)??"",repoRoot:xt(e.repoRoot),fileCount:ct(e.fileCount)??r.length,totalSize:ct(e.totalSize)??0,complete:e.complete===!0,verified:e.verified===!0,...typeof e.commitSha=="string"&&e.commitSha.length===40?{commitSha:e.commitSha}:{},...i?{hasSubdirectories:!0}:{},...a?{skippedSummary:a}:{},directoryEntryCount:ct(e.directoryEntryCount),eligibleFileCount:ct(e.eligibleFileCount),savedFileCount:ct(e.savedFileCount),skipped:o,limits:NA(e.limits),warnings:cy(e.warnings),...r.length>0?{files:r}:{},...e.cached===!0?{cached:!0}:{},resolvedBranch:xt(e.resolvedBranch),...c?{isPartial:!0,partialReasons:l,...u?{next:{escalateToClone:jA(t)}}:{terminalLimit:!0}}:{}}}function dy(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return;let t=e;return typeof t.message=="string"?t.message:t.error===e?void 0:dy(t.error)}function QA(e,t){let n=typeof t?.owner=="string"?t.owner:void 0,r=typeof t?.repo=="string"?t.repo:void 0;if(e.status==="error"){let i=e.data.error,s=dy(i)??"File content query failed",a=/\b404\b|not found/i.test(s);return{...n?{owner:n}:{},...r?{repo:r}:{},...t?.path?{path:String(t.path)}:{},error:a&&n&&r?`${s} \u2014 verify the path (exact case, no leading slash) and branch; use ghSearch with operation:"tree", owner:"${n}", repo:"${r}"`:s}}let o={owner:n??"",repo:r??""};return t?.type==="directory"?o.directories=[py(e.data,t)]:o.files=[uy(e.data,t??{})],o}function my(){return({queries:e,results:t})=>{let n=t.map(o=>({...o,data:QA(o,e[o.index])}));return Kr({results:n},["results","index","status","meta","data","owner","repo","files","directories","path","content","fileType","totalLines","startLine","endLine","isPartial","pagination","error"],n.length>0&&n.every(o=>o.status==="error"))}}import{getConfigSync as fy}from"@octocodeai/config";async function hy(e){let{queries:t,authInfo:n}=e,r=$e(n);return he(t,async(o,i)=>{try{let s=tt(ci,o,{prefix:!1});if(s.ok===!1)return s.error;let a=s.data,c=a.minify??(a.fullContent===!0?"none":"standard"),l={...a,minify:c};if(l.type==="directory"){let p=UA(l);if(p)return p}let u=r();return l.type==="directory"?$A(l,n,u):WA(l,n,u)}catch(s){return He(s,o,void 0,I.GITHUB_FETCH_CONTENT)}},{toolName:I.GITHUB_FETCH_CONTENT,finalize:my()},e)}function UA(e){let t=fy();if(!t.local.enabled)return N('Directory fetch requires local materialization. Set ENABLE_LOCAL=true to use type: "directory".',e,{extra:{errorCode:"localToolsDisabled"},rawResponse:0});if(!t.local.enableClone)return N('Directory fetch requires clone/materialization support. Set ENABLE_CLONE=true to use type: "directory".',e,{extra:{errorCode:"cloneDisabled"},rawResponse:0});if(t.storage.mode==="memory")return N('Directory fetch requires persistent local materialization. Set storage.mode="persistent" or OCTOCODE_STORAGE_MODE=persistent to use type: "directory".',e,{extra:{errorCode:"persistentStorageDisabled"},rawResponse:0})}async function $A(e,t,n){if(!da(n,"fetchDirectoryToDisk"))return He(new Error('Directory fetch (type: "directory") is only available with the GitHub provider. Use file mode (type: "file") instead.'),e,"Provider not supported",I.GITHUB_FETCH_CONTENT);if(!e.owner||!e.repo)return N("Directory fetch requires both owner and repo.",e,{rawResponse:0});let r=e.branch??await Be(e.owner,e.repo,t),o=await Tl(e.owner,e.repo,String(e.path),r,t,!!e.forceRefresh),i=(o.skipped?.nonFile??0)>0,s=o.skipped?Object.fromEntries(Object.entries(o.skipped).filter(([,u])=>u>0)):void 0,a={kind:"directory",localPath:o.localPath,repoRoot:o.repoRoot,source:"treeFetch",cached:o.cached,complete:o.complete,verified:o.verified,...o.commitSha?{commitSha:o.commitSha}:{},...i?{hasSubdirectories:!0}:{},...s&&Object.keys(s).length>0?{skippedSummary:s}:{},owner:e.owner,repo:e.repo},c={viewStructure:{tool:"localSearch",query:{operation:"tree",path:o.localPath}},...i?{escalateToClone:{tool:"ghCloneRepo",why:"nonFile skips indicate subdirectories were not fetched; clone for full coverage",query:{owner:e.owner,repo:e.repo,...e.branch?{branch:e.branch}:{},...e.path?{sparsePath:String(e.path)}:{}}}}:{}},l={localPath:o.localPath,repoRoot:o.repoRoot,fileCount:o.fileCount,totalSize:o.totalSize,complete:o.complete,verified:o.verified,...o.commitSha?{commitSha:o.commitSha}:{},directoryEntryCount:o.directoryEntryCount,eligibleFileCount:o.eligibleFileCount,savedFileCount:o.savedFileCount,...s&&Object.keys(s).length>0?{skipped:o.skipped}:{},limits:o.limits,...o.warnings?{warnings:o.warnings}:{},files:o.files,...o.cached?{cached:!0}:{},...e.branch!==o.branch?{resolvedBranch:o.branch}:{},location:a,next:c};return ge(e,l,!0,I.GITHUB_FETCH_CONTENT,{rawResponse:o.totalSize??B(o)})}async function WA(e,t,n){let r=await an(e,()=>n.provider.getFileContent(ty(e)));if(r.ok===!1)return r.result;let o=e.fullContent===!0&&e.minify==="none"&&fy().storage.mode==="persistent"?await VA(e,t):void 0,i={...ny(r.response.data,e),...o?{localPath:o.localPath,repoRoot:o.repoRoot,cached:o.cached,commitSha:o.commitSha,...o.branch?{resolvedBranch:o.branch}:{}}:{}},s=!!(r.response.data.matchNotFound===!0||r.response.data.content&&r.response.data.content.length>0);return ge(e,i,s,I.GITHUB_FETCH_CONTENT,{rawResponse:r.response.rawResponseChars})}async function VA(e,t){if(!e.owner||!e.repo||typeof e.path!="string")return;let n=e.branch??await Be(e.owner,e.repo,t);return Xl(e.owner,e.repo,e.path,n,t,!!e.forceRefresh)}function gy(e,t){return e.some(n=>{let r=t[n.index];return typeof r?.owner=="string"&&typeof r?.repo=="string"})}function yy(e){let t=e.data;return{results:Array.isArray(t?.results)?t.results:[],pagination:t?.pagination,...t?.nonExistentScope?{nonExistentScope:!0}:{},...t?.incompleteResults?{incompleteResults:!0}:{},...t?.repoState?{repoState:t.repoState}:{}}}function KA(e){return[...e].sort((t,n)=>{let r=n.matches.length-t.matches.length;return r!==0?r:t.id.localeCompare(n.id)})}function XA(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function YA(e,t){let n=(e.path.split("/").pop()??"").toLowerCase(),r=n.replace(/\.[^.]+$/,""),o=e.value??"",i=0;for(let s of t){let a=s.trim();if(!a)continue;let c=a.toLowerCase();if(n===c||r===c)return 2;(/^[A-Za-z0-9_]+$/.test(a)?new RegExp(`\\b${XA(a)}\\b`,"i").test(o):o.toLowerCase().includes(c))&&(i=Math.max(i,1))}return i}function ZA(e,t){return{...e,matches:t}}function Hu(e,t){let n=t.filter(o=>typeof o=="string"&&o.trim());return n.length===0?KA(e):e.map(o=>{let i=o.matches.map((s,a)=>({match:s,index:a,score:YA(s,n)}));return i.sort((s,a)=>s.score!==a.score?a.score-s.score:s.index-a.index),{group:ZA(o,i.map(s=>s.match)),hasExact:i.some(s=>s.score>0)}}).sort((o,i)=>{if(o.hasExact!==i.hasExact)return o.hasExact?-1:1;let s=i.group.matches.length-o.group.matches.length;return s!==0?s:o.group.id.localeCompare(i.group.id)}).map(o=>o.group)}function Sy(e){let t=new Map;for(let{index:n,groups:r}of e)for(let o of r){let i=`${n}\0${o.id}`,s=t.get(i);if(!s){t.set(i,{id:o.id,queryIndex:n,owner:o.owner,repo:o.repo,matches:[...o.matches]});continue}s.matches.push(...o.matches)}return Array.from(t.values())}function by(e){let t=new Map;for(let n of e)for(let r of n.matches){let o=`${n.queryIndex??-1}\0${n.owner}\0${n.repo}\0${r.path}`,i=t.get(o),{path:s,...a}=r;if(i){i.matches.push(a);continue}t.set(o,{owner:n.owner,repo:n.repo,path:r.path,matches:[a]})}return Array.from(t.values())}function Ry(e,t,n){if(t.length===0)return[];if(e.length===1){let i=t[0]?.queryIndex??0,s=n.get(i);return[{index:i,data:{files:by(t),...s?{pagination:s}:{}}}]}let r=new Map,o=[];for(let i of t){let s=i.queryIndex??0,a=r.get(s);a||(a=[],r.set(s,a),o.push(s)),a.push(i)}return o.map(i=>{let s=n.get(i);return{index:i,data:{files:by(r.get(i)),...s?{pagination:s}:{}}}})}function Cy(e,t,n){let r={};for(let o of e){let i=o.data.files[0];if(!i)continue;let s=t[o.index];if(s?.match==="path")continue;let c=(Array.isArray(s?.keywords)?s.keywords.filter(u=>typeof u=="string"):[])[0]??n[0];if(!c)continue;let l=e.length===1?"getLines":`getLines:${o.index}`;r[l]={tool:"ghGetFileContent",query:{owner:i.owner,repo:i.repo,path:i.path,matchString:c},why:"GitHub code search returns no line numbers; fetch the top hit with matchString to get exact file:line anchors",confidence:"low"}}return Object.keys(r).length>0?r:void 0}function Pa(){return({queries:e,results:t})=>{let n=[],r=new Map,o=[],i=new Set,s=[];t.forEach(x=>{if(x.status==="error")return;let b=yy(x);b.repoState&&s.push({index:x.index,state:b.repoState,query:e[x.index]}),b.incompleteResults&&i.add(x.index),b.results.reduce((O,v)=>O+v.matches.length,0)===0&&o.push({index:x.index,...b.nonExistentScope?{nonExistentScope:!0}:{},...b.incompleteResults?{incompleteResults:!0}:{}});let L=b.results;n.push({index:x.index,groups:L}),b.pagination&&r.set(x.index,b.pagination)});let a=Array.from(new Set(e.flatMap(x=>{let b=x.keywords;return Array.isArray(b)?b.filter(w=>typeof w=="string"):[]}))),c=Hu(Sy(n),a),l=oy(t),u=e.some(x=>x.concise===!0),p=new Map(t.map(x=>[x.index,x])),d=Ry(e,c,r).map(x=>{let b=p.get(x.index)?.meta;return{...x,...b?{meta:b}:{}}}),m=Cy(d,e,a);if(m)for(let x of d){let b=d.length===1?"getLines":`getLines:${x.index}`,w=m[b];w&&(x.data.next={getLines:w})}if(u)for(let x of d)x.data.files=x.data.files.map(b=>`${b.owner}/${b.repo}:${b.path}`);let f=o.map(({index:x,nonExistentScope:b,incompleteResults:w})=>{let L=p.get(x)?.meta;return{index:x,status:"empty",...L?{meta:L}:{},data:{files:[],...b?{nonExistentScope:b}:{},...w?{incompleteResults:w}:{}}}}),h=l.map(({index:x,error:b})=>{let w=p.get(x)?.meta;return{index:x,status:"error",...w?{meta:w}:{},data:{error:b}}}),g={results:[...d,...f,...h].sort((x,b)=>x.index-b.index)},S=g.results,R=x=>S.find(b=>b.index===x),C=(x,b,w,L=!1)=>{let O=R(x);if(!O)return;let v=O.meta,A=v?.diagnostics;O.meta={evidence:v?.evidence??{kind:"provider",confidence:"medium"},diagnostics:{...A??{},codes:Array.from(new Set([...A?.codes??[],b])),hints:Array.from(new Set([...A?.hints??[],w])),...L||A?.partial?{partial:!0}:{}}}},P=(x,b,w)=>{let L=R(x);!L||!("files"in L.data)||(L.data.next={...L.data.next??{},[b]:w})};for(let x of i){C(x,"ghIncompleteResults","GitHub reported an incomplete search index result; retry, narrow the scope, or verify locally before concluding absence.",!0);let{goal:b,reasoning:w,...L}=e[x];P(x,"retry",{tool:"github.code",query:L,why:"Retry the same query because GitHub marked the result incomplete",confidence:"exact"})}let T=new Set(s.map(({index:x})=>x));for(let x of o){if(T.has(x.index)||!gy([x],e))continue;let b=e[x.index];C(x.index,"ghScopedZeroUnproven","No indexed matches is unproven absence; verify the repository structure and search a bounded local copy before concluding."),P(x.index,"viewStructure",{tool:"github.tree",query:{owner:b.owner,repo:b.repo,path:""},why:"Verify that the scoped repository and path exist before concluding absence",confidence:"exact"})}let E=8,k=o.filter(({index:x,nonExistentScope:b,incompleteResults:w})=>{if(b||w)return!1;let L=e[x]?.keywords;return Array.isArray(L)&&L.length>E});if(k.length>0)for(let{index:x}of k){let b=e[x],w=Array.isArray(b.keywords)?b.keywords.filter(L=>typeof L=="string").slice(0,E):[];C(x,"ghQueryPossiblyTooComplex",`The query used more than ${E} keywords; narrow it before treating zero matches as absence.`),P(x,"retryNarrow",{tool:"github.code",query:{keywords:w,...typeof b.owner=="string"?{owner:b.owner}:{},...typeof b.repo=="string"?{repo:b.repo}:{},...typeof b.path=="string"?{path:b.path}:{},...typeof b.filename=="string"?{filename:b.filename}:{},...typeof b.extension=="string"?{extension:b.extension}:{},...typeof b.language=="string"?{language:b.language}:{},...b.match==="file"||b.match==="path"?{match:b.match}:{}},why:"Retry with a bounded keyword set to avoid silent under-matching",confidence:"low"})}for(let{index:x,state:b,query:w}of s)if(b.kind==="renamed"){let[L,O]=b.fullName.split("/");C(x,"ghRepoRenamed",`The repository was renamed to ${b.fullName}; retry against the renamed repository.`);let v=w?.keywords;P(x,"retryRenamed",{tool:"github.code",query:{owner:L,repo:O,...Array.isArray(v)?{keywords:v}:{}},why:"Re-run the same search against the renamed repository",confidence:"exact"})}else if(b.kind==="archived"){C(x,"ghRepoArchived","The repository is archived, so its code-search index may lag or be incomplete; verify its structure and search locally.");let L=w;typeof L?.owner=="string"&&typeof L.repo=="string"&&P(x,"viewStructure",{tool:"github.tree",query:{owner:L.owner,repo:L.repo,path:""},why:"Inspect the archived repository outside the code-search index",confidence:"exact"})}else{C(x,"ghRepoNotFound","The repository was not found or is private to this token; verify the spelling or discover the current repository name.");let L=w;typeof L?.repo=="string"&&P(x,"findRepository",{tool:"github.repositories",query:{keywords:[L.repo]},why:"Find the repository by name in case it moved or was renamed",confidence:"low"})}return Kr(g,["results","index","status","meta","evidence","diagnostics","data","files","path","owner","repo","queryIndex","matches","value","pathOnly","matchIndices","pagination","next","tool","query","why","confidence","nonExistentScope","incompleteResults","error"],c.length===0&&l.length>0)}}function qA(e){return!!((e.keywords??[]).some(n=>n.trim().length>0)||e.owner||e.path||e.extension||e.filename||e.language)}function JA(e){if(e.repo&&!e.owner)return{error:"Repository scope requires owner. Provide both owner and repo, or omit repo for a broader search."}}async function eL(e,t,n){try{let r=await $(n),{data:o}=await r.rest.repos.get({owner:e,repo:t}),i=`${e}/${t}`.toLowerCase();return o.full_name&&o.full_name.toLowerCase()!==i?{kind:"renamed",fullName:o.full_name}:o.archived?{kind:"archived"}:void 0}catch(r){return r.status===404?{kind:"notFound"}:void 0}}async function xy(e,t,n=$e(t.authInfo)){try{let r=JA(e);if(r)return N(r.error,e);if(!qA(e))return N("At least one search term or scope filter is required.",e);let o=n(),i=await an(e,()=>o.provider.searchCode(Xg(e)));if(i.ok===!1)return i.result;let s=Yg(i.response.data,e);if(s.results.length===0&&e.owner&&e.repo){let a=await eL(String(e.owner),String(e.repo),t.authInfo);a&&(s.repoState=a)}return ge(e,s,s.results.length>0,I.GITHUB_SEARCH_CODE,{rawResponse:i.response.rawResponseChars})}catch(r){return He(r,e,void 0,I.GITHUB_SEARCH_CODE)}}async function Ta(e,t,n){try{let r=await e.rest.repos.get({owner:t,repo:n}),[o,i]=r.data.full_name?.split("/")??[];return!o||!i?{owner:t,repo:n,renamed:!1}:{owner:o,repo:i,renamed:o!==t||i!==n}}catch{return{owner:t,repo:n,renamed:!1}}}function Py(e){return!!(e.topicsToSearch&&(Array.isArray(e.topicsToSearch)?e.topicsToSearch.length>0:e.topicsToSearch))}function Ea(e){return!!(e.keywords&&e.keywords.length>0)}function Ty(e){return!!(Ea(e)||Py(e)||e.owner||e.language||e.stars||e.updated||e.created||e.size||e.forks||e.license||e.goodFirstIssues||e.visibility||e.archived!==void 0)}function wy(e,t){return e?`${e} (${t==="topics"?"topics-based search":"keywords-based search"})`:`${t.charAt(0).toUpperCase()+t.slice(1)}-based repository search`}function Ey(e){let t=Py(e),n=Ea(e);if(t&&n){let{topicsToSearch:r,keywords:o,...i}=e;return[{label:"topics",query:{...i,reasoning:wy(e.reasoning,"topics"),topicsToSearch:r}},{label:"keywords",query:{...i,reasoning:wy(e.reasoning,"keywords"),keywords:o}}]}return[{label:"combined",query:e}]}function Ay(e,t){if(!e&&!t)return 0;if(!e)return 1;if(!t)return-1;let n=Date.parse(e),r=Date.parse(t);return Number.isNaN(n)&&Number.isNaN(r)?0:Number.isNaN(n)?1:Number.isNaN(r)?-1:r-n}function _y(e){let t=new Map;for(let n of e){let r=`${n.owner}/${n.repo}`;t.has(r)||t.set(r,n)}return[...t.values()]}function ky(e,t){return[...e].sort((n,r)=>{let o=tL(n,r,t.sort);if(o!==0)return o;let i=Ly(r,t)-Ly(n,t);if(i!==0)return i;let s=(r.stars??0)-(n.stars??0);return s!==0?s:Gu(n).localeCompare(Gu(r))})}function tL(e,t,n){switch(n){case"stars":return(t.stars??0)-(e.stars??0);case"forks":return(t.forksCount??0)-(e.forksCount??0);case"help-wanted-issues":return(t.openIssuesCount??0)-(e.openIssuesCount??0);case"updated":return Ay(e.updatedAt,t.updatedAt);case"best-match":case void 0:return 0;default:return 0}}function Ly(e,t){let n=nL(t),r=Gu(e).toLowerCase(),o=e.repo.toLowerCase(),i=(e.description??"").toLowerCase(),s=(e.topics??[]).map(u=>u.toLowerCase()),a=e.language?.toLowerCase(),c=t.language?.toLowerCase();return n.reduce((u,p)=>o===p||r===p?u+80:o.includes(p)||r.includes(p)?u+40:s.includes(p)?u+35:i.includes(p)?u+10:u,0)+(c&&a===c?20:0)}function nL(e){let t=e.keywords??[],n=e.topicsToSearch??[];return[...t,...n].map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)}function Gu(e){return`${e.owner}/${e.repo}`}function Bu(e){return{currentPage:e.currentPage,...e.totalMatchesKind!=="lowerBound"&&e.totalPages!==void 0?{totalPages:e.totalPages}:{},perPage:e.entriesPerPage??10,...e.totalMatches!==void 0?{totalMatches:e.totalMatches}:{},...e.reportedTotalMatches!==void 0?{reportedTotalMatches:e.reportedTotalMatches}:{},...e.reachableTotalMatches!==void 0?{reachableTotalMatches:e.reachableTotalMatches}:{},...e.totalMatchesKind!==void 0?{totalMatchesKind:e.totalMatchesKind}:{},...e.totalMatchesCapped!==void 0?{totalMatchesCapped:e.totalMatchesCapped}:{},hasMore:e.hasMore,...e.hasMore?{nextPage:e.currentPage+1}:{}}}function zu(e){return e.length===0?void 0:[`Repository search partially failed: the ${e.map(n=>`'${n.label}'`).join(", ")} query variant(s) returned an error. Results may be incomplete \u2014 retry or narrow the query.`]}function ju(e,t){let n=e.map(r=>r.response.data.pagination).filter(r=>!!r);if(n.length!==0)return{currentPage:n[0].currentPage,hasMore:n.some(r=>r.hasMore),entriesPerPage:n[0].entriesPerPage,totalMatches:t,reachableTotalMatches:t,totalMatchesKind:"lowerBound",totalMatchesCapped:n.some(r=>r.totalMatchesCapped===!0)}}function Iy(e){return e.reduce((t,n)=>t+(n.response.rawResponseChars??B(n.response.data??n.response)),0)}function rL(e){let t=e,n={owner:t.owner??"",repo:t.repo,stars:t.stars,forks:t.forksCount,openIssuesCount:t.openIssuesCount,language:t.language,license:t.license||void 0,description:t.description&&t.description!=="No description"?t.description:void 0,homepage:t.homepage||void 0,pushedAt:t.pushedAt?t.pushedAt.slice(0,10):void 0,createdAt:t.createdAt?t.createdAt.slice(0,10):void 0,updatedAt:t.updatedAt?t.updatedAt.slice(0,10):void 0,defaultBranch:t.defaultBranch&&t.defaultBranch!=="main"&&t.defaultBranch!=="master"?t.defaultBranch:void 0,topics:t.topics?.length?t.topics:void 0,visibility:t.visibility&&t.visibility!=="public"?t.visibility:void 0};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}function oL(e,t){let n=t.concise===!0,r=e.repositories[0],o=r?.owner&&r?.repo?{viewStructure:{tool:"github.tree",query:{owner:r.owner,repo:r.repo,path:""},why:"Orient in the top-ranked repository before reading code",confidence:"low"},searchCode:{tool:"github.code",query:{owner:r.owner,repo:r.repo},why:"Scope a code search to the top-ranked repository",confidence:"low"}}:void 0;return{data:{pagination:e.pagination,repositories:n?e.repositories.map(i=>`${i.owner?`${i.owner}/`:""}${i.repo}`):e.repositories.map(rL),...o?{next:o}:{}}}}async function Oy(e,t,n=$e(t.authInfo)){let{authInfo:r}=t;try{if(!Ty(e))return N("At least one repository search term or filter is required.",e);let o=n(),i=Ey(e),{successes:s,failures:a}=await Bg(i.map(E=>({meta:{label:E.label,query:E.query},operation:()=>o.provider.searchRepos(Zg(E.query))}))),c=s.map(E=>({label:E.meta.label,query:E.meta.query,response:E.response})),l=a.map(E=>({label:E.meta.label,query:E.meta.query,response:E.response}));if(c.length===0){let E=l[0];return E?oa(E.response,e):He(new Error("Repository search produced no provider results"),e,void 0,I.GITHUB_SEARCH_REPOSITORIES)}let u=e.limit,p=ky(_y(c.flatMap(E=>qg(E.response.data.repositories))),e),d=u!=null?p.slice(0,u):p,m=c.length===1?c[0]:void 0,h=c.length>1?ju(c,p.length):m?.response.data.pagination,y=h?Bu(h):void 0,g=d.length>0,S=oL({repositories:d,pagination:y},e),R=zu(l),C;if(e.owner&&Ea(e)){let E=(Array.isArray(e.keywords)?e.keywords:[e.keywords]).filter(x=>typeof x=="string"&&x.trim().length>0).slice(0,3),k=E.some(x=>d.some(b=>b.repo?.toLowerCase()===x.toLowerCase()));if(E.length>0&&!k)try{let x=await $(r);for(let b of E){let w=await Ta(x,String(e.owner),b);if(w.renamed){C={warning:`No repositories matched under owner "${e.owner}", but "${e.owner}/${b}" now resolves to "${w.owner}/${w.repo}" \u2014 the repository may have been transferred. Retry scoped to owner:"${w.owner}" (see next.retryUnderCanonicalOwner).`,next:{retryUnderCanonicalOwner:{tool:"github.repositories",query:{...e,owner:w.owner,keywords:[w.repo]},why:"Re-run scoped to the repository's current owner after a detected transfer.",confidence:"exact"}}};break}}}catch{}}let P=[...R??[],...C?[C.warning]:[],...!g&&!C?['No repositories matched. Keywords are ANDed \u2014 try fewer or broader keywords, drop a topic/filter (topics are sparse), or add match:"readme" for full-text search.']:[]],T={...S.data,...P.length>0?{warnings:P}:{},...C?{next:C.next}:{}};return ge(e,T,g,I.GITHUB_SEARCH_REPOSITORIES,{rawResponse:Iy([...c,...l])})}catch(o){return He(o,e,void 0,I.GITHUB_SEARCH_REPOSITORIES)}}function iL(e,t){let n=e.error,r=typeof n=="object"&&n!==null?n:void 0,o=typeof r?.status=="number"?r.status:void 0,i=typeof t.path=="string"?t.path.replace(/\/+$/,""):"",s=i.includes("/")?i.slice(0,i.lastIndexOf("/")):"",a=i.split("/").pop()||t.repo,c=o===404?{retryParent:{tool:"github.tree",query:{owner:t.owner,repo:t.repo,...s?{path:s}:{},...t.branch?{branch:t.branch}:{}},why:"Retry at the parent directory \u2014 the path or branch may be wrong.",confidence:"low"},searchPath:{tool:"github.code",query:{owner:t.owner,repo:t.repo,match:"path",keywords:[a]},why:"Locate the path by name in case it moved or was renamed.",confidence:"low"}}:void 0;return{status:"error",owner:t.owner,repo:t.repo,path:t.path,branch:t.branch,error:typeof r?.error=="string"?r.error:typeof n=="string"?n:"Failed to explore repository structure",...typeof r?.status=="number"?{statusCode:r.status}:{},...typeof r?.type=="string"?{errorType:r.type}:{},...c?{next:c}:{}}}function sL(e){let t={};for(let[n,r]of Object.entries(e)){let o=n.split("/").pop()??n;if(n!==""&&n!=="."&&Bo(o))continue;let i=r.files.filter(a=>!kr(a)),s=r.folders.filter(a=>!Bo(a));(i.length>0||s.length>0)&&(t[n]={files:i,folders:s})}return t}async function vy(e,t,n=$e(t.authInfo)){try{let r=n(),o=`${e.owner}/${e.repo}`,i=e.branch,s=i??await r.provider.resolveDefaultBranch(o),a=await an(e,()=>r.provider.getRepoStructure(Mu(e,s))),c=s,l;if(a.ok===!1&&i){let g=a.result.error;if((typeof g=="object"&&g!==null?g.status:void 0)===404){let R=await r.provider.resolveDefaultBranch(o);if(R!==i){let C=await an(e,()=>r.provider.getRepoStructure(Mu(e,R)));C.ok!==!1&&(a=C,c=R,l=`Branch/ref '${i}' was not found. Showing '${R}' (default branch) instead. Re-query with the correct branch name if branch-specific results are required.`)}}}if(a.ok===!1)return iL(a.result,e);let u=sL(a.response.data.structure),p=Object.keys(u).length>0,d=ry(a.response.data,e,u,c);l&&(d.branchFallback={requestedBranch:i,actualBranch:c,warning:l});let f=d.structure?.find(g=>(g.files?.length??0)>0),h=String(e.path??"").replace(/\/+$/,""),y=f?(()=>{let g=f.dir==="."?f.files[0]:`${f.dir}/${f.files[0]}`;return h?`${h}/${g}`:g})():void 0;return d.next={...y?{fetchFile:{tool:"ghGetFileContent",query:{owner:e.owner,repo:e.repo,path:y,...c?{branch:c}:{}},why:"Read the first listed file",confidence:"low"}}:{},materialize:{tool:"ghGetFileContent",query:{owner:e.owner,repo:e.repo,path:String(e.path??""),type:"directory",...c?{branch:c}:{}},why:"Materialize this directory locally for exact line anchors, local search, or LSP",confidence:"exact"}},ge(e,d,p,I.GITHUB_VIEW_REPO_STRUCTURE,{rawResponse:a.response.rawResponseChars})}catch(r){return He(r,e,"Failed to explore repository structure",I.GITHUB_VIEW_REPO_STRUCTURE)}}var Qu=1e3,aL={"github.code":"code","github.repositories":"repositories","github.tree":"tree"};function Fy(){return({queries:e,results:t})=>{let n=e.flatMap((d,m)=>d.operation==="code"?[{query:d,originalIndex:m}]:[]),r=new Map(n.map((d,m)=>[d.originalIndex,m])),o=n.map(d=>d.originalIndex),i=n.map(({query:d})=>{let{operation:m,...f}=d;return f}),s=t.filter(d=>r.has(d.index)).map(d=>({...d,index:r.get(d.index)})),a=cL(i,s).map(d=>({...d,index:o[d.index]??d.index})),c=new Set(o),l=t.filter(d=>!c.has(d.index)),u=[...a,...l].map(d=>lL(d,e[d.index])).sort((d,m)=>d.index-m.index);return Kr({results:u},["results","index","status","meta","data","operation","files","repositories","structure","pagination","next","tool","query","why","confidence","error"],u.length>0&&u.every(d=>d.status==="error"))}}function cL(e,t){return e.length===0?[]:Pa()({queries:e,results:t,config:{toolName:"github.code"}}).structuredContent.results??[]}function lL(e,t){let n=t?.operation;if(!n||!t)return e;let r=Uu({operation:n,...e.data}),o=pL(r),i=uL(o,n,t);return{...e,data:dL(i,n,t)}}function My(e,t){let{goal:n,reasoning:r,...o}=e;return{...o,page:t}}function uL(e,t,n){if(!n)return e;let r=e.pagination;if(!r||typeof r!="object")return e;let o=r;if(o.hasMore!==!0)return e;let{nextPage:i,...s}=o,a=typeof o.perPage=="number"&&o.perPage>0?o.perPage:typeof n.pageSize=="number"&&n.pageSize>0?n.pageSize:void 0;if(o.totalMatchesCapped===!0&&typeof i=="number"&&a!==void 0&&(i-1)*a>=Qu){let l=e.next&&typeof e.next=="object"?e.next:void 0,{nextPage:u,...p}=l??{};return{...e,pagination:{...s,continuationUnavailable:{reason:"providerResultCap",maxResults:Qu}},...Object.keys(p).length>0?{next:p}:{}}}if(typeof i!="number"||!Number.isInteger(i))return{...e,terminalLimit:!0,pagination:{...s,continuationUnavailable:{reason:"missingProviderCursor"}}};if(i>1e3)return{...e,terminalLimit:!0,pagination:{...s,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}};let c=e.next&&typeof e.next=="object"?e.next:{};return{...e,next:{...c,nextPage:{tool:"ghSearch",query:My(n,i),why:`Continue ${t} results on page ${i}.`,confidence:"exact"}}}}function pL(e){let t=e.pagination;if(!t||typeof t!="object"||t.totalMatchesCapped!==!0)return e;let n=Array.isArray(e.partialReasons)?e.partialReasons.filter(r=>typeof r=="string"):[];return{...e,isPartial:!0,terminalLimit:!0,partialReasons:n.includes("providerResultCap")?n:[...n,"providerResultCap"],providerLimit:{reason:"providerResultCap",maxResults:Qu}}}function dL(e,t,n){if(e.terminalLimit===!0)return e;let r=e.incompleteResults===!0,o=Array.isArray(e.partialReasons)?e.partialReasons.filter(l=>typeof l=="string"):[],i=o.includes("partialTreeFailures");if(!r&&!i)return e;let s=[...o,...r&&!o.includes("providerIncompleteResults")?["providerIncompleteResults"]:[]],a=e.next&&typeof e.next=="object"?e.next:{},c=typeof n.page=="number"&&Number.isInteger(n.page)?n.page:1;return{...e,isPartial:!0,partialReasons:s,next:{...a,...a.retry?{}:{retry:{tool:"ghSearch",query:My(n,c),why:`Retry the same ${t} provider page because the provider reported incomplete results.`,confidence:"exact"}}}}}function Uu(e){if(Array.isArray(e))return e.map(Uu);if(!e||typeof e!="object")return e;let t=Object.fromEntries(Object.entries(e).map(([r,o])=>[r,Uu(o)])),n=typeof t.tool=="string"?aL[t.tool]:void 0;if(n&&(t.tool="ghSearch",t.query&&typeof t.query=="object")){let r={...t.query};n==="tree"?(r.pageSize=r.itemsPerPage,delete r.itemsPerPage):n==="repositories"?(r.pageSize=r.limit,delete r.limit,r.topics=r.topicsToSearch,delete r.topicsToSearch):n==="code"&&(r.pageSize=r.limit,delete r.limit),t.query={operation:n,...r}}return t}function Wu(e){return typeof e=="string"&&e.trim().length>0}function $u(e){return Array.isArray(e)&&e.some(Wu)}function mL(e){return e.operation==="code"?$u(e.keywords)||["owner","path","extension","filename","language"].some(t=>Wu(e[t])):e.operation==="repositories"?$u(e.keywords)||$u(e.topics)||["owner","language","stars","forks","goodFirstIssues","updated","created","size","visibility","license"].some(t=>Wu(e[t]))||typeof e.archived=="boolean":!0}var Xr=Dl.superRefine((e,t)=>{mL(e)||t.addIssue({code:"custom",path:["operation"],message:`${e.operation} needs at least one search term or scope filter`})}),Vu=Z(Xr,{maxQueries:5});async function Ny(e){let t=$e(e.authInfo);return he(e.queries,n=>Ct({toolName:St,query:n,contextMessage:"ghSearch execution failed",execute:async()=>{let r=Xr.safeParse(n);if(!r.success)throw r.error;return fL(r.data,e,t)}}),{toolName:St,finalize:Fy()},e)}async function fL(e,t,n){let{operation:r,...o}=e;switch(r){case"code":{let{pageSize:i,...s}=o,a={...s,limit:i};return xy(a,{...t,queries:[a]},n)}case"repositories":{let{topics:i,pageSize:s,...a}=o,c={...a,topicsToSearch:i,limit:s};return Oy(c,{...t,queries:[c]},n)}case"tree":{let{pageSize:i,...s}=o;return vy({...s,itemsPerPage:i},{...t,queries:[{...s,itemsPerPage:i}]},n)}default:throw new Error("Unsupported ghSearch operation")}}function hL(e){let t=e?.patches;return t?.mode?{mode:t.mode,...t.files?{files:t.files}:{},...t.ranges?{ranges:t.ranges}:{}}:{mode:"none"}}function gL(e){let t=e?.comments;return t?{discussion:t.discussion??!0,reviewInline:t.reviewInline??!0,includeBots:t.includeBots??!1,...t.file?{file:t.file}:{}}:!1}function yL(e){let t=e?.commits;return t?{list:!0,includeFiles:t.includeFiles??!1}:!1}function Dy(e){let{content:t}=e,n=hL(t),r=gL(t),o=yL(t);return{body:t?.body??!1,changedFiles:(t?.changedFiles??!1)||n.mode!=="none",patches:n,comments:r,reviews:t?.reviews??!1,commits:o}}function gW(e){return!!(e.body||e.changedFiles||e.patches.mode!=="none"||e.comments||e.reviews||e.commits)}function Fn(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Ku(e,t){return Fn(Object.fromEntries(t.map(n=>[n,e[n]])))}function li(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function lr(e){return e===!0?!0:void 0}function bL(e){if(!Array.isArray(e))return;let t=e.flatMap(n=>{if(!li(n)||typeof n.file!="string")return[];let r=Array.isArray(n.additions)?n.additions.filter(i=>typeof i=="number"):void 0,o=Array.isArray(n.deletions)?n.deletions.filter(i=>typeof i=="number"):void 0;return[Fn({file:n.file,...r?.length?{additions:r}:{},...o?.length?{deletions:o}:{}})]});return t.length>0?t:void 0}function Hy(e){if(!li(e))return;let t=li(e.comments)?Fn({discussion:lr(e.comments.discussion),reviewInline:lr(e.comments.reviewInline),includeBots:lr(e.comments.includeBots),file:typeof e.comments.file=="string"?e.comments.file:void 0}):void 0,n=li(e.commits)?Fn({includeFiles:lr(e.commits.includeFiles)}):void 0,r=li(e.patches)?Fn({mode:e.patches.mode==="all"||e.patches.mode==="selected"?e.patches.mode:void 0,files:Array.isArray(e.patches.files)?e.patches.files.filter(i=>typeof i=="string"):void 0,ranges:bL(e.patches.ranges)}):void 0,o=Fn({body:lr(e.body),changedFiles:lr(e.changedFiles),...r&&Object.keys(r).length>0?{patches:r}:{},...t&&Object.keys(t).length>0?{comments:t}:{},reviews:lr(e.reviews),...n&&Object.keys(n).length>0?{commits:n}:{}});return Object.keys(o).length>0?o:void 0}function Gy(e,t,n={}){let r={...e,...n},o=Hy(e.content),i=Hy(n.content),s=o||i?{...i??{},...o??{}}:void 0;return Fn({operation:"pullRequest",owner:e.owner,repo:e.repo,number:t,...Ku(r,["pageSize","filePage","commentPage","commitPage","charOffset","commentBodyOffset","charLength","matchString","minify"]),...s?{content:s}:{}})}function Xu(e,t={}){let n={...e,...t};return Fn({operation:"commit",...Ku(n,["owner","repo","ref","includeDiff","path","filePage","pageSize","charOffset","charLength"])})}var SL={pullRequests:["keywords","owner","repo","concise","state","assignee","author","commenter","mentions","review-requested","reviewed-by","label","checks","review","head","base","created","updated","closed","merged-at","comments","reactions","draft","match","sort","order","archived","minify","pageSize"],issues:["owner","repo","keywords","concise","state","author","assignee","commenter","mentions","label","created","updated","closed","comments","reactions","match","sort","order","archived","minify","pageSize"],commits:["owner","repo","path","since","until","branch","author","committer","pageSize"]};function Yu(e,t,n){return{operation:t,...Ku(e,SL[t]),page:n}}function ui(e){let t=e.matchString;if(typeof t!="string")return;let n=t.trim().toLowerCase();return n.length>0?n:void 0}function Yr(e,t){return typeof e=="string"&&e.toLowerCase().includes(t)}function pi(e,t=1,n=20){let r=Math.min(Math.max(1,n),100),o=e.length,i=Math.max(1,Math.ceil(o/r)),s=Math.min(Math.max(1,t),i),a=(s-1)*r,c=Math.min(a+r,o);return{items:e.slice(a,c),pagination:{currentPage:s,totalPages:i,itemsPerPage:r,totalItems:o,hasMore:s<i,...s<i&&s<1e3?{nextPage:s+1}:{},...s<i&&s>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}}function ur(e,t=0,n=12e3){if(typeof e!="string")return;let r=e.length,o=Math.min(Math.max(0,t),r),i=Math.min(Math.max(1,n),5e4),s=Math.min(o+i,r),a=s<r;return{content:e.slice(o,s),pagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function Aa(e,t=500){if(!(typeof e!="string"||e.length===0))return e.length<=t?e:`${e.slice(0,t-3)}...`}function By(e,t){return{operation:"pullRequest",owner:e.owner,repo:e.repo,number:t}}function di(e,t,n){return Gy(e,t,n)}function Zu(e,t,n,r,o={}){if(!(!r.hasMore||r.nextCharOffset===void 0))return di(e,t,{content:n,...o,charOffset:r.nextCharOffset,charLength:e.charLength})}function La(e,t,n,r,o){if(!(!o.hasMore||o.nextPage===void 0))return di(e,t,{content:n,[r]:o.nextPage,pageSize:e.pageSize})}function Zr(e){return typeof e=="object"&&e!==null}function _a(e){if(Zr(e)&&!(typeof e.currentPage!="number"||typeof e.totalPages!="number"||typeof e.itemsPerPage!="number"||typeof e.totalItems!="number"||typeof e.hasMore!="boolean"))return e}function ka(e){if(Zr(e)&&!(typeof e.charOffset!="number"||typeof e.charLength!="number"||typeof e.totalChars!="number"||typeof e.hasMore!="boolean"))return e}function RL(e,t){return e.filter(n=>{let r=n.commentType;return t.file&&n.path!==t.file?!1:r==="review_inline"?t.reviewInline:t.discussion})}function zy(e,t,n){if(!n.comments)return{};let r=Array.isArray(e.comments)?e.comments:[],o=RL(r,n.comments),i=ui(t),s=i?o.filter(l=>Yr(l.body,i)):o,{items:a,pagination:c}=pi(s,t.commentPage??t.page??1,t.pageSize??20);return{comments:a.map(l=>{let u=ur(typeof l.body=="string"?l.body:"",t.commentBodyOffset??0,t.charLength??12e3);return{id:l.id,author:l.author,commentType:l.commentType??"discussion",path:l.path,line:l.line,...l.in_reply_to_id!=null?{in_reply_to_id:l.in_reply_to_id}:{},...u?{body:u.content,bodyPagination:u.pagination}:{bodyPreview:Aa(typeof l.body=="string"?l.body:"")},createdAt:l.createdAt,updatedAt:l.updatedAt}}),contentPagination:{comments:c}}}function jy(e,t,n){if(!n.reviews)return{};let r=Array.isArray(e.reviews)?e.reviews:[],o=ui(t);return{reviews:(o?r.filter(s=>Yr(s.body,o)):r).map(s=>{let a=typeof s.body=="string"?s.body:"",c=ur(a||void 0,0,t.charLength??12e3);return{id:s.id,user:s.user,state:s.state,...c?{body:c.content,bodyPagination:c.pagination}:{},submittedAt:s.submittedAt??s.submitted_at,commitId:s.commitId??s.commit_id}})}}function Qy(e,t,n){if(!n.commits)return{};let r=Array.isArray(e.commits)?e.commits:[],{items:o,pagination:i}=pi(r,t.commitPage??t.page??1,t.pageSize??20);return{commits:o.map(s=>({sha:s.sha,message:s.message,author:s.author,date:s.date,...n.commits&&n.commits.includeFiles&&Array.isArray(s.files)?{files:s.files}:{}})),contentPagination:{commits:i}}}function Ia(e){return String(e.path??e.filename??"")}function CL(e,t){return{path:Ia(e),status:String(e.status??""),additions:Number(e.additions??0),deletions:Number(e.deletions??0),...t&&typeof e.patch=="string"?{patch:e.patch}:{}}}function Uy(e,t,n){let r=Array.isArray(e.fileChanges)?e.fileChanges:[],o=n.patches.files,i=o&&o.length>0?r.filter(d=>o.includes(Ia(d))):r,s=ui(t),a=s?i.filter(d=>Yr(Ia(d),s)||Yr(d.patch,s)):i,{items:c,pagination:l}=pi(a,t.filePage??t.page??1,t.pageSize??20),u=n.patches.mode!=="none",p=c.map(d=>{let m=CL(d,!1);if(!u||typeof d.patch!="string")return m;let f=ur(d.patch,t.charOffset??0,t.charLength??12e3);return{...m,patch:f?.content??"",...f?{patchPagination:f.pagination}:{}}});return n.changedFiles||n.patches.mode!=="none"?{changedFiles:p,contentPagination:{changedFiles:l}}:r.length===0?{}:{filePathsPreview:r.slice(0,20).map(Ia).filter(Boolean),contentPagination:{filePaths:{totalFiles:r.length,filesPerPage:20,hasMore:r.length>20,...r.length>20?{nextFilePage:2}:{}}}}}function Mn(e,t){return{...e,content:t}}function $y(e,t,n,r){let o=By(e,t);return{target:o,...n.body?{}:{getBody:Mn(o,{body:!0})},...n.changedFiles?{}:{getChangedFiles:Mn(o,{changedFiles:!0})},...n.patches.mode!=="none"?{}:{getSelectedPatches:Mn(o,{patches:{mode:"selected",files:[r??"path/from/changedFiles"]}}),getAllPatches:Mn(o,{patches:{mode:"all"}})},...n.comments?{}:{getComments:Mn(o,{comments:{discussion:!0,reviewInline:!0}})},...n.reviews?{}:{getReviews:Mn(o,{reviews:!0})},...n.commits?{}:{getCommits:Mn(o,{commits:{}})},fullReview:Mn(o,{body:!0,changedFiles:!0,patches:{mode:"all"},comments:{discussion:!0,reviewInline:!0},reviews:!0,commits:{}})}}function xL(e){return e.replace(/\n{3,}/g,`
33
45
 
34
- `)}function Xx(e){return{...e.changedFiles?{changedFiles:!0}:{},...e.patches.mode!=="none"?{patches:e.patches}:{}}}function qx(e){let t=e.changedFiles;if(Array.isArray(t))for(let n of t){if(!Hn(n))continue;let r=Ki(n.patchPagination);if(r?.hasMore)return r}}function Jx(e){let t=e.comments;if(Array.isArray(t))for(let n of t){if(!Hn(n))continue;let r=Ki(n.bodyPagination);if(r?.hasMore)return r}}function Zx(e,t,n,r){let o={},i=Ki(e.bodyPagination),s=Vi(e.filePagination),a=Vi(e.commentPagination),c=Vi(e.commitPagination),u=qx(e),l=Jx(e),p=Xx(n);i&&(o.body={...i,nextQuery:fc(t,r,{body:!0},i)}),s&&(o.changedFiles={...s,nextQuery:Wi(t,r,p,"filePage",s)}),a&&n.comments&&(o.comments={...a,nextQuery:Wi(t,r,{comments:n.comments},"commentPage",a)}),l?.hasMore&&l.nextCharOffset!==void 0&&n.comments&&(o.commentBody={...l,nextQuery:qr(t,r,{content:{comments:n.comments},...t.commentPage!==void 0?{commentPage:t.commentPage}:{},commentBodyOffset:l.nextCharOffset,charLength:t.charLength})}),c&&n.commits&&(o.commits={...c,nextQuery:Wi(t,r,{commits:n.commits},"commitPage",c)}),u&&n.patches.mode!=="none"&&(o.patches={...u,nextQuery:fc(t,r,{patches:n.patches},u,{filePage:t.filePage??t.page})});let m=e.filePathsPagination;return Hn(m)&&(o.filePaths={...m,hasMore:m.hasMore===!0,nextQuery:m.hasMore===!0?qr(t,r,{content:{changedFiles:!0},filePage:m.nextFilePage}):void 0}),Object.keys(o).length>0?o:void 0}function eP(e){delete e.bodyPagination,delete e.filePagination,delete e.commentPagination,delete e.commitPagination,delete e.filePathsPagination}function Om(e,t,n,r,o){let i=Number(e.number),s=typeof e.body=="string"?e.body:void 0,a=s&&r?Yx(s):s,c=n.body?tn(a,t.charOffset??0,t.charLength??12e3):void 0,u=n.body||n.changedFiles||n.patches.mode!=="none"||!!n.comments||n.reviews||!!n.commits,l=o!==void 0?o:u,m=t.prNumber!==void 0||t.verbose===!0,d=_m(e,t,n),f=Array.isArray(d.changedFiles)?d.changedFiles.find(y=>y.path)?.path:void 0,R={...{number:e.number,title:e.title,state:e.state,...e.draft?{draft:e.draft}:{},author:e.author,...Array.isArray(e.assignees)&&e.assignees.length?{assignees:e.assignees}:{},...Array.isArray(e.labels)&&e.labels.length?{labels:e.labels}:{},targetBranch:e.targetBranch,...m?{sourceBranch:e.sourceBranch,...e.sourceSha?{sourceSha:e.sourceSha}:{}}:{},createdAt:e.createdAt,...m?{updatedAt:e.updatedAt}:{},...m||!e.mergedAt?{closedAt:e.closedAt}:{},mergedAt:e.mergedAt,...e.commentsCount?{commentsCount:e.commentsCount}:{},...e.changedFilesCount?{changedFilesCount:e.changedFilesCount}:{},...e.additions?{additions:e.additions}:{},...e.deletions?{deletions:e.deletions}:{},...m&&!c?{bodyPreview:zi(typeof e.body=="string"?e.body:void 0)}:{},...l?{next:Im(t,i,n,f)}:{}},...n.body?c?{body:c.content,bodyPagination:c.pagination}:{bodyEmpty:!0}:{},...d,...Lm(e,t,n),...Am(e,t,n),...km(e,t,n),...e.reviewSummary?{reviewSummary:e.reviewSummary}:{},...Array.isArray(e.sanitizationWarnings)&&e.sanitizationWarnings.length>0?{sanitizationWarnings:e.sanitizationWarnings}:{}},h=Zx(R,t,n,i);return eP(R),h&&(R.contentPagination=h),R}async function Fm(e,t,n){let r=await fe(t),o=ce("gh-api-releases",{owner:e.owner,repo:e.repo,page:e.page,perPage:e.perPage,includeAssets:e.includeAssets===!0,auth:r},n);return he(o,()=>tP(e,t),{shouldCache:i=>"data"in i&&!("error"in i)})}async function tP(e,t){try{let n=await Q(t),[r,o]=await Promise.all([n.rest.repos.listReleases({owner:e.owner,repo:e.repo,per_page:e.perPage,page:e.page}),n.rest.repos.getLatestRelease({owner:e.owner,repo:e.repo}).catch(()=>{})]),i=o?.data,s=r.data.map(c=>({tagName:c.tag_name,...c.name&&c.name!==c.tag_name?{name:c.name}:{},...c.published_at?{publishedAt:c.published_at}:{},...c.prerelease?{prerelease:!0}:{},...c.draft?{draft:!0}:{},...i!==void 0&&c.id===i.id?{latest:!0}:{},...e.includeAssets&&c.assets&&c.assets.length>0?{assets:c.assets.map(u=>({name:u.name,size:u.size,downloadCount:u.download_count,url:u.browser_download_url}))}:{}})),a=_n(r.headers.link);return{data:{type:"releases",owner:e.owner,repo:e.repo,releases:s,...i?{latest:{tagName:i.tag_name,...i.published_at?{publishedAt:i.published_at}:{}}}:{},pagination:{currentPage:e.page,perPage:e.perPage,hasMore:a,...a?{nextPage:e.page+1}:{}}},status:200}}catch(n){return V(n)}}var nP=30;async function vm(e,t,n){let r=t;if(!r.owner||!r.repo)return F("owner and repo are required for releases mode.",e);let o=e.limit,i=Number(typeof o=="number"?o:r.itemsPerPage)||nP,s=await Fm({owner:r.owner,repo:r.repo,page:Number(r.page)||1,perPage:i,includeAssets:r.includeAssets===!0},n);if(Oe(s))return F(s,e,{toolName:x.GITHUB_RELEASES});let a=s.data.releases.length>0||s.data.latest!==void 0,c=s.data.pagination?.nextPage,u={...s.data,...c!==void 0?{next:{nextPage:{tool:"ghListReleases",query:{owner:r.owner,repo:r.repo,page:c,itemsPerPage:i},why:"Fetch the next page of releases",confidence:"exact"}}}:{}};return se(e,u,a,x.GITHUB_RELEASES,{rawResponse:s.rawResponseChars})}function ot(e){if(typeof e=="string")return e;if(Array.isArray(e)&&typeof e[0]=="string")return e[0]}function hc(e){let t=(e.keywordsToSearch??[]).filter(o=>o.trim()).map(Hi),n=e.query?.trim()??"";return[...t,...n?[n]:[]].join(" ")||void 0}function Dm(e,t,n){if(!n&&!t)return{text:e};let r=e.length,o=Math.min(Math.max(0,t??0),r),i=Math.max(1,n??r),s=Math.min(o+i,r),a=s<r;return{text:e.slice(o,s),pagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function Xi(e){return e.pull_request!=null}function rP(e){return e?e.map(t=>typeof t=="string"?t:t.name??"").filter(Boolean):[]}function qi(e){return{number:e.number,title:e.title??"",state:e.state??"open",author:e.user?.login??"unknown",labels:rP(e.labels),createdAt:e.created_at??"",updatedAt:e.updated_at??"",...e.closed_at?{closedAt:e.closed_at}:{}}}function Bn(e,t=[]){return{error:e,type:"http",...t.length>0?{hints:t}:{}}}function gc(e,t,n="anon"){return ce("gh-api-issues",{owner:e.owner,repo:e.repo,issueNumber:e.issueNumber,query:hc(e),state:e.state,author:e.author,assignee:e.assignee,mentions:e.mentions,commenter:e.commenter,label:e.label,milestone:e.milestone,created:e.created,updated:e.updated,closed:e.closed,comments:e.comments,reactions:e.reactions,locked:e.locked,visibility:e.visibility,archived:e.archived,match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,charOffset:e.charOffset,charLength:e.charLength,commentPage:e.commentPage,itemsPerPage:e.itemsPerPage,concise:e.concise,auth:n},t)}import{ContentSanitizer as Mm}from"@octocodeai/octocode-engine/contentSanitizer";async function Ji(e,t,n){try{let r=await e.rest.repos.get({owner:t,repo:n}),[o,i]=r.data.full_name?.split("/")??[];return!o||!i?{owner:t,repo:n,renamed:!1}:{owner:o,repo:i,renamed:o!==t||i!==n}}catch{return{owner:t,repo:n,renamed:!1}}}async function Nm(e,t){let n=ot(e.owner),r=ot(e.repo),o=e.issueNumber;if(!n||!r||o==null)return Bn("owner, repo, and issueNumber are required for issue detail mode.");let i=await Q(t),s=await i.rest.issues.get({owner:n,repo:r,issue_number:o});if(Xi(s.data))return Bn(`Issue #${o} is a pull request; use type:"prs" with prNumber:${o}.`,[`Retry with { type: "prs", owner: "${n}", repo: "${r}", prNumber: ${o} }.`]);let a=e.content?.body!==!1,c=e.content?.comments?.discussion===!0,u=e.content?.comments?.includeBots===!0,l=qi(s.data),p={};if(a){let m=Mm.sanitizeContent(s.data.body??"").content,d=Dm(m,e.charOffset,e.charLength);l.body=d.text,d.pagination&&(p.body=d.pagination)}if(c){let m=Math.max(1,e.commentPage??1),d=Math.max(1,e.itemsPerPage??30),f=await i.rest.issues.listComments({owner:n,repo:r,issue_number:o,per_page:d,page:m}),g=u?f.data:f.data.filter(h=>!qt(h.user?.login??""));l.comments=g.map(h=>({id:String(h.id),user:h.user?.login??"unknown",body:Mm.sanitizeContent(h.body??"").content,createdAt:h.created_at??"",updatedAt:h.updated_at??"",commentType:"discussion"}));let R=_n(f.headers.link);p.comments={currentPage:m,itemsPerPage:d,totalComments:l.comments.length,hasMore:R,...R?{nextCommentPage:m+1}:{}}}return Object.keys(p).length>0&&(l.contentPagination=p),{data:{type:"issues",owner:n,repo:r,issues:[l],totalCount:1},status:200}}async function Gm(e,t,n){let r=ot(t.owner)??"",o=ot(t.repo)??"",i=await Q(n),s=[],a=e;if(r&&o){let h=await Ji(i,r,o);h.renamed&&(s.push(`Repository ${r}/${o} was renamed to ${h.owner}/${h.repo} \u2014 GitHub search does not follow renames, so the canonical name was searched instead.`),a={...e,owner:h.owner,repo:h.repo})}let c=ca(a),u=Math.min(t.limit??30,100),l=t.page??1,p=t.sort&&t.sort!=="best-match"?t.sort:void 0,m=await i.rest.search.issuesAndPullRequests({q:c,sort:p,order:t.order||"desc",per_page:u,page:l}),d=yp(m.headers);d&&s.push(d);let f=(m.data.items??[]).filter(h=>!Xi(h)).map(h=>qi(h)),g=m.data.total_count??f.length,R=l*u<g&&f.length===u;return{data:{type:"issues",owner:r,repo:o,issues:t.concise?f.map(h=>`#${h.number} ${h.title}`):f,totalCount:g,effectiveQuery:c,...s.length?{warnings:s}:{},...m.data.incomplete_results?{incompleteResults:!0}:{},pagination:{currentPage:l,perPage:u,hasMore:R,...R?{nextPage:l+1}:{},...g>1e3?{totalMatchesCapped:!0}:{}}},status:200}}async function Hm(e,t){let n=ot(e.owner),r=ot(e.repo);if(!n||!r)return Bn("owner and repo are required for issues mode.");let o=await Q(t),i=Math.min(e.limit??30,100),s=e.page??1,a=e.state==="open"||e.state==="closed"?e.state:"all",c=await o.rest.issues.listForRepo({owner:n,repo:r,state:a,per_page:i,page:s,...e.assignee?{assignee:e.assignee}:{},...e.author?{creator:e.author}:{},...e.mentions?{mentioned:e.mentions}:{},...e.milestone?{milestone:e.milestone}:{},...e.sort==="created"||e.sort==="updated"||e.sort==="comments"?{sort:e.sort}:{},...e.order?{direction:e.order}:{},...typeof e.label=="string"?{labels:e.label}:Array.isArray(e.label)?{labels:e.label.join(",")}:{}}),u=c.data.filter(d=>!Xi(d)).map(d=>qi(d)),l=_n(c.headers.link),p=!l&&s===1,m=[];return u.length===0&&l&&m.push("This page contained only pull requests (the GitHub issues endpoint returns both; PRs are filtered out) \u2014 follow pagination.nextPage, later pages may contain issues."),{data:{type:"issues",owner:n,repo:r,issues:e.concise?u.map(d=>`#${d.number} ${d.title}`):u,...p?{totalCount:u.length}:{},...m.length?{warnings:m}:{},pagination:{currentPage:s,perPage:i,hasMore:l,...l?{nextPage:s+1}:{}}},status:200}}async function yc(e,t,n){let r=await fe(t),o=gc(e,n,r);return he(o,()=>oP(e,t),{shouldCache:i=>"data"in i&&!("error"in i)})}async function oP(e,t){try{if(e.state==="merged")return Bn('state:"merged" is not valid for type:"issues" \u2014 use "open" or "closed".',['For merged PRs use type:"prs" with state:"merged".']);if(e.issueNumber!=null)return await Nm(e,t);let n={...e,query:hc(e)};return ua(n)?await Gm(n,e,t):await Hm(e,t)}catch(n){return nt(n)?{data:{type:"issues",owner:ot(e.owner)??"",repo:ot(e.repo)??"",issues:[],totalCount:0,pagination:{currentPage:e.page??1,perPage:Math.min(e.limit??30,100),hasMore:!1}},status:200}:V(n)}}async function Bm(e,t,n){let r=t;if(!r.owner||!r.repo)return F("owner and repo are required for issues mode.",e);let o=r.issueNumber??r.prNumber,i=await yc({owner:r.owner,repo:r.repo,...o!=null?{issueNumber:o}:{},keywordsToSearch:r.keywordsToSearch,query:r.query,state:r.state,author:r.author,assignee:r.assignee,mentions:r.mentions,commenter:r.commenter,label:r.label,milestone:r.milestone,created:r.created,updated:r.updated,closed:r.closed,comments:r.comments,reactions:r.reactions,locked:r.locked,visibility:r.visibility,match:r.match,archived:r.archived,sort:r.sort,order:r.order,limit:r.limit,page:Number(r.page)||1,concise:r.concise,content:r.content,charOffset:r.charOffset,charLength:r.charLength,commentPage:r.commentPage,itemsPerPage:r.itemsPerPage},n);if(Oe(i))return F(i,e,{toolName:x.GITHUB_ISSUES});let s=Array.isArray(i.data.issues)?i.data.issues.length>0:!1,a=i.data.issues,c=(()=>{if(!Array.isArray(a)||a.length===0)return;let l=a[0];if(typeof l=="number")return l;if(typeof l=="string"){let p=l.match(/^#(\d+)\b/);return p?Number(p[1]):void 0}if(l&&typeof l=="object"&&typeof l.number=="number")return l.number})(),u={};return o==null&&c!=null&&(u.readIssue={tool:"ghSearchIssues",query:{owner:r.owner,repo:r.repo,issueNumber:c,content:{body:!0}},why:`Read issue #${c} body/discussion from this list`,confidence:"low"}),u.searchCode={tool:"ghSearchCode",query:{owner:r.owner,repo:r.repo},why:"Search code in this repository for symbols mentioned in the issue(s)",confidence:"low"},se(e,{...i.data,next:u},s,x.GITHUB_ISSUES,{rawResponse:i.rawResponseChars})}async function Um(e,t){try{let o=(await(await Q(t)).rest.repos.compareCommitsWithBasehead({owner:e.owner,repo:e.repo,basehead:`${e.base}...${e.head}`})).data,i=(o.commits??[]).map(u=>({sha:u.sha,messageHeadline:(u.commit.message??"").split(`
35
- `)[0]??"",author:u.commit.author?.name??u.author?.login??"unknown",date:u.commit.author?.date??""})),s=o.files??[],a=e.path?s.filter(u=>u.filename===e.path):s,c;if(e.includeDiff){let u=Mr(a,{filePage:e.filePage,itemsPerPage:e.itemsPerPage,charOffset:e.charOffset,charLength:e.charLength});c={files:u.files,filesPagination:u.filesPagination}}else c={changedFiles:a.length};return{data:{type:"compare",owner:e.owner,repo:e.repo,base:e.base,head:e.head,status:o.status,aheadBy:o.ahead_by,behindBy:o.behind_by,totalCommits:o.total_commits,commits:i,...c},status:200}}catch(n){return V(n)}}async function Qm(e,t,n){let r=t;if(!r.owner||!r.repo)return F("owner and repo are required for commits mode.",e);if(r.base&&r.head){let f=e.limit,g=await Um({owner:r.owner,repo:r.repo,base:r.base,head:r.head,includeDiff:!!r.includeDiff,path:r.path,filePage:typeof r.filePage=="number"?r.filePage:void 0,itemsPerPage:typeof f=="number"?f:r.itemsPerPage,charOffset:typeof r.charOffset=="number"?r.charOffset:void 0,charLength:typeof r.charLength=="number"?r.charLength:void 0},n);return Oe(g)?F(g,e,{toolName:x.GITHUB_COMMITS}):se(e,g.data,g.data.totalCommits>0||g.data.status!=="identical",x.GITHUB_COMMITS)}let o=r.path,i=o&&!o.endsWith("/")?"file":"repo";if(i==="file"&&!o)return F("path is required when querying a specific file in commits mode.",e);let s=e.limit,a=typeof s=="number"?s:r.itemsPerPage,c=await sd({type:i,owner:r.owner,repo:r.repo,path:o,branch:r.branch,since:r.since,until:r.until,author:r.author,committer:r.committer,page:Number(r.page)||1,perPage:Number(a)||30,filePage:typeof r.filePage=="number"?r.filePage:void 0,itemsPerPage:typeof a=="number"?a:void 0,includeDiff:!!r.includeDiff,charOffset:typeof r.charOffset=="number"?r.charOffset:void 0,charLength:typeof r.charLength=="number"?r.charLength:void 0},n);if(Oe(c))return F(c,e,{toolName:x.GITHUB_COMMITS});let{commits:u}=c.data,l=u.length>0,p=u.map(f=>f.messageHeadline?.match(/\(#(\d+)\)/)?.[1]).find(Boolean),m=!l&&c.data.warnings?.length?{hints:c.data.warnings}:{},d={...c.data,...m,...p?{next:{prDetail:{tool:"ghSearchPullRequests",query:{owner:r.owner,repo:r.repo,prNumber:Number(p)},why:`Open PR #${p} referenced by the first commit for review context`,confidence:"low"}}}:{}};return se(e,d,l,x.GITHUB_COMMITS,{rawResponse:c.rawResponseChars})}async function $m(e,t,n){let r=n(),o={...t},i=Em(o),s=o.prNumber!==void 0;if(s||(o.content=void 0,o.reviewMode=void 0),!(o.keywordsToSearch?.length||o.owner||o.repo||o.author||o.assignee||o.prNumber&&o.owner&&o.repo))return F("At least one valid search parameter, filter, or PR number is required.",e);let c=await ft(o,()=>r.provider.searchPullRequests(om(o)));if(c.ok===!1)return c.result;let u=s?i.changedFiles||i.patches.mode!=="none":!1,{pullRequests:l,resultData:p}=im(c.response.data,{includeFileChanges:u});o.prNumber!==void 0&&delete p.pagination;let m=!s&&(!!e.content||!!e.reviewMode),d={...i,body:!1,changedFiles:!1,patches:{mode:"none"},comments:!1,commits:!1},f=o.minify==="standard",g=s,R=l.map(y=>Om(y,o,m?d:i,f,g));p.pullRequests=R,!s&&o.concise===!0&&(p.pullRequests=R.map(y=>{let S=y;return`#${S.number} ${S.title}`}));let h=R.length>0;if(!s&&h){let y=R[0].number,S=o.owner,C=o.repo;y!=null&&S&&C&&(p.next={readPr:{tool:"ghSearchPullRequests",query:{owner:S,repo:C,prNumber:y,content:{body:!0,changedFiles:!0,comments:{discussion:!0}}},why:"Read any PR from this list \u2014 swap prNumber for the # you want.",confidence:"low"}})}return se(o,p,h,x.GITHUB_PULL_REQUESTS,{rawResponse:c.response.rawResponseChars})}import{z as Rc}from"zod";import{GitHubPullRequestSearchQuerySchema as jm}from"@octocodeai/octocode-core/schemas";var zm={type:Rc.enum(["prs","commits","releases","issues"]).optional().describe('Research mode: "prs" (default) searches pull requests; "commits" walks commit history for a repo or path; "releases" lists the repository releases (tagName, publishedAt, prerelease flag) and surfaces the latest stable release; "issues" searches or reads GitHub issues (body/discussion comments \u2014 not PRs).'),prNumber:_(1,1e9).optional(),issueNumber:_(1,1e9).optional().describe('Issue number for type:"issues" detail mode \u2014 reads that specific issue (body/discussion comments). Requires owner+repo. Falls back to prNumber if omitted.'),limit:_(1,100).optional().default(30),match:Rc.array(Rc.enum(["title","body","comments"])).optional().describe('Fields to match keywords against: "title", "body", "comments". Default searches all three. Use ["title"] for the most precise and fastest match. (Unlike ghSearchCode, where `match` instead selects file-contents vs file-paths \u2014 a different concept sharing this name.)'),page:K.default(1),filePage:K.optional(),commentPage:K.optional(),commitPage:K.optional(),itemsPerPage:_(1,100).optional().default(20),charOffset:_(0,1e8).optional(),commentBodyOffset:_(0,1e8).optional(),charLength:_(1,5e4).optional()},iP=Z(jm,zm),Sc=X(jm,zm),sP=Y(iP);async function Jr(e){let{queries:t,authInfo:n}=e,r=Be(n);return te(t,async(o,i)=>{try{let s=ke(Sc,o);if(s.ok===!1)return s.error;let a=s.data.type;return a==="releases"?await vm(o,s.data,n):a==="issues"?await Bm(o,s.data,n):a==="commits"?await Qm(o,s.data,n):await $m(o,s.data,r)}catch(s){return be(s,o,void 0,x.GITHUB_PULL_REQUESTS)}},{toolName:x.GITHUB_PULL_REQUESTS,keysPriority:["pullRequests","issues","releases","latest","tagName","publishedAt","prerelease","pagination","totalCount","error"]},e)}import{SearchPullRequestsQuerySchema as Wm,SearchIssuesQuerySchema as Vm,SearchCommitsQuerySchema as Km,ListReleasesQuerySchema as Ym}from"@octocodeai/octocode-core/schemas";var Xm={limit:_(1,100).optional().default(30),page:K.default(1),itemsPerPage:_(1,100).optional().default(20)},qm={...Xm,filePage:K.optional(),commentPage:K.optional(),commitPage:K.optional(),charOffset:_(0,1e8).optional(),commentBodyOffset:_(0,1e8).optional(),charLength:_(1,1e5).optional()},Zr=X(Wm,qm),eo=Y(Z(Wm,qm)),Jm={...Xm,commentPage:K.optional(),charOffset:_(0,1e8).optional(),commentBodyOffset:_(0,1e8).optional(),charLength:_(1,1e5).optional()},to=X(Vm,Jm),no=Y(Z(Vm,Jm)),Zm={page:K.default(1),limit:_(1,100).optional().describe("Commits per page \u2014 alias of itemsPerPage (preferred when both are set)."),filePage:K.optional(),charOffset:_(0,1e8).optional(),charLength:_(1,1e5).optional()},ro=X(Km,Zm),oo=Y(Z(Km,Zm)),ef={page:K.default(1),limit:_(1,100).optional().describe("Releases per page \u2014 alias of itemsPerPage (preferred when both are set).")},Un=X(Ym,ef),Qn=Y(Z(Ym,ef));function Zi(e,t){return{...e,queries:e.queries.map(n=>({...n,type:t}))}}function tf(e){return Jr(Zi(e,"prs"))}function nf(e){return Jr(Zi(e,"issues"))}function rf(e){return Jr(Zi(e,"commits"))}function of(e){return Jr(Zi(e,"releases"))}import{SearchDiscussionsQuerySchema as sf}from"@octocodeai/octocode-core/schemas";var af={itemsPerPage:_(1,100).optional().default(20),limit:_(1,100).optional()},$n=X(sf,af),jn=Y(Z(sf,af));var aP=`
36
- query($q: String!, $first: Int!, $after: String, $owner: String!, $repo: String!) {
37
- search(query: $q, type: DISCUSSION, first: $first, after: $after) {
38
- discussionCount
39
- pageInfo { hasNextPage endCursor }
40
- nodes {
41
- ... on Discussion {
42
- number
43
- title
44
- url
45
- createdAt
46
- updatedAt
47
- answerChosenAt
48
- upvoteCount
49
- author { login }
50
- category { name }
51
- comments { totalCount }
52
- }
53
- }
54
- }
55
- repository(owner: $owner, name: $repo) {
56
- hasDiscussionsEnabled
57
- }
58
- }`;async function cf(e,t,n){let r=await fe(t),o=ce("gh-api-discussions",{owner:e.owner,repo:e.repo,keywords:(e.keywords??[]).join(" "),perPage:e.perPage,after:e.after??"",auth:r},n);return he(o,()=>cP(e,t),{shouldCache:i=>"data"in i&&!("error"in i)})}async function cP(e,t){try{let n=await Q(t),r=(e.keywords??[]).map(l=>l.trim()).filter(Boolean).join(" "),o=`repo:${e.owner}/${e.repo}${r?` ${r}`:""}`,i=await n.graphql(aP,{q:o,first:e.perPage,owner:e.owner,repo:e.repo,...e.after?{after:e.after}:{}}),a=(i.search.nodes??[]).filter(l=>typeof l.number=="number").map(l=>({number:l.number,title:l.title,url:l.url,...l.author?.login?{author:l.author.login}:{},...l.category?.name?{category:l.category.name}:{},...l.createdAt?{createdAt:l.createdAt}:{},...l.updatedAt?{updatedAt:l.updatedAt}:{},...l.answerChosenAt?{answered:!0}:{},...typeof l.upvoteCount=="number"?{upvotes:l.upvoteCount}:{},...typeof l.comments?.totalCount=="number"?{comments:l.comments.totalCount}:{}})),c=i.search.pageInfo.hasNextPage===!0,u=i.search.pageInfo.endCursor??void 0;return{data:{type:"discussions",owner:e.owner,repo:e.repo,totalCount:i.search.discussionCount,discussions:a,pagination:{perPage:e.perPage,hasMore:c,...c&&u?{nextCursor:u}:{}},...typeof i.repository?.hasDiscussionsEnabled=="boolean"?{hasDiscussionsEnabled:i.repository.hasDiscussionsEnabled}:{}},status:200}}catch(n){return V(n)}}var uP=30;async function uf(e){let{queries:t,authInfo:n,sessionId:r}=e;return te(t,async(o,i)=>{try{if(!o.owner||!o.repo)return F("owner and repo are required to search discussions.",o);let s=Number(o.limit??o.itemsPerPage)||uP,a=await cf({owner:o.owner,repo:o.repo,keywords:o.keywordsToSearch,perPage:s,...o.after?{after:o.after}:{}},n,r);if(Oe(a))return F(a,o,{toolName:x.GITHUB_DISCUSSIONS});let c=a.data.discussions.length>0,u=!c&&a.data.hasDiscussionsEnabled===!1?["This repository has Discussions disabled \u2014 an empty result here means the feature is off, not that no matching discussions exist."]:[],l=a.data.pagination.nextCursor,p={...a.data,...u.length>0?{warnings:u}:{},...l?{next:{nextPage:{tool:"ghSearchDiscussions",query:{owner:o.owner,repo:o.repo,...o.keywordsToSearch?{keywordsToSearch:o.keywordsToSearch}:{},itemsPerPage:s,after:l},why:"Fetch the next page of discussions",confidence:"exact"}}}:{}};return se(o,p,c,x.GITHUB_DISCUSSIONS,{rawResponse:a.rawResponseChars})}catch(s){return be(s,o,"Failed to search repository discussions",x.GITHUB_DISCUSSIONS)}},{toolName:x.GITHUB_DISCUSSIONS,keysPriority:["totalCount","discussions","pagination","error"]},e)}function pf(e){return!!(e.topicsToSearch&&(Array.isArray(e.topicsToSearch)?e.topicsToSearch.length>0:e.topicsToSearch))}function es(e){return!!(e.keywords&&e.keywords.length>0)}function df(e){return!!(es(e)||pf(e)||e.owner||e.language||e.stars||e.updated||e.forks||e.license||e.goodFirstIssues||e.visibility||e.archived!==void 0)}function lf(e,t){return e?`${e} (${t==="topics"?"topics-based search":"keywords-based search"})`:`${t.charAt(0).toUpperCase()+t.slice(1)}-based repository search`}function mf(e){let t=pf(e),n=es(e);if(t&&n){let{topicsToSearch:r,keywords:o,...i}=e;return[{label:"topics",query:{...i,reasoning:lf(e.reasoning,"topics"),topicsToSearch:r}},{label:"keywords",query:{...i,reasoning:lf(e.reasoning,"keywords"),keywords:o}}]}return[{label:"combined",query:e}]}function ff(e,t){if(!e&&!t)return 0;if(!e)return 1;if(!t)return-1;let n=Date.parse(e),r=Date.parse(t);return Number.isNaN(n)&&Number.isNaN(r)?0:Number.isNaN(n)?1:Number.isNaN(r)?-1:r-n}function gf(e){let t=new Map;for(let n of e){let r=`${n.owner}/${n.repo}`;t.has(r)||t.set(r,n)}return[...t.values()]}function yf(e,t){return[...e].sort((n,r)=>{let o=lP(n,r,t.sort);if(o!==0)return o;let i=hf(r,t)-hf(n,t);if(i!==0)return i;let s=(r.stars??0)-(n.stars??0);return s!==0?s:bc(n).localeCompare(bc(r))})}function lP(e,t,n){switch(n){case"stars":return(t.stars??0)-(e.stars??0);case"forks":return(t.forksCount??0)-(e.forksCount??0);case"help-wanted-issues":return(t.openIssuesCount??0)-(e.openIssuesCount??0);case"updated":return ff(e.updatedAt,t.updatedAt);case"best-match":case void 0:return 0;default:return 0}}function hf(e,t){let n=pP(t),r=bc(e).toLowerCase(),o=e.repo.toLowerCase(),i=(e.description??"").toLowerCase(),s=(e.topics??[]).map(l=>l.toLowerCase()),a=e.language?.toLowerCase(),c=t.language?.toLowerCase();return n.reduce((l,p)=>o===p||r===p?l+80:o.includes(p)||r.includes(p)?l+40:s.includes(p)?l+35:i.includes(p)?l+10:l,0)+(c&&a===c?20:0)}function pP(e){let t=e.keywords??[],n=e.topicsToSearch??[];return[...t,...n].map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)}function bc(e){return`${e.owner}/${e.repo}`}function Cc(e){return{currentPage:e.currentPage,totalPages:e.totalPages,perPage:e.entriesPerPage??10,...e.totalMatches!==void 0?{totalMatches:e.totalMatches}:{},...e.reportedTotalMatches!==void 0?{reportedTotalMatches:e.reportedTotalMatches}:{},...e.reachableTotalMatches!==void 0?{reachableTotalMatches:e.reachableTotalMatches}:{},...e.totalMatchesKind!==void 0?{totalMatchesKind:e.totalMatchesKind}:{},...e.totalMatchesCapped!==void 0?{totalMatchesCapped:e.totalMatchesCapped}:{},hasMore:e.hasMore,...e.hasMore?{nextPage:e.currentPage+1}:{}}}function xc(e){return e.length===0?void 0:[`Repository search partially failed: the ${e.map(n=>`'${n.label}'`).join(", ")} query variant(s) returned an error. Results may be incomplete \u2014 retry or narrow the query.`]}function Pc(e,t){let n=e.map(r=>r.response.data.pagination).filter(r=>!!r);if(n.length!==0)return{currentPage:n[0].currentPage,totalPages:Math.max(...n.map(r=>r.totalPages)),hasMore:n.some(r=>r.hasMore),entriesPerPage:n[0].entriesPerPage,totalMatches:t,reachableTotalMatches:t,totalMatchesKind:"lowerBound",totalMatchesCapped:n.some(r=>r.totalMatchesCapped===!0)}}function Rf(e){return e.reduce((t,n)=>t+(n.response.rawResponseChars??N(n.response.data??n.response)),0)}function dP(e){let t=e,n={owner:t.owner??"",repo:t.repo,stars:t.stars,forks:t.forksCount,openIssuesCount:t.openIssuesCount,language:t.language,license:t.license||void 0,description:t.description&&t.description!=="No description"?t.description:void 0,homepage:t.homepage||void 0,pushedAt:t.pushedAt?t.pushedAt.slice(0,10):void 0,createdAt:t.createdAt?t.createdAt.slice(0,10):void 0,updatedAt:t.updatedAt?t.updatedAt.slice(0,10):void 0,defaultBranch:t.defaultBranch&&t.defaultBranch!=="main"&&t.defaultBranch!=="master"?t.defaultBranch:void 0,topics:t.topics?.length?t.topics:void 0,visibility:t.visibility&&t.visibility!=="public"?t.visibility:void 0};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}function mP(e,t){let n=t.concise===!0,r=e.repositories[0],o=r?.owner&&r?.repo?{viewStructure:{tool:"ghViewRepoStructure",query:{owner:r.owner,repo:r.repo,path:""},why:"Orient in the top-ranked repository before reading code",confidence:"low"},searchCode:{tool:"ghSearchCode",query:{owner:r.owner,repo:r.repo},why:"Scope a code search to the top-ranked repository",confidence:"low"}}:void 0;return{data:{pagination:e.pagination,repositories:n?e.repositories.map(i=>`${i.owner?`${i.owner}/`:""}${i.repo}`):e.repositories.map(dP),...o?{next:o}:{}}}}async function Sf(e){let{queries:t,authInfo:n}=e,r=Be(n);return te(t,async(o,i)=>{try{if(!df(o))return F("At least one repository search term or filter is required.",o);let s=r(),a=mf(o),{successes:c,failures:u}=await Vd(a.map(w=>({meta:{label:w.label,query:w.query},operation:()=>s.provider.searchRepos(nm(w.query))}))),l=c.map(w=>({label:w.meta.label,query:w.meta.query,response:w.response})),p=u.map(w=>({label:w.meta.label,query:w.meta.query,response:w.response}));if(l.length===0){let w=p[0];return w?Ii(w.response,o):be(new Error("Repository search produced no provider results"),o,void 0,x.GITHUB_SEARCH_REPOSITORIES)}let m=o.limit,d=yf(gf(l.flatMap(w=>rm(w.response.data.repositories))),o),f=m!=null?d.slice(0,m):d,g=l.length===1?l[0]:void 0,h=l.length>1?Pc(l,d.length):g?.response.data.pagination,y=h?Cc(h):void 0,S=f.length>0,C=mP({repositories:f,pagination:y},o),P=xc(p),T;if(o.owner&&es(o)){let w=(Array.isArray(o.keywords)?o.keywords:[o.keywords]).filter(A=>typeof A=="string"&&A.trim().length>0).slice(0,3),b=w.some(A=>f.some(M=>M.repo?.toLowerCase()===A.toLowerCase()));if(w.length>0&&!b)try{let A=await Q(n);for(let M of w){let B=await Ji(A,String(o.owner),M);if(B.renamed){T={warning:`No repositories matched under owner "${o.owner}", but "${o.owner}/${M}" now resolves to "${B.owner}/${B.repo}" \u2014 the repository may have been transferred. Retry scoped to owner:"${B.owner}" (see next.retryUnderCanonicalOwner).`,next:{retryUnderCanonicalOwner:{tool:"ghSearchRepos",query:{...o,owner:B.owner,keywords:[B.repo]},why:"Re-run scoped to the repository's current owner after a detected transfer.",confidence:"exact"}}};break}}}catch{}}let L=[...P??[],...T?[T.warning]:[],...!S&&!T?['No repositories matched. Keywords are ANDed \u2014 try fewer or broader keywords, drop a topic/filter (topics are sparse), or add match:"readme" for full-text search.']:[]],k={...C.data,...L.length>0?{warnings:L}:{},...T?{next:T.next}:{}};return se(o,k,S,x.GITHUB_SEARCH_REPOSITORIES,{rawResponse:Rf([...l,...p])})}catch(s){return be(s,o,void 0,x.GITHUB_SEARCH_REPOSITORIES)}},{toolName:x.GITHUB_SEARCH_REPOSITORIES,keysPriority:["repositories","pagination","error"]},e)}import{z as bf}from"zod";import{GitHubReposSearchSingleQuerySchema as Cf}from"@octocodeai/octocode-core/schemas";var xf={limit:_(1,100).optional(),page:K.default(1),match:bf.array(bf.enum(["name","description","readme"])).optional().describe("Which text fields to search: name, description, and/or readme. Defaults to name+description; add 'readme' for broader, slower full-text search. (Unlike ghSearchCode, where `match` instead selects file-contents vs file-paths \u2014 a different concept sharing this name.)")},io=X(Cf,xf),so=Y(Z(Cf,xf));function fP(e,t){let n=e.error,r=typeof n=="object"&&n!==null?n:void 0,o=typeof r?.status=="number"?r.status:void 0,i=typeof t.path=="string"?t.path.replace(/\/+$/,""):"",s=i.includes("/")?i.slice(0,i.lastIndexOf("/")):"",a=i.split("/").pop()||t.repo,c=o===404?{retryParent:{tool:"ghViewRepoStructure",query:{owner:t.owner,repo:t.repo,...s?{path:s}:{},...t.branch?{branch:t.branch}:{}},why:"Retry at the parent directory \u2014 the path or branch may be wrong.",confidence:"low"},searchPath:{tool:"ghSearchCode",query:{owner:t.owner,repo:t.repo,match:"path",keywords:[a]},why:"Locate the path by name in case it moved or was renamed.",confidence:"low"}}:void 0;return{status:"error",owner:t.owner,repo:t.repo,path:t.path,branch:t.branch,error:typeof r?.error=="string"?r.error:typeof n=="string"?n:"Failed to explore repository structure",...typeof r?.status=="number"?{statusCode:r.status}:{},...typeof r?.type=="string"?{errorType:r.type}:{},...c?{next:c}:{}}}function hP(e){let t={};for(let[n,r]of Object.entries(e)){let o=n.split("/").pop()??n;if(n!==""&&n!=="."&&Cr(o))continue;let i=r.files.filter(a=>!bn(a)),s=r.folders.filter(a=>!Cr(a));(i.length>0||s.length>0)&&(t[n]={files:i,folders:s})}return t}async function Pf(e){let{queries:t,authInfo:n}=e,r=Be(n);return te(t,async(o,i)=>{try{let s=r(),a=`${o.owner}/${o.repo}`,c=o.branch,u=c??await s.provider.resolveDefaultBranch(a),l=await ft(o,()=>s.provider.getRepoStructure(cc(o,u))),p=u,m;if(l.ok===!1&&c){let C=l.result.error;if((typeof C=="object"&&C!==null?C.status:void 0)===404){let T=await s.provider.resolveDefaultBranch(a);if(T!==c){let L=await ft(o,()=>s.provider.getRepoStructure(cc(o,T)));L.ok!==!1&&(l=L,p=T,m=`Branch/ref '${c}' was not found. Showing '${T}' (default branch) instead. Re-query with the correct branch name if branch-specific results are required.`)}}}if(l.ok===!1)return fP(l.result,o);let d=hP(l.response.data.structure),f=Object.keys(d).length>0,g=cm(l.response.data,o,d,p);m&&(g.branchFallback={requestedBranch:c,actualBranch:p,warning:m});let h=g.structure?.find(C=>(C.files?.length??0)>0),y=String(o.path??"").replace(/\/+$/,""),S=h?(()=>{let C=h.dir==="."?h.files[0]:`${h.dir}/${h.files[0]}`;return y?`${y}/${C}`:C})():void 0;return g.next={...S?{fetchFile:{tool:"ghGetFileContent",query:{owner:o.owner,repo:o.repo,path:S,...p?{branch:p}:{}},why:"Read the first listed file",confidence:"low"}}:{},materialize:{tool:"ghGetFileContent",query:{owner:o.owner,repo:o.repo,path:String(o.path??""),type:"directory",...p?{branch:p}:{}},why:"Materialize this directory locally for exact line anchors, local search, or LSP",confidence:"exact"}},se(o,g,f,x.GITHUB_VIEW_REPO_STRUCTURE,{rawResponse:l.response.rawResponseChars})}catch(s){return be(s,o,"Failed to explore repository structure",x.GITHUB_VIEW_REPO_STRUCTURE)}},{toolName:x.GITHUB_VIEW_REPO_STRUCTURE,keysPriority:["resolvedBranch","branchFallback","summary","pagination","structure","error"]},e)}import{GitHubViewRepoStructureQuerySchema as wf}from"@octocodeai/octocode-core/schemas";var Tf={maxDepth:_(0,20).optional(),page:K.default(1),itemsPerPage:_(1,200).optional()},ao=X(wf,Tf),co=Y(Z(wf,Tf));import{ContentSanitizer as wP}from"@octocodeai/octocode-engine/contentSanitizer";import Ef from"path";import{pathValidator as Lf}from"@octocodeai/octocode-engine/pathValidator";import{getConfigSync as Af}from"@octocodeai/config";function gP(e=Af().local.allowedPaths){for(let t of e)typeof t=="string"&&t.trim()!==""&&Lf.addAllowedRoot(t)}function ve(e,t){if(!e.path?.trim()){let s=Le.pathValidationFailed("","path is required");return{isValid:!1,errorResult:F(s,e,{toolName:t})}}gP();let n=process.env.WORKSPACE_ROOT?.trim()||Af().local.workspaceRoot||process.cwd(),r=e.path.replace(/^file:\/\//,""),o=Ef.isAbsolute(r)?r:Ef.resolve(n,r),i=Lf.validate(o);if(!i.isValid){let s=Le.pathValidationFailed(e.path,i.error);return{isValid:!1,errorResult:F(s,e,{toolName:t,extra:{cwd:n,resolvedPath:o}})}}return{isValid:!0,sanitizedPath:i.sanitizedPath??o}}function HB(e,t,n={}){let{threshold:r=100,itemType:o="item",detailed:i=!1}=n;return t?{shouldBlock:!1}:e>r?{shouldBlock:!0,errorCode:Le.outputTooLarge(e,r).errorCode,hints:[`Found ${e} ${o}${e===1?"":"s"} - exceeds safe limit of ${r}`,"Use charLength to paginate through results",i?"Detailed results increase size - consider using charLength for pagination":"Consider using charLength to paginate large result sets"]}:{shouldBlock:!1}}import{open as yP,readFile as RP,stat as SP}from"fs/promises";var UB={COMMAND_TIMEOUT:3e4,MAX_OUTPUT_SIZE:10485760,MAX_RESULTS:100,CONTEXT_LINES:5},Gt={MCP_MAX_TOKENS:25e3,CHARS_PER_TOKEN:4,MAX_FETCH_CONTENT_CHARS:5e4,MAX_OUTPUT_SIZE_BYTES:10*1024*1024,LARGE_FILE_THRESHOLD_KB:100,MAX_ENTRIES_BEFORE_PAGINATION:100,MAX_FILES_DEFAULT:1e3,DEFAULT_ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200,MAX_LIST_ITEMS_DETAILED:100,MAX_LIST_ITEMS_SIMPLE:200,MAX_ARCHIVE_ENTRIES_PER_PAGE:100,MAX_DIR_ENTRIES_PER_PAGE:100,MAX_DIR_ENTRIES_TREE:1e3,DEFAULT_EXEC_TIMEOUT_MS:3e4,DEFAULT_MAX_MATCHES_PER_FILE:3,DEFAULT_CONTEXT_LINES:5,DEFAULT_MATCH_CONTENT_LENGTH:500,MAX_MATCH_CONTENT_LENGTH:800,DEFAULT_MATCHES_PER_PAGE:10,MAX_MATCHES_PER_PAGE:100,DEFAULT_FILES_PER_PAGE:20,MAX_FILES_PER_PAGE:50,MAX_RIPGREP_DIRECTORY_SIZE_MB:100,MAX_FILE_COUNT_FOR_SEARCH:1e3,ESTIMATED_AVG_FILE_SIZE_BYTES:50*1024,LARGE_RESULT_BYTES_HINT:1.5*1024*1024,BINARY_MAX_BYTES:10*1024,BINARY_DEFAULT_HEX_LINES:20,BINARY_DEFAULT_MIN_STRING_LENGTH:6,MAX_ARCHIVE_FILES:1e3,DEFAULT_ARCHIVE_MAX_FILES:200,GLOBAL_MEMORY_LIMIT_BYTES:100*1024*1024,PER_OPERATION_MEMORY_LIMIT_BYTES:10*1024*1024,MEMORY_RESERVATION_TIMEOUT_MS:300*1e3,TOKEN_CRITICAL_THRESHOLD:5e4,TOKEN_HIGH_THRESHOLD:25e3,TOKEN_MODERATE_THRESHOLD:1e4,TOKEN_NOTICE_THRESHOLD:2500};function $B(e){return t=>{}}function kf(e,t){return n=>t}function wc(e,t){let n=Math.abs(t-e);return n>=50&&n/e>=.02?{sourceChars:e,sourceBytes:t}:{sourceChars:e}}function Tc(e,t,n){return{...e,...wc(t,n)}}function _f(e){let t=e.fullContent===!0,n=e.matchString!==void 0,r=e.startLine!==void 0||e.endLine!==void 0;if(e.minify==="symbols"&&(n||r))return{status:"error",error:'minify:"symbols" returns a whole-file signature skeleton and cannot be combined with matchString/startLine/endLine \u2014 remove the line/match constraints, or use minify:"standard" (or "none") to extract a specific range.'};if(t&&n)return{status:"error",error:"Cannot use fullContent with matchString \u2014 these are mutually exclusive extraction methods. Choose ONE: fullContent=true to read the entire file, OR matchString to extract matching sections, OR startLine+endLine for a known line range."};if(t&&r)return{status:"error",error:"Cannot use fullContent with startLine/endLine \u2014 these are mutually exclusive extraction methods. Choose ONE: fullContent=true to read the entire file, OR startLine+endLine for a known line range, OR matchString to extract matching sections."};if(n&&r)return{status:"error",error:"Cannot use matchString with startLine/endLine \u2014 these are mutually exclusive extraction methods. Choose ONE: matchString to extract matching sections, OR startLine+endLine for a known line range, OR fullContent=true to read the entire file."};let o=e.startLine!==void 0,i=e.endLine!==void 0;return o&&!i?{status:"error",error:`startLine=${e.startLine} provided without endLine \u2014 both are required for line-range extraction.`}:i&&!o?{status:"error",error:`endLine=${e.endLine} provided without startLine \u2014 both are required for line-range extraction.`}:null}async function If(e,t){try{return{fileStats:await SP(t)}}catch(n){let r=Le.fileAccessFailed(e.path,n instanceof Error?n:void 0);return{errorResult:F(r,e,{toolName:x.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function Of(e){let t=e.startLine!==void 0&&e.endLine!==void 0;return e.minify??(e.fullContent===!0||t?"none":"standard")}function Ff(e,t,n){return n!=="none"?!1:t>Gt.LARGE_FILE_THRESHOLD_KB&&!e.matchString&&!e.startLine&&!e.charLength}function vf(e,t,n){let r=Le.fileTooLarge(e.path,n,Gt.LARGE_FILE_THRESHOLD_KB);return F(r,e,{toolName:x.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}function Df(e,t){let n=Le.binaryFileUnsupported(e.path);return F(n,e,{toolName:x.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}async function Mf(e){let n=Buffer.alloc(8192),r;try{r=await yP(e,"r");let{bytesRead:o}=await r.read(n,0,8192,0);if(o===0)return!1;let i=n.subarray(0,o);if(i.includes(0))return!0;try{new TextDecoder("utf-8",{fatal:!0}).decode(i)}catch{return!0}let s=0,a=0,c=0;for(;c<i.length;){let u=i[c];if(u===27&&c+1<i.length&&i[c+1]===91){for(c+=2;c<i.length&&(i[c]<64||i[c]>126);)c+=1;c+=1;continue}s+=1;let l=u===9||u===10||u===13;u<32&&!l&&(a+=1),c+=1}return s>0&&a/s>.05}catch{return!1}finally{await r?.close().catch(kf("binary sample handle close",void 0))}}async function Nf(e,t){try{return{content:await RP(t,"utf-8")}}catch(n){let r=n instanceof Error?n:void 0,i=r?.code==="EISDIR"?Le.fileAccessFailed(e.path,r):Le.fileReadFailed(e.path,r);return{errorResult:F(i,e,{toolName:x.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function Gf(e,t){return{status:"empty",errorCode:H.NO_MATCHES,totalLines:t}}function bP(e,t,n){let r=mi(t,e.matchString,e.contextLines??5,e.matchStringIsRegex??!1,e.matchStringCaseSensitive??!1);if(r.lines.length===0)return{isPartial:!1,earlyResult:Gf(e,n)};let o=r.lines.join(`
59
- `),i=e.contextLines??5,s=r.matchingLines.slice(0,10).join(", "),a=r.matchingLines.length>10?` (+${r.matchingLines.length-10} more)`:"",c=`Found ${r.matchCount} occurrence${r.matchCount===1?"":"s"} of "${e.matchString}" on line${r.matchingLines.length===1?"":"s"} ${s}${a} \u2014 all shown as ${r.matchRanges.length} slice${r.matchRanges.length===1?"":"s"}, \xB1${i} lines of context each; these lines are lineHint anchors for lspGetSemantics.`,u,l,p;if(r.matchRanges.length>0){let m=r.matchRanges[0],d=r.matchRanges[r.matchRanges.length-1];m&&d&&(u=m.start,l=d.end,p=r.matchRanges)}return{resultContent:o,isPartial:!0,actualStartLine:u,actualEndLine:l,matchRanges:p,matchedLines:r.matchingLines,warnings:[c]}}function CP(e){return e.startLine!==void 0&&e.endLine!==void 0}function xP(e,t,n){let r=String(n).length;return e.slice(t-1,n).map((o,i)=>`${String(t+i).padStart(r," ")}\u2192 ${o}`).join(`
60
- `)}function PP(e,t,n){let r=e.startLine,o=e.endLine,i=Math.max(1,r),s=Math.min(o,n);if(o<r)return{isPartial:!1,earlyResult:{status:"empty",totalLines:n,errorCode:H.NO_MATCHES,warnings:[`startLine ${r} is greater than endLine ${o} \u2014 startLine must be \u2264 endLine`,`Use startLine=1 to ${n} with startLine \u2264 endLine for a valid range`]}};if(i>n)return{isPartial:!1,earlyResult:{status:"empty",totalLines:n,errorCode:H.NO_MATCHES,warnings:[`Requested startLine ${r} exceeds file length (${n} lines)`,`Use startLine=1 to ${n} for valid range`]}};let a=[];return o>n&&a.push(`Requested endLine ${o} adjusted to ${n} (file end)`),{resultContent:xP(t,i,s),isPartial:!0,actualStartLine:i,actualEndLine:s,warnings:a}}function Hf(e,t,n){let r=t.split(`
61
- `),o=rt(t);return e.matchString?bP(e,r,o):CP(e)?PP(e,r,o):{resultContent:t,isPartial:!1}}async function Bf(e,t,n){let r=String(t.path),o=t.charLength,i=t.charOffset??0,s=o,a=!1,c,u=i;s===void 0&&!t.fullContent&&e.length>n&&(s=n,a=!0,c=`Auto-paginated: Content (${e.length} chars) exceeds ${n} char limit`);let l="char-limit",p=s;if(s!==void 0){let g=await yi(e,u,s,r);l=g.chunkMode,p=g.length}let m=gi(e,u,p,s!==void 0?{pageSize:s}:void 0),d;if(m.hasMore&&l==="char-limit"&&_r(m.paginatedContent)){let g=m.charOffset+m.charLength;d=await Ir(e,g,r)}let f=_i("localGetFileContent",{path:r,charLength:s??m.charLength,minify:t.minify},m);return{windowedContent:m.paginatedContent,pagination:m,effectiveCharLength:s,explicitCharOffset:i,autoPaginated:a,autoPaginateWarning:c,chunkMode:l,nextBlockChar:d,next:f,showPagination:s!==void 0||i>0||a}}async function Uf(e,t,n,r,o,i=!0,s=i?"standard":"none"){if(!t.resultContent||t.resultContent.trim().length===0)return{status:"empty",totalLines:r};let a=[...t.warnings??[]],c=String(e.path),u=i?O.applyContentViewMinification(t.resultContent,c):t.resultContent,l=await Bf(u,e,o);l.autoPaginateWarning&&a.push(l.autoPaginateWarning);let p=t.isPartial||l.pagination.hasMore;return{path:c,content:l.windowedContent,contentView:s,returnedChars:l.windowedContent.length,...p&&{isPartial:p},totalLines:r,...t.actualStartLine!==void 0&&t.actualEndLine!==void 0&&{startLine:t.actualStartLine,endLine:t.actualEndLine,...t.matchRanges!==void 0&&{matchRanges:t.matchRanges},...t.matchedLines!==void 0&&{matchedLines:t.matchedLines}},...n.mtime&&{modified:n.mtime.toISOString()},...l.showPagination&&{pagination:{...Aa(l.pagination),chunkMode:l.chunkMode,...l.nextBlockChar!==void 0&&{nextBlockChar:l.nextBlockChar}}},...l.next?{next:l.next}:{},...a.length>0&&{warnings:a}}}async function Ec(e,t,n,r,o,i,s){let a=await Bf(t,e,s),c=[...a.autoPaginateWarning?[a.autoPaginateWarning]:[],...i?[i]:[]];return{path:e.path,content:a.windowedContent,contentView:"symbols",returnedChars:a.windowedContent.length,...a.pagination.hasMore&&{isPartial:!0},totalLines:n,...wc(r,o),...a.showPagination&&{pagination:{...Aa(a.pagination),chunkMode:a.chunkMode,...a.nextBlockChar!==void 0&&{nextBlockChar:a.nextBlockChar}}},...a.next?{next:a.next}:{},...c.length>0&&{warnings:c}}}function Qf(e,t){return typeof e.content!="string"?e:{...e,contentView:t}}function Lc(e,t){let n=wP.sanitizeContent(e,t);return{text:n.content,warning:n.hasSecrets?`Secrets detected and redacted: ${n.secretsDetected.join(", ")}`:void 0}}async function $f(e){let t=Dt();try{let n=ve(e,x.LOCAL_FETCH_CONTENT);if(!n.isValid)return n.errorResult;let r=_f(e);if(r)return r;let o=n.sanitizedPath,i=String(e.path),{fileStats:s,errorResult:a}=await If(e,o);if(a||!s)return a;let c=typeof s.size=="bigint"?Number(s.size):s.size,u=c/1024;if(await Mf(o))return $(Df(e,o),c);let l=Of(e);if(Ff(e,u,l))return $(vf(e,o,u),c);let{content:p,errorResult:m}=await Nf(e,o);if(m||p===void 0)return m;let d=p.length,f=Buffer.byteLength(p,"utf-8"),g=p,R=e.matchString!==void 0&&l!=="none",h=R?"none":l,y=R&&e.minify!==void 0?`minify:"${e.minify}" is not applied to matchString extractions \u2014 matched slices are returned verbatim so the content always contains the matched text.`:void 0,S=h==="standard"||h==="symbols",C=S?"standard":"none",P;if(h==="symbols"){let b=O.extractSignatures(g,i);if(b===null){let A=fi(g,i);if(A!==null){let M=Lc(A,i);return $(await Ec(e,M.text,rt(g),d,f,M.warning,t),d)}P=`minify:"symbols" is not supported for this file type (${i.split(".").pop()??"unknown"}) \u2014 falling back to standard content view.`}if(b!==null){let A=rt(g),M=O.applyContentViewMinification(b,i),B=Lc(M,i);return $(await Ec(e,B.text,A,d,f,B.warning,t),d)}}let T=rt(g),L=Hf(e,g,t),k=b=>{let A=b.content;if(typeof A!="string")return b;let M=Lc(A,i),B=[...P?[P]:[],...y?[y]:[],...M.warning?[M.warning]:[]],I=b.warnings??[];return{...b,content:M.text,...B.length>0&&{warnings:[...I,...B]}}};if(L.earlyResult){let b=L.earlyResult.content,A=S&&typeof b=="string"?{...L.earlyResult,content:O.applyContentViewMinification(b,i)}:L.earlyResult;return $(Tc(k(Qf(A,C)),d,f),d)}let w=await Uf(e,L,s,T,t,S,C);return $(Tc(k(w),d,f),d)}catch(n){return F(n,e,{toolName:x.LOCAL_FETCH_CONTENT})}}import{z as TP}from"zod";import{FetchContentQuerySchema as jf}from"@octocodeai/octocode-core/schemas";var EP=TP.enum(["none","standard","symbols"]).optional(),zf={startLine:On,endLine:On,contextLines:In.default(5),charOffset:_(0,1e8).optional(),charLength:_(1,5e4).optional(),minify:EP},LP=Z(jf,zf),rn=X(jf,zf),uo=Y(LP,{maxQueries:5});async function Wf(e){let{queries:t}=e;return te(t||[],async n=>Fe({toolName:x.LOCAL_FETCH_CONTENT,query:n,contextMessage:"localGetFileContent execution failed",execute:async()=>{let r=ke(rn,n);return r.ok===!1?r.error:await $f(r.data)}}),{toolName:x.LOCAL_FETCH_CONTENT,finalize:AP()},e)}function AP(){return({results:e})=>{let t={results:kP(e)},n=Dn(t.results);n&&(t.base=n);let r=Mn(t.results);return r&&(t.shared=r),{structuredContent:Ve(t),text:_P(t),isError:t.results.length>0&&t.results.every(o=>o.status==="error")}}}function kP(e){return e.map(t=>{let n=structuredClone(t.data),r=typeof n.path=="string"?n.path:void 0;if(t.status!=="error"&&r){let o=$i(r);o&&(n.fileType=o)}return{...t,data:n}})}function _P(e){let t=[];e.base&&t.push(`base: ${e.base}`,"");for(let n of e.results){let r=n.data,o=typeof r.content=="string"?r.content:void 0,i={...r};delete i.content,t.push(`result: ${n.id}${n.status?` (${n.status})`:""}`);let s=Nt({data:i},["data","path","resolvedPath","contentView","startLine","endLine","totalLines","isPartial","pagination","sourceChars","sourceBytes","returnedChars","fileType","warnings","error"]).trimEnd();s&&t.push(s),o!==void 0&&t.push("content (copy-safe):",o),t.push("")}return e.shared&&t.push(Nt({shared:e.shared},["shared"]).trimEnd()),t.join(`
46
+ `)}function wL(e){return{...e.changedFiles?{changedFiles:!0}:{},...e.patches.mode!=="none"?{patches:e.patches}:{}}}function PL(e){let t=e.changedFiles;if(Array.isArray(t))for(let n of t){if(!Zr(n))continue;let r=ka(n.patchPagination);if(r?.hasMore)return r}}function TL(e){let t=e.comments;if(Array.isArray(t))for(let n of t){if(!Zr(n))continue;let r=ka(n.bodyPagination);if(r?.hasMore)return r}}function EL(e,t,n,r,o){let i={},s=ka(t.body),a=_a(t.changedFiles),c=_a(t.comments),l=_a(t.commits),u=PL(e),p=TL(e),d=wL(r);if(s&&(i.body={...s,nextQuery:Zu(n,o,{body:!0},s)}),a){let f=La(n,o,d,"filePage",a);i.changedFiles={...a,...f?{nextQuery:f}:{}}}if(c&&r.comments){let f=La(n,o,{comments:r.comments},"commentPage",c);i.comments={...c,...f?{nextQuery:f}:{}}}if(p?.hasMore&&p.nextCharOffset!==void 0&&r.comments&&(i.commentBody={...p,nextQuery:di(n,o,{content:{comments:r.comments},...n.commentPage!==void 0?{commentPage:n.commentPage}:{},commentBodyOffset:p.nextCharOffset,charLength:n.charLength})}),l&&r.commits){let f=La(n,o,{commits:r.commits},"commitPage",l);i.commits={...l,...f?{nextQuery:f}:{}}}u&&r.patches.mode!=="none"&&(i.patches={...u,nextQuery:Zu(n,o,{patches:r.patches},u,{filePage:n.filePage??n.page})});let m=t.filePaths;return Zr(m)&&(i.filePaths={...m,hasMore:m.hasMore===!0,nextQuery:m.hasMore===!0?di(n,o,{content:{changedFiles:!0},filePage:m.nextFilePage}):void 0}),Object.keys(i).length>0?i:void 0}function Wy(e,t,n,r,o){let i=Number(e.number),s=typeof e.body=="string"?e.body:void 0,a=s&&r?xL(s):s,c=n.body?ur(a,t.charOffset??0,t.charLength??12e3):void 0,l=n.body||n.changedFiles||n.patches.mode!=="none"||!!n.comments||n.reviews||!!n.commits,u=o!==void 0?o:l,d=t.prNumber!==void 0||t.verbose===!0,{contentPagination:m={},...f}=Uy(e,t,n),{contentPagination:h={},...y}=zy(e,t,n),{contentPagination:g={},...S}=Qy(e,t,n),R=Array.isArray(f.changedFiles)?f.changedFiles.find(E=>E.path)?.path:void 0,P={...{number:e.number,title:e.title,state:e.state,...e.draft?{draft:e.draft}:{},author:e.author,...Array.isArray(e.assignees)&&e.assignees.length?{assignees:e.assignees}:{},...Array.isArray(e.labels)&&e.labels.length?{labels:e.labels}:{},targetBranch:e.targetBranch,...d?{sourceBranch:e.sourceBranch,...e.sourceSha?{sourceSha:e.sourceSha}:{}}:{},createdAt:e.createdAt,...d?{updatedAt:e.updatedAt}:{},...d||!e.mergedAt?{closedAt:e.closedAt}:{},mergedAt:e.mergedAt,...e.commentsCount?{commentsCount:e.commentsCount}:{},...e.changedFilesCount?{changedFilesCount:e.changedFilesCount}:{},...e.additions?{additions:e.additions}:{},...e.deletions?{deletions:e.deletions}:{},...d&&!c?{bodyPreview:Aa(typeof e.body=="string"?e.body:void 0)}:{},...u?{next:$y(t,i,n,R)}:{}},...n.body?c?{body:c.content}:{bodyEmpty:!0}:{},...f,...y,...jy(e,t,n),...S,...e.reviewSummary?{reviewSummary:e.reviewSummary}:{},...Array.isArray(e.sanitizationWarnings)&&e.sanitizationWarnings.length>0?{sanitizationWarnings:e.sanitizationWarnings}:{}},T=EL(P,{...c?{body:c.pagination}:{},...m,...h,...g},t,n,i);return T&&(P.contentPagination=T),P}function wt(e){if(typeof e=="string")return e;if(Array.isArray(e)&&typeof e[0]=="string")return e[0]}function qu(e){let t=(e.keywordsToSearch??[]).filter(o=>o.trim()).map(Sa),n=e.query?.trim()??"";return[...t,...n?[n]:[]].join(" ")||void 0}function Vy(e,t,n){if(!n&&!t)return{text:e};let r=e.length,o=Math.min(Math.max(0,t??0),r),i=Math.max(1,n??r),s=Math.min(o+i,r),a=s<r;return{text:e.slice(o,s),pagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function Oa(e){return e.pull_request!=null}function AL(e){return e?e.map(t=>typeof t=="string"?t:t.name??"").filter(Boolean):[]}function va(e){return{number:e.number,title:e.title??"",state:e.state??"open",author:e.user?.login??"unknown",labels:AL(e.labels),createdAt:e.created_at??"",updatedAt:e.updated_at??"",...e.closed_at?{closedAt:e.closed_at}:{}}}function qr(e,t=[]){return{error:e,type:"http",...t.length>0?{hints:t}:{}}}function Ju(e,t,n="anon"){return xe("gh-api-issues",{owner:e.owner,repo:e.repo,issueNumber:e.issueNumber,query:qu(e),state:e.state,author:e.author,assignee:e.assignee,mentions:e.mentions,commenter:e.commenter,label:e.label,milestone:e.milestone,created:e.created,updated:e.updated,closed:e.closed,comments:e.comments,reactions:e.reactions,locked:e.locked,visibility:e.visibility,archived:e.archived,match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,charOffset:e.charOffset,charLength:e.charLength,commentPage:e.commentPage,itemsPerPage:e.itemsPerPage,concise:e.concise,auth:n},t)}import{ContentSanitizer as Ky}from"@octocodeai/octocode-engine/contentSanitizer";async function Xy(e,t){let n=wt(e.owner),r=wt(e.repo),o=e.issueNumber;if(!n||!r||o==null)return qr("owner, repo, and issueNumber are required for issue detail mode.");let i=await $(t),s=await i.rest.issues.get({owner:n,repo:r,issue_number:o});if(Oa(s.data))return qr(`Issue #${o} is a pull request; use ghGetHistoryItem operation:"pullRequest" with number:${o}.`,[`Retry with ghGetHistoryItem { operation: "pullRequest", owner: "${n}", repo: "${r}", number: ${o} }.`]);let a=e.content?.body!==!1,c=e.content?.comments?.discussion===!0,l=e.content?.comments?.includeBots===!0,u=va(s.data),p={};if(a){let d=Ky.sanitizeContent(s.data.body??"").content,m=Vy(d,e.charOffset,e.charLength);u.body=m.text,m.pagination&&(p.body=m.pagination)}if(c){let d=Math.max(1,e.commentPage??1),m=Math.max(1,e.itemsPerPage??30),f=await i.rest.issues.listComments({owner:n,repo:r,issue_number:o,per_page:m,page:d}),h=l?f.data:f.data.filter(g=>!ir(g.user?.login??""));u.comments=h.map(g=>({id:String(g.id),user:g.user?.login??"unknown",body:Ky.sanitizeContent(g.body??"").content,createdAt:g.created_at??"",updatedAt:g.updated_at??"",commentType:"discussion"}));let y=qs(f.headers.link);p.comments={currentPage:d,itemsPerPage:m,totalComments:u.comments.length,hasMore:y,...y&&d<1e3?{nextCommentPage:d+1}:{},...y&&d>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}return Object.keys(p).length>0&&(u.contentPagination=p),{data:{type:"issues",owner:n,repo:r,issues:[u],totalCount:1},status:200}}async function Yy(e,t,n){let r=wt(t.owner)??"",o=wt(t.repo)??"",i=await $(n),s=[],a=e;if(r&&o){let g=await Ta(i,r,o);g.renamed&&(s.push(`Repository ${r}/${o} was renamed to ${g.owner}/${g.repo} \u2014 GitHub search does not follow renames, so the canonical name was searched instead.`),a={...e,owner:g.owner,repo:g.repo})}let c=bl(a),l=Math.min(t.limit??30,100),u=t.page??1,p=t.sort&&t.sort!=="best-match"?t.sort:void 0,d=await i.rest.search.issuesAndPullRequests({q:c,sort:p,order:t.order||"desc",per_page:l,page:u}),m=ch(d.headers);m&&s.push(m);let f=(d.data.items??[]).filter(g=>!Oa(g)).map(g=>va(g)),h=d.data.total_count??f.length,y=u*l<h&&f.length===l;return{data:{type:"issues",owner:r,repo:o,issues:t.concise?f.map(g=>`#${g.number} ${g.title}`):f,totalCount:h,effectiveQuery:c,...s.length?{warnings:s}:{},...d.data.incomplete_results?{incompleteResults:!0}:{},pagination:{currentPage:u,perPage:l,hasMore:y,...y?{nextPage:u+1}:{},...h>1e3?{totalMatchesCapped:!0}:{}}},status:200}}async function Zy(e,t){let n=wt(e.owner),r=wt(e.repo);if(!n||!r)return qr("owner and repo are required for issues mode.");let o=await $(t),i=Math.min(e.limit??30,100),s=e.page??1,a=e.state==="open"||e.state==="closed"?e.state:"all",c=await o.rest.issues.listForRepo({owner:n,repo:r,state:a,per_page:i,page:s,...e.assignee?{assignee:e.assignee}:{},...e.author?{creator:e.author}:{},...e.mentions?{mentioned:e.mentions}:{},...e.milestone?{milestone:e.milestone}:{},...e.sort==="created"||e.sort==="updated"||e.sort==="comments"?{sort:e.sort}:{},...e.order?{direction:e.order}:{},...typeof e.label=="string"?{labels:e.label}:Array.isArray(e.label)?{labels:e.label.join(",")}:{}}),l=c.data.filter(m=>!Oa(m)).map(m=>va(m)),u=qs(c.headers.link),p=!u&&s===1,d=[];return l.length===0&&u&&d.push("This page contained only pull requests (the GitHub issues endpoint returns both; PRs are filtered out) \u2014 follow pagination.nextPage, later pages may contain issues."),{data:{type:"issues",owner:n,repo:r,issues:e.concise?l.map(m=>`#${m.number} ${m.title}`):l,...p?{totalCount:l.length}:{},...d.length?{warnings:d}:{},pagination:{currentPage:s,perPage:i,hasMore:u,...u?{nextPage:s+1}:{}}},status:200}}async function ep(e,t,n){let r=await ke(t),o=Ju(e,n,r);return De(o,()=>LL(e,t),{shouldCache:i=>"data"in i&&!("error"in i)})}async function LL(e,t){try{if(e.state==="merged"){let r={owner:wt(e.owner)??"",repo:wt(e.repo)??"",state:"merged"};return qr('state:"merged" is not valid for issues \u2014 use "open" or "closed".',[`Use ghSearchHistory with ${JSON.stringify({operation:"pullRequests",...r})}.`])}if(e.issueNumber!=null)return await Xy(e,t);let n={...e,query:qu(e)};return Sl(n)?await Yy(n,e,t):await Zy(e,t)}catch(n){return Qt(n)?{data:{type:"issues",owner:wt(e.owner)??"",repo:wt(e.repo)??"",issues:[],totalCount:0,pagination:{currentPage:e.page??1,perPage:Math.min(e.limit??30,100),hasMore:!1}},status:200}:J(n)}}async function mi(e,t,n,r=le){let o=t;if(!o.owner||!o.repo)return N("owner and repo are required for issues mode.",e);let i=o.issueNumber??o.prNumber,s=await ep({owner:o.owner,repo:o.repo,...i!=null?{issueNumber:i}:{},keywordsToSearch:o.keywords,query:o.query,state:o.state,author:o.author,assignee:o.assignee,mentions:o.mentions,commenter:o.commenter,label:o.label,milestone:o.milestone,created:o.created,updated:o.updated,closed:o.closed,comments:o.comments,reactions:o.reactions,locked:o.locked,visibility:o.visibility,match:o.match,archived:o.archived,sort:o.sort,order:o.order,limit:o.pageSize,page:Number(o.page)||1,concise:o.concise,content:o.content,charOffset:o.charOffset,charLength:o.charLength,commentPage:o.commentPage,itemsPerPage:o.pageSize},n);if(Rt(s))return N(s,e,{toolName:r});if(i!=null&&Array.isArray(s.data.issues)){let d=s.data.issues[0];if(d&&typeof d=="object"&&d.contentPagination){let m=d.contentPagination,f={operation:"issue",owner:o.owner,repo:o.repo,number:i,content:o.content,...o.commentPage===void 0?{}:{commentPage:o.commentPage},...o.charLength===void 0?{}:{charLength:o.charLength}},h=m.body;typeof h?.nextCharOffset=="number"&&(h.nextQuery={...f,charOffset:h.nextCharOffset});let y=m.comments;typeof y?.nextCommentPage=="number"&&(y.nextQuery={...f,commentPage:y.nextCommentPage})}}let a=Array.isArray(s.data.issues)?s.data.issues.length>0:!1,c=!a&&s.data.warnings?.length?{hints:s.data.warnings}:{},l=s.data.issues,u=(()=>{if(!Array.isArray(l)||l.length===0)return;let d=l[0];if(typeof d=="number")return d;if(typeof d=="string"){let m=d.match(/^#(\d+)\b/);return m?Number(m[1]):void 0}if(d&&typeof d=="object"&&typeof d.number=="number")return d.number})(),p={};return i==null&&u!=null&&(p.readIssue={tool:"ghGetHistoryItem",query:{operation:"issue",owner:o.owner,repo:o.repo,number:u,content:{body:!0}},why:`Read issue #${u} body/discussion from this list`,confidence:"low"}),p.searchRepositoryCode={tool:"ghSearch",query:{operation:"code",owner:o.owner,repo:o.repo},why:"Search code in this repository for symbols mentioned in the issue(s)",confidence:"low"},ge(e,{...s.data,...c,next:p},a,r,{rawResponse:s.rawResponseChars})}async function qy(e,t){try{let o=(await(await $(t)).rest.repos.compareCommitsWithBasehead({owner:e.owner,repo:e.repo,basehead:`${e.base}...${e.head}`})).data,i=(o.commits??[]).map(l=>({sha:l.sha,messageHeadline:(l.commit.message??"").split(`
47
+ `)[0]??"",author:l.commit.author?.name??l.author?.login??"unknown",date:l.commit.author?.date??""})),s=o.files??[],a=e.path?s.filter(l=>l.filename===e.path):s,c;if(e.includeDiff){let l=sr(a,{filePage:e.filePage,itemsPerPage:e.itemsPerPage,charOffset:e.charOffset,charLength:e.charLength});c={files:l.files,filesPagination:l.filesPagination}}else c={changedFiles:a.length};return{data:{type:"compare",owner:e.owner,repo:e.repo,base:e.base,head:e.head,status:o.status,aheadBy:o.ahead_by,behindBy:o.behind_by,totalCommits:o.total_commits,commits:i,...c},status:200}}catch(n){return J(n)}}async function fi(e,t,n,r=le){let o=t;if(!o.owner||!o.repo)return N("owner and repo are required for commits mode.",e);if(o.base&&o.head){let m=await qy({owner:o.owner,repo:o.repo,base:o.base,head:o.head,includeDiff:!!o.includeDiff,path:o.path,filePage:typeof o.filePage=="number"?o.filePage:void 0,itemsPerPage:o.pageSize,charOffset:typeof o.charOffset=="number"?o.charOffset:void 0,charLength:typeof o.charLength=="number"?o.charLength:void 0},n);if(Rt(m))return N(m,e,{toolName:r});let f=m.data,h=m.data.filesPagination,y=m.data.files?.find(R=>typeof R.patchPagination?.nextCharOffset=="number"),g={},S={operation:"compare",owner:o.owner,repo:o.repo,base:o.base,head:o.head,...o.includeDiff?{includeDiff:!0}:{},...o.path?{path:o.path}:{},...o.filePage===void 0?{}:{filePage:o.filePage},...o.pageSize===void 0?{}:{pageSize:o.pageSize},...o.charOffset===void 0?{}:{charOffset:o.charOffset},...o.charLength===void 0?{}:{charLength:o.charLength}};return typeof h?.nextFilePage=="number"&&(g.nextFilePage={tool:"ghGetHistoryItem",query:{...S,filePage:h.nextFilePage},why:"Continue the changed-file list.",confidence:"exact"}),typeof y?.patchPagination?.nextCharOffset=="number"&&(g.continuePatch={tool:"ghGetHistoryItem",query:{...S,charOffset:y.patchPagination.nextCharOffset},why:"Continue the current patch window.",confidence:"exact"}),ge(e,Object.keys(g).length>0?{...f,next:g}:f,m.data.totalCommits>0||m.data.status!=="identical",r)}let i=o.path,s=i&&!i.endsWith("/")?"file":"repo";if(s==="file"&&!i)return N("path is required when querying a specific file in commits mode.",e);let a=await qh({type:s,owner:o.owner,repo:o.repo,path:i,branch:o.branch,since:o.since,until:o.until,author:o.author,committer:o.committer,page:Number(o.page)||1,perPage:Number(o.pageSize)||30,filePage:typeof o.filePage=="number"?o.filePage:void 0,itemsPerPage:typeof o.pageSize=="number"?o.pageSize:void 0,includeDiff:!!o.includeDiff,charOffset:typeof o.charOffset=="number"?o.charOffset:void 0,charLength:typeof o.charLength=="number"?o.charLength:void 0},n);if(Rt(a))return N(a,e,{toolName:r});let{commits:c}=a.data,l=c.length>0,u=c.map(m=>m.messageHeadline?.match(/\(#(\d+)\)/)?.[1]).find(Boolean),p=!l&&a.data.warnings?.length?{hints:a.data.warnings}:{},d={...a.data,...p,...u?{next:{prDetail:{tool:"ghGetHistoryItem",query:{operation:"pullRequest",owner:o.owner,repo:o.repo,number:Number(u)},why:`Open PR #${u} referenced by the first commit for review context`,confidence:"low"}}}:{}};return ge(e,d,l,r,{rawResponse:a.rawResponseChars})}async function hi(e,t,n,r=le){let o=n(),i={...t},s=Dy(i),a=i.prNumber!==void 0;a||(i.content=void 0);let c=await an(i,()=>o.provider.searchPullRequests(Jg(i)));if(c.ok===!1)return c.result;let l=a?s.changedFiles||s.patches.mode!=="none":!1,{pullRequests:u,resultData:p}=ey(c.response.data,{includeFileChanges:l});i.prNumber!==void 0&&delete p.pagination;let d=!a&&!!e.content,m={...s,body:!1,changedFiles:!1,patches:{mode:"none"},comments:!1,commits:!1},f=i.minify==="standard",h=a,y=u.map(S=>Wy(S,i,d?m:s,f,h));p.pullRequests=y,!a&&i.concise===!0&&(p.pullRequests=y.map(S=>{let R=S;return`#${R.number} ${R.title}`}));let g=y.length>0;if(!a&&g){let S=y[0].number,R=i.owner,C=i.repo;S!=null&&R&&C&&(p.next={readPr:{tool:"ghGetHistoryItem",query:{operation:"pullRequest",owner:R,repo:C,number:S,content:{body:!0,changedFiles:!0,comments:{discussion:!0}}},why:"Read any PR from this list \u2014 swap number for the # you want.",confidence:"low"}})}return ge(i,p,g,r,{rawResponse:c.response.rawResponseChars})}import{z as tp}from"zod";var Jy={type:tp.enum(["prs","commits","issues"]).optional(),prNumber:M(1,1e9).optional(),issueNumber:M(1,1e9).optional(),pageSize:M(1,100).optional().default(30),match:tp.array(tp.enum(["title","body","comments"])).optional(),page:be.default(1),filePage:M(1,1e3).optional(),commentPage:M(1,1e3).optional(),commitPage:M(1,1e3).optional(),charOffset:at.optional(),commentBodyOffset:at.optional(),charLength:M(1,5e4).optional()},_L=pe(Ns,Jy),gi=se(Ns,Jy),kL=Z(_L);async function Fa(e){let{queries:t,authInfo:n}=e,r=$e(n);return he(t,async(o,i)=>{try{let s=tt(gi,o);if(s.ok===!1)return s.error;let a=s.data.type;return a==="issues"?await mi(o,s.data,n):a==="commits"?await fi(o,s.data,n):await hi(o,s.data,r)}catch(s){return He(s,o,void 0,le)}},{toolName:le,keysPriority:["pullRequests","issues","pagination","totalCount","error"]},e)}import{z as nt}from"zod";function eo(e,t,n){let r=e.safeParse(t);if(!r.success)for(let o of r.error.issues)n.addIssue({code:"custom",message:o.message,path:o.path})}function eb(e){let t=e;for(;t instanceof nt.ZodOptional||t instanceof nt.ZodDefault;)t=t.unwrap();if(!(t instanceof nt.ZodObject))throw new TypeError("Expected an object schema");return t}function tb(e){let t=e;for(;t instanceof nt.ZodOptional||t instanceof nt.ZodDefault;)t=t.unwrap();if(!(t instanceof nt.ZodArray))throw new TypeError("Expected an array schema");return t}function to(e,t){return e.description?t.describe(e.description):t}var nb={pageSize:M(1,100).optional().default(30),page:M(1,1e3).optional()},rb={...nb,filePage:M(1,1e3).optional(),commentPage:M(1,1e3).optional(),commitPage:M(1,1e3).optional(),charOffset:at.optional(),commentBodyOffset:at.optional(),charLength:M(1,1e5).optional()},XV=se(tr,rb).superRefine((e,t)=>eo(tr,e,t)),Jr=pe(tr,rb),ob=Pe(Jr.shape,"content"),ib=eb(ob),sb=Pe(ib.shape,"patches"),Nn=eb(sb),ab=to(Pe(Nn.shape,"mode"),nt.literal("selected")),IL=to(Pe(Nn.shape,"mode"),nt.literal("all")),OL=to(Pe(Nn.shape,"files"),tb(Pe(Nn.shape,"files")).min(1)),vL=to(Pe(Nn.shape,"ranges"),tb(Pe(Nn.shape,"ranges")).min(1)),FL=nt.object({mode:ab,files:OL,ranges:Pe(Nn.shape,"ranges")}).strict(),ML=nt.object({mode:ab,files:Pe(Nn.shape,"files"),ranges:vL}).strict(),NL=nt.object({mode:IL}).strict(),DL=ib.extend({patches:to(sb,nt.union([FL,ML,NL]).optional())}),rp=Jr.omit({prNumber:!0,filePage:!0,commentPage:!0,commitPage:!0,content:!0,matchString:!0,commentBodyOffset:!0,charOffset:!0,charLength:!0}),HL=rp.superRefine((e,t)=>eo(tr,e,t)),Na=Jr.omit({keywords:!0,concise:!0,state:!0,assignee:!0,author:!0,commenter:!0,mentions:!0,"review-requested":!0,"reviewed-by":!0,label:!0,checks:!0,review:!0,head:!0,base:!0,created:!0,updated:!0,closed:!0,"merged-at":!0,comments:!0,reactions:!0,draft:!0,match:!0,sort:!0,order:!0,page:!0,archived:!0}).extend({owner:Te(Jr.shape,"owner"),repo:Te(Jr.shape,"repo"),prNumber:Te(Jr.shape,"prNumber"),content:to(ob,DL.optional())}),GL=Na.superRefine((e,t)=>eo(tr,e,t)),YV=Z(nt.union([HL,GL])),cb={...nb,commentPage:M(1,1e3).optional(),charOffset:at.optional(),commentBodyOffset:at.optional(),charLength:M(1,1e5).optional()},ZV=se(nr,cb).superRefine((e,t)=>eo(nr,e,t)),np=pe(nr,cb),yi=np.omit({issueNumber:!0,commentPage:!0,content:!0,matchString:!0,commentBodyOffset:!0,charOffset:!0,charLength:!0}),BL=yi.superRefine((e,t)=>eo(nr,e,t)),Da=np.omit({keywords:!0,concise:!0,state:!0,assignee:!0,author:!0,commenter:!0,mentions:!0,label:!0,created:!0,updated:!0,closed:!0,comments:!0,reactions:!0,match:!0,sort:!0,order:!0,page:!0,archived:!0}).extend({issueNumber:Te(np.shape,"issueNumber")}),zL=Da.superRefine((e,t)=>eo(nr,e,t)),qV=Z(nt.union([BL,zL])),lb={page:be.default(1),pageSize:M(1,100).optional().default(30),filePage:be.optional(),charOffset:at.optional(),charLength:M(1,1e5).optional()};function jL(e,t){(e.base&&!e.head||e.head&&!e.base)&&t.addIssue({code:"custom",path:[e.base?"head":"base"],message:"compare mode requires base and head together"})}var JV=se(Ds,lb).superRefine(jL),Ma=pe(Ds,lb),op=Ma.omit({base:!0,head:!0}),QL=op,no=Ma.omit({branch:!0,since:!0,until:!0,author:!0,committer:!0,page:!0}).extend({base:Te(Ma.shape,"base"),head:Te(Ma.shape,"head")}),UL=no,e2=Z(nt.union([QL,UL]));function ip(e,t){return{...e,queries:e.queries.map(n=>({...n,type:t}))}}function r2(e){return Fa(ip(e,"prs"))}function o2(e){return Fa(ip(e,"issues"))}function i2(e){return Fa(ip(e,"commits"))}import{ContentSanitizer as t_}from"@octocodeai/octocode-engine/contentSanitizer";import Ha from"path";import{pathValidator as Ga}from"@octocodeai/octocode-engine/pathValidator";import{getConfigSync as ub,getOctocodeHome as $L}from"@octocodeai/config";function WL(e=ub().local.allowedPaths){for(let t of e)typeof t=="string"&&t.trim()!==""&&Ga.addAllowedRoot(t)}function VL(){let e=$L(process.env);Ga.addAllowedRoot(Ha.join(e,"tmp","clone")),Ga.addAllowedRoot(Ha.join(e,"tmp","tree"))}function lt(e,t){if(!e.path?.trim()){let s=Xe.pathValidationFailed("","path is required");return{isValid:!1,errorResult:N(s,e,{toolName:t})}}WL(),VL();let n=process.env.WORKSPACE_ROOT?.trim()||ub().local.workspaceRoot||process.cwd(),r=e.path.replace(/^file:\/\//,""),o=Ha.isAbsolute(r)?r:Ha.resolve(n,r),i=Ga.validate(o);if(!i.isValid){let s=Xe.pathValidationFailed(e.path,i.error);return{isValid:!1,errorResult:N(s,e,{toolName:t,extra:{cwd:n,resolvedPath:o}})}}return{isValid:!0,sanitizedPath:i.sanitizedPath??o}}function d2(e,t,n={}){let{threshold:r=100,itemType:o="item",detailed:i=!1}=n;return t?{shouldBlock:!1}:e>r?{shouldBlock:!0,errorCode:Xe.outputTooLarge(e,r).errorCode,hints:[`Found ${e} ${o}${e===1?"":"s"} - exceeds safe limit of ${r}`,"Use charLength to paginate through results",i?"Detailed results increase size - consider using charLength for pagination":"Consider using charLength to paginate large result sets"]}:{shouldBlock:!1}}import{open as KL,readFile as XL,stat as YL}from"fs/promises";var f2={COMMAND_TIMEOUT:3e4,MAX_OUTPUT_SIZE:10485760,MAX_RESULTS:100,CONTEXT_LINES:5},Kt={MCP_MAX_TOKENS:25e3,CHARS_PER_TOKEN:4,MAX_FETCH_CONTENT_CHARS:5e4,MAX_OUTPUT_SIZE_BYTES:10*1024*1024,LARGE_FILE_THRESHOLD_KB:100,MAX_ENTRIES_BEFORE_PAGINATION:100,MAX_FILES_DEFAULT:1e3,DEFAULT_ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200,MAX_LIST_ITEMS_DETAILED:100,MAX_LIST_ITEMS_SIMPLE:200,MAX_ARCHIVE_ENTRIES_PER_PAGE:100,MAX_DIR_ENTRIES_PER_PAGE:100,MAX_DIR_ENTRIES_TREE:1e3,DEFAULT_EXEC_TIMEOUT_MS:3e4,DEFAULT_MAX_MATCHES_PER_FILE:3,DEFAULT_CONTEXT_LINES:5,DEFAULT_MATCH_CONTENT_LENGTH:500,MAX_MATCH_CONTENT_LENGTH:800,DEFAULT_MATCHES_PER_PAGE:10,MAX_MATCHES_PER_PAGE:100,DEFAULT_FILES_PER_PAGE:20,MAX_FILES_PER_PAGE:50,MAX_RIPGREP_DIRECTORY_SIZE_MB:100,MAX_FILE_COUNT_FOR_SEARCH:1e3,ESTIMATED_AVG_FILE_SIZE_BYTES:50*1024,LARGE_RESULT_BYTES_HINT:1.5*1024*1024,BINARY_MAX_BYTES:10*1024,BINARY_DEFAULT_HEX_LINES:20,BINARY_DEFAULT_MIN_STRING_LENGTH:6,MAX_ARCHIVE_FILES:1e3,DEFAULT_ARCHIVE_MAX_FILES:200,GLOBAL_MEMORY_LIMIT_BYTES:100*1024*1024,PER_OPERATION_MEMORY_LIMIT_BYTES:10*1024*1024,MEMORY_RESERVATION_TIMEOUT_MS:300*1e3,TOKEN_CRITICAL_THRESHOLD:5e4,TOKEN_HIGH_THRESHOLD:25e3,TOKEN_MODERATE_THRESHOLD:1e4,TOKEN_NOTICE_THRESHOLD:2500};function g2(e){return t=>{}}function pb(e,t){return n=>t}function sp(e,t){let n=Math.abs(t-e);return n>=50&&n/e>=.02?{sourceChars:e,sourceBytes:t}:{sourceChars:e}}function ap(e,t,n){return{...e,...sp(t,n)}}function db(e){let t=e.fullContent===!0,n=e.matchString!==void 0,r=e.startLine!==void 0||e.endLine!==void 0;if(e.minify==="symbols"&&(n||r))return{status:"error",error:'minify:"symbols" returns a whole-file signature skeleton and cannot be combined with matchString/startLine/endLine \u2014 remove the line/match constraints, or use minify:"standard" (or "none") to extract a specific range.'};if(t&&n)return{status:"error",error:"Cannot use fullContent with matchString \u2014 these are mutually exclusive extraction methods. Choose ONE: fullContent=true to read the entire file, OR matchString to extract matching sections, OR startLine+endLine for a known line range."};if(t&&r)return{status:"error",error:"Cannot use fullContent with startLine/endLine \u2014 these are mutually exclusive extraction methods. Choose ONE: fullContent=true to read the entire file, OR startLine+endLine for a known line range, OR matchString to extract matching sections."};if(n&&r)return{status:"error",error:"Cannot use matchString with startLine/endLine \u2014 these are mutually exclusive extraction methods. Choose ONE: matchString to extract matching sections, OR startLine+endLine for a known line range, OR fullContent=true to read the entire file."};let o=e.startLine!==void 0,i=e.endLine!==void 0;return o&&!i?{status:"error",error:`startLine=${e.startLine} provided without endLine \u2014 both are required for line-range extraction.`}:i&&!o?{status:"error",error:`endLine=${e.endLine} provided without startLine \u2014 both are required for line-range extraction.`}:null}async function mb(e,t){try{return{fileStats:await YL(t)}}catch(n){let r=Xe.fileAccessFailed(e.path,n instanceof Error?n:void 0);return{errorResult:N(r,e,{toolName:I.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function fb(e){let t=e.startLine!==void 0&&e.endLine!==void 0;return e.minify??(e.fullContent===!0||t?"none":"standard")}function hb(e,t,n){return n!=="none"?!1:t>Kt.LARGE_FILE_THRESHOLD_KB&&!e.matchString&&!e.startLine&&!e.charLength}function gb(e,t,n){let r=Xe.fileTooLarge(e.path,n,Kt.LARGE_FILE_THRESHOLD_KB);return N(r,e,{toolName:I.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}function yb(e,t){let n=Xe.binaryFileUnsupported(e.path);return N(n,e,{toolName:I.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}async function bb(e){let n=Buffer.alloc(8192),r;try{r=await KL(e,"r");let{bytesRead:o}=await r.read(n,0,8192,0);if(o===0)return!1;let i=n.subarray(0,o);if(i.includes(0))return!0;try{new TextDecoder("utf-8",{fatal:!0}).decode(i,{stream:!0})}catch{return!0}let s=0,a=0,c=0;for(;c<i.length;){let l=i[c];if(l===27&&c+1<i.length&&i[c+1]===91){for(c+=2;c<i.length&&(i[c]<64||i[c]>126);)c+=1;c+=1;continue}s+=1;let u=l===9||l===10||l===13;l<32&&!u&&(a+=1),c+=1}return s>0&&a/s>.05}catch{return!1}finally{await r?.close().catch(pb("binary sample handle close",void 0))}}async function Sb(e,t){try{return{content:await XL(t,"utf-8")}}catch(n){let r=n instanceof Error?n:void 0,i=r?.code==="EISDIR"?Xe.fileAccessFailed(e.path,r):Xe.fileReadFailed(e.path,r);return{errorResult:N(i,e,{toolName:I.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function Rb(e,t){return{status:"empty",errorCode:j.NO_MATCHES,totalLines:t}}function ZL(e,t,n){let r=zs(t,e.matchString,e.contextLines??5,e.matchStringIsRegex??!1,e.matchStringCaseSensitive??!1);if(r.lines.length===0)return{isPartial:!1,earlyResult:Rb(e,n)};let o=r.lines.join(`
48
+ `),i=e.contextLines??5,s=r.matchingLines.slice(0,10).join(", "),a=r.matchingLines.length>10?` (+${r.matchingLines.length-10} more)`:"",c=`Found ${r.matchCount} occurrence${r.matchCount===1?"":"s"} of "${e.matchString}" on line${r.matchingLines.length===1?"":"s"} ${s}${a} \u2014 all shown as ${r.matchRanges.length} slice${r.matchRanges.length===1?"":"s"}, \xB1${i} lines of context each; these lines are lineHint anchors for lspGetSemantics.`,l,u,p;if(r.matchRanges.length>0){let d=r.matchRanges[0],m=r.matchRanges[r.matchRanges.length-1];d&&m&&(l=d.start,u=m.end,p=r.matchRanges)}return{resultContent:o,isPartial:!1,actualStartLine:l,actualEndLine:u,matchRanges:p,matchedLines:r.matchingLines,warnings:[c]}}function qL(e){return e.startLine!==void 0&&e.endLine!==void 0}function JL(e,t,n){let r=String(n).length;return e.slice(t-1,n).map((o,i)=>`${String(t+i).padStart(r," ")}\u2192 ${o}`).join(`
49
+ `)}function e_(e,t,n){let r=e.startLine,o=e.endLine,i=Math.max(1,r),s=Math.min(o,n);if(o<r)return{isPartial:!1,earlyResult:{status:"empty",totalLines:n,errorCode:j.NO_MATCHES,warnings:[`startLine ${r} is greater than endLine ${o} \u2014 startLine must be \u2264 endLine`,`Use startLine=1 to ${n} with startLine \u2264 endLine for a valid range`]}};if(i>n)return{isPartial:!1,earlyResult:{status:"empty",totalLines:n,errorCode:j.NO_MATCHES,warnings:[`Requested startLine ${r} exceeds file length (${n} lines)`,`Use startLine=1 to ${n} for valid range`]}};let a=[];return o>n&&a.push(`Requested endLine ${o} adjusted to ${n} (file end)`),{resultContent:JL(t,i,s),isPartial:s<n,actualStartLine:i,actualEndLine:s,warnings:a}}function Cb(e,t,n){let r=t.split(`
50
+ `),o=Vt(t);return e.matchString?ZL(e,r,o):qL(e)?e_(e,r,o):{resultContent:t,isPartial:!1}}async function xb(e,t,n){let r=String(t.path),o=t.charLength,i=t.charOffset??0,s=o,a=!1,c,l=i;s===void 0&&!t.fullContent&&e.length>n&&(s=n,a=!0,c=`Auto-paginated: Content (${e.length} chars) exceeds ${n} char limit`);let u="char-limit",p=s;if(s!==void 0){let R=await $s(e,l,s,r);u=R.chunkMode,p=R.length}let d=Us(e,l,p,s!==void 0?{pageSize:s}:void 0),m;if(d.hasMore&&u==="char-limit"&&Yo(d.paginatedContent)){let R=d.charOffset+d.charLength;m=await Zo(e,R,r)}let{goal:f,reasoning:h,charOffset:y,...g}=t,S=Ca("localGetFileContent",{...g,path:r,charLength:s??d.charLength},d);return{windowedContent:d.paginatedContent,pagination:d,effectiveCharLength:s,explicitCharOffset:i,autoPaginated:a,autoPaginateWarning:c,chunkMode:u,nextBlockChar:m,next:S,showPagination:s!==void 0||i>0||a}}async function wb(e,t,n,r,o,i=!0,s=i?"standard":"none"){if(!t.resultContent||t.resultContent.trim().length===0)return{status:"empty",totalLines:r};let a=[...t.warnings??[]],c=String(e.path),l=i?D.applyContentViewMinification(t.resultContent,c):t.resultContent,u=await xb(l,e,o);u.autoPaginateWarning&&a.push(u.autoPaginateWarning);let p=t.isPartial||u.pagination.hasMore,d=t.actualStartLine!==void 0&&t.actualEndLine!==void 0?t.actualEndLine-t.actualStartLine+1:void 0,m=t.isPartial&&!u.pagination.hasMore&&t.actualEndLine!==void 0&&d!==void 0?We("localGetFileContent",{path:c,startLine:t.actualEndLine+1,endLine:Math.min(r,t.actualEndLine+d),...e.minify!==void 0?{minify:e.minify}:{}},"Continue with the next source-line window."):void 0,f={...u.next??{},...m?{continueLines:m}:{}};return{path:c,content:u.windowedContent,contentView:s,returnedChars:u.windowedContent.length,...p&&{isPartial:p},totalLines:r,...t.actualStartLine!==void 0&&t.actualEndLine!==void 0&&{startLine:t.actualStartLine,endLine:t.actualEndLine,...t.matchRanges!==void 0&&{matchRanges:t.matchRanges},...t.matchedLines!==void 0&&{matchedLines:t.matchedLines}},...n.mtime&&{modified:n.mtime.toISOString()},...u.showPagination&&{pagination:{...Zl(u.pagination),chunkMode:u.chunkMode,...u.nextBlockChar!==void 0&&{nextBlockChar:u.nextBlockChar}}},...Object.keys(f).length>0?{next:f}:{},...a.length>0&&{warnings:a}}}async function cp(e,t,n,r,o,i,s){let a=await xb(t,e,s),c=[...a.autoPaginateWarning?[a.autoPaginateWarning]:[],...i?[i]:[]];return{path:e.path,content:a.windowedContent,contentView:"symbols",returnedChars:a.windowedContent.length,...a.pagination.hasMore&&{isPartial:!0},totalLines:n,...sp(r,o),...a.showPagination&&{pagination:{...Zl(a.pagination),chunkMode:a.chunkMode,...a.nextBlockChar!==void 0&&{nextBlockChar:a.nextBlockChar}}},...a.next?{next:a.next}:{},...c.length>0&&{warnings:c}}}function Pb(e,t){return typeof e.content!="string"?e:{...e,contentView:t}}function lp(e,t){let n=t_.sanitizeContent(e,t);return{text:n.content,warning:n.hasSecrets?`Secrets detected and redacted: ${n.secretsDetected.join(", ")}`:void 0}}async function Tb(e){let t=or();try{let n=lt(e,I.LOCAL_FETCH_CONTENT);if(!n.isValid)return n.errorResult;let r=db(e);if(r)return r;let o=n.sanitizedPath,i=String(e.path),{fileStats:s,errorResult:a}=await mb(e,o);if(a||!s)return a;let c=typeof s.size=="bigint"?Number(s.size):s.size,l=c/1024;if(await bb(o))return W(yb(e,o),c);let u=fb(e);if(hb(e,l,u))return W(gb(e,o,l),c);let{content:p,errorResult:d}=await Sb(e,o);if(d||p===void 0)return d;let m=p.length,f=Buffer.byteLength(p,"utf-8"),h=p,y=e.matchString!==void 0&&u!=="none",g=y?"none":u,S=y&&e.minify!==void 0?`minify:"${e.minify}" is not applied to matchString extractions \u2014 matched slices are returned verbatim so the content always contains the matched text.`:void 0,R=g==="standard"||g==="symbols",C=R?"standard":"none",P;if(g==="symbols"){let b=D.extractSignatures(h,i);if(b===null){let w=js(h,i);if(w!==null){let L=lp(w,i);return W(await cp(e,L.text,Vt(h),m,f,L.warning,t),m)}P=`minify:"symbols" is not supported for this file type (${i.split(".").pop()??"unknown"}) \u2014 falling back to standard content view.`}if(b!==null){let w=Vt(h),L=D.applyContentViewMinification(b,i),O=lp(L,i);return W(await cp(e,O.text,w,m,f,O.warning,t),m)}}let T=Vt(h),E=Cb(e,h,t),k=b=>{let w=b.content;if(typeof w!="string")return b;let L=lp(w,i),O=[...P?[P]:[],...S?[S]:[],...L.warning?[L.warning]:[]],v=b.warnings??[];return{...b,content:L.text,...O.length>0&&{warnings:[...v,...O]}}};if(E.earlyResult){let b=E.earlyResult.content,w=R&&typeof b=="string"?{...E.earlyResult,content:D.applyContentViewMinification(b,i)}:E.earlyResult;return W(ap(k(Pb(w,C)),m,f),m)}let x=await wb(e,E,s,T,t,R,C);return W(ap(k(x),m,f),m)}catch(n){return N(n,e,{toolName:I.LOCAL_FETCH_CONTENT})}}import{z as n_}from"zod";var r_=n_.enum(["none","standard","symbols"]).optional(),Eb={startLine:Wr,endLine:Wr,contextLines:$r.default(5),charOffset:at.optional(),charLength:M(1,5e4).optional(),minify:r_},o_=pe(Gs,Eb),bi=se(Gs,Eb),up=Z(ha(o_),{maxQueries:5});async function Ab(e){let{queries:t}=e;return he(t||[],async n=>Ct({toolName:I.LOCAL_FETCH_CONTENT,query:n,contextMessage:"localGetFileContent execution failed",execute:async()=>{let r=tt(bi,n);return r.ok===!1?r.error:await Tb(r.data)}}),{toolName:I.LOCAL_FETCH_CONTENT,finalize:i_()},e)}function i_(){return({results:e})=>{let t={results:s_(e)},n=aa(t.results);n&&(t.base=n);let r=ca(t.results);return r&&(t.shared=r),{structuredContent:sn(t),renderText:o=>a_(o),isError:t.results.length>0&&t.results.every(o=>o.status==="error")}}}function s_(e){return e.map(t=>{let n=structuredClone(t.data),r=typeof n.path=="string"?n.path:void 0;if(t.status!=="error"&&r){let o=xa(r);o&&(n.fileType=o)}return{...t,data:n}})}function a_(e){let t=[];e.base&&t.push(`base: ${e.base}`,"");for(let n of e.results){let r=n.data,o=typeof r.content=="string"?r.content:void 0,i={...r};delete i.content,t.push(`result: ${n.index}${n.status?` (${n.status})`:""}`);let s=Qr({data:i},["data","path","resolvedPath","contentView","startLine","endLine","totalLines","isPartial","pagination","sourceChars","sourceBytes","returnedChars","fileType","warnings","error"]).trimEnd();s&&t.push(s),o!==void 0&&t.push("content (copy-safe):",o),t.push("")}return e.shared&&t.push(Qr({shared:e.shared},["shared"]).trimEnd()),t.join(`
62
51
  `).trimEnd()+`
63
- `}import{z as Ac}from"zod";import{FindFilesQuerySchema as IP}from"@octocodeai/octocode-core/schemas";var Vf={maxDepth:_(0,100).optional(),minDepth:_(0,100).optional(),limit:_(1,1e4).optional().describe("Discovery cap applied after sort, before pagination \u2014 total results are capped here; itemsPerPage/page page within that cap."),page:K.default(1),itemsPerPage:_(1,50).optional(),excludeDir:Ac.array(Ac.string()).optional().describe("Directory names to prune from the walk. Common generated/vendor dirs are pruned by default (node_modules, .git, dist, build, out, coverage, target, .next, .cache); pass [] to prune nothing, or pass an explicit list to choose pruned dirs.")},Kf=Ac.object(Object.fromEntries(Object.entries(IP.shape).filter(([e])=>e!=="regexType")));function OP(e,t){e.minDepth!==void 0&&e.maxDepth!==void 0&&e.minDepth>e.maxDepth&&t.addIssue({code:"custom",message:"minDepth must be less than or equal to maxDepth.",path:["minDepth"]})}var FP=Z(Kf,Vf),on=X(Kf,Vf).superRefine(OP),lo=Y(FP,{maxQueries:5});function zn(e){return e===0?"0.0B":e<1024?`${e}.0B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)}MB`:e<1024*1024*1024*1024?`${(e/(1024*1024*1024)).toFixed(1)}GB`:`${(e/(1024*1024*1024*1024)).toFixed(1)}TB`}function po(e){let t=e.trim();if(/^\d+$/.test(t))return parseInt(t,10);let n=t.match(/^(\d+(?:\.\d+)?)(B|KB|MB|GB|TB)$/i);if(n&&n[1]&&n[2]){let s=parseFloat(n[1]);switch(n[2].toUpperCase()){case"B":return Math.round(s);case"KB":return Math.round(s*1024);case"MB":return Math.round(s*1024*1024);case"GB":return Math.round(s*1024*1024*1024);case"TB":return Math.round(s*1024*1024*1024*1024)}}let r=t.match(/^(\d+(?:\.\d+)?)([KMGT])$/i);if(!r||!r[1]||!r[2])throw new Error(`Invalid size format: ${e}`);let o=parseFloat(r[1]);switch(r[2].toUpperCase()){case"K":return Math.round(o*1024);case"M":return Math.round(o*1024*1024);case"G":return Math.round(o*1024*1024*1024);default:return Math.round(o*1024*1024*1024*1024)}}function kc(e){let t=e.indexOf("{");if(t===-1)return[e];let n=e.indexOf("}",t);if(n===-1)return[e];let r=e.slice(0,t),o=e.slice(t+1,n).split(","),i=e.slice(n+1);return o.flatMap(s=>kc(`${r}${s}${i}`))}function Yf(e){let t=new Map,n=0,r=!1,o=0,i=0,s=new Set;for(let a of e){for(let c of a.entries)t.has(c.path)||t.set(c.path,c);n+=a.totalDiscovered,r=r||a.wasCapped,o+=a.skipped,i+=a.permissionDenied;for(let c of a.warnings)s.add(c)}return{entries:[...t.values()],totalDiscovered:n,wasCapped:r,skipped:o,permissionDenied:i,warnings:[...s]}}function _c(e){let t=e.filter(o=>o.type==="file").length,n=e.filter(o=>o.type==="directory").length,r=e.reduce((o,i)=>i.type==="file"&&i.size?o+po(i.size):o,0);return`${e.length} entries (${t} files, ${n} dirs, ${zn(r)})`}function Ic(e,t){let n=e.length,r=t.itemsPerPage||20,o=Math.max(1,Math.ceil(n/r)),i=t.page||1,s=Math.min(i,o),a=i>o,c=(s-1)*r,u=Math.min(c+r,n),l=s<o;return{paginatedEntries:e.slice(c,u),endIdx:u,pagination:{currentPage:s,totalPages:o,entriesPerPage:r,totalEntries:n,hasMore:l,...l?{nextPage:s+1}:{},...a?{outOfRange:!0}:{}}}}function vP(e,t,n,r){if(!n.hasMore)return[];let o=e.slice(r,r+3).map(i=>i.name).join(", ");return[`Page ${n.currentPage}/${n.totalPages} (showing ${t} of ${n.totalEntries}). Next: page=${n.currentPage+1}${o?` (starts with: ${o}...)`:""}`]}function mo(e){if(e.skipped<=0)return[];let t=e.skipped-e.permissionDenied;return e.permissionDenied>0&&t>0?[`${e.skipped} entries skipped (${e.permissionDenied} permission denied, ${t} other errors)`]:e.permissionDenied>0?[`${e.permissionDenied} ${e.permissionDenied===1?"entry":"entries"} skipped due to permission denied`]:[`${e.skipped} ${e.skipped===1?"entry":"entries"} skipped due to access errors`]}function Xf(e){let t=e.find(r=>r.type==="file");if(t)return{fetch:{tool:"localGetFileContent",query:{path:t.path,minify:"standard"},why:'Read the first matched file (minify:"symbols" for a skeleton, minify:"none" for exact bytes).',confidence:"exact"}};let n=e.find(r=>r.type==="directory");if(n)return{viewStructure:{tool:"localViewStructure",query:{path:n.path},why:"Orient inside the first matched directory before reading files.",confidence:"exact"}}}var DP=["node_modules",".git","dist","build","out","coverage","target",".next",".cache"];function MP(e,t){let n=t??DP,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}async function qf(e){let t=e.detail==="full",n=e.detail==="modified"||t,r=n||(e.sortBy||"modified")==="modified";try{let o=ve(e,x.LOCAL_FIND_FILES);if(!o.isValid)return o.errorResult;let i={...e,path:o.sanitizedPath},s={...i,excludeDir:MP(i.path,i.excludeDir)},{warnings:a,query:c}=UP(s),u=e.limit??1e4,l={path:c.path,recursive:!0,includeRoot:!0,showHidden:!0,maxDepth:c.maxDepth,minDepth:c.minDepth,names:c.names,extensions:c.extensions,regex:c.regex,entryType:c.entryType,empty:c.empty,modifiedWithin:c.time?.modifiedWithin,modifiedBefore:c.time?.modifiedBefore,accessedWithin:c.time?.accessedWithin,sizeGreater:c.size?.greater,sizeLess:c.size?.less,permissions:c.permissions,executable:c.access==="executable",readable:c.access==="readable",writable:c.access==="writable",excludeDir:c.excludeDir,limit:1e4},p=c.pathPattern?kc(c.pathPattern):void 0,m=p&&p.length>1?Yf(p.map(q=>O.queryFileSystem({...l,pathPattern:q}))):O.queryFileSystem({...l,pathPattern:c.pathPattern}),d=m.totalDiscovered,f=m.wasCapped,g=m.entries.map(q=>NP(q,r)),R=e.sortBy||"modified";GP(g,R,r);let h=g.slice(0,u),y=HP(h,t,n),S=y.length,C=e.itemsPerPage||20,P=e.page||1,T=Math.max(1,Math.ceil(S/C)),L=(P-1)*C,k=Math.min(L+C,S),w=y.slice(L,k),b=S>0&&L>=S,A=w,M=[...m.warnings,...mo(m),...f?[`results capped at ${1e4} during the walk before sorting \u2014 sortBy:"${R}" only orders that partial set, not the true top-N across the whole tree`]:[],...b?[`page:${P} is out of range (only ${T} page(s), ${S} total file(s)) \u2014 returned 0 files. Use page:1..${T}.`]:[]],B=[...a,...M],I=P<T,ee={...Xf(A)??{},...I?{nextPage:Fn(x.LOCAL_FIND_FILES,{...i,page:P+1},"Continue to the next page of matched files.")}:{}},v={...S===0?{status:"empty"}:{},path:i.path,files:A,pagination:{currentPage:P,totalPages:T,filesPerPage:C,totalFiles:S,hasMore:I,...I?{nextPage:P+1}:{},...f||d>S?{totalFilesFound:d}:{},...b?{outOfRange:!0}:{}},...Object.keys(ee).length>0?{next:ee}:{},...B.length>0&&{warnings:B}};return $(v,m.entries.reduce((q,le)=>q+le.path.length,0))}catch(o){return F(o,e,{toolName:x.LOCAL_FIND_FILES})}}function NP(e,t){let n={path:e.path,type:e.entryType==="directory"?"directory":e.entryType==="symlink"?"symlink":"file",...e.size!==void 0?{size:e.size}:{},...e.permissions?{permissions:e.permissions}:{}};return t&&e.modifiedMs!==void 0&&(n.modified=new Date(e.modifiedMs).toISOString()),n}function GP(e,t,n){e.sort((r,o)=>{switch(t){case"size":return(o.size??0)-(r.size??0);case"name":return(r.path.split("/").pop()||"").localeCompare(o.path.split("/").pop()||"");case"path":return r.path.localeCompare(o.path);default:return n&&r.modified&&o.modified?new Date(o.modified).getTime()-new Date(r.modified).getTime():r.path.localeCompare(o.path)}})}function HP(e,t,n){return e.map(r=>{let o={path:r.path,type:r.type};return r.size!==void 0&&r.type!=="directory"&&(t?o.size=r.size:o.sizeFormatted=zn(r.size)),t&&r.permissions&&(o.permissions=r.permissions),r.modified&&(o.modified=r.modified),o})}var BP=/^\d+[hdwm]$/;function UP(e){let t=[],n=e.time;if(!n)return{warnings:t,query:e};let r={...n},o=[{key:"modifiedBefore",value:n.modifiedBefore},{key:"modifiedWithin",value:n.modifiedWithin},{key:"accessedWithin",value:n.accessedWithin}];for(let{key:i,value:s}of o)s&&!BP.test(s)&&(t.push(`time.${i}="${s}" has an unsupported format \u2014 filter was skipped. Use a relative duration like "7d", "2h", "1w", or "3m".`),delete r[i]);return{warnings:t,query:{...e,time:r}}}async function Jf(e){let{queries:t}=e;return te(t||[],async n=>Fe({toolName:x.LOCAL_FIND_FILES,query:n,contextMessage:"localFindFiles execution failed",execute:async()=>{let r=ke(on,n);return r.ok===!1?r.error:await qf(r.data)}}),{toolName:x.LOCAL_FIND_FILES},e)}import{FindDeadCodeQuerySchema as Zf}from"@octocodeai/octocode-core/schemas";var eh={maxFiles:_(1,5e4).optional(),limit:_(1,5e3).optional(),page:K.default(1),itemsPerPage:_(1,50).optional()},QP=Z(Zf,eh),sn=X(Zf,eh),fo=Y(QP,{maxQueries:5});import{completeMetadata as $P}from"@octocodeai/octocode-core";var D=$P.toolNames,ge=D.LSP_GET_SEMANTIC_CONTENT;function ho(e=process.env){let t=e.ENABLE_RELEASES;return t===void 0?!1:["1","true","yes","on"].includes(t.trim().toLowerCase())}function Wn(e=process.env){let t=e.ENABLE_DISCUSSIONS;return t===void 0?!1:["1","true","yes","on"].includes(t.trim().toLowerCase())}var jP=new Set([D.LOCAL_RIPGREP,D.LOCAL_FETCH_CONTENT,D.LOCAL_FIND_FILES,D.LOCAL_VIEW_STRUCTURE,ge]);function bQ(e){return jP.has(e)}import{readFileSync as VP}from"node:fs";import{posix as nh}from"node:path";var zP=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","import","in","instanceof","new","null","return","super","switch","this","throw","true","try","typeof","var","void","while","with","yield","let","static","async","await"]);function ts(e){return e?!zP.has(e):!1}import{posix as ns}from"node:path";var Oc=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],WP={".js":".ts",".jsx":".tsx",".mjs":".mts",".cjs":".cts"};function th(e){return e.split("\\").join("/")}function an(e,t,n){let r=th(e);if(!r.startsWith(".")&&!r.startsWith("/"))return null;let o=ns.dirname(th(t)),i=r.startsWith("/")?r.slice(1):ns.normalize(ns.join(o,r)),s=[];if(Oc.some(c=>i.endsWith(c))){s.push(i);for(let[c,u]of Object.entries(WP))if(i.endsWith(c)){s.push(i.slice(0,-c.length)+u);break}}else{s.push(i);for(let c of Oc)s.push(`${i}${c}`);for(let c of Oc)s.push(ns.join(i,`index${c}`))}for(let c of s)if(n.has(c))return c;return null}var KP=1e6,rh=["node_modules","dist","build","out","coverage",".git","target",".next",".cache"];function YP(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function XP(e,t){let n=e.match(new RegExp(`\\b${YP(t)}\\b`,"g"));return n?n.length:0}function oh(e,t,n){let r=O.getSupportedGraphFactExtensions(),i=O.queryFileSystem({path:e,recursive:!0,showHidden:!1,entryType:"f",extensions:r,excludeDir:t,stopAtLimit:!0,limit:n}).entries,s=i.length>=n,a=new Set(i.map(f=>nh.normalize(f.relativePath.split("\\").join("/")))),c=new Map,u=new Map,l=new Set,p=new Set,m=new Map,d=0;for(let f of i){let g=nh.normalize(f.relativePath.split("\\").join("/"));if((f.size??0)>KP){d++;continue}let R;try{R=VP(f.path,"utf-8")}catch{d++;continue}let h=O.extractGraphFacts(R,g);if(!h){d++;continue}let y;try{y=JSON.parse(h)}catch{d++;continue}let S=(y.declarations??[]).filter(b=>ts(b.name)).map(b=>({id:b.id,name:b.name,kind:b.kind,line:b.line,exported:b.exported??!1})),C=new Map;for(let b of S)!b.exported||C.has(b.name)||C.set(b.name,XP(R,b.name));let P=(y.exports??[]).filter(b=>b.source&&b.name!=="*").map(b=>({specifier:b.source,localName:b.localName??b.name,importedName:b.name,line:b.line})),T=(y.calls??[]).filter(b=>b.kind==="dynamic-import").map(b=>b.callee),L={relativePath:g,declarations:S,imports:(y.imports??[]).map(b=>({specifier:b.specifier,localName:b.localName,importedName:b.importedName,line:b.line})),namedReexports:P,calls:(y.calls??[]).filter(b=>b.kind!=="dynamic-import").map(b=>({caller:b.caller,callee:b.callee})),referenceCounts:C};c.set(g,L);let k=new Set,w=new Set;for(let b of[...L.imports,...L.namedReexports]){let A=an(b.specifier,g,a);A&&A!==g&&k.add(A)}for(let b of T){let A=an(b,g,a);A&&A!==g&&(k.add(A),w.add(A),p.add(A))}for(let b of y.exports??[]){if(!b.source||b.name!=="*")continue;let A=an(b.source,g,a);if(A&&A!==g){k.add(A),l.add(A);let M=m.get(A)??[];M.push(g),m.set(A,M)}}u.set(g,{relativePath:g,importsFiles:k,dynamicImportsFiles:w})}return{facts:c,fileGraph:u,filesScanned:c.size,filesSkipped:d,truncated:s,starReexportTargets:l,dynamicImportTargets:p,starReexporters:m}}import{readFileSync as qP}from"node:fs";import{posix as Fc}from"node:path";var JP=/(\.(test|spec)\.[^/]+$)|(^|\/)(__tests__|tests?)\//i,ZP=/\.(mjs|cjs|jsx?|tsx?)$/i;function ew(e){let t=[];for(let n of e.split(/\s+/)){let r=n.includes("=")?[n,n.slice(n.indexOf("=")+1)]:[n];for(let o of r){let i=o.replace(/^["']|["']$/g,"");ZP.test(i)&&!i.startsWith("-")&&t.push(i)}}return t}function vc(e){return e.split("\\").join("/")}function ih(e){return e.replace(/^\.\//,"")}var tw=["dist","build","out"],nw={".js":".ts",".jsx":".tsx",".mjs":".mts",".cjs":".cts"};function sh(e){for(let[t,n]of Object.entries(nw))if(e.endsWith(t))return e.slice(0,-t.length)+n}function rw(e,t){let n=[],r=sh(e);r&&n.push(r);for(let o of tw){let i=`${o}/`;if(!e.startsWith(i))continue;let a=`src/${e.slice(i.length)}`;n.push(a);let c=sh(a);c&&n.push(c)}return n.find(o=>t.has(o))}function go(e,t){if(typeof e=="string"){t.push(e);return}if(Array.isArray(e)){for(let n of e)go(n,t);return}if(e&&typeof e=="object")for(let n of Object.values(e))go(n,t)}function ah(e,t,n,r){let o=[],i=new Set,s=!1;if(t&&t.length>0){let a=vc(e).replace(/\/$/,"");for(let c of t){let u=ih(vc(c));u.startsWith(a+"/")&&(u=u.slice(a.length+1)),u=Fc.normalize(u),r.has(u)?i.add(u):o.push(`entrypoint not found in scan: ${c} \u2014 pass it relative to the scanned path (e.g. "src/index.ts"), or as an absolute path under it`)}}else{let a;try{let c=Fc.join(e,"package.json");a=JSON.parse(qP(c,"utf-8"))}catch{}if(a){let c=[];if(go(a.main,c),go(a.exports,c),go(a.bin,c),a.scripts&&typeof a.scripts=="object")for(let u of Object.values(a.scripts))typeof u=="string"&&c.push(...ew(u));for(let u of c){let l=Fc.normalize(ih(vc(u))),p=r.has(l)?l:rw(l,r);p&&i.add(p)}}i.size===0&&(o.push("no entrypoints resolved from package.json \u2014 pass `entrypoints` explicitly, or every export in a reachable file will read as unreachable"),s=!0)}if(n)for(let a of r)JP.test(a)&&i.add(a);return{entrypoints:[...i],warnings:o,lowConfidence:s}}function Dc(e,t){let n=new Set,r=[];for(let o of t)n.has(o)||(n.add(o),r.push(o));for(;r.length>0;){let o=r.pop(),i=e.get(o);if(i)for(let s of i.importsFiles)n.has(s)||(n.add(s),r.push(s))}return n}function ch(e){let t=0,n=new Map,r=new Map,o=new Set,i=[],s=[],a=[];for(let c of e.keys())if(!n.has(c))for(a.push({node:c,iterator:(e.get(c)?.importsFiles??new Set).values()}),n.set(c,t),r.set(c,t),t++,i.push(c),o.add(c);a.length>0;){let u=a[a.length-1],l=u.iterator.next();if(!l.done){let p=l.value;if(!n.has(p))n.set(p,t),r.set(p,t),t++,i.push(p),o.add(p),a.push({node:p,iterator:(e.get(p)?.importsFiles??new Set).values()});else if(o.has(p)){let m=r.get(u.node),d=n.get(p);r.set(u.node,Math.min(m,d))}continue}if(a.pop(),a.length>0){let p=a[a.length-1],m=r.get(p.node),d=r.get(u.node);r.set(p.node,Math.min(m,d))}if(r.get(u.node)===n.get(u.node)){let p=[],m;do m=i.pop(),o.delete(m),p.push(m);while(m!==u.node);(p.length>1||(e.get(p[0])?.importsFiles.has(p[0])??!1))&&s.push({files:p})}}return s}function yo(e,t){return`${e}::${t}`}function Mc(e,t,n,r,o,i,s){let a=yo(e,t);if(s.has(a))return!1;if(n.has(e)||r.has(a))return!0;s.add(a);for(let c of o.get(a)??[])if(Mc(c.file,c.localName,n,r,o,i,s))return!0;for(let c of i.get(e)??[])if(Mc(c,t,n,r,o,i,s))return!0;return!1}function uh(e,t,n,r,o,i){let s=new Set(t.declarations.filter(l=>l.exported).map(l=>l.name)),a=new Set;for(let l of s)Mc(e,l,n,r,o,i,new Set)&&a.add(l);let c=l=>!s.has(l)||a.has(l),u=!0;for(;u;){u=!1;for(let l of s){if(a.has(l))continue;let p=t.calls.filter(f=>f.callee===l);if(p.some(f=>f.caller!==l&&c(f.caller))){a.add(l),u=!0;continue}let m=p.filter(f=>f.caller===l||!c(f.caller)).length;(t.referenceCounts.get(l)??0)-m>1&&(a.add(l),u=!0)}}return a}function lh(e,t){let n=t.excludeDir&&t.excludeDir.length>0?t.excludeDir:rh,r=t.maxFiles??2e4,{facts:o,fileGraph:i,filesScanned:s,filesSkipped:a,truncated:c,dynamicImportTargets:u,starReexporters:l}=oh(e,n,r),p=new Set(o.keys()),{entrypoints:m,warnings:d,lowConfidence:f}=ah(e,t.entrypoints,t.includeTests??!0,p);c&&d.push(`scan stopped at maxFiles (${r}) \u2014 results are partial, not a full-repo verdict`);let g=m.filter(v=>{let q=o.get(v);return(i.get(v)?.importsFiles.size??0)===0&&(q?.declarations.length??0)===0&&(q?.namedReexports.length??0)===0}),R=g.length>0;R&&d.push(`${g.length} entrypoint file(s) parsed to no imports/exports (likely an extractor parse failure on that file) \u2014 reachability from them is unreliable, so "unreachable-file" results here are low-confidence and may be false positives: ${g.join(", ")}`);let h=Dc(i,m),y=new Set(m),S=new Map([...i].map(([v,q])=>[v,{relativePath:q.relativePath,importsFiles:new Set([...q.importsFiles].filter(le=>!q.dynamicImportsFiles.has(le))),dynamicImportsFiles:new Set}])),C=Dc(S,m),P=[...h].filter(v=>!C.has(v)).sort();P.length>0&&d.push(`${P.length} file(s) reachable only through a dynamic import() \u2014 lower confidence than static analysis, verify with lspGetSemantics before treating as proof: ${P.join(", ")}`);let T=new Map;for(let[v,q]of o){let le=new Map;for(let ae of q.imports){let pe=an(ae.specifier,v,p);pe&&le.set(ae.localName,pe)}T.set(v,le)}let L=new Set,k=new Map;for(let v of h){let q=o.get(v);if(!q)continue;let le=T.get(v);for(let ae of q.imports){let pe=le?.get(ae.localName);pe&&L.add(yo(pe,ae.importedName))}for(let ae of q.namedReexports){let pe=an(ae.specifier,v,p);if(!pe)continue;let Me=yo(pe,ae.importedName),jt=k.get(Me)??[];jt.push({file:v,localName:ae.localName}),k.set(Me,jt)}}let w=new Map;for(let[v,q]of l){let le=q.filter(ae=>h.has(ae));le.length>0&&w.set(v,le)}let b=new Set(w.keys()),A=[],M=ch(i),B=new Map,I=[],U=0;for(let v of M){if(!v.files.every(ae=>!h.has(ae)))continue;let le=U++;for(let ae of v.files)B.set(ae,le);I.push({id:le,files:v.files,reason:"mutually-referencing cluster with no path from any entrypoint \u2014 each file looks locally referenced by the others, but the cluster as a whole is unreachable"})}let ee=new Map;for(let[v,q]of o){let le=y.has(v),ae=h.has(v);for(let pe of q.declarations){if(!pe.exported)continue;if(!ae){let jt=B.get(v);A.push({file:v,name:pe.name,kind:pe.kind,line:pe.line,reason:jt!==void 0?"dead-cluster":"unreachable-file",...jt!==void 0?{clusterId:jt}:{}});continue}if(le||b.has(v)||u.has(v))continue;let Me=ee.get(v);Me||(Me=uh(v,q,y,L,k,w),ee.set(v,Me)),Me.has(pe.name)||A.push({file:v,name:pe.name,kind:pe.kind,line:pe.line,reason:"unreferenced-export",viaHeuristic:k.has(yo(v,pe.name))?"reexport-chain":"lexical-count"})}}return{filesScanned:s,filesSkipped:a,entrypointsResolved:m,deadExports:A,deadClusters:I,warnings:d,...f||R?{confidence:"low"}:{}}}var ow=100;function iw(e,t,n){let r=Math.max(1,Math.ceil(e.length/n)),o=Math.min(Math.max(1,t),r),i=(o-1)*n;return{pageItems:e.slice(i,i+n),currentPage:o,totalPages:r,hasMore:o<r,outOfRange:t>r}}async function ph(e){try{let t=ve(e,x.LOCAL_FIND_DEAD_CODE);if(!t.isValid)return t.errorResult;let n=lh(t.sanitizedPath,e),r=e.itemsPerPage??ow,o=e.page??1,{pageItems:i,currentPage:s,totalPages:a,hasMore:c,outOfRange:u}=iw(n.deadExports,o,r),l=[...n.warnings,...u?[`page:${o} is out of range (only ${a} page(s), ${n.deadExports.length} total candidates) \u2014 returned page ${s} instead.`]:[]],p={path:e.path,filesScanned:n.filesScanned,filesSkipped:n.filesSkipped,entrypointsResolved:n.entrypointsResolved,deadExports:i,deadClusters:n.deadClusters,pagination:{currentPage:s,totalPages:a,entriesPerPage:r,totalEntries:n.deadExports.length,hasMore:c,...u?{outOfRange:!0}:{}},...l.length>0?{warnings:l}:{},...n.confidence?{confidence:n.confidence}:{}};c&&(p.next={nextPage:Fn(x.LOCAL_FIND_DEAD_CODE,{...e,page:s+1},"Continue to the next page of dead-export candidates.")});let m=i[0];if(m){let d=t.sanitizedPath.replace(/\/+$/,"");p.next={...p.next,verifyReferences:{tool:ge,query:{type:"references",uri:`${d}/${m.file}`,symbolName:m.name,lineHint:m.line,includeDeclaration:!1,groupByFile:!0},why:`Verify candidate "${m.name}" before any delete claim \u2014 zero references = confirmed dead. Repeat per candidate using each entry's file/name/line; start with viaHeuristic:"reexport-chain" candidates (most fragile).`,confidence:"high"}}}return p}catch(t){let n=Le.toolExecutionFailed(x.LOCAL_FIND_DEAD_CODE,t instanceof Error?t:new Error(String(t)));return F(n,e,{toolName:x.LOCAL_FIND_DEAD_CODE})}}async function dh(e){let{queries:t}=e;return te(t||[],async n=>Fe({toolName:x.LOCAL_FIND_DEAD_CODE,query:n,contextMessage:"localFindDeadCode execution failed",execute:async()=>{let r=ke(sn,n);return r.ok===!1?r.error:await ph(r.data)}}),{toolName:x.LOCAL_FIND_DEAD_CODE},e)}import{z as Ht}from"zod";import{RipgrepQuerySchema as mh}from"@octocodeai/octocode-core/schemas";var sw=["paginated","discovery","detailed","structural"],aw=["semanticRanking"],fh={mode:Ht.enum(sw).optional().default("paginated").describe('"paginated" snippets; "discovery" paths only; "detailed" snippets plus context; "structural" AST/code-shape search with pattern or rule. Structural matches return line/capture anchors that can feed lspGetSemantics when symbol identity matters. (Unrelated to ghSearchPullRequests\'s `content.patches.mode` \u2014 different concepts sharing this name.)'),searchText:Ht.string().optional().describe('The search pattern. regex:"fixed" for a literal match, "perl" for advanced features (lookaheads, backreferences), else "smart". (Unlike ghSearchCode/ghSearchRepos, where `keywords` is an array of ANDed terms \u2014 this is a single string.)'),output:Ht.enum(["content","files","filesWithout","countLines","countMatches","matchOnly"]).optional().default("content").describe('"content" (default) matches with line text; "files"/"filesWithout" return matching/non-matching paths; "countLines"/"countMatches" return per-file counts; "matchOnly" returns just the matched substring (required for unique/matchWindow). ("files" is unlike localViewStructure\'s `filesOnly`, which filters a directory listing to file entries.)'),pattern:Ht.string().optional().describe("Structural only: code-shaped AST pattern with $X (one node) or $$$ARGS (node list). Modifiers are part of the node \u2014 `function $NAME` does not match `async function` or `export function`; include the modifiers or use a YAML `kind` rule for modifier-agnostic matches. Use this to find syntax shape, then use lspGetSemantics for semantic proof."),maxDepth:_(0,20).optional().describe("Keep files at most this many directory levels below the search root (0 = files directly in the root). Structural mode pushes this into the native walker; text/regex mode applies it after the native search and emits a warning when it filters deeper matches."),rule:Ht.string().optional().describe("Structural only: YAML ast-grep rule for not/inside/has/all/any. Use for partial or relational AST queries before escalating matched anchors to lspGetSemantics."),captureText:Ht.boolean().optional().describe("Structural only: return full verbatim capture text for `$$$` list metavars (bodies, arg lists). Default false \u2014 list-capture text is omitted from `metavars`, and `metavarRanges` entries are comment-pruned and truncated to keep results lean; ranges always remain as line anchors."),contextLines:In,matchContentLength:_(1,1e5).optional().default(500),maxMatchesPerFile:_(1,1e5).optional(),maxFiles:_(1,1e5).optional(),matchPage:K.optional(),itemsPerPage:_(1,1e3).optional(),page:K.default(1),unique:Ht.enum(["off","list","count"]).optional().default("off").describe('Needs output:"matchOnly". "list" returns each matched value once per file; "count" adds its frequency.')},cw={...fh,semanticRanking:Ht.unknown().optional().superRefine((e,t)=>{e!==void 0&&t.addIssue({code:"custom",message:'semanticRanking is disabled in this build \u2014 sort:"relevance" already includes declaration/export/AST signals; remove this field.'})}).describe('DISABLED in this build \u2014 do not pass. sort:"relevance" already includes declaration/export/AST signals.')},uw=Z(mh,cw),lw=X(mh,fh,{strict:!0,omit:aw}),ht=lw.superRefine((e,t)=>{if(e.mode==="structural"){!e.pattern&&!e.rule&&t.addIssue({code:"custom",message:'mode:"structural" requires `pattern` or `rule`.',path:["pattern"]}),e.pattern&&e.rule&&t.addIssue({code:"custom",message:"`pattern` and `rule` are mutually exclusive.",path:["rule"]}),e.wholeWord&&t.addIssue({code:"custom",message:'`wholeWord` is not valid with mode:"structural".',path:["wholeWord"]}),e.invertMatch&&t.addIssue({code:"custom",message:'`invertMatch` is not valid with mode:"structural".',path:["invertMatch"]}),e.regex&&e.regex!=="smart"&&t.addIssue({code:"custom",message:'`regex` is not valid with mode:"structural".',path:["regex"]}),e.caseMode&&e.caseMode!=="smart"&&t.addIssue({code:"custom",message:'`caseMode` is not valid with mode:"structural".',path:["caseMode"]}),e.multiline&&e.multiline!=="off"&&t.addIssue({code:"custom",message:'`multiline` is not valid with mode:"structural".',path:["multiline"]}),e.output&&e.output!=="content"&&e.output!=="countMatches"&&e.output!=="files"&&t.addIssue({code:"custom",message:'With mode:"structural", `output` supports only "content" (default), "countMatches" (per-file counts, no match content \u2014 cheapest for counting), or "files" (paths only).',path:["output"]}),e.unique&&e.unique!=="off"&&t.addIssue({code:"custom",message:'`unique` is not valid with mode:"structural".',path:["unique"]});let n=e.pattern&&!["php","bash","sh","zsh"].includes(e.langType??"")?/(?<!\$)\$\$(?!\$)[A-Z_][A-Z0-9_]*/.exec(e.pattern):null;if(n){let r=n[0].slice(2);t.addIssue({code:"custom",message:`\`${n[0]}\` is not a metavariable and matches nothing \u2014 use \`$${r}\` for one node or \`$$$${r}\` for a list of nodes.`,path:["pattern"]})}return}(e.pattern||e.rule)&&t.addIssue({code:"custom",message:'`pattern`/`rule` require mode:"structural".',path:[e.pattern?"pattern":"rule"]}),e.searchText||t.addIssue({code:"custom",message:'`searchText` is required unless mode:"structural".',path:["searchText"]}),e.matchWindow!==void 0&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'matchWindow requires output:"matchOnly".',path:["matchWindow"]}),(e.unique==="list"||e.unique==="count")&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'unique requires output:"matchOnly".',path:["unique"]})}),Ro=Y(uw,{maxQueries:5});import{validateRipgrepQuery as Bw}from"@octocodeai/octocode-core/schemas/runtime";var Nc=["typescript","javascript","rust","python","go","java","scala","markdown","json","yaml","generic"],re={exactWholeWord:6,exactCaseInsensitive:3,substring:1,declarationLine:8,exportLine:4,importLine:3,configKeyLine:4,headingLine:4,commentOrStringPenalty:-2,pathUnderQuery:4,pathSegmentToken:3,extMatchesLangType:2,sourceDir:1.5,lowSignalPathPenalty:-5,testPathPenalty:-3.5,rareQueryTokenScale:2,rareQueryTokenCap:3,matchCountScale:1.5,matchCountCap:6},Gc=2e3,Hc=/^\s*(\/\/|#|\*|\/\*|<!--|--)/,hh={declaration:[/\b(function|class|interface|type|enum|const|let|var)\s+\w/,/\b\w+\s*[:=]\s*(async\s+)?(function|\()/],export:[/\bexport\b/,/\bmodule\.exports\b/,/\bexport\s+default\b/],import:[/\b(import|require)\b/,/\bfrom\s+['"]/]},So={typescript:{id:"typescript",extensions:["ts","tsx","mts","cts"],...hh},javascript:{id:"javascript",extensions:["js","jsx","mjs","cjs"],...hh},rust:{id:"rust",extensions:["rs"],declaration:[/\b(fn|struct|enum|trait|impl|mod|type|const|static|macro_rules!)\b/],export:[/\bpub(\s*\([^)]*\))?\s+(fn|struct|enum|trait|mod|type|const|static)\b/],import:[/\buse\s+/,/\bextern\s+crate\b/]},python:{id:"python",extensions:["py","pyi"],declaration:[/^\s*(async\s+)?def\s+\w/,/^\s*class\s+\w/,/^\s*@\w/],export:[/^\s*__all__\s*=/],import:[/^\s*(import|from)\s+/]},go:{id:"go",extensions:["go"],declaration:[/\b(func|type|struct|interface)\b/,/^\s*(const|var)\s+/],export:[/\b(func|type)\s+[A-Z]\w*/],import:[/^\s*import\s+/,/^\s*"[^"]+"\s*$/]},java:{id:"java",extensions:["java"],declaration:[/\b(class|interface|enum|record)\s+\w/,/\b\w+\s*\([^)]*\)\s*\{/],export:[/\b(public|protected)\b/,/^\s*@\w/],import:[/^\s*import\s+/]},scala:{id:"scala",extensions:["scala","sc"],declaration:[/\b(class|object|trait|def|val|var|type|case\s+class)\s+\w/],export:[/\b(export|implicit)\b/,/^\s*@\w/],import:[/^\s*import\s+/]},markdown:{id:"markdown",extensions:["md","markdown","mdx"],declaration:[],export:[],import:[/^\s*\[[^\]]+\]\([^)]+\)/]},json:{id:"json",extensions:["json","jsonc","json5"],declaration:[],export:[],import:[]},yaml:{id:"yaml",extensions:["yaml","yml"],declaration:[],export:[],import:[]},generic:{id:"generic",extensions:[],declaration:[/\b(function|def|fn|func|class|struct|interface|type)\b/],export:[/\b(export|public|pub)\b/],import:[/\b(import|require|use|include)\b/]}},Bc=/^\s*#{1,6}\s/,bo=/(^|\/)(dist|build|out|coverage|node_modules|vendor|\.next|__snapshots__)(\/|$)/,pw=/(\.min\.|\.bundle\.|\.generated\.|\.d\.ts$|-lock\.)/,dw=/(^|\/)(tests?|__tests__|spec|e2e)(\/|$)|\.(test|spec)\./,mw=/(^|\/)(fixtures?|__fixtures__|snapshots?)(\/|$)/,fw=/(^|\/)(docs?|examples?)(\/|$)|\.(md|markdown|mdx|rst|txt)$/i,hw=/(^|\/)(config|\.github)(\/|$)|\.(json|ya?ml|toml|ini|cfg|conf|env)$|(^|\/)[^/]*\.config\.[jt]s$/i,gw=/(^|\/)(src|lib|app|packages|internal|pkg|cmd|crates|include|sources?)(\/|$)/,yw=new Set(["typescript","javascript","rust","python","go","java","scala"]),rs=/\.([a-z0-9]+)$/i;function Co(e){return rs.exec(e)?.[1]?.toLowerCase()??""}function Rw(e){let t=Co(e);if(!t)return!1;for(let n of yw)if(So[n].extensions.includes(t))return!0;return!1}function Uc(e,t,n){if(n&&n!=="auto")return So[n];let r=Co(e),o=(t??"").toLowerCase();for(let i of Nc){let s=So[i];if(i!=="generic"&&o&&(i===o||s.extensions.includes(o)))return s}for(let i of Nc){let s=So[i];if(i!=="generic"&&s.extensions.includes(r))return s}return So.generic}function os(e){return pw.test(e)?"generated":mw.test(e)?"fixture":dw.test(e)?"test":hw.test(e)?"config":fw.test(e)?"docs":!bo.test(e)&&(gw.test(e)||Rw(e))?"source":"unknown"}function Qc(e){if(!e)return!1;if(bo.test(e))return!0;let t=os(e);return t==="test"||t==="docs"||t==="fixture"||t==="generated"}function $c(e,t,n,r={}){if(t==="matchCount"){let m=[...e].sort(gh);return{files:r.sortReverse?m.reverse():m,cappedCandidates:0}}if(t==="path"){let m=[...e].sort((d,f)=>d.path.localeCompare(f.path));return{files:r.sortReverse?m.reverse():m,cappedCandidates:0}}if(t==="created"||t==="modified"||t==="accessed")return{files:[...e],cappedCandidates:0};let o=r.candidateCap??Gc,i=e,s=[],a=0;if(e.length>o){let m=[...e].sort(gh);i=m.slice(0,o),s=m.slice(o),a=s.length}let c=Vc(i,n),u=i.map(m=>{try{return{file:m,s:Kc(m,n,c)}}catch{return{file:m,s:Sw()}}});u.sort((m,d)=>{if(d.s.score!==m.s.score)return d.s.score-m.s.score;let f=(d.file.matchCount??0)-(m.file.matchCount??0);return f!==0?f:m.file.path.localeCompare(d.file.path)});let l=[...u.map(m=>m.file),...s],p={files:r.sortReverse?l.reverse():l,cappedCandidates:a};return r.debug&&(p.debug=new Map(u.map(m=>[m.file.path,m.s]))),p}function Sw(){return{score:0,profile:"generic",pathRole:"unknown",reasons:["ranking unavailable for this file"]}}function gh(e,t){let n=(t.matchCount??0)-(e.matchCount??0);return n!==0?n:e.path.localeCompare(t.path)}function xo(e,t){for(let n of e)if(n.test(t))return!0;return!1}function is(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function jc(e){return!!e&&/^[A-Za-z_$][\w$]*$/.test(e.trim())}function zc(e,t,n){if(e.indexOf(`
52
+ `}import{posix as kb}from"node:path";var c_=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","import","in","instanceof","new","null","return","super","switch","this","throw","true","try","typeof","var","void","while","with","yield","let","static","async","await"]);function Ba(e){return e?!c_.has(e):!1}import{posix as za}from"node:path";var pp=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],l_={".js":".ts",".jsx":".tsx",".mjs":".mts",".cjs":".cts"};function Lb(e){return e.split("\\").join("/")}function Si(e,t,n,r=new Map){let o=Lb(e);if(!o.startsWith(".")&&!o.startsWith("/"))return r.get(o)??null;let i=za.dirname(Lb(t)),s=o.startsWith("/")?o.slice(1):za.normalize(za.join(i,o)),a=[];if(pp.some(l=>s.endsWith(l))){a.push(s);for(let[l,u]of Object.entries(l_))if(s.endsWith(l)){a.push(s.slice(0,-l.length)+u);break}}else{a.push(s);for(let l of pp)a.push(`${s}${l}`);for(let l of pp)a.push(za.join(s,`index${l}`))}for(let l of a)if(n.has(l))return l;return null}import{readFileSync as u_}from"node:fs";import{join as p_,posix as ja}from"node:path";var d_=new Set(["dist","out","lib","build"]),m_={".js":[".ts",".tsx"],".jsx":[".tsx"],".mjs":[".mts",".ts"],".cjs":[".cts",".ts"],".d.ts":[".ts"]};function dp(e){if(typeof e=="string")return e;if(Array.isArray(e)){for(let n of e){let r=dp(n);if(r)return r}return null}if(!e||typeof e!="object")return null;let t=e;for(let n of["import","default","node","require","types"]){let r=dp(t[n]);if(r)return r}return null}function f_(e,t){if(!t.startsWith("./"))return[];let n=t.slice(2).split("/"),r=[n];d_.has(n[0]??"")&&r.push(["src",...n.slice(1)]);let o=new Set;for(let i of r){let s=ja.normalize(ja.join(e,...i));o.add(s);for(let[a,c]of Object.entries(m_))if(s.endsWith(a))for(let l of c)o.add(s.slice(0,-a.length)+l)}return[...o]}function _b(e,t){let n=new Set(["."]);for(let o of t){let i=ja.dirname(o);for(;i!==".";)n.add(i),i=ja.dirname(i)}let r=new Map;for(let o of n){let i;try{i=JSON.parse(u_(p_(e,o,"package.json"),"utf8"))}catch{continue}if(typeof i.name!="string")continue;let s=[];i.exports&&typeof i.exports=="object"&&!Array.isArray(i.exports)&&Object.keys(i.exports).some(a=>a.startsWith("."))?s.push(...Object.entries(i.exports)):i.exports!==void 0&&s.push([".",i.exports]);for(let[a,c]of s){if(a!=="."&&!a.startsWith("./"))continue;let l=dp(c);if(!l)continue;let u=f_(o,l).find(d=>t.has(d));if(!u)continue;let p=a==="."?i.name:`${i.name}/${a.slice(2)}`;r.set(p,u)}}return r}var h_=["node_modules","dist","build","out","coverage",".git","target",".next",".cache"];function Qa(e){return[...new Set([...h_,...e??[]])]}async function ro(e,t,n){let r=await D.scanGraphFacts({path:e,excludeDir:t,maxFiles:n,maxFileBytes:1e6}),o=r.entries,i=r.truncated,s=new Set(r.candidatePaths.map(f=>kb.normalize(f.split("\\").join("/")))),a=_b(e,s),c=new Map,l=new Map,u=new Set,p=new Set,d=new Map,m=r.filesSkipped;for(let f of o){let h=kb.normalize(f.relativePath.split("\\").join("/")),y;try{y=JSON.parse(f.factsJson)}catch{m++;continue}let g=(y.declarations??[]).filter(b=>Ba(b.name)).map(b=>({id:b.id,name:b.name,kind:b.kind,line:b.line,exported:b.exported??!1})),S=new Map(f.referenceCounts.map(({name:b,count:w})=>[b,w])),R=(y.exports??[]).filter(b=>b.source&&b.name!=="*").map(b=>({specifier:b.source,localName:b.localName??b.name,importedName:b.name,line:b.line,importKind:"value",resolvedTarget:Si(b.source,h,s,a)})),C=(y.calls??[]).filter(b=>b.kind==="dynamic-import").map(b=>b.callee),P={relativePath:h,declarations:g,imports:(y.imports??[]).map(b=>({specifier:b.specifier,localName:b.localName,importedName:b.importedName,line:b.line,importKind:b.importKind==="type"?"type":"value",resolvedTarget:Si(b.specifier,h,s,a)})),namedReexports:R,calls:(y.calls??[]).filter(b=>b.kind!=="dynamic-import").map(b=>({caller:b.caller,callee:b.callee})),referenceCounts:S};c.set(h,P);let T=new Set,E=new Set,k=new Map,x=(b,w)=>{T.add(b);let L=k.get(b)??new Set;L.add(w),k.set(b,L)};for(let b of P.imports){let w=b.resolvedTarget;w&&x(w,b.importKind==="type"?"type-import":"static-import")}for(let b of P.namedReexports){let w=b.resolvedTarget;w&&x(w,"named-reexport")}for(let b of C){let w=Si(b,h,s,a);w&&(x(w,"dynamic-import"),p.add(w))}for(let b of y.exports??[]){if(!b.source||b.name!=="*")continue;let w=Si(b.source,h,s,a);if(w){x(w,"star-reexport"),u.add(w);let L=d.get(w)??[];L.push(h),d.set(w,L)}}for(let[b,w]of k)w.size===1&&w.has("dynamic-import")&&E.add(b);l.set(h,{relativePath:h,importsFiles:T,dynamicImportsFiles:E,edgeKinds:k})}return{facts:c,fileGraph:l,filesScanned:c.size,filesSkipped:m,truncated:i,starReexportTargets:u,dynamicImportTargets:p,starReexporters:d}}import{readFileSync as g_}from"node:fs";import{posix as mp}from"node:path";var y_=/(\.(test|spec)\.[^/]+$)|(^|\/)(__tests__|tests?)\//i;function hp(e){return y_.test(e)}var b_=/\.(mjs|cjs|jsx?|tsx?)$/i;function S_(e){let t=[];for(let n of e.split(/\s+/)){let r=n.includes("=")?[n,n.slice(n.indexOf("=")+1)]:[n];for(let o of r){let i=o.replace(/^["']|["']$/g,"");b_.test(i)&&!i.startsWith("-")&&t.push(i)}}return t}function fp(e){return e.split("\\").join("/")}function Ib(e){return e.replace(/^\.\//,"")}var Ob=["dist","build","out"],R_={".js":".ts",".jsx":".tsx",".mjs":".mts",".cjs":".cts"};function vb(e){for(let[t,n]of Object.entries(R_))if(e.endsWith(t))return e.slice(0,-t.length)+n}function C_(e,t){let n=[],r=vb(e);r&&n.push(r);for(let o of Ob){let i=`${o}/`;if(!e.startsWith(i))continue;let a=`src/${e.slice(i.length)}`;n.push(a);let c=vb(a);c&&n.push(c)}return Ob.some(o=>e.startsWith(`${o}/`))&&t.has("src/index.ts")&&n.push("src/index.ts"),n.find(o=>t.has(o))}function Ri(e,t){if(typeof e=="string"){t.push(e);return}if(Array.isArray(e)){for(let n of e)Ri(n,t);return}if(e&&typeof e=="object")for(let n of Object.values(e))Ri(n,t)}function Ua(e,t,n,r){let o=[],i=new Set,s=!1;if(t&&t.length>0){let a=fp(e).replace(/\/$/,"");for(let c of t){let l=Ib(fp(c));l.startsWith(a+"/")&&(l=l.slice(a.length+1)),l=mp.normalize(l),r.has(l)?i.add(l):o.push(`entrypoint not found in scan: ${c} \u2014 pass it relative to the scanned path (e.g. "src/index.ts"), or as an absolute path under it`)}}else{let a;try{let c=mp.join(e,"package.json");a=JSON.parse(g_(c,"utf-8"))}catch{}if(a){let c=[];if(Ri(a.main,c),Ri(a.exports,c),Ri(a.bin,c),a.scripts&&typeof a.scripts=="object")for(let l of Object.values(a.scripts))typeof l=="string"&&c.push(...S_(l));for(let l of c){let u=mp.normalize(Ib(fp(l))),p=r.has(u)?u:C_(u,r);p&&i.add(p)}}i.size===0&&(o.push("no entrypoints resolved from package.json \u2014 pass `entrypoints` explicitly, or every export in a reachable file will read as unreachable"),s=!0)}if(n)for(let a of r)hp(a)&&i.add(a);return{entrypoints:[...i],warnings:o,lowConfidence:s}}function Ci(e,t){let n=new Set,r=[];for(let o of t)n.has(o)||(n.add(o),r.push(o));for(;r.length>0;){let o=r.pop(),i=e.get(o);if(i)for(let s of i.importsFiles)n.has(s)||(n.add(s),r.push(s))}return n}function $a(e){let t=0,n=new Map,r=new Map,o=new Set,i=[],s=[],a=[];for(let c of e.keys())if(!n.has(c))for(a.push({node:c,iterator:(e.get(c)?.importsFiles??new Set).values()}),n.set(c,t),r.set(c,t),t++,i.push(c),o.add(c);a.length>0;){let l=a[a.length-1],u=l.iterator.next();if(!u.done){let p=u.value;if(!n.has(p))n.set(p,t),r.set(p,t),t++,i.push(p),o.add(p),a.push({node:p,iterator:(e.get(p)?.importsFiles??new Set).values()});else if(o.has(p)){let d=r.get(l.node),m=n.get(p);r.set(l.node,Math.min(d,m))}continue}if(a.pop(),a.length>0){let p=a[a.length-1],d=r.get(p.node),m=r.get(l.node);r.set(p.node,Math.min(d,m))}if(r.get(l.node)===n.get(l.node)){let p=[],d;do d=i.pop(),o.delete(d),p.push(d);while(d!==l.node);(p.length>1||(e.get(p[0])?.importsFiles.has(p[0])??!1))&&s.push({files:p})}}return s}function xi(e,t){return`${e}::${t}`}function x_(e,t,n,r,o,i){let s=new Set,a=[{file:e,name:t}];for(;a.length>0;){let c=a.pop(),l=xi(c.file,c.name);if(!s.has(l)){if(s.add(l),n.has(c.file)||r.has(l))return!0;for(let u of o.get(l)??[])a.push({file:u.file,name:u.localName});for(let u of i.get(c.file)??[])a.push({file:u,name:c.name})}}return!1}function Fb(e,t,n,r,o,i){let s=new Set(t.declarations.filter(d=>d.exported).map(d=>d.name)),a=new Set;for(let d of s)x_(e,d,n,r,o,i)&&a.add(d);let c=new Map,l=new Map;for(let d of t.calls){let m=c.get(d.caller)??[];m.push(d.callee),c.set(d.caller,m),s.has(d.caller)&&l.set(d.callee,(l.get(d.callee)??0)+1)}let u=[...a],p=d=>{!s.has(d)||a.has(d)||(a.add(d),u.push(d))};for(let[d,m]of c)if(!s.has(d))for(let f of m)p(f);for(let d of s)(t.referenceCounts.get(d)??0)-(l.get(d)??0)>1&&p(d);for(let d=0;d<u.length;d++){let m=u[d];for(let f of c.get(m)??[])f!==m&&p(f)}return a}async function Mb(e,t,n){let r=Qa(t.excludeDir),o=t.maxFiles??2e4,{facts:i,fileGraph:s,filesScanned:a,filesSkipped:c,truncated:l,dynamicImportTargets:u,starReexporters:p}=n??await ro(e,r,o),d=new Set(i.keys()),{entrypoints:m,warnings:f,lowConfidence:h}=Ua(e,t.entrypoints,t.includeTests??!0,d);l&&f.push(`scan stopped at maxFiles (${o}) \u2014 results are partial, not a full-repo verdict`),c>0&&f.push(`${c} file(s) could not be read or parsed within the native graph bounds \u2014 results are partial, not a full-repo verdict`);let y=m.filter(X=>{let re=i.get(X);return(s.get(X)?.importsFiles.size??0)===0&&(re?.declarations.length??0)===0&&(re?.namedReexports.length??0)===0}),g=y.length>0;g&&f.push(`${y.length} entrypoint file(s) parsed to no imports/exports (likely an extractor parse failure on that file) \u2014 reachability from them is unreliable, so "unreachable-file" results here are low-confidence and may be false positives: ${y.join(", ")}`);let S=Ci(s,m),R=new Set(m),C=new Set([...R,...u]),P=X=>t.includeTests!==!1||!hp(X),T=new Map([...s].map(([X,re])=>[X,{relativePath:re.relativePath,importsFiles:new Set([...re.importsFiles].filter(de=>!re.dynamicImportsFiles.has(de))),dynamicImportsFiles:new Set,edgeKinds:new Map([...re.edgeKinds].map(([de,Ee])=>[de,new Set([...Ee].filter(Se=>Se!=="dynamic-import"))]).filter(([,de])=>de.size>0))}])),E=Ci(T,m),k=[...S].filter(X=>!E.has(X)).sort();k.length>0&&f.push(`${k.length} file(s) reachable only through a dynamic import() \u2014 lower confidence than static analysis, verify with lspGetSemantics before treating as proof: ${k.join(", ")}`);let x=new Set,b=new Map;for(let X of S){let re=i.get(X);if(re){for(let de of re.imports){let Ee=de.resolvedTarget;Ee&&x.add(xi(Ee,de.importedName))}for(let de of re.namedReexports){let Ee=de.resolvedTarget;if(!Ee)continue;let Se=xi(Ee,de.importedName),pt=b.get(Se)??[];pt.push({file:X,localName:de.localName}),b.set(Se,pt)}}}let w=new Map;for(let[X,re]of p){let de=re.filter(Ee=>S.has(Ee));de.length>0&&w.set(X,de)}let L=new Set(w.keys()),O=[],v=$a(s),A=new Map,q=[],ne=0;for(let X of v){let re=X.files.filter(P);if(re.length===0||!re.every(Se=>!S.has(Se)))continue;let Ee=ne++;for(let Se of re)A.set(Se,Ee);q.push({id:Ee,files:re,reason:"mutually-referencing cluster with no path from any entrypoint \u2014 each file looks locally referenced by the others, but the cluster as a whole is unreachable"})}let Me=new Map;for(let[X,re]of i){if(!P(X))continue;let de=R.has(X),Ee=S.has(X);for(let Se of re.declarations){if(!Se.exported)continue;if(!Ee){let zi=A.get(X);O.push({file:X,name:Se.name,kind:Se.kind,line:Se.line,reason:zi!==void 0?"dead-cluster":"unreachable-file",...zi!==void 0?{clusterId:zi}:{}});continue}if(de||L.has(X)||u.has(X))continue;let pt=Me.get(X);pt||(pt=Fb(X,re,C,x,b,w),Me.set(X,pt)),pt.has(Se.name)||O.push({file:X,name:Se.name,kind:Se.kind,line:Se.line,reason:"unreferenced-export",viaHeuristic:b.has(xi(X,Se.name))?"reexport-chain":"lexical-count"})}}return{filesScanned:a,filesSkipped:c,entrypointsResolved:m,deadExports:O,deadClusters:q,warnings:f,...h||g?{confidence:"low"}:{}}}import{posix as w_}from"node:path";function Wa(e){return w_.normalize(e.split("\\").join("/")).replace(/^\.\//,"")}function Va(e,t){return[...e?.edgeKinds.get(t)??["static-import"]].sort()}function gp(e,t){let n=new Set(t),r=new Set;for(let o of t){let i=e.get(o);for(let s of i?.importsFiles??[])if(n.has(s))for(let a of Va(i,s))r.add(a)}return[...r].sort()}function Nb(e,t,n){let r=[],o=new Set([t]),i=[{file:t,distance:0}];for(let s=0;s<i.length;s++){let a=i[s];if(a.distance>=n)continue;let c=e.get(a.file),l=[...c?.importsFiles??[]].sort();for(let u of l){if(o.has(u))continue;o.add(u);let p=a.distance+1;i.push({file:u,distance:p}),r.push({file:u,distance:p,via:a.file,edgeKinds:Va(c,u),confidence:"syntactic"})}}return r}function Db(e){let t=new Map;for(let n of e.keys())t.set(n,{relativePath:n,importsFiles:new Set,dynamicImportsFiles:new Set,edgeKinds:new Map});for(let[n,r]of e)for(let o of r.importsFiles){let i=t.get(o);if(!i)continue;i.importsFiles.add(n);let s=new Set(Va(r,o));i.edgeKinds.set(n,s),s.size===1&&s.has("dynamic-import")&&i.dynamicImportsFiles.add(n)}return t}function Hb(e,t,n){let r=new Map,o=new Set([t]),i=[t];for(let c=0;c<i.length;c++){let l=i[c];if(l===n)break;for(let u of[...e.get(l)?.importsFiles??[]].sort())o.has(u)||(o.add(u),r.set(u,l),i.push(u))}if(!o.has(n))return{found:!1,files:[],edges:[]};let s=[n];for(;s[0]!==t;)s.unshift(r.get(s[0]));let a=s.slice(0,-1).map((c,l)=>{let u=s[l+1];return{from:c,to:u,edgeKinds:Va(e.get(c),u),confidence:"syntactic"}});return{found:!0,files:s,edges:a,length:s.length,complete:!0,confidence:"syntactic"}}function Gb(e){return new Map([...e].map(([t,n])=>{let r=[...n.importsFiles].filter(o=>{let i=n.edgeKinds.get(o);return!i||i.size>1||!i.has("type-import")});return[t,{relativePath:t,importsFiles:new Set(r),dynamicImportsFiles:new Set(r.filter(o=>n.dynamicImportsFiles.has(o))),edgeKinds:new Map(r.map(o=>[o,new Set(n.edgeKinds.get(o)??["static-import"])]))}]}))}function yp(e){let t=0,n=new Map,r=new Map,o=[],i=new Set,s=[];for(let m of[...e.keys()].sort()){if(n.has(m))continue;let f=[{node:m,successors:[...e.get(m)?.importsFiles??[]].sort(),offset:0}];for(n.set(m,t),r.set(m,t++),o.push(m),i.add(m);f.length>0;){let h=f[f.length-1],y=h.successors[h.offset++];if(y!==void 0){n.has(y)?i.has(y)&&r.set(h.node,Math.min(r.get(h.node),n.get(y))):(n.set(y,t),r.set(y,t++),o.push(y),i.add(y),f.push({node:y,successors:[...e.get(y)?.importsFiles??[]].sort(),offset:0}));continue}f.pop();let g=f[f.length-1];if(g&&r.set(g.node,Math.min(r.get(g.node),r.get(h.node))),r.get(h.node)!==n.get(h.node))continue;let S=[],R;do R=o.pop(),i.delete(R),S.push(R);while(R!==h.node);s.push(S.sort())}}s.sort((m,f)=>(m[0]??"").localeCompare(f[0]??""));let a=new Map;s.forEach((m,f)=>{for(let h of m)a.set(h,f)});let c=new Map,l=new Map;s.forEach((m,f)=>{c.set(f,new Set),l.set(f,new Set)});for(let[m,f]of e){let h=a.get(m);for(let y of f.importsFiles){let g=a.get(y);g===void 0||g===h||(c.get(h)?.add(g),l.get(g)?.add(h))}}let u=new Map(s.map((m,f)=>[f,l.get(f)?.size??0])),p=[],d=[...u].filter(([,m])=>m===0).map(([m])=>m).sort((m,f)=>m-f);for(;d.length>0;){p.push(d);let m=[];for(let f of d)for(let h of[...c.get(f)??[]].sort((y,g)=>y-g)){let y=u.get(h)-1;u.set(h,y),y===0&&m.push(h)}d=m.sort((f,h)=>f-h)}return{components:s,componentOf:a,edges:c,reverseEdges:l,layers:p}}function bp(e){let t=new Set;for(let[n,r]of e)for(let o of r){let i=new Set([n]),s=[...r].filter(a=>a!==o);for(;s.length>0;){let a=s.pop();if(a===o){t.add(`${n}:${o}`);break}i.has(a)||(i.add(a),s.push(...e.get(a)??[]))}}return t}function Bb(e,t){let n=new Set,r=[],o=[{node:t,successors:[...e.get(t)?.importsFiles??[]].sort(),offset:0}];for(n.add(t);o.length>0;){let d=o[o.length-1],m=d.successors[d.offset++];if(m!==void 0){if(n.has(m))continue;n.add(m),o.push({node:m,successors:[...e.get(m)?.importsFiles??[]].sort(),offset:0});continue}o.pop(),r.push(d.node)}let i=r.reverse(),s=new Map(i.map((d,m)=>[d,m])),a=new Map(i.map(d=>[d,new Set]));for(let d of i)for(let m of e.get(d)?.importsFiles??[])a.get(m)?.add(d);let c=new Map([[t,t]]),l=(d,m)=>{let f=d,h=m;for(;f!==h;){for(;s.get(f)>s.get(h);)f=c.get(f);for(;s.get(h)>s.get(f);)h=c.get(h)}return f},u=!0;for(;u;){u=!1;for(let d of i.slice(1)){let m=[...a.get(d)??[]].filter(h=>c.has(h));if(m.length===0)continue;let f=m[0];for(let h of m.slice(1))f=l(h,f);c.get(d)!==f&&(c.set(d,f),u=!0)}}let p=new Map([[t,null]]);for(let d of i.slice(1))p.set(d,c.get(d)??null);return p}function P_(e,t){let n=new Map,r=new Map;for(let o of[...t].sort()){if(!e.has(o)||n.has(o))continue;n.set(o,"visiting");let i=[{node:o,successors:[...e.get(o)?.importsFiles??[]].filter(s=>t.has(s)).sort(),offset:0}];for(;i.length>0;){let s=i[i.length-1],a=s.successors[s.offset++];if(a===void 0){n.set(s.node,"done"),i.pop();continue}let c=n.get(a);if(!c){r.set(a,s.node),n.set(a,"visiting"),i.push({node:a,successors:[...e.get(a)?.importsFiles??[]].filter(p=>t.has(p)).sort(),offset:0});continue}if(c!=="visiting")continue;let l=[s.node];for(;l[l.length-1]!==a;){let p=r.get(l[l.length-1]);if(!p)return[];l.push(p)}l.reverse();let u=[];for(let p=0;p<l.length-1;p++)u.push({from:l[p],to:l[p+1]});return u.push({from:s.node,to:a}),u}}return[]}function Sp(e,t){return P_(e,t).map(({from:n,to:r})=>({from:n,to:r,edgeKinds:[...e.get(n)?.edgeKinds.get(r)??new Set(["static-import"])].sort()}))}function Rp(e){let t=new Map;return e.forEach((n,r)=>{for(let o of n)t.set(o,r)}),t}var T_=50,Cp=2e4,xp=5e4,wp=5e3;function oo(e,t){let n=t.limit?e.slice(0,t.limit):e,r=n.length<e.length,o=t.pageSize??T_,i=t.page??1,s=Math.max(1,Math.ceil(n.length/o)),a=Math.min(Math.max(1,i),s),c=(a-1)*o;return{results:n.slice(c,c+o),pagination:{currentPage:a,totalPages:s,entriesPerPage:o,totalEntries:n.length,hasMore:a<s,...i>s?{outOfRange:!0}:{}},...r?{truncated:!0,partialReasons:["limit"],totalAvailable:e.length}:{}}}function E_(e,t){let n=(e.filesSkipped??0)>0;return!t&&!n?e:{...e,truncated:!0,partialReasons:[...new Set([...e.partialReasons??[],...t?["maxFiles"]:[],...n?["filesSkipped"]:[]])]}}function A_(e,t){let n=e.partialReasons?.includes("maxFiles")===!0&&(t.maxFiles??Cp)>=xp,r=e.partialReasons?.includes("limit")===!0&&t.limit!==void 0&&t.limit>=wp,o=e.pagination?.hasMore===!0&&e.pagination.currentPage>=1e3,i=e.partialReasons?.includes("filesSkipped")===!0;return n||r||o||i?{...e,terminalLimit:!0}:e}function L_(e,t,n){e.pagination?.outOfRange&&(e={...e,warnings:[...e.warnings??[],`page:${t.page} is out of range (only ${e.pagination.totalPages} page(s)) \u2014 returned page ${e.pagination.currentPage} instead.`]});let r={};if(e.pagination?.hasMore&&e.pagination.currentPage<1e3&&(r.nextPage=We("localAnalyzeGraph",{...t,page:e.pagination.currentPage+1},n)),e.partialReasons?.includes("maxFiles")&&(t.maxFiles??Cp)<xp){let o=t.maxFiles??Cp;r.expandScan=We("localAnalyzeGraph",{...t,maxFiles:Math.min(xp,Math.max(o+1,o*2)),page:1},"Re-run with a larger file-scan bound because this graph is partial.")}if(e.partialReasons?.includes("limit")&&t.limit!==void 0&&t.limit<wp&&(r.expandLimit=We("localAnalyzeGraph",{...t,limit:Math.min(wp,Math.max(t.limit+1,t.limit*2)),page:1},"Re-run with a larger result limit because additional graph results exist.")),t.operation==="deadCode"){let o=e.results[0];if(o&&typeof o.file=="string"&&typeof o.name=="string"&&typeof o.line=="number"){let i=t.path.replace(/\/+$/,"");r.verifyReferences={tool:we,query:{type:"references",uri:`${i}/${o.file}`,symbolName:o.name,lineHint:o.line,includeDeclaration:!1,groupByFile:!0},why:`Verify candidate "${o.name}" before deletion; repeat for each result, prioritizing viaHeuristic:"reexport-chain".`,confidence:"high"}}}return Object.keys(r).length>0?{...e,next:r}:e}function zb(e,t,n,r){return L_(A_(E_(e,n),t),t,r)}var __=2e4,jb=1;function Pp(e){return{entrypointsResolved:e,entrypointsResolvedCount:e.length}}function Ka(e,t){return{status:"error",error:t,errorCode:"invalidGraphQuery",operation:e.operation,path:e.path,results:[]}}async function Qb(e,t={}){let n=Qa(e.excludeDir),r=e.maxFiles??__,o=await(t.getGraph?.(e.path,n,r)??ro(e.path,n,r)),i=(d,m)=>zb(d,e,o.truncated,m);if(e.operation==="deadCode"){let d=await Mb(e.path,e,o),m=oo(d.deadExports,e),f=new Set(m.results.map(h=>h.clusterId).filter(h=>typeof h=="number"));return i({operation:e.operation,path:e.path,filesScanned:d.filesScanned,filesSkipped:d.filesSkipped,...m,summary:{...Pp(d.entrypointsResolved),deadClusters:d.deadClusters.filter(h=>f.has(h.id)).map(h=>({...h,files:h.files,size:h.files.length,edgeKinds:gp(o.fileGraph,h.files),confidence:"syntactic"})),deadClusterCount:d.deadClusters.length,deadExportCount:d.deadExports.length},...d.warnings.length>0?{warnings:d.warnings}:{},...d.confidence?{confidence:d.confidence}:{}},"Continue dead-code candidates.")}let s=[...o.truncated?[`scan stopped at maxFiles (${r}) \u2014 graph results are partial`]:[],...o.filesSkipped>0?[`${o.filesSkipped} file(s) could not be read or parsed within the native graph bounds \u2014 graph results are partial`]:[]],a={operation:e.operation,path:e.path,filesScanned:o.filesScanned,filesSkipped:o.filesSkipped};if(e.operation==="cycles"){let d=yp(o.fileGraph),m=Rp(d.layers),f=bp(d.edges),h=Gb(o.fileGraph),y=$a(h).map(R=>[...R.files].sort()),S=d.components.filter(R=>R.length>1||(o.fileGraph.get(R[0])?.importsFiles.has(R[0])??!1)).map(R=>{let C=d.componentOf.get(R[0]),P=new Set(R),T=y.filter(b=>b.every(w=>P.has(w))),E=Sp(o.fileGraph,P),k=Sp(h,P),x=C===void 0?[]:[...d.edges.get(C)??[]].sort((b,w)=>b-w);return{files:R,size:R.length,edgeKinds:gp(o.fileGraph,R),runtimeCycle:T.length>0,runtimeCycles:T,runtimeCycleCount:T.length,cycleEdges:E,runtimeCycleEdges:k,componentId:C,topologicalLayer:C===void 0?void 0:m.get(C),outgoingComponents:x,outgoingComponentCount:x.length,confidence:"syntactic"}}).sort((R,C)=>(R.files[0]??"").localeCompare(C.files[0]??""));return i({...a,...oo(S,e),summary:{cycleCount:S.length,runtimeCycleCount:S.filter(R=>R.runtimeCycle).length,condensationComponentCount:d.components.length,condensationEdgeCount:[...d.edges.values()].reduce((R,C)=>R+C.size,0),topologicalLayerCount:d.layers.length,transitiveEdgeCount:f.size},...s.length>0?{warnings:s}:{}},"Continue cycle components.")}if(e.operation==="dependencies"||e.operation==="dependents"){if(!e.file)return i(Ka(e,`${e.operation} requires file`),`Retry ${e.operation} after expanding the graph scan.`);let d=Wa(e.file);if(!o.fileGraph.has(d))return i(Ka(e,`file is not in the scanned graph: ${d}`),`Retry ${e.operation} after expanding the graph scan.`);let m=e.operation==="dependencies"?o.fileGraph:Db(o.fileGraph),f=yp(m),h=Rp(f.layers),y=bp(f.edges),g=Bb(m,d),S=Nb(m,d,e.depth??jb).map(R=>{let C=R.file,P=R.via,T=f.componentOf.get(P),E=f.componentOf.get(C);return{...R,immediateDominator:g.get(C)??null,topologicalLayer:E===void 0?void 0:h.get(E),transitiveEdge:T!==void 0&&E!==void 0?y.has(`${T}:${E}`):!1}});return i({...a,...oo(S,e),summary:{source:d,depth:e.depth??jb,condensationComponentCount:f.components.length,topologicalLayerCount:f.layers.length,transitiveEdgeCount:y.size},...s.length>0?{warnings:s}:{}},`Continue ${e.operation}.`)}if(e.operation==="path"){if(!e.file||!e.target)return i(Ka(e,"path requires file and target"),"Retry the path query after expanding the graph scan.");let d=Wa(e.file),m=Wa(e.target);return!o.fileGraph.has(d)||!o.fileGraph.has(m)?i(Ka(e,"file and target must both be in the scanned graph"),"Retry the path query after expanding the graph scan."):i({...a,...oo([Hb(o.fileGraph,d,m)],e),summary:{source:d,target:m},...s.length>0?{warnings:s}:{}},"Continue path results.")}let c=new Set(o.facts.keys()),l=Ua(e.path,e.entrypoints,e.includeTests??!0,c);if(l.lowConfidence&&l.entrypoints.length===0)return i({...a,status:"empty",results:[],summary:{...Pp(l.entrypoints),classifiedCount:0,unclassifiedCount:o.fileGraph.size},warnings:[...s,...l.warnings],confidence:"low"},"Retry reachability after expanding the graph scan.");let u=Ci(o.fileGraph,l.entrypoints),p=[...o.fileGraph.keys()].sort().map(d=>({file:d,reachable:u.has(d),confidence:"syntactic"}));return i({...a,...oo(p,e),summary:{...Pp(l.entrypoints),reachableCount:u.size,unreachableCount:p.length-u.size},...s.length+l.warnings.length>0?{warnings:[...s,...l.warnings]}:{},...l.lowConfidence?{confidence:"low"}:{}},"Continue reachability classifications.")}var Tp=Z(On,{maxQueries:5});async function Ub(e){let t=new Map,n=(r,o,i)=>{let s=JSON.stringify([r,[...o].sort(),i]),a=t.get(s);if(a)return a;let c=ro(r,o,i);return t.set(s,c),c};return he(e.queries||[],async r=>Ct({toolName:I.LOCAL_ANALYZE_GRAPH,query:r,contextMessage:"localAnalyzeGraph execution failed",execute:async()=>{let o=tt(On,r);if(o.ok===!1)return o.error;let i=lt(o.data,I.LOCAL_ANALYZE_GRAPH);return i.isValid?Qb({...o.data,path:i.sanitizedPath},{getGraph:n}):N(i.errorResult,o.data,{toolName:I.LOCAL_ANALYZE_GRAPH})}}),{toolName:I.LOCAL_ANALYZE_GRAPH},e)}import{access as eI}from"node:fs/promises";function io(e){return e===0?"0.0B":e<1024?`${e}.0B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)}MB`:e<1024*1024*1024*1024?`${(e/(1024*1024*1024)).toFixed(1)}GB`:`${(e/(1024*1024*1024*1024)).toFixed(1)}TB`}function wi(e){let t=e.trim();if(/^\d+$/.test(t))return parseInt(t,10);let n=t.match(/^(\d+(?:\.\d+)?)(B|KB|MB|GB|TB)$/i);if(n&&n[1]&&n[2]){let s=parseFloat(n[1]);switch(n[2].toUpperCase()){case"B":return Math.round(s);case"KB":return Math.round(s*1024);case"MB":return Math.round(s*1024*1024);case"GB":return Math.round(s*1024*1024*1024);case"TB":return Math.round(s*1024*1024*1024*1024)}}let r=t.match(/^(\d+(?:\.\d+)?)([KMGT])$/i);if(!r||!r[1]||!r[2])throw new Error(`Invalid size format: ${e}`);let o=parseFloat(r[1]);switch(r[2].toUpperCase()){case"K":return Math.round(o*1024);case"M":return Math.round(o*1024*1024);case"G":return Math.round(o*1024*1024*1024);default:return Math.round(o*1024*1024*1024*1024)}}function Ep(e){let t=e.filter(o=>o.type==="file").length,n=e.filter(o=>o.type==="directory").length,r=e.reduce((o,i)=>i.type==="file"&&i.size?o+wi(i.size):o,0);return`${e.length} entries (${t} files, ${n} dirs, ${io(r)})`}function Ap(e,t){let n=e.length,r=t.itemsPerPage||20,o=Math.max(1,Math.ceil(n/r)),i=t.page||1,s=Math.min(i,o),a=i>o,c=(s-1)*r,l=Math.min(c+r,n),u=s<o;return{paginatedEntries:e.slice(c,l),endIdx:l,pagination:{currentPage:s,totalPages:o,entriesPerPage:r,totalEntries:n,hasMore:u,...u&&s<1e3?{nextPage:s+1}:{},...a?{outOfRange:!0}:{}}}}function k_(e,t,n,r){if(!n.hasMore||n.currentPage>=1e3)return[];let o=e.slice(r,r+3).map(i=>i.name).join(", ");return[`Page ${n.currentPage}/${n.totalPages} (showing ${t} of ${n.totalEntries}). Next: page=${n.currentPage+1}${o?` (starts with: ${o}...)`:""}`]}function Pi(e){if(e.skipped<=0)return[];let t=e.skipped-e.permissionDenied;return e.permissionDenied>0&&t>0?[`${e.skipped} entries skipped (${e.permissionDenied} permission denied, ${t} other errors)`]:e.permissionDenied>0?[`${e.permissionDenied} ${e.permissionDenied===1?"entry":"entries"} skipped due to permission denied`]:[`${e.skipped} ${e.skipped===1?"entry":"entries"} skipped due to access errors`]}function $b(e){let t=e.find(r=>r.type==="file");if(t)return{fetch:{tool:"localGetFileContent",query:{path:t.path,minify:"standard"},why:'Read the first matched file (minify:"symbols" for a skeleton, minify:"none" for exact bytes).',confidence:"exact"}};let n=e.find(r=>r.type==="directory");if(n)return{viewStructure:{tool:"local.tree",query:{path:n.path},why:"Orient inside the first matched directory before reading files.",confidence:"exact"}}}var I_=["node_modules",".git","dist","build","out","coverage","target",".next",".cache"];function O_(e,t){let n=t??I_,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}async function Wb(e){let t=e.detail==="full",n=e.detail==="modified"||t,r=n||(e.sortBy||"modified")==="modified";try{let o=lt(e,I.LOCAL_FIND_FILES);if(!o.isValid)return o.errorResult;let i={...e,path:o.sanitizedPath},s={...i,excludeDir:O_(i.path,i.excludeDir)},{warnings:a,query:c}=D_(s),l=e.limit??1e4,u={path:c.path,recursive:!0,includeRoot:!0,showHidden:!0,maxDepth:c.maxDepth,minDepth:c.minDepth,names:c.names,extensions:c.extensions,regex:c.regex,entryType:c.entryType,empty:c.empty,modifiedWithin:c.time?.modifiedWithin,modifiedBefore:c.time?.modifiedBefore,accessedWithin:c.time?.accessedWithin,sizeGreater:c.size?.greater,sizeLess:c.size?.less,permissions:c.permissions,executable:c.access==="executable",readable:c.access==="readable",writable:c.access==="writable",excludeDir:c.excludeDir,limit:1e4},p=await D.queryFileSystem({...u,pathPattern:c.pathPattern}),d=p.totalDiscovered,m=p.wasCapped,f=p.entries.map(de=>v_(de,r)),h=e.sortBy||"modified";F_(f,h,r);let y=f.slice(0,l),g=y.length<f.length,S=m,R=M_(y,t,n),C=R.length,P=e.itemsPerPage||20,T=e.page||1,E=Math.max(1,Math.ceil(C/P)),k=(T-1)*P,x=Math.min(k+P,C),b=R.slice(k,x),w=C>0&&k>=C,L=b,O=[...p.warnings,...Pi(p),...m?[`results capped at ${1e4} during the walk before sorting \u2014 sortBy:"${h}" only orders that partial set, not the true top-N across the whole tree`]:[],...w?[`page:${T} is out of range (only ${E} page(s), ${C} total file(s)) \u2014 returned 0 files. Use page:1..${E}.`]:[]],v=[...a,...O],A=T<E,q=g&&l<1e4,ne=A&&T>=1e3||(g||S)&&!q,X={...$b(L)??{},...A&&!ne?{nextPage:We(I.LOCAL_FIND_FILES,{...i,page:T+1},"Continue to the next page of matched files.")}:{},...q?{expandLimit:We(I.LOCAL_FIND_FILES,{...i,limit:Math.min(1e4,Math.max(l+1,l*2)),page:1},"Re-run with a larger file limit because matched files remain.")}:{}},re={...C===0?{status:"empty"}:{},path:i.path,files:L,pagination:{currentPage:T,totalPages:E,filesPerPage:P,totalFiles:C,hasMore:A,...A&&!ne?{nextPage:T+1}:{},...m||d>C?{totalFilesFound:d}:{},...w?{outOfRange:!0}:{}},...ne?{terminalLimit:!0}:{},...g||S?{truncated:!0,partialReasons:[...g?["limit"]:[],...S?["walkLimit"]:[]],totalAvailable:Math.max(d,f.length)}:{},...Object.keys(X).length>0?{next:X}:{},...v.length>0&&{warnings:v}};return W(re,p.entries.reduce((de,Ee)=>de+Ee.path.length,0))}catch(o){return N(o,e,{toolName:I.LOCAL_FIND_FILES})}}function v_(e,t){let n={path:e.path,type:e.entryType==="directory"?"directory":e.entryType==="symlink"?"symlink":"file",...e.size!==void 0?{size:e.size}:{},...e.permissions?{permissions:e.permissions}:{}};return t&&e.modifiedMs!==void 0&&(n.modified=new Date(e.modifiedMs).toISOString()),n}function F_(e,t,n){e.sort((r,o)=>{switch(t){case"size":return(o.size??0)-(r.size??0);case"name":return(r.path.split("/").pop()||"").localeCompare(o.path.split("/").pop()||"");case"path":return r.path.localeCompare(o.path);default:return n&&r.modified&&o.modified?new Date(o.modified).getTime()-new Date(r.modified).getTime():r.path.localeCompare(o.path)}})}function M_(e,t,n){return e.map(r=>{let o={path:r.path,type:r.type};return r.size!==void 0&&r.type!=="directory"&&(t?o.size=r.size:o.sizeFormatted=io(r.size)),t&&r.permissions&&(o.permissions=r.permissions),r.modified&&(o.modified=r.modified),o})}var N_=/^\d+[hdwm]$/;function D_(e){let t=[],n=e.time;if(!n)return{warnings:t,query:e};let r={...n},o=[{key:"modifiedBefore",value:n.modifiedBefore},{key:"modifiedWithin",value:n.modifiedWithin},{key:"accessedWithin",value:n.accessedWithin}];for(let{key:i,value:s}of o)s&&!N_.test(s)&&(t.push(`time.${i}="${s}" has an unsupported format \u2014 filter was skipped. Use a relative duration like "7d", "2h", "1w", or "3m".`),delete r[i]);return{warnings:t,query:{...e,time:r}}}function Vb(e){let t=[],n=[];return!e||typeof e!="object"?(t.push("Query must be an object"),{isValid:!1,errors:t,warnings:n}):(e.mode!=="structural"&&(!e.searchText||typeof e.searchText!="string")&&t.push("`searchText` is required"),e.matchWindow!==void 0&&e.output!=="matchOnly"&&t.push('`matchWindow` requires output:"matchOnly"'),(e.unique==="list"||e.unique==="count")&&e.output!=="matchOnly"&&t.push('`unique` requires output:"matchOnly"'),{isValid:t.length===0,errors:t,warnings:n})}import{z as Dn}from"zod";var H_=["paginated","discovery","detailed","structural"],G_=["semanticRanking"],Kb={mode:Dn.enum(H_).optional().default("paginated"),searchText:Dn.string().optional(),output:Dn.enum(["content","files","filesWithout","countLines","countMatches","matchOnly"]).optional().default("content"),pattern:Dn.string().optional(),maxDepth:M(0,20).optional(),rule:Dn.string().optional(),captureText:Dn.boolean().optional(),contextLines:$r,matchContentLength:M(1,1e5).optional().default(500),maxMatchesPerFile:M(1,1e5).optional(),maxFiles:M(1,1e5).optional(),matchPage:be.optional(),itemsPerPage:M(1,1e3).optional(),page:be.default(1),unique:Dn.enum(["off","list","count"]).optional().default("off")},B_={...Kb,semanticRanking:Dn.unknown().optional().superRefine((e,t)=>{e!==void 0&&t.addIssue({code:"custom",message:'semanticRanking is disabled in this build \u2014 sort:"relevance" already includes declaration/export/AST signals; remove this field.'})}).describe('DISABLED in this build \u2014 do not pass. sort:"relevance" already includes declaration/export/AST signals.')},z_=pe(ft,B_),j_=se(ft,Kb,{strict:!0,omit:G_}),so=j_.superRefine((e,t)=>{if(e.mode==="structural"){!e.pattern&&!e.rule&&t.addIssue({code:"custom",message:'mode:"structural" requires `pattern` or `rule`.',path:["pattern"]}),e.pattern&&e.rule&&t.addIssue({code:"custom",message:"`pattern` and `rule` are mutually exclusive.",path:["rule"]}),e.wholeWord&&t.addIssue({code:"custom",message:'`wholeWord` is not valid with mode:"structural".',path:["wholeWord"]}),e.invertMatch&&t.addIssue({code:"custom",message:'`invertMatch` is not valid with mode:"structural".',path:["invertMatch"]}),e.regex&&e.regex!=="smart"&&t.addIssue({code:"custom",message:'`regex` is not valid with mode:"structural".',path:["regex"]}),e.caseMode&&e.caseMode!=="smart"&&t.addIssue({code:"custom",message:'`caseMode` is not valid with mode:"structural".',path:["caseMode"]}),e.multiline&&e.multiline!=="off"&&t.addIssue({code:"custom",message:'`multiline` is not valid with mode:"structural".',path:["multiline"]}),e.output&&e.output!=="content"&&e.output!=="countMatches"&&e.output!=="files"&&t.addIssue({code:"custom",message:'With mode:"structural", `output` supports only "content" (default), "countMatches" (per-file counts, no match content \u2014 cheapest for counting), or "files" (paths only).',path:["output"]}),e.unique&&e.unique!=="off"&&t.addIssue({code:"custom",message:'`unique` is not valid with mode:"structural".',path:["unique"]});let n=e.pattern&&!["php","bash","sh","zsh"].includes(e.langType??"")?/(?<!\$)\$\$(?!\$)[A-Z_][A-Z0-9_]*/.exec(e.pattern):null;if(n){let r=n[0].slice(2);t.addIssue({code:"custom",message:`\`${n[0]}\` is not a metavariable and matches nothing \u2014 use \`$${r}\` for one node or \`$$$${r}\` for a list of nodes.`,path:["pattern"]})}return}(e.pattern||e.rule)&&t.addIssue({code:"custom",message:'`pattern`/`rule` require mode:"structural".',path:[e.pattern?"pattern":"rule"]}),e.searchText||t.addIssue({code:"custom",message:'`searchText` is required unless mode:"structural".',path:["searchText"]}),e.matchWindow!==void 0&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'matchWindow requires output:"matchOnly".',path:["matchWindow"]}),(e.unique==="list"||e.unique==="count")&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'unique requires output:"matchOnly".',path:["unique"]})}),Q_=Z(z_,{maxQueries:5});var Lp=["typescript","javascript","rust","python","go","java","scala","markdown","json","yaml","generic"],ae={exactWholeWord:6,exactCaseInsensitive:3,substring:1,declarationLine:8,exportLine:4,importLine:3,configKeyLine:4,headingLine:4,commentOrStringPenalty:-2,pathUnderQuery:4,pathSegmentToken:3,extMatchesLangType:2,sourceDir:1.5,lowSignalPathPenalty:-5,testPathPenalty:-3.5,rareQueryTokenScale:2,rareQueryTokenCap:3,matchCountScale:1.5,matchCountCap:6},_p=2e3,kp=/^\s*(\/\/|#|\*|\/\*|<!--|--)/,Xb={declaration:[/\b(function|class|interface|type|enum|const|let|var)\s+\w/,/\b\w+\s*[:=]\s*(async\s+)?(function|\()/],export:[/\bexport\b/,/\bmodule\.exports\b/,/\bexport\s+default\b/],import:[/\b(import|require)\b/,/\bfrom\s+['"]/]},Ti={typescript:{id:"typescript",extensions:["ts","tsx","mts","cts"],...Xb},javascript:{id:"javascript",extensions:["js","jsx","mjs","cjs"],...Xb},rust:{id:"rust",extensions:["rs"],declaration:[/\b(fn|struct|enum|trait|impl|mod|type|const|static|macro_rules!)\b/],export:[/\bpub(\s*\([^)]*\))?\s+(fn|struct|enum|trait|mod|type|const|static)\b/],import:[/\buse\s+/,/\bextern\s+crate\b/]},python:{id:"python",extensions:["py","pyi"],declaration:[/^\s*(async\s+)?def\s+\w/,/^\s*class\s+\w/,/^\s*@\w/],export:[/^\s*__all__\s*=/],import:[/^\s*(import|from)\s+/]},go:{id:"go",extensions:["go"],declaration:[/\b(func|type|struct|interface)\b/,/^\s*(const|var)\s+/],export:[/\b(func|type)\s+[A-Z]\w*/],import:[/^\s*import\s+/,/^\s*"[^"]+"\s*$/]},java:{id:"java",extensions:["java"],declaration:[/\b(class|interface|enum|record)\s+\w/,/\b\w+\s*\([^)]*\)\s*\{/],export:[/\b(public|protected)\b/,/^\s*@\w/],import:[/^\s*import\s+/]},scala:{id:"scala",extensions:["scala","sc"],declaration:[/\b(class|object|trait|def|val|var|type|case\s+class)\s+\w/],export:[/\b(export|implicit)\b/,/^\s*@\w/],import:[/^\s*import\s+/]},markdown:{id:"markdown",extensions:["md","markdown","mdx"],declaration:[],export:[],import:[/^\s*\[[^\]]+\]\([^)]+\)/]},json:{id:"json",extensions:["json","jsonc","json5"],declaration:[],export:[],import:[]},yaml:{id:"yaml",extensions:["yaml","yml"],declaration:[],export:[],import:[]},generic:{id:"generic",extensions:[],declaration:[/\b(function|def|fn|func|class|struct|interface|type)\b/],export:[/\b(export|public|pub)\b/],import:[/\b(import|require|use|include)\b/]}},Ip=/^\s*#{1,6}\s/,Ei=/(^|\/)(dist|build|out|coverage|node_modules|vendor|\.next|__snapshots__)(\/|$)/,U_=/(\.min\.|\.bundle\.|\.generated\.|\.d\.ts$|-lock\.)/,$_=/(^|\/)(tests?|__tests__|spec|e2e)(\/|$)|\.(test|spec)\./,W_=/(^|\/)(fixtures?|__fixtures__|snapshots?)(\/|$)/,V_=/(^|\/)(docs?|examples?)(\/|$)|\.(md|markdown|mdx|rst|txt)$/i,K_=/(^|\/)(config|\.github)(\/|$)|\.(json|ya?ml|toml|ini|cfg|conf|env)$|(^|\/)[^/]*\.config\.[jt]s$/i,X_=/(^|\/)(src|lib|app|packages|internal|pkg|cmd|crates|include|sources?)(\/|$)/,Y_=new Set(["typescript","javascript","rust","python","go","java","scala"]),Xa=/\.([a-z0-9]+)$/i;function Ai(e){return Xa.exec(e)?.[1]?.toLowerCase()??""}function Z_(e){let t=Ai(e);if(!t)return!1;for(let n of Y_)if(Ti[n].extensions.includes(t))return!0;return!1}function Op(e,t,n){if(n&&n!=="auto")return Ti[n];let r=Ai(e),o=(t??"").toLowerCase();for(let i of Lp){let s=Ti[i];if(i!=="generic"&&o&&(i===o||s.extensions.includes(o)))return s}for(let i of Lp){let s=Ti[i];if(i!=="generic"&&s.extensions.includes(r))return s}return Ti.generic}function Ya(e){return U_.test(e)?"generated":W_.test(e)?"fixture":$_.test(e)?"test":K_.test(e)?"config":V_.test(e)?"docs":!Ei.test(e)&&(X_.test(e)||Z_(e))?"source":"unknown"}function vp(e){if(!e)return!1;if(Ei.test(e))return!0;let t=Ya(e);return t==="test"||t==="docs"||t==="fixture"||t==="generated"}function Li(e,t){for(let n of e)if(n.test(t))return!0;return!1}function Za(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Fp(e){return!!e&&/^[A-Za-z_$][\w$]*$/.test(e.trim())}function Mp(e,t,n){if(e.indexOf(`
64
53
  `)<0)return e;let o=e.split(`
65
- `);if(t){let i=n?t:t.toLowerCase();for(let s of o)if((n?s:s.toLowerCase()).includes(i))return s}return o.find(i=>i.trim().length>0)??o[0]??""}function Wc(e,t,n,r){if(n==="markdown")return/<!--/.test(e)?"comment":"code";if(n==="json")return"code";if(Hc.test(e))return"comment";let o=bw(e,t,r);if(o<0)return"code";let i=Cw(e);return i>=0&&o>i?"comment":yh(e,o)?"string":"code"}function bw(e,t,n){return t?n?e.indexOf(t):e.toLowerCase().indexOf(t.toLowerCase()):-1}function Cw(e){let t=-1,n=i=>{i>=0&&(t<0||i<t)&&(t=i)};for(let i of["//","/*","<!--"])n(e.indexOf(i));let r=/(^|\s)#(?![!{])/.exec(e);r&&n(r.index+(r[1]?.length??0));let o=/(^|\s)--\s/.exec(e);return o&&n(o.index+(o[1]?.length??0)),t}function yh(e,t){let n="";for(let r=0;r<t&&r<e.length;r++){let o=e[r];n?o===n&&e[r-1]!=="\\"&&(n=""):(o==='"'||o==="'"||o==="`")&&(n=o)}return n!==""}function xw(e){if(!e)return;let t=/[A-Za-z_$][\w$]*/.exec(e);return t?t[0]:void 0}function Pw(e,t){if(!e)return[];let n=new Set,r=[];for(let o of e.matchAll(/[A-Za-z_$][\w$]*/g)){let i=o[0],s=t?i:i.toLowerCase();n.has(s)||(n.add(s),r.push(i))}return r}function ww(e,t,n,r,o){if(!e||e.length===0)return 0;let i=jc(n.keyword),s=0,a="";for(let c of e){let u=c.value??"";if(!u)continue;let l=zc(u,r,n.caseSensitive),p=0,m=[];r&&i&&(new RegExp(`(^|[^\\w$])${is(r)}([^\\w$]|$)`,n.caseSensitive?"":"i").test(l)?(p+=re.exactWholeWord,m.push("whole-word match")):!n.caseSensitive&&l.toLowerCase().includes(r.toLowerCase())?(p+=re.exactCaseInsensitive,m.push("case-insensitive match")):l.includes(r)&&(p+=re.substring,m.push("substring match")));let d=c.kind;if(d)p+=Tw(d,m);else{let f=Wc(l,r,t.id,n.caseSensitive);f!=="code"?(p+=re.commentOrStringPenalty,m.push(f==="comment"?"comment match (weak)":"string literal (weak)")):(xo(t.declaration,l)&&(p+=re.declarationLine,m.push("declaration line")),xo(t.export,l)&&(p+=re.exportLine,m.push("export/public line")),xo(t.import,l)&&(p+=re.importLine,m.push("import line")),t.id==="markdown"&&Bc.test(l)&&(p+=re.headingLine,m.push("markdown heading")),(t.id==="json"||t.id==="yaml")&&Ew(l,r)&&(p+=re.configKeyLine,m.push("config key match")))}p>s&&(s=p,a=m.join(", "))}return a&&o.push(a),s}function Tw(e,t){switch(e){case"declaration":return t.push("AST: declaration"),re.declarationLine;case"export":return t.push("AST: export/public"),re.exportLine;case"configKey":return t.push("AST: config key"),re.configKeyLine;case"heading":return t.push("AST: heading"),re.headingLine;case"import":return t.push("AST: import"),re.importLine;case"comment":case"string":return t.push(`AST: ${e} (weak)`),re.commentOrStringPenalty;case"callsite":return t.push("AST: callsite"),1;default:return 0}}function Ew(e,t){let n=e.indexOf(":");if(n<0)return!1;let r=e.slice(0,n);return t?r.includes(t):/["'\w]/.test(r)}function Lw(e,t,n,r,o,i){let s=0;if(n){let c=e.toLowerCase(),u=n.toLowerCase();c.split("/").some(l=>l.replace(rs,"").includes(u))&&(s+=re.pathSegmentToken,i.push("query token in path"))}let a=Co(e);return r.extensions.includes(a)&&t.langType&&(s+=re.extMatchesLangType,i.push("extension matches langType")),o==="source"&&(s+=re.sourceDir,i.push("source file")),s}function Aw(e,t,n){return t.explicitLowSignal?0:e==="generated"||e==="fixture"?(n.push(`${e} file (penalized)`),re.lowSignalPathPenalty):e==="test"?(n.push("test file (penalized)"),re.testPathPenalty):0}function kw(e,t){if(e<=0)return 0;let n=Math.log2(e+1)*re.matchCountScale,r=Math.min(n,re.matchCountCap);return e>1&&t.push(`match count saturated (${e})`),r}function Vc(e,t){let n=Pw(t.keyword,t.caseSensitive);if(n.length<2||e.length<2)return;let r=new Map,o=new Map;for(let i of e){let s=n.filter(a=>_w(i,a,t.caseSensitive));if(s.length!==0){r.set(i.path,s);for(let a of s)o.set(a,(o.get(a)??0)+1)}}if(r.size!==0)return{candidateCount:e.length,fileTokens:r,documentFrequency:o}}function _w(e,t,n){let r=n?"":"i",o=new RegExp(`(^|[^\\w$])${is(t)}([^\\w$]|$)`,r);for(let i of e.matches??[])if(o.test(i.value??""))return!0;return o.test(e.path)}function Iw(e,t,n){if(!t)return 0;let r=t.fileTokens.get(e.path);if(!r?.length)return 0;let o="",i=0,s=0;for(let a of r){let c=t.documentFrequency.get(a)??t.candidateCount;if(c>t.candidateCount/2)continue;let u=Math.log2((t.candidateCount+1)/(c+1)),l=Math.min(u*re.rareQueryTokenScale,re.rareQueryTokenCap);l>i&&(i=l,o=a,s=c)}return i<=0?0:(n.push(`rare query token: ${o} (${s}/${t.candidateCount} files)`),i)}function Kc(e,t,n){let r=Uc(e.path,t.langType,t.profileOverride),o=os(e.path),i=xw(t.keyword),s=[],a=0;return a+=ww(e.matches,r,t,i,s),a+=Lw(e.path,t,i,r,o,s),t.queryPath&&e.path.startsWith(t.queryPath.replace(/\/+$/,"")+"/")&&(a+=re.pathUnderQuery,s.push("under requested subtree")),a+=Aw(o,t,s),bo.test(e.path)&&!t.explicitLowSignal&&(a+=re.lowSignalPathPenalty,s.push("low-signal path (penalized)")),a+=kw(e.matchCount??0,s),a+=Iw(e,n,s),{score:Math.round(a*100)/100,profile:r.id,pathRole:o,reasons:s}}var Ow=new Set(["async","await","break","case","catch","class","const","def","do","else","enum","export","for","function","if","import","interface","let","match","return","struct","switch","type","var","while","true","false","null","undefined","NaN","Infinity","this","super"]),Fw=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Rh(e,t,n,r){let o=e.find(a=>a.path),i=o?.matches?.find(a=>a.line),s={};if(o?.path){if(i?.line){let c=vw(i);s.fetch={tool:"localGetFileContent",query:Yc({path:o.path,startLine:c.startLine,endLine:c.endLine,minify:"none"}),why:'Read exact source around the first match (set minify:"standard" for a token-lean slice, or drop the line range with minify:"symbols" for a skeleton).',confidence:"exact"}}else s.fetch={tool:"localGetFileContent",query:{path:o.path,minify:"standard"},why:'Read the first matched file (minify:"symbols" gives a skeleton for orientation; minify:"none" gives exact bytes).',confidence:r.isFileListMode?"low":"exact"};let a=Dw(i,t,n);if(a&&i?.line){let c={uri:o.path,symbolName:a.symbol,lineHint:a.line??i.line};s.lspDefinition={tool:"lspGetSemantics",query:{...c,type:"definition"},why:"Use the grep line as an LSP lineHint to resolve the symbol definition.",confidence:"low"},s.lspReferences={tool:"lspGetSemantics",query:{...c,type:"references"},why:"Use the grep line as an LSP lineHint to inspect semantic usages.",confidence:"low"}}}return r.currentPage<r.totalFilePages&&(s.nextPage={tool:"localSearchCode",query:Yc({...t,page:r.currentPage+1}),why:"Continue to the next page of matched files.",confidence:"exact"}),r.hasFileWithMoreMatches&&(s.nextMatchPage={tool:"localSearchCode",query:Yc({...t,maxMatchesPerFile:r.matchesPerPage,matchPage:r.matchPage+1}),why:"Continue within files that have more matches than this response returned.",confidence:"exact"}),s}function vw(e){let t=Math.max(1,e.line??1),n=Math.max(t,e.endLine??t);return{startLine:Math.max(1,t-8),endLine:n+8}}function Dw(e,t,n){if(t.output==="countLines"||t.output==="countMatches"||t.unique==="list"||t.unique==="count")return;if(n==="structural")return Mw(e?.metavars,e?.metavarRanges);if(t.matchWindow)return;if(t.output==="matchOnly"){let o=Xc(e?.value);return o?{symbol:o}:void 0}let r=Xc(t.searchText);return r?{symbol:r}:void 0}function Mw(e,t){if(e)for(let[n,r]of Object.entries(e))for(let[o,i]of r.entries()){let s=Xc(i);if(s)return{symbol:s,line:t?.[n]?.[o]?.line}}}function Xc(e){if(typeof e!="string")return;let t=e.trim();if(Fw.test(t)&&!Ow.has(t))return t}function Yc(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function ss(e,t,n,r,o){let i=t.sort??"relevance",s=n==="structural"&&i==="relevance"?"path":i,a;try{a=$c(e,s,Nw(t),{debug:!1,sortReverse:t.sortReverse})}catch{a={files:e,cappedCandidates:0},r.push("Relevance ranking failed; returning results in unranked engine order.")}let c=a.files,u=a.debug,l=c.length,p=t.output==="files"||t.output==="filesWithout",m=t.output==="countLines"||t.output==="countMatches",d=p||m,f=c.reduce((B,I)=>B+(I.matchCount??0),0),g=d?o?.totalOccurrences??o?.totalStructuralMatches??f:f,R=t,h=Math.min(R.itemsPerPage||Gt.DEFAULT_FILES_PER_PAGE,t.maxFiles||Number.POSITIVE_INFINITY),y=R.page||1,S=Math.max(1,Math.ceil(l/h)),C=(y-1)*h,P=Math.min(C+h,l),T=c.slice(C,P),L=l>0&&C>=l;L&&r.push(`page:${y} is out of range (only ${S} page(s), ${l} total file(s)) \u2014 returned 0 files. Use page:1..${S}.`);let k=R.maxMatchesPerFile||Gt.DEFAULT_MATCHES_PER_PAGE,w=T.map(B=>{let I=B.matches?.length??0,U=Math.max(1,Math.ceil(I/k)),ee=Math.max(1,R.matchPage||1),v=(ee-1)*k,q=I>0&&v>=I,le=Math.min(v+k,I),ae=d?void 0:B.matches?.slice(v,le),pe=ae?.length;q&&r.push(`${B.path}: matchPage:${ee} is out of range under maxMatchesPerFile:${k} (only ${U} page(s), ${I} total match(es) for this file) \u2014 returned 0 rows for this file. Use matchPage:1..${U}, or drop matchPage to re-derive it from the current maxMatchesPerFile.`);let Me=u?.get(B.path);return{path:B.path,...p?{}:t.output==="countLines"?{totalMatchedLines:B.matchCount||1}:t.output==="countMatches"?{totalOccurrences:B.matchCount||1}:{totalMatchRows:I,...pe!==void 0?{returnedMatchRows:pe}:{}},...ae!==void 0&&{matches:ae},...Me?{ranking:{score:Me.score,profile:Me.profile,pathRole:Me.pathRole,reasons:Me.reasons}}:{},pagination:!d&&(I>k||q)?{currentPage:ee,totalPages:U,matchesPerPage:k,totalMatches:I,hasMore:ee<U,...ee<U?{nextMatchPage:ee+1}:{},...q?{outOfRange:!0}:{}}:void 0}}),b=w.filter(B=>B.pagination?.hasMore),A=Rh(w,t,n,{isFileListMode:d,currentPage:y,totalFilePages:S,matchPage:R.matchPage||1,matchesPerPage:k,hasFileWithMoreMatches:b.length>0}),M={searchEngine:n,...o?{stats:o}:{},files:w,pagination:{currentPage:y,totalPages:S,filesPerPage:h,totalFiles:l,...p?{}:{totalMatches:g},hasMore:y<S,...y<S?{nextPage:y+1}:{},...L?{outOfRange:!0}:{}},...r.length>0?{warnings:r}:{},...Object.keys(A).length>0?{next:A}:{}};return Sh(M,t,{totalMatches:g,totalFiles:l})}function Sh(e,t,n){return e}function Nw(e){let t=e.rankingProfile,n=!!(e.include?.length||Qc(e.path));return{queryPath:e.path,keyword:e.searchText,langType:e.langType,caseSensitive:e.caseMode==="sensitive",wholeWord:e.wholeWord,profileOverride:t,explicitLowSignal:n}}function bh(e){let t=[],n=[],r=e.pattern;if(typeof r!="string"||r.length===0)return t.push("pattern is empty \u2014 provide a non-empty search string"),{isValid:!1,errors:t,warnings:n};let o=O.validateRipgrepPattern(r,e.fixedString,e.perlRegex);return o.valid||t.push(`invalid regex: ${o.error??"unknown regex parse error"}`),!e.fixedString&&Gw(r)&&n.push(`pattern '${r}' looks literal \u2014 set regex:"fixed" to skip regex parsing and avoid accidental wildcards`),!e.perlRegex&&Hw(r)&&n.push("pattern uses lookaround (?= / ?! / ?<= / ?<!) which requires perlRegex: true; ripgrep will refuse it otherwise"),{isValid:t.length===0,errors:t,warnings:n}}function Gw(e){return/[\\^$|()[\]{}+*?]/.test(e)?!1:!!(e.includes(".")&&/^[\w.\-/:]+$/.test(e)||e.length>2&&/^\w+$/.test(e))}function Hw(e){return/\(\?[=!<]/.test(e)}import Vn from"node:path";function Uw(e){return e==="created"||e==="modified"||e==="accessed"?e:"path"}function Qw(e){return{path:e.path,pattern:e.searchText??"",fixedString:e.regex==="fixed",perlRegex:e.regex==="perl",caseSensitive:e.caseMode==="sensitive",caseInsensitive:e.caseMode==="insensitive",wholeWord:e.wholeWord,invertMatch:e.invertMatch,multiline:e.multiline==="on"||e.multiline==="dotall",multilineDotall:e.multiline==="dotall",filesOnly:e.output==="files",filesWithoutMatch:e.output==="filesWithout",countLinesPerFile:e.output==="countLines",countMatchesPerFile:e.output==="countMatches",contextLines:e.contextLines,langType:e.langType,include:e.include,exclude:e.exclude,excludeDir:e.excludeDir,noIgnore:e.noIgnore,hidden:e.hidden,sort:Uw(e.sort),sortReverse:e.sortReverse,classifyMatches:e.sort==="relevance"||e.sort===void 0,maxSnippetChars:e.matchContentLength,onlyMatching:e.output==="matchOnly",unique:e.unique==="list"||e.unique==="count",countUnique:e.unique==="count",matchWindow:e.matchWindow,maxCollectedFiles:1e4}}function $w(e){let t=0;for(let n of e)if(t+=n.path.length,n.matches)for(let r of n.matches)t+=r.value?.length??0;return t}function jw(e,t){let n=Vn.isAbsolute(e)?e:Vn.join(t,e),r=Vn.relative(t,n);if(!r||r.startsWith("..")||Vn.isAbsolute(r))return 0;let o=Vn.dirname(r);return o==="."?0:o.split(Vn.sep).filter(Boolean).length}async function Ch(e){let t=[],n=Bw(e);if(!n.isValid)return F(new Error(`Query validation failed: ${n.errors.join("; ")}`),e,{toolName:x.LOCAL_RIPGREP,extra:{warnings:n.warnings}});t.push(...n.warnings);let r=ht.safeParse(e);if(!r.success){let h=r.error.issues.map(y=>y.message);return F(new Error(`Query validation failed: ${h.join(", ")}`),e,{toolName:x.LOCAL_RIPGREP,extra:{warnings:t}})}let o=r.data;if(!o.path)return F(new Error("Path is required for search"),o,{toolName:x.LOCAL_RIPGREP,extra:{warnings:t}});let s=ve(o,x.LOCAL_RIPGREP);if(!s.isValid)return s.errorResult;let a={...o,path:s.sanitizedPath},c=bh({pattern:a.searchText??"",fixedString:a.regex==="fixed",perlRegex:a.regex==="perl"});if(!c.isValid)return F(new Error(`Pattern validation failed: ${c.errors.join("; ")}`),o,{toolName:x.LOCAL_RIPGREP,extra:{warnings:[...t,...c.warnings]}});let u=[...c.warnings],l;try{l=await O.searchRipgrep(Qw(a))}catch(h){return F(h instanceof Error?h:new Error(String(h)),o,{toolName:x.LOCAL_RIPGREP})}let p=l.files.map(h=>({path:h.path,matchCount:h.matchCount,matches:h.matches.map(y=>{let S={line:y.line,column:y.column,value:y.value};return y.count!==void 0&&(S.count=y.count),y.kind!==void 0&&(S.kind=y.kind),y.scoreHint!==void 0&&(S.scoreHint=y.scoreHint),S})})),m=a.maxDepth,d=m===void 0?p:p.filter(h=>jw(h.path,a.path)<=m);m!==void 0&&d.length!==p.length&&u.push(`Applied maxDepth:${m} after native text search; filtered ${p.length-d.length} deeper file(s).`);let f=$w(d),g={totalOccurrences:l.stats.matchCount,matchedLines:l.stats.matchedLines,filesMatched:d.length,filesSearched:l.stats.filesSearched,bytesSearched:l.stats.bytesSearched??void 0,searchTime:l.stats.searchTime,capped:l.stats.capped??void 0,capReason:l.stats.capReason??void 0};if(l.stats.capped&&u.push(`Search hit native collection cap (${l.stats.capReason??"resource limit"}); narrow path/include/keywords for exhaustive results.`),d.length===0){let h=['No matches \u2014 broaden the search: try caseMode:"insensitive", a shorter/partial term, or regex:"smart" instead of "fixed".',...a.include?.length||a.maxDepth!==void 0?["Filters are active (include/maxDepth) \u2014 drop them to search the wider tree."]:[],...a.wholeWord?["wholeWord:true excludes partial hits \u2014 drop it to match substrings."]:[]];return $({status:"empty",searchEngine:"rg",stats:g,hints:h,warnings:[...t,...u]},f)}a.output!=="files"&&f>Gt.LARGE_RESULT_BYTES_HINT&&u.push(`Result payload is large (~${Math.round(f/1024)}KB).`);let R=await ss(d,o,"rg",[...t,...u],g);return $(R,f)}import{readFile as Vw,stat as Kw}from"node:fs/promises";var xh={bash:{kind:"extension",canonicalLanguage:"Shell",extension:"bash",extensions:["bash"]},c:{kind:"extension",canonicalLanguage:"C",extension:"c",extensions:["c"]},cc:{kind:"extension",canonicalLanguage:"C++",extension:"cc",extensions:["cc"]},cjs:{kind:"extension",canonicalLanguage:"JavaScript",extension:"cjs",extensions:["cjs"]},cpp:{kind:"extension",canonicalLanguage:"C++",extension:"cpp",extensions:["cpp"]},cs:{kind:"extension",canonicalLanguage:"C#",extension:"cs",extensions:["cs"]},cts:{kind:"extension",canonicalLanguage:"TypeScript",extension:"cts",extensions:["cts"]},cxx:{kind:"extension",canonicalLanguage:"C++",extension:"cxx",extensions:["cxx"]},go:{kind:"extension",canonicalLanguage:"Go",extension:"go",extensions:["go"]},h:{kind:"extension",canonicalLanguage:"C",extension:"h",extensions:["h"]},html:{kind:"extension",canonicalLanguage:"HTML",extension:"html",extensions:["html"]},htm:{kind:"extension",canonicalLanguage:"HTML",extension:"htm",extensions:["htm"]},hpp:{kind:"extension",canonicalLanguage:"C++",extension:"hpp",extensions:["hpp"]},js:{kind:"extension",canonicalLanguage:"JavaScript",extension:"js",extensions:["js"]},json:{kind:"extension",canonicalLanguage:"JSON",extension:"json",extensions:["json"]},jsonc:{kind:"extension",canonicalLanguage:"JSON",extension:"jsonc",extensions:["jsonc"]},jsx:{kind:"extension",canonicalLanguage:"JavaScript",extension:"jsx",extensions:["jsx"]},java:{kind:"extension",canonicalLanguage:"Java",extension:"java",extensions:["java"]},less:{kind:"extension",canonicalLanguage:"Less",extension:"less",extensions:["less"]},md:{kind:"extension",canonicalLanguage:"Markdown",extension:"md",extensions:["md"]},mdx:{kind:"extension",canonicalLanguage:"MDX",extension:"mdx",extensions:["mdx"]},mjs:{kind:"extension",canonicalLanguage:"JavaScript",extension:"mjs",extensions:["mjs"]},mts:{kind:"extension",canonicalLanguage:"TypeScript",extension:"mts",extensions:["mts"]},py:{kind:"extension",canonicalLanguage:"Python",extension:"py",extensions:["py"]},pyi:{kind:"extension",canonicalLanguage:"Python",extension:"pyi",extensions:["pyi"]},rs:{kind:"extension",canonicalLanguage:"Rust",extension:"rs",extensions:["rs"]},scala:{kind:"extension",canonicalLanguage:"Scala",extension:"scala",extensions:["scala"]},sc:{kind:"extension",canonicalLanguage:"Scala",extension:"sc",extensions:["sc"]},scss:{kind:"extension",canonicalLanguage:"SCSS",extension:"scss",extensions:["scss"]},sh:{kind:"extension",canonicalLanguage:"Shell",extension:"sh",extensions:["sh"]},ts:{kind:"extension",canonicalLanguage:"TypeScript",extension:"ts",extensions:["ts"]},tsx:{kind:"extension",canonicalLanguage:"TypeScript",extension:"tsx",extensions:["tsx"]},toml:{kind:"extension",canonicalLanguage:"TOML",extension:"toml",extensions:["toml"]},yaml:{kind:"extension",canonicalLanguage:"YAML",extension:"yaml",extensions:["yaml"]},yml:{kind:"extension",canonicalLanguage:"YAML",extension:"yml",extensions:["yml"]},zsh:{kind:"extension",canonicalLanguage:"Shell",extension:"zsh",extensions:["zsh"]}},Ph={bash:{kind:"language",canonicalLanguage:"Shell",extensions:["sh","bash","zsh"]},c:{kind:"language",canonicalLanguage:"C",extensions:["c","h"]},"c++":{kind:"language",canonicalLanguage:"C++",extensions:["cpp","hpp","cc","cxx","hh","hxx"]},cpp:{kind:"language",canonicalLanguage:"C++",extensions:["cpp","hpp","cc","cxx","hh","hxx"]},csharp:{kind:"language",canonicalLanguage:"C#",extensions:["cs"]},css:{kind:"language",canonicalLanguage:"CSS",extensions:["css"]},go:{kind:"language",canonicalLanguage:"Go",extensions:["go"]},html:{kind:"language",canonicalLanguage:"HTML",extensions:["html","htm"]},java:{kind:"language",canonicalLanguage:"Java",extensions:["java"]},javascript:{kind:"language",canonicalLanguage:"JavaScript",extensions:["js","jsx","mjs","cjs"]},json:{kind:"language",canonicalLanguage:"JSON",extensions:["json","jsonc"]},less:{kind:"language",canonicalLanguage:"Less",extensions:["less"]},markdown:{kind:"language",canonicalLanguage:"Markdown",extensions:["md","markdown"]},python:{kind:"language",canonicalLanguage:"Python",extensions:["py","pyi"]},rust:{kind:"language",canonicalLanguage:"Rust",extensions:["rs"]},scala:{kind:"language",canonicalLanguage:"Scala",extensions:["scala","sc","sbt"]},scss:{kind:"language",canonicalLanguage:"SCSS",extensions:["scss"]},shell:{kind:"language",canonicalLanguage:"Shell",extensions:["sh","bash","zsh"]},typescript:{kind:"language",canonicalLanguage:"TypeScript",extensions:["ts","tsx","mts","cts"]},toml:{kind:"language",canonicalLanguage:"TOML",extensions:["toml"]},yaml:{kind:"language",canonicalLanguage:"YAML",extensions:["yaml","yml"]},yml:{kind:"language",canonicalLanguage:"YAML",extensions:["yaml","yml"]}};function zw(e){return e.trim().replace(/^\./,"").toLowerCase()}function wh(e){if(!e?.trim())return;let t=zw(e),n=xh[t]??Ph[t];return n?{raw:e,normalized:t,...n}:{raw:e,normalized:t,kind:"unknown",canonicalLanguage:e.trim()}}function qc(e){let t=wh(e);if(!t)return;let r=(t.extensions?.length?t.extensions:[t.normalized.replace(/^[.*]+/,"")]).filter(Boolean).map(o=>`*.${o}`);return r.length?r:void 0}var Ww=/^\s*(\/\/|\/\*|\*|#)/;function Eh(e,t,n){let r=t&&Object.keys(t).length>0;if(n)return{...e?{metavars:e}:{},...r?{metavarRanges:t??void 0}:{}};let o;if(e){o={};for(let[s,a]of Object.entries(e))a.length<=1&&(o[s]=a.map(Th));Object.keys(o).length===0&&(o=void 0)}let i;if(r&&t){i={};for(let[s,a]of Object.entries(t)){let u=(a.length>1?a.filter(l=>!Ww.test(l.text)):a).map(l=>({...l,text:Th(l.text)}));u.length>0&&(i[s]=u)}Object.keys(i).length===0&&(i=void 0)}return{...o?{metavars:o}:{},...i?{metavarRanges:i}:{}}}function Th(e){return e.length>120?`${e.slice(0,120)}\u2026`:e}var Lh=[],Ah=2e3,Yw=1e6,Xw="0 structural matches. A pattern matches a complete AST node \u2014 a class/function usually needs a body (add `$$$BODY`), and Python/TS definitions may carry a return type (`-> $RET:`) or decorators the pattern must include. For partial or relational matches use a YAML `rule` instead of `pattern`.";function _h(e){if(!e||!/\)\s*\{/.test(e))return;let t=e.replace(/\)\s*\{/,"): $R {");return t===e?void 0:t}function qw(e){let t=_h(e);return t?` Try: \`${t}\`.`:""}function kh(e){return e.include?.length?e.include:qc(e.langType)}async function Jw(e){try{return(await Kw(e)).isFile()}catch{return!1}}async function Zw(e,t,n){let r=await Vw(e,"utf8"),o=await O.structuralSearch(r,e,n??t.pattern,t.rule);return{files:o.length>0?[{path:e,matches:o}]:[],totalMatches:o.length,parsedFiles:1,skippedByPreFilter:0,skippedUnsupported:0,skippedUnreadable:0,skippedLarge:0,warnings:[]}}async function Ih(e){let t=ve(e,x.LOCAL_RIPGREP);if(!t.isValid)return t.errorResult;let n=await Jw(t.sanitizedPath),r=!!e.captureText,o=S=>({path:t.sanitizedPath,pattern:S??e.pattern,rule:e.rule,...kh(e)?{include:kh(e)}:{},...e.exclude?.length?{exclude:e.exclude}:{},...e.excludeDir?.length?{excludeDir:e.excludeDir}:Lh.length?{excludeDir:Lh}:{},...e.hidden!==void 0?{hidden:e.hidden}:{},...e.noIgnore!==void 0?{noIgnore:e.noIgnore}:{},maxFiles:e.maxFiles??Ah,maxFileBytes:Yw}),i=S=>n?Zw(t.sanitizedPath,e,S):O.structuralSearchFiles(o(S)),s,a=!1,c;try{if(s=await i(),s.totalMatches===0&&e.pattern&&!e.rule&&!/[;}]\s*$/.test(e.pattern))try{let S=await i(`${e.pattern};`);S.totalMatches>0&&(s=S,a=!0)}catch{}if(s.totalMatches===0&&e.pattern&&!e.rule){let S=_h(e.pattern);if(S)try{let C=await i(S);C.totalMatches>0&&(s=C,c=S)}catch{}}}catch(S){let C=S instanceof Error?S.message:String(S),P=e.langType||"source";return F(new Error(`Invalid structural ${e.rule?"rule":"pattern"}: ${C} \u2014 patterns must be valid ${P} and match a complete node; a class/def usually needs a body (add \`$$$BODY\`). Run \`octocode tools localSearchCode --scheme\` for the live schema.`),e,{toolName:x.LOCAL_RIPGREP})}let u=s.files.map(S=>({path:S.path,matchCount:S.matches.length,matches:S.matches.map(C=>({line:C.startLine,endLine:C.endLine,value:C.text.replace(/\s+/g," ").trim().slice(0,300),column:C.startCol,endColumn:C.endCol,...Eh(C.metavars,C.metavarRanges,r)}))})),l=e.maxDepth,p=u,m=0;if(typeof l=="number"&&!n){let S=t.sanitizedPath.replace(/\/+$/,"");p=u.filter(C=>(C.path.startsWith(`${S}/`)?C.path.slice(S.length+1):C.path).split("/").length<=l+1),m=u.length-p.length}let d=p.reduce((S,C)=>S+(C.matchCount??C.matches?.length??0),0),f=e.maxFiles??Ah,R=(s.parsedFiles??0)+(s.skippedUnreadable??0)+(s.skippedLarge??0)>=f,h={totalStructuralMatches:typeof l=="number"?d:s.totalMatches,...R?{capReached:!0}:{}},y=[...s.warnings];if(m>0&&y.push(`maxDepth ${l}: dropped ${m} deeper file(s) \u2014 raise maxDepth or omit it to include them.`),a&&y.push(`Matched after appending ';' \u2014 statement patterns must parse as complete statements; the bare pattern parsed as an expression fragment. Results are for "${e.pattern};".`),c&&y.push(`Matched after adding a return-type metavar \u2014 the bare pattern missed functions that declare a return type. Results are for "${c}".`),s.totalMatches===0&&!n)try{let S=O.structuralSearchFilesDetailed(o()),C=S.query;if(C){let P=[`query parsed as ${C.kind}`];C.literalAnchor&&P.push(`literal anchor "${C.literalAnchor}"`),P.push(`pre-filter: ${C.preFilter}`),C.unsafeReason&&P.push(`unsafe: ${C.unsafeReason}`),y.push(`Engine explanation: ${P.join(", ")}.`);for(let T of[...C.diagnostics??[],...S.diagnostics??[]].slice(0,3))y.push(`Engine ${T.severity} [${T.stage}/${T.code}]: ${T.message}${T.recovery?` \u2014 ${T.recovery}`:""}`)}}catch{}return(p.length===0||h.totalStructuralMatches===0)&&e.pattern&&!e.rule&&m===0&&y.push(Xw+qw(e.pattern)),await ss(p,e,"structural",y,h)}function eT(e){let t=e.mode;if(!t)return e;let n={...e};return t==="discovery"&&n.output==="content"?n.output="files":t==="detailed"&&n.contextLines===void 0&&(n.contextLines=3),n}async function as(e){let t=eT(e);if(t.mode==="structural")return await Ih(t);t.contextLines===void 0&&(t.contextLines=2);try{return await Ch(t)}catch(n){let r=n instanceof Error?n.message:String(n);return r.includes("Output size limit exceeded")?{status:"error",error:r,errorCode:H.OUTPUT_TOO_LARGE}:F(n,t,{toolName:x.LOCAL_RIPGREP})}}async function Oh(e){let{queries:t}=e;return te(t||[],async n=>Fe({toolName:x.LOCAL_RIPGREP,query:n,contextMessage:"localSearchCode execution failed",execute:async()=>{let r=ke(ht,n);return r.ok===!1?r.error:await as(r.data)}}),{toolName:x.LOCAL_RIPGREP},e)}import{z as Fh}from"zod";import{ViewStructureQuerySchema as vh}from"@octocodeai/octocode-core/schemas";var Dh={excludeDir:Fh.array(Fh.string()).optional().describe("Directory names to prune from recursive walks (default: common generated/vendor dirs such as node_modules, dist, build, out, coverage, target). Pass [] to inspect everything."),maxDepth:_(0,20).optional(),limit:_(1,1e4).optional(),page:K.default(1),itemsPerPage:_(1,50).optional()},tT=Z(vh,Dh),cn=X(vh,Dh),Po=Y(tT,{maxQueries:5});var nT=new Set(["+","*","?"]),rT=1e3;function oT(e,t){let n=t+1;for(;n<e.length&&e[n]!=="]";)e[n]==="\\"&&n++,n++;return n+1}function Mh(e,t){let n=e[t];return n===void 0?!1:nT.has(n)||n==="{"&&aT(e,t)}function iT(e,t,n){let r=n.pop()??!1,o=Mh(e,t+1);return o&&r?{unsafe:!0,next:t+1}:((o||r)&&n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:o?Nh(e,t+1):t+1})}function sT(e,t,n){return n.some(r=>r)?{unsafe:!0,next:t+1}:(n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:Nh(e,t)})}function Jc(e){if(e.length>rT)return{safe:!1,reason:"Pattern too long (max 1000 characters)"};let t="Nested quantifiers detected (potential ReDoS). Simplify the pattern.",n=[],r=0;for(;r<e.length;){let o=e[r];if(o==="\\"){r+=2;continue}if(o==="["){r=oT(e,r);continue}if(o==="("){n.push(!1),r++;continue}if(o===")"){let i=iT(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}if(Mh(e,r)){let i=sT(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}r++}return{safe:!0}}function aT(e,t){if(e[t]!=="{")return!1;let n=e.indexOf("}",t);return n===-1?!1:/^\{\d+,?\d*\}$/.test(e.slice(t,n+1))}function Nh(e,t){return e[t]==="{"?t=e.indexOf("}",t)+1:t++,t<e.length&&(e[t]==="?"||e[t]==="+")&&t++,t}function Tj(e,t){let n=Jc(e);if(!n.safe)throw new Error(n.reason);return new RegExp(e,t)}function Gh(e,t){let n=e;if(t.pattern){let r=t.pattern;if(r.includes("*")||r.includes("?")||r.includes("[")){let i=r.replace(/[.+^${}()|[\]\\*?]/g,"\\$&");i=i.replace(/\\\*/g,".*").replace(/\\\?/g,".").replace(/\\\[!/g,"[^").replace(/\\\[/g,"[").replace(/\\\]/g,"]");try{let s=`^${i}$`;if(!Jc(s).safe)return n=n.filter(u=>(u.name.includes("/")?u.name.split("/").pop():u.name).includes(r)),n;let c=new RegExp(s,"i");n=n.filter(u=>{let l=u.name.includes("/")?u.name.split("/").pop():u.name;return c.test(l)})}catch{n=n.filter(s=>(s.name.includes("/")?s.name.split("/").pop():s.name).includes(r))}}else n=n.filter(i=>(i.name.includes("/")?i.name.split("/").pop():i.name).includes(r))}return n}function Hh(e){let t=[],n=[],r=[];for(let o of e)o.type==="directory"?n.push(o.name):o.type==="symlink"?r.push(o.name):t.push(o.size?`${o.name} (${o.size})`:o.name);return{...t.length>0&&{files:t},...n.length>0&&{folders:n},...r.length>0&&{links:r}}}function Bh(e){let t={type:e.type==="directory"?"dir":e.type==="symlink"?"link":"file"};return e.depth!==void 0&&e.depth>0&&(t.depth=e.depth),e.size&&e.type==="file"&&(t.size=e.size),e.modified&&(t.modified=e.modified),e.permissions&&(t.permissions=e.permissions),t}function Uh(e){let t={},n=e.find(o=>o.type==="file"&&o.path);n?.path&&(t.fetch={tool:"localGetFileContent",query:{path:n.path,minify:"standard"},why:'Read the first listed file (minify:"symbols" for a skeleton, minify:"none" for exact bytes).',confidence:"exact"});let r=e.find(o=>o.type==="directory"&&o.path);return r?.path&&(t.viewDeeper={tool:"localViewStructure",query:{path:r.path},why:"Descend into the first listed subdirectory.",confidence:"exact"}),t.fetch||t.viewDeeper?t:void 0}var cT=["node_modules",".git","dist","build","out","coverage","target",".next",".cache"];function uT(e,t){let n=t??cT,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}async function Qh(e){try{let t=ve(e,x.LOCAL_VIEW_STRUCTURE);if(!t.isValid)return t.errorResult;let n=e.detail==="modified"||e.detail==="full"||e.sortBy==="time";return lT(e,t.sanitizedPath,n)}catch(t){let n=Le.toolExecutionFailed("LOCAL_VIEW_STRUCTURE",t instanceof Error?t:void 0);return{status:"error",error:n.message,errorCode:n.errorCode}}}function lT(e,t,n=!1){let r=!!(e.maxDepth||e.recursive),o=r?e.maxDepth||(e.recursive?5:2):1,i=dT(e),s=pT(e,i),a=r&&s?1e4:1e4,c=uT(t,e.excludeDir),u;try{u=O.queryFileSystem({path:t,recursive:r,includeRoot:!1,showHidden:e.hidden??!1,maxDepth:o,names:i,extensions:e.extensions,entryType:mT(e),excludeDir:c,limit:a})}catch(L){return gT(L,e,t)}let l=u.entries.map(L=>fT(L,n,e.detail==="full")),p=Gh(l,e),m=e.sortBy??"name";p=p.sort((L,k)=>{let w=0;switch(m){case"size":{let b=L.sizeBytes??(L.size?po(L.size):0),A=k.sizeBytes??(k.size?po(k.size):0);w=b-A;break}case"time":n&&L.modified&&k.modified?w=L.modified.localeCompare(k.modified):w=L.name.localeCompare(k.name);break;case"extension":w=(L.extension||"").localeCompare(k.extension||"");break;default:w=L.name.localeCompare(k.name);break}return e.reverse?-w:w}),e.limit&&(p=p.slice(0,e.limit));let d=p.length,{paginatedEntries:f,pagination:g}=Ic(p,e),h=e.detail==="full"||e.detail==="modified"?{path:t,entries:f.map(L=>({...Bh(L),path:L.path??`${t.replace(/\/$/,"")}/${L.name}`}))}:{path:t,...Hh(f)},y=[...u.warnings,...mo({skipped:u.skipped,permissionDenied:u.permissionDenied}),...u.wasCapped?[`Results capped at ${a} entries during the walk before sorting \u2014 sortBy:"${m}" only orders that partial set, not the true top-N across the whole tree. Add pattern/extensions/entryType/excludeDir or reduce depth to narrow the scope.`]:[],...g.outOfRange?[`page:${e.page} is out of range (only ${g.totalPages} page(s), ${g.totalEntries} total entries) \u2014 returned page ${g.currentPage} instead.`]:[]],S=d===0,C=_c(p),T={...Uh(f)??{},...g.hasMore?{nextPage:Fn(x.LOCAL_VIEW_STRUCTURE,{...e,page:g.currentPage+1},"Continue to the next page of directory entries.")}:{}};return $({...S?{status:"empty"}:{},...h,summary:C,...g.hasMore||g.totalPages>1||g.outOfRange?{pagination:g}:{},...Object.keys(T).length>0?{next:T}:{},...y.length>0&&{warnings:y}},u.entries.reduce((L,k)=>L+k.path.length,0))}function pT(e,t){return!!((typeof e.pattern=="string"?e.pattern:void 0)&&!t)}function dT(e){let t=typeof e.pattern=="string"?e.pattern:void 0;if(t&&!t.includes("["))return t.includes("*")||t.includes("?")?[t]:[`*${t}*`]}function mT(e){return e.entryType}function fT(e,t,n){let r=e.entryType==="directory"?"directory":e.entryType==="symlink"?"symlink":"file",o={name:e.relativePath||e.name,path:e.path,type:r,...e.size!==void 0?{size:zn(e.size),sizeBytes:e.size}:{},...e.extension?{extension:e.extension}:{},depth:e.depth};return(n||t)&&e.modifiedMs!==void 0&&(o.modified=new Date(e.modifiedMs).toISOString()),n&&e.permissions&&(o.permissions=hT(e.permissions)),o}function hT(e){let t=Number.parseInt(e,8);if(!Number.isFinite(t))return e;let n=["---","--x","-w-","-wx","r--","r-x","rw-","rwx"];return`${n[t>>6&7]}${n[t>>3&7]}${n[t&7]}`}function gT(e,t,n){let r=e instanceof Error?e.message:String(e),o=/ENOENT|not found|no such file/i.test(r),i=/EACCES|permission denied/i.test(r),s=/ENOTDIR|not a directory/i.test(r),a=Le.pathValidationFailed(n,o?`Directory not found: ${n}`:i?`Permission denied: ${n}`:s?`Not a directory: ${n}`:`Cannot access path: ${n}`);return F(a,t,{toolName:x.LOCAL_VIEW_STRUCTURE})}async function $h(e){let{queries:t}=e;return te(t||[],async n=>Fe({toolName:x.LOCAL_VIEW_STRUCTURE,query:n,contextMessage:"localViewStructure execution failed",execute:async()=>{let r=ke(cn,n);return r.ok===!1?r.error:await Qh(r.data)}}),{toolName:x.LOCAL_VIEW_STRUCTURE,keysPriority:["path","summary","pagination","files","folders","entries"]},e)}import{acquirePooledClientDetailed as oE,isLanguageServerAvailable as iE}from"@octocodeai/octocode-engine/lsp/manager";import{resolveWorkspaceRootForFile as sE}from"@octocodeai/octocode-engine/lsp/workspaceRoot";var jh=["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation","workspaceSymbol","supertypes","subtypes","diagnostic"];function gt(e){return{name:e.name,uri:e.uri,foundAtLine:e.foundAtLine,...e.orderHint!==void 0&&{orderHint:e.orderHint},...e.isAmbiguous===!0&&{isAmbiguous:!0},...e.lineDeviation!==void 0&&{lineDeviation:e.lineDeviation}}}function Zc(e){let t=e.displayRange??(e.range?{startLine:e.range.start.line+1,endLine:e.range.end.line+1}:void 0);return{uri:e.uri,...e.content!==void 0&&{content:e.content},...t&&{displayRange:t},...e.isDefinition&&{isDefinition:!0}}}var yT=new Set(["noLocations","noReferences","noCalls","noTypeHierarchy","noHover"]);function RT(e){let t=e.payload;return t.kind==="empty"?t.category:t.empty?.category}function zh(e,t){if(t===void 0||t==="progressIdle")return e;let n=RT(e);if(!n||!yT.has(n))return e;let r=`Language server did not confirm indexing completion (readiness: ${t}) \u2014 zero results may mean the project is not yet indexed, not that the symbol is absent. Retry the query, or warm the relevant consumer files first.`;return{...e,warnings:[...e.warnings??[],r]}}import{readFile as ST,stat as bT}from"node:fs/promises";import{SymbolResolver as CT,SymbolResolutionError as xT}from"@octocodeai/octocode-engine/lsp/resolver";import{toUri as PT}from"@octocodeai/octocode-engine/lsp/uri";import{LSP_ERROR_CODES as cs}from"@octocodeai/octocode-engine/lsp/lspErrorCodes";async function eu(e,t){let n=e.uri,r=ve({...e,path:n},t);if(!r.isValid)return{ok:!1,error:r.errorResult};let o=r.sanitizedPath;try{if((await bT(o)).isDirectory())return{ok:!1,error:{status:"error",error:`Path is a directory, not a file: ${o}. lspGetSemantics needs a single file uri.`,errorType:"not_a_file",errorCode:cs.LSP_REQUEST_FAILED,hints:["Pass the path to a specific source file (e.g. via search --op on a file, or workspaceSymbol with symbolName for whole-project lookup)."]}}}catch{return{ok:!1,error:{status:"error",error:`File not found: ${o}. Check the path and spelling.`,errorType:"file_not_found",errorCode:cs.LSP_REQUEST_FAILED,hints:[`Could not find file: ${n??"<missing>"}. Run search/localFindFiles to get the exact path first.`]}}}try{return{ok:!0,value:{uri:PT(o),absolutePath:o,content:await ST(o,"utf-8")}}}catch(i){return{ok:!1,error:{status:"error",error:i instanceof Error?i.message:String(i),errorType:"file_not_found",errorCode:cs.LSP_REQUEST_FAILED,hints:[`Could not read file: ${n??"<missing>"}`]}}}}async function Wh(e,t){let n=await eu(e,t);if(n.ok===!1)return n;if(e.type==="documentSymbols")return{ok:!1,error:{status:"error",error:"documentSymbols is file-level and does not use a symbol anchor"}};let r=new CT({lineSearchRadius:5});try{let o=r.resolvePositionFromContent(n.value.content,{symbolName:e.symbolName,lineHint:e.lineHint,orderHint:e.orderHint??0}),i=e.symbolName.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`\\b${i}\\b`,"g"),a=(n.value.content.match(s)??[]).length,c=e.lineHint!==void 0?Math.abs(o.foundAtLine-e.lineHint):void 0,u=a>1&&c!==void 0&&c>0?!0:void 0;return{ok:!0,value:{...n.value,resolvedSymbol:{name:e.symbolName,uri:n.value.uri,range:wT(o.position),foundAtLine:o.foundAtLine,orderHint:e.orderHint,position:o.position,...u&&{isAmbiguous:u},...c!==void 0&&c>0?{lineDeviation:c}:{}}}}}catch(o){if(o instanceof xT)return{ok:!1,error:{status:"empty",error:o.message,errorType:"symbol_not_found",errorCode:cs.SYMBOL_NOT_FOUND,searchRadius:o.searchRadius,hints:[`Symbol "${e.symbolName}" was not found near line ${e.lineHint}.`,"Run localSearchCode with the exact symbol name to refresh lineHint, then retry."]}};throw o}}function wT(e){return{start:e,end:{line:e.line,character:e.character}}}import Eo from"node:path";import{readFile as UT}from"node:fs/promises";import{resolveImportAliasDefinitions as QT}from"@octocodeai/octocode-engine/lsp/resolver";var Bt=40,us=40,tu=10;function nu(e,t){return/unsupported/i.test(t)?"unsupportedOperation":/could not find symbol|symbol.*not found/i.test(t)?"symbolNotFound":/call/i.test(t)?"noCalls":e==="references"?"noReferences":e==="hover"?"noHover":e==="documentSymbols"?"anchorFailed":"noLocations"}function ru(e,t){let n=e.uri??"";return{type:e.type,uri:n,lsp:{},payload:{kind:"empty",category:nu(e.type,t),reason:t}}}function Qe(e,t,n,r=!1){return{type:e,uri:t.uri,resolvedSymbol:gt(t.resolvedSymbol),lsp:{serverAvailable:r},payload:{kind:"empty",category:nu(e,n),reason:n}}}function $e(e,t,n){let r=Math.max(1,n),o=Math.max(1,Math.ceil(e.length/r)),i=Math.min(Math.max(1,t),o),s=(i-1)*r,a=e.slice(s,s+r),c=i<o;return{pageItems:a,pagination:{currentPage:i,totalPages:o,totalResults:e.length,hasMore:c,itemsPerPage:r,...c?{nextPage:i+1}:{}}}}function wo(e,t,n,r,o){let i=o.length>0,s=o.map(Zc),{pageItems:a,pagination:c}=$e(s,e.page??1,e.itemsPerPage??us);return{type:e.type,uri:t.uri,resolvedSymbol:gt(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:r},payload:i?{kind:n,locations:a}:{kind:"empty",category:"noLocations",reason:`${r} returned no locations`},...i?{pagination:c}:{}}}function ou(e,t,n,r){let o=n.map(p=>{let m=p.uri===t.uri&&p.range.start.line===t.resolvedSymbol.position.line&&p.range.start.character===t.resolvedSymbol.position.character;return{...p,...m?{isDefinition:!0}:{}}}),i=e.groupByFile?Vh(o):void 0,s=i??o.map(Zc),{pageItems:a,pagination:c}=$e(s,e.page??1,e.itemsPerPage??us),u=o.length===0?{category:"noReferences",reason:"referencesProvider returned no references"}:void 0,l=r?.possiblyTruncated===!0?[`Reference warmup opened ${r.warmedFiles}/${r.candidates} candidate file(s) and may be incomplete because the candidate set hit the warmup cap; narrow workspaceRoot/path or confirm with localSearchCode before unused/safe-delete claims.`]:[];return{type:"references",uri:t.uri,resolvedSymbol:gt(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"referencesProvider",source:"lsp"},payload:{kind:"references",...i?{byFile:a}:{locations:a},totalReferences:o.length,totalFiles:new Set(o.map(p=>p.uri)).size,...o.length>0&&o.every(p=>p.isDefinition)?{definitionOnly:!0}:{},...r?{warmup:r}:{},...u?{empty:u}:{}},pagination:c,...l.length>0?{warnings:l}:{}}}async function iu(e,t,n){let r=Kh(n),o=!!(r.markdown||r.text);return{type:"hover",uri:t.uri,resolvedSymbol:gt(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"hoverProvider"},payload:o?{kind:"hover",...r}:{kind:"empty",category:"noHover",reason:"hoverProvider returned no hover content"}}}function Vh(e){let t=new Map;for(let n of e){let r=n.range.start.line+1,o=t.get(n.uri);if(o){o.count+=1,o.lines.push(r),n.isDefinition&&(o.hasDefinition=!0);continue}t.set(n.uri,{uri:n.uri,count:1,firstLine:r,firstCharacter:n.range.start.character,lines:[r],...n.isDefinition?{hasDefinition:!0}:{}})}return[...t.values()]}function Kh(e){if(!e||typeof e!="object")return{};let n=e.contents;if(typeof n=="string")return{text:n.trim()};if(Array.isArray(n))return{markdown:n.map(r=>Yh(r)).join(`
66
- `).trim()};if(n&&typeof n=="object"){let r=n;if(typeof r.value=="string")return r.kind==="markdown"?{markdown:r.value.trim()}:{text:r.value.trim()}}return{}}function Yh(e){if(typeof e=="string")return e;if(e&&typeof e=="object"){let t=e.value;if(typeof t=="string")return t}return String(e)}import{safeReadLineWindow as TT}from"@octocodeai/octocode-engine/lsp/validation";var ET={maxNodes:100,maxRequests:50},Xh={truncatedByDepth:!1,truncatedByBudget:!1,visitedNodeCount:0,requestCount:0,cycleCount:0,failedRequestCount:0};function qh(e){return{...ET,...e,visitedNodeCount:0,requestCount:0,truncatedByBudget:!1}}function Jh(e){return e.requestCount>=e.maxRequests?(e.truncatedByBudget=!0,!1):(e.requestCount+=1,!0)}function Zh(e){return e.visitedNodeCount>=e.maxNodes?(e.truncatedByBudget=!0,!1):(e.visitedNodeCount+=1,!0)}function it(e,t){return{...e,truncatedByBudget:t.truncatedByBudget,visitedNodeCount:t.visitedNodeCount,requestCount:t.requestCount}}function To(e){return`${e.uri}:${e.range.start.line}:${e.name}`}async function eg(e,t,n){if(t<=0)return e;let r=n?.[0]?.start.line??e.range.start.line,o=await TT(e.uri,r,t);if(!o)return e;let i=kr(o).length,s=Math.max(0,r-t),a=s+Math.max(0,i-1);return{...e,content:o,displayRange:{startLine:s+1,endLine:a+1}}}async function LT(e,t){return Promise.all(e.map(async n=>({...n,from:await eg(n.from,t,n.fromRanges)})))}async function AT(e,t){return Promise.all(e.map(async n=>({...n,to:await eg(n.to,t)})))}async function su(e,t,n,r,o,i=qh(void 0)){if(n<=0||!e)return{calls:[],...Xh};if(!Jh(i))return it({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},i);try{let s=await e.getIncomingCalls(t),a=o>0?await LT(s,o):s;if(n===1)return it({calls:a,truncatedByDepth:a.length>0,cycleCount:0,failedRequestCount:0},i);let c=[];for(let u of a){let l=To(u.from);if(r.has(l)){c.push(it({calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0},i));continue}if(!Zh(i)||(r.add(l),c.push(await su(e,u.from,n-1,r,o,i)),i.truncatedByBudget))break}return it({calls:[...a,...c.flatMap(u=>u.calls)],truncatedByDepth:c.some(u=>u.truncatedByDepth),cycleCount:c.reduce((u,l)=>u+l.cycleCount,0),failedRequestCount:c.reduce((u,l)=>u+l.failedRequestCount,0)},i)}catch{return it({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1},i)}}async function au(e,t,n,r,o,i=qh(void 0)){if(n<=0||!e)return{calls:[],...Xh};if(!Jh(i))return it({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},i);try{let s=await e.getOutgoingCalls(t),a=o>0?await AT(s,o):s;if(n===1)return it({calls:a,truncatedByDepth:a.length>0,cycleCount:0,failedRequestCount:0},i);let c=[];for(let u of a){let l=To(u.to);if(r.has(l)){c.push(it({calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0},i));continue}if(!Zh(i)||(r.add(l),c.push(await au(e,u.to,n-1,r,o,i)),i.truncatedByBudget))break}return it({calls:[...a,...c.flatMap(u=>u.calls)],truncatedByDepth:c.some(u=>u.truncatedByDepth),cycleCount:c.reduce((u,l)=>u+l.cycleCount,0),failedRequestCount:c.reduce((u,l)=>u+l.failedRequestCount,0)},i)}catch{return it({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1},i)}}var kT=new Set(["unsupportedOperation","symbolNotFound","anchorFailed","noLocations","noReferences","noHover","noCalls","noWorkspaceSymbols","noTypeHierarchy","noDiagnostics"]),_T=new Set(["symbolNotFound","anchorFailed"]);function IT(e){if(e.kind==="empty"&&typeof e.category=="string")return{category:e.category,...typeof e.reason=="string"?{reason:e.reason}:{}};let t=e.empty;if(yt(t)&&typeof t.category=="string")return{category:t.category,...typeof t.reason=="string"?{reason:t.reason}:{}}}function OT(e){switch(e.slice(e.lastIndexOf(".")+1).toLowerCase()){case"rs":return"^\\s*pub\\s";case"py":case"pyi":return"^\\s*(def|class)\\s";case"go":return"^(func|type|var|const)\\s";case"java":case"kt":case"scala":case"cs":return"^\\s*(public|protected|internal)\\s";case"rb":return"^\\s*(def|class|module)\\s";default:return"^\\s*export\\s"}}function FT(e,t){let n=e.symbolName;if(typeof n=="string"&&n.trim())return n.trim();let r=t.resolvedSymbol?.name;if(typeof r=="string"&&r.trim())return r.trim()}function cu(e,t){if(!uu(t))return t;let n=t.payload,r=n.locations?.[0],o=r?.displayRange?.startLine;if(r?.uri&&typeof o=="number"){let c=r.uri.startsWith("file://")?decodeURIComponent(r.uri.slice(7)):r.uri;return{...t,next:{readSite:{tool:"localGetFileContent",query:{path:c,startLine:Math.max(1,o-3),endLine:(r.displayRange?.endLine??o)+10},why:"Read the top result location with surrounding context",confidence:"exact"}}}}let i=IT(n);if(i?.category==="unsupportedOperation"&&t.type==="documentSymbols"&&t.uri){let c=t.uri.startsWith("file://")?decodeURIComponent(t.uri.slice(7)):t.uri;return{...t,next:{textSearch:{tool:"localSearchCode",query:{path:c,searchText:OT(c),regex:"perl"},why:"documentSymbols is unsupported for this file's language server \u2014 fall back to a regex search over top-level declarations for an outline.",confidence:"low"}}}}let s=FT(e,t);if(!i||!s||!kT.has(i.category))return t;let a={textSearch:{tool:"localSearchCode",query:{keywords:s},why:`Semantic ${t.type} returned no result (${i.category}) \u2014 fall back to a text search for "${s}"`,confidence:"low"}};return _T.has(i.category)&&t.uri&&(a.reAnchor={tool:"lspGetSemantics",query:{type:"documentSymbols",uri:t.uri},why:"Re-anchor: list this file's symbols to find the correct lineHint, then retry the semantic query",confidence:"medium"}),{...t,next:a}}var vT=8;function ng(e){return $(e,N(e))}function rg(e,t){return e.format!=="compact"||!uu(t)?t:DT(t)}function uu(e){return yt(e)&&typeof e.type=="string"&&typeof e.uri=="string"&&yt(e.payload)}function DT(e){return{...e,format:"compact",payload:MT(e.payload)}}function MT(e){switch(e.kind){case"definition":case"typeDefinition":case"implementation":return{kind:e.kind,locations:e.locations.map(tg)};case"references":return{kind:"references",...e.byFile?{byFile:e.byFile.map(GT)}:{locations:(e.locations??[]).map(tg)},totalReferences:e.totalReferences,totalFiles:e.totalFiles};case"callers":case"callees":case"callHierarchy":return{kind:e.kind,...e.root?{root:og(e.root)}:{},direction:e.direction,calls:e.calls.map(HT),...e.incomingCalls!==void 0?{incomingCalls:e.incomingCalls}:{},...e.outgoingCalls!==void 0?{outgoingCalls:e.outgoingCalls}:{},completeness:e.completeness};case"documentSymbols":return{kind:"documentSymbols",symbols:e.symbols.map(NT)};case"hover":case"empty":case"workspaceSymbol":case"typeHierarchy":case"diagnostic":return e}}function NT(e){if(!yt(e))return String(e);let t=De(e,"line"),n=De(e,"character"),r=De(e,"endLine"),o=Rt(e,"kind"),i=Rt(e,"name"),s=De(e,"childCount"),a=Rt(e,"containerName");return[`${t}:${n}${r!==t?`-${r}`:""}`,o,i,a?`< ${a}`:"",s>0?`children=${s}`:""].filter(Boolean).join(" ")}function tg(e){if(typeof e=="string")return e;let t=e.displayRange?`${e.displayRange.startLine}-${e.displayRange.endLine}`:"?",n=e.isDefinition?" def":"",r=e.content?` | ${sg(e.content,180)}`:"";return`${e.uri}:${t}${n}${r}`}function GT(e){if(!yt(e))return String(e);let t=Rt(e,"uri"),n=De(e,"firstLine"),r=De(e,"firstCharacter"),o=De(e,"count"),i=ig(e,"lines").map(a=>typeof a=="number"?a:void 0).filter(a=>a!==void 0).join(","),s=e.hasDefinition===!0?" def":"";return`${t}:${n}:${r} count=${o} lines=${i}${s}`}function HT(e){if(!yt(e))return String(e);let t=Rt(e,"direction"),n=og(e.item),r=ig(e,"ranges").map(BT).join(","),o=De(e,"rangeCount"),i=De(e,"rangeSampleCount"),s=Rt(e,"contentPreview");return[t,n,r?`ranges=${r}`:"",o>i?`totalRanges=${o}`:"",s?`| ${sg(s,180)}`:""].filter(Boolean).join(" ")}function og(e){if(!yt(e))return String(e);let t=Rt(e,"name"),n=Rt(e,"kind"),r=Rt(e,"uri"),o=De(e,"line"),i=De(e,"endLine"),s=De(e,"selectionLine"),a=s>0?` sel=${s}`:"";return`${t} ${n} ${r}:${o}-${i}${a}`}function BT(e){return yt(e)?`${De(e,"line")}:${De(e,"character")}`:String(e)}function yt(e){return typeof e=="object"&&e!==null}function Rt(e,t,n=""){let r=e[t];return typeof r=="string"?r:n}function De(e,t,n=0){let r=e[t];return typeof r=="number"?r:n}function ig(e,t){let n=e[t];return Array.isArray(n)?n:[]}function sg(e,t){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,Math.max(0,t-3))}... (truncated for single-line display \u2014 use charOffset or startLine to read full content)`:n}function ag(e,t){let n=ug(e.fromRanges);return{direction:"incoming",item:ls(e.from),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...lg(e.from,t)}}function cg(e,t){let n=ug(e.fromRanges);return{direction:"outgoing",item:ls(e.to),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...lg(e.to,t)}}function ls(e){return{name:e.name,kind:Kn(e.kind),uri:e.uri,line:e.range.start.line+1,endLine:e.range.end.line+1,...e.selectionRange?{selectionLine:e.selectionRange.start.line+1}:{}}}function ug(e){let t=new Set,n=[];for(let r of e){let o=r.start.line+1,i=r.start.character,s=`${o}:${i}`;if(!t.has(s)&&(t.add(s),n.push({line:o,character:i}),n.length>=vT))break}return n}function lg(e,t){return t<=0||!e.content?{}:{contentPreview:e.content}}function Kn(e){if(typeof e=="string")return e;switch(typeof e=="number"?e:void 0){case 1:return"file";case 2:return"module";case 3:return"namespace";case 4:return"package";case 5:return"class";case 6:return"method";case 7:return"property";case 8:return"field";case 9:return"constructor";case 10:return"enum";case 11:return"interface";case 12:return"function";case 13:return"variable";case 14:return"constant";case 15:return"string";case 16:return"number";case 17:return"boolean";case 18:return"array";case 19:return"object";case 20:return"key";case 21:return"null";case 22:return"enumMember";case 23:return"struct";case 24:return"event";case 25:return"operator";case 26:return"typeParameter";default:return"unknown"}}async function lu(e,t,n){let o=(await n.prepareCallHierarchy(t.absolutePath,t.resolvedSymbol.position,t.content))[0];if(!o)return Qe(e.type,t,"No callable symbol found",!0);let i=e.depth??1,s={calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0,truncatedByBudget:!1,visitedNodeCount:0,requestCount:0},a=e.type==="callers"||e.type==="callHierarchy"?await su(n,o,i,new Set([To(o)]),e.contextLines??0):s,c=e.type==="callees"||e.type==="callHierarchy"?await au(n,o,i,new Set([To(o)]),e.contextLines??0):s,u=y=>/node_modules\/typescript\/lib\/lib\.[^/]*\.d\.ts$/.test(y.to.uri),l=c.calls.filter(u).length,p=c.calls.filter(y=>!u(y)),m=[...a.calls.map(y=>({direction:"incoming",...y})),...p.map(y=>({direction:"outgoing",...y}))],d=m.map(y=>y.direction==="incoming"?ag(y,e.contextLines??0):cg(y,e.contextLines??0)),{pageItems:f,pagination:g}=$e(d,e.page??1,e.itemsPerPage??tu),R=e.type==="callers"?"incoming":e.type==="callees"?"outgoing":"both",h=!a.truncatedByDepth&&!c.truncatedByDepth&&!a.truncatedByBudget&&!c.truncatedByBudget&&a.failedRequestCount+c.failedRequestCount===0;return{type:e.type,uri:t.uri,resolvedSymbol:gt(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"callHierarchyProvider"},payload:{kind:e.type,root:ls(o),direction:R,calls:f,incomingCalls:a.calls.length,outgoingCalls:p.length,completeness:{complete:h,truncatedByDepth:a.truncatedByDepth||c.truncatedByDepth,truncatedByBudget:a.truncatedByBudget||c.truncatedByBudget,visitedNodeCount:a.visitedNodeCount+c.visitedNodeCount,requestCount:a.requestCount+c.requestCount,cycleCount:a.cycleCount+c.cycleCount,failedRequestCount:a.failedRequestCount+c.failedRequestCount,dynamicCallsExcluded:!0,...l>0&&{stdlibCallsExcluded:l}},...m.length===0?{empty:{category:"noCalls",reason:"callHierarchyProvider returned no calls"}}:{}},pagination:g}}async function pu(e,t,n){let o=(await n.prepareTypeHierarchy(t.absolutePath,t.resolvedSymbol.position,t.content))[0];if(!o)return Qe(e.type,t,"No type-hierarchy item found at position",!0);let i=e.type==="supertypes"?"supertypes":"subtypes",s=i==="supertypes"?await n.typeHierarchySupertypes(o):await n.typeHierarchySubtypes(o),{pageItems:a,pagination:c}=$e(s,e.page??1,e.itemsPerPage??Bt);return{type:e.type,uri:t.uri,resolvedSymbol:gt(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"typeHierarchyProvider"},payload:s.length>0?{kind:"typeHierarchy",direction:i,root:o,items:a,totalItems:s.length}:{kind:"empty",category:"noTypeHierarchy",reason:`typeHierarchyProvider returned no ${i} for this symbol`},pagination:c}}var mg=new Set(["references","callers","callees","callHierarchy","implementation"]),pg=100,$T=512*1024,dg=["ts","tsx","mts","cts","js","jsx","mjs","cjs"];async function fg(e,t,n){let r={candidates:0,warmedFiles:0,skippedLarge:0,possiblyTruncated:!1};if(typeof e.openDocument!="function")return r;try{let o=Eo.extname(t.absolutePath).slice(1),i=dg.includes(o)?dg:[o],s=await as({path:n,searchText:t.resolvedSymbol.name,regex:"fixed",wholeWord:!0,output:"files",maxFiles:pg,include:i.filter(Boolean).map(c=>`*.${c}`)}),a={candidates:s.files?.length??0,warmedFiles:0,skippedLarge:0,possiblyTruncated:(s.files?.length??0)>=pg||!!s.stats?.capped};for(let c of s.files??[]){let u=typeof c.path=="string"?c.path:void 0;if(!u)continue;let l=Eo.isAbsolute(u)?u:Eo.join(n,u);if(Eo.resolve(l)!==Eo.resolve(t.absolutePath))try{let p=await UT(l,"utf-8");if(p.length>$T){a.skippedLarge+=1;continue}await e.openDocument(l,p),a.warmedFiles+=1}catch{}}return a}catch{return r}}async function hg(e,t,n,r){switch(e.type){case"definition":return n.hasCapability("definitionProvider")?wo(e,t,"definition","definitionProvider",await QT({anchorUri:t.uri,symbolName:t.resolvedSymbol.name,locations:await n.gotoDefinition(t.absolutePath,t.resolvedSymbol.position,t.content)})):Qe(e.type,t,"definitionProvider unsupported",!0);case"typeDefinition":return n.hasCapability("typeDefinitionProvider")?wo(e,t,"typeDefinition","typeDefinitionProvider",await n.typeDefinition(t.absolutePath,t.resolvedSymbol.position,t.content)):Qe(e.type,t,"typeDefinitionProvider unsupported",!0);case"implementation":return n.hasCapability("implementationProvider")?wo(e,t,"implementation","implementationProvider",await n.implementation(t.absolutePath,t.resolvedSymbol.position,t.content)):Qe(e.type,t,"implementationProvider unsupported",!0);case"references":return n.hasCapability("referencesProvider")?ou(e,t,await n.findReferences(t.absolutePath,t.resolvedSymbol.position,e.includeDeclaration??!0,t.content),r):Qe(e.type,t,"referencesProvider unsupported",!0);case"hover":return n.hasCapability("hoverProvider")?iu(e,t,await n.hover(t.absolutePath,t.resolvedSymbol.position,t.content)):Qe(e.type,t,"hoverProvider unsupported",!0);case"callers":case"callees":case"callHierarchy":return n.hasCapability("callHierarchyProvider")?lu(e,t,n):Qe(e.type,t,"callHierarchyProvider unsupported",!0);case"supertypes":case"subtypes":return n.hasCapability("typeHierarchyProvider")?pu(e,t,n):Qe(e.type,t,"typeHierarchyProvider unsupported",!0)}}import mu from"node:path";import{fileURLToPath as jT}from"node:url";import{unavailableHintFor as zT}from"@octocodeai/octocode-engine/lsp/manager";import{detectLanguageId as WT}from"@octocodeai/octocode-engine/lsp/config";var du;function fu(e){return du||(du=new Set(O.getSupportedJsTsExtensions().map(t=>`.${t}`))),du.has(mu.extname(e).toLowerCase())}function Xe(e,t,n){let r=WT(e),o=zT(r,void 0),i=n?.message?` LSP startup detail (${n.kind??"startupFailed"}): ${n.message}.`:"";throw new xe(H.LSP_SERVER_UNAVAILABLE,`No ${r} language server is available for ${e}, so "${t}" cannot be answered semantically.${i} ${o} Meanwhile, use localSearchCode (text or structural search) to find the symbol's occurrences and localGetFileContent to read the surrounding code.`)}var VT=["py","rs","go","java","kt","cs","c","cc","cpp","h","hpp","rb","php","swift","scala","lua","dart","ex","exs","erl","hrl","clj","cljs"];function gg(e,t){let n=e.startsWith("file://")?jT(e):e;return mu.isAbsolute(n)?n:mu.resolve(t,n)}function hu(){return[...O.getSupportedJsTsExtensions(),...VT]}function yg(){return hu().map(e=>`**/*.${e}`)}var KT=[".git","node_modules","dist","out","coverage","target"];async function Rg(e,t){let n=e.symbolName?.trim();if(n)try{return(await O.searchRipgrep({path:t,pattern:n,fixedString:!0,caseSensitive:!0,filesOnly:!0,include:yg(),excludeDir:[...KT],maxSnippetChars:1})).files[0]?.path}catch{return}}async function gu(e,t){if(e.uri)return gg(e.uri,t);let n=await Rg(e,t);if(n)return n;try{let o=O.queryFileSystem({path:t,recursive:!0,includeRoot:!1,showHidden:!1,entryType:"f",extensions:hu(),maxDepth:5,limit:1}).entries[0];if(o)return o.path}catch{}return t}function yu(e){return e instanceof Error?e.message:String(e)}function Ru(e,t){if(!fu(e))return null;try{let n=O.extractJsSymbols(t,e);if(!n)return null;let r=JSON.parse(n);return Array.isArray(r)?r:null}catch{return null}}function YT(e){if(!e||typeof e!="object")return!1;let t=e,n=r=>!!r&&typeof r=="object"&&typeof r.line=="number"&&typeof r.character=="number";return n(t.start)&&n(t.end)}function Sg(e,t){if(!fu(e))return null;try{let n=O.extractGraphFacts(t,e);if(!n)return null;let r=JSON.parse(n),i=(Array.isArray(r.declarations)?r.declarations:[]).filter(s=>typeof s.name=="string"&&ts(s.name)&&typeof s.kind=="string"&&YT(s.range)).map(s=>({name:s.name,kind:s.kind,range:s.range}));return i.length>0?i:null}catch{return null}}import{acquirePooledClient as XT,isLanguageServerAvailable as qT}from"@octocodeai/octocode-engine/lsp/manager";import{resolveWorkspaceRootForFile as JT}from"@octocodeai/octocode-engine/lsp/workspaceRoot";async function Cu(e){let t=await eu(e,ge);if(t.ok===!1)return t.error;let n=e.workspaceRoot??await JT(t.value.absolutePath),r=await qT(t.value.absolutePath,n),o=r?await XT(n,t.value.absolutePath):null,i=!!o?.hasCapability("documentSymbolProvider"),s=[],a,c=Ru(t.value.uri,t.value.content),u=c?.length?null:Sg(t.value.uri,t.value.content);if(c?.length)s=c,a="native";else if(u?.length)s=u,a="native-graph-facts";else if(i&&o){let h=await o.documentSymbols(t.value.absolutePath,t.value.content);s=Array.isArray(h)?h:[],a="lsp"}else{let h=$p(t.value.content,t.value.uri);h&&(s=h,a="markdown")}let l=a!==void 0;!l&&!r&&Xe(t.value.uri,"documentSymbols");let p=bg(s),m=xg(s),{pageItems:d,pagination:f}=$e(p,e.page??1,e.itemsPerPage??Bt),g=Pg(p,h=>h.kind),R=l?void 0:{category:"unsupportedOperation",reason:"documentSymbolProvider unsupported"};return{type:"documentSymbols",uri:t.value.uri,lsp:{serverAvailable:r,...a==="lsp"?{provider:"documentSymbolProvider"}:{},...a?{source:a}:{}},summary:{totalSymbols:p.length,returnedSymbols:d.length,topLevelSymbols:m,kinds:g},payload:{kind:"documentSymbols",symbols:d,...R?{empty:R}:{}},pagination:f}}function bg(e){let t=[];for(let n of e)xu(n,t);return t.sort((n,r)=>n.line-r.line||n.character-r.character)}function xu(e,t,n){if(!e||typeof e!="object")return;let r=e,o=Cg(r);if(typeof r.name=="string"&&o&&t.push({name:r.name,kind:Kn(r.kind),line:o.start.line+1,character:o.start.character,endLine:o.end.line+1,childCount:Array.isArray(r.children)?r.children.length:0,...n?{containerName:n}:{}}),Array.isArray(r.children)&&ZT.has(Kn(r.kind))){let i=typeof r.name=="string"?r.name:n;for(let s of r.children)xu(s,t,i)}}var ZT=new Set(["file","module","namespace","package","class","enum","interface","markdownHeading","struct"]);function Cg(e){if(Su(e.range))return e.range;let t=e.location;return t&&Su(t.range)?t.range:void 0}function Su(e){if(!e||typeof e!="object")return!1;let t=e;return bu(t.start)&&bu(t.end)}function bu(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.line=="number"&&typeof t.character=="number"}function xg(e){return e.filter(t=>t&&typeof t=="object"&&"name"in t).length}function Pg(e,t){let n={};for(let r of e){let o=t(r);n[o]=(n[o]??0)+1}return n}import wg from"node:path";import{readFile as eE}from"node:fs/promises";import{acquirePooledClientDetailed as Tg,isLanguageServerAvailable as Eg}from"@octocodeai/octocode-engine/lsp/manager";import{resolveImportAliasDefinitions as tE}from"@octocodeai/octocode-engine/lsp/resolver";import{resolveWorkspaceRootForFile as Lg}from"@octocodeai/octocode-engine/lsp/workspaceRoot";async function Pu(e){let t=e.symbolName??"",n=wg.resolve(e.workspaceRoot??(e.uri?await Lg(e.uri):process.cwd())),r=await gu(e,n);await Eg(r,n)||Xe(r,"workspaceSymbol");let i=await Tg(n,r);i.ok===!1&&Xe(r,"workspaceSymbol",i);let s=i.client;if(!s.hasCapability("workspaceSymbolProvider"))return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"workspaceSymbolProvider unsupported"}};let a;try{wg.extname(r)&&await s.openDocument(r),a=await s.workspaceSymbol(t)}catch(p){return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:`workspaceSymbolProvider failed: ${yu(p)}`}}}let c=await rE(s,Ag(a)),{pageItems:u,pagination:l}=$e(c,e.page??1,e.itemsPerPage??Bt);return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},summary:{query:t,totalSymbols:c.length},payload:c.length>0?{kind:"workspaceSymbol",query:t,symbols:u,totalSymbols:c.length}:{kind:"empty",category:"noWorkspaceSymbols",reason:`workspaceSymbolProvider returned no symbols for query "${t}"`},pagination:l}}var nE=10;async function rE(e,t){return t.length===0||t.length>nE?t:Promise.all(t.map(async n=>{try{if(!n.uri)return n;let r=n.uri.startsWith("file://")?decodeURIComponent(n.uri.slice(7)):n.uri,o=await eE(r,"utf8");await e.openDocument(r);let i=await tE({anchorUri:r,symbolName:n.name,locations:await e.gotoDefinition(r,{line:n.line-1,character:n.character},o)});if(!Array.isArray(i)||i.length!==1)return n;let s=i[0],a=(s.range?.start?.line??-1)+1;return!s.uri||a<1||s.uri===n.uri&&a===n.line?n:{...n,uri:s.uri,line:a,endLine:(s.range?.end?.line??s.range?.start?.line??a-1)+1,character:s.range?.start?.character??n.character}}catch{return n}}))}function Ag(e){return e.flatMap(t=>{if(!t||typeof t!="object")return[];let n=t,r=typeof n.name=="string"?n.name:void 0;if(!r)return[];let o=n.kind,i=n.location,s=i?.range,a=typeof i?.uri=="string"?i.uri:"",c=(s?.start?.line??0)+1,u=(s?.end?.line??s?.start?.line??0)+1,l=typeof n.containerName=="string"?n.containerName:void 0;return[{name:r,kind:Kn(o),line:c,character:s?.start?.character??0,endLine:u,childCount:0,...l?{containerName:l}:{},uri:a}]})}async function wu(e){let t=e.uri??"",n=e.workspaceRoot??(t?await Lg(t):process.cwd());await Eg(t,n)||Xe(t,"diagnostic");let o=await Tg(n,t);o.ok===!1&&Xe(t,"diagnostic",o);let i=o.client;if(!i.hasCapability("diagnosticProvider"))return{type:"diagnostic",uri:t,lsp:{serverAvailable:!0,provider:"diagnosticProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"diagnosticProvider (pull) unsupported \u2014 server uses push (publishDiagnostics) instead"},warnings:['This server pushes diagnostics via textDocument/publishDiagnostics. Pull diagnostics (type: "diagnostic") require LSP 3.17 pull support. Check server docs to enable it.']};let s=await i.getDiagnostics(t),a=kg(s),c=a.filter(m=>m.severity===1).length,u=a.filter(m=>m.severity===2).length,{pageItems:l,pagination:p}=$e(a,e.page??1,e.itemsPerPage??Bt);return{type:"diagnostic",uri:t,lsp:{serverAvailable:!0,provider:"diagnosticProvider"},summary:{totalDiagnostics:a.length,errorCount:c,warningCount:u},payload:a.length>0?{kind:"diagnostic",diagnostics:l,totalDiagnostics:a.length,errorCount:c,warningCount:u}:{kind:"empty",category:"noDiagnostics",reason:"No diagnostics \u2014 file has no errors or warnings"},pagination:p}}function kg(e){if(e&&typeof e=="object"){let t=e;return(Array.isArray(t.items)?t.items:[]).flatMap(r=>_g(r))}return[]}function _g(e){if(!e||typeof e!="object")return[];let t=e,n=t.range,r=typeof t.message=="string"?t.message:"";return r?[{severity:typeof t.severity=="number"?t.severity:void 0,message:r,line:(n?.start?.line??0)+1,endLine:(n?.end?.line??n?.start?.line??0)+1,character:n?.start?.character??0,...t.code!==void 0?{code:t.code}:{},...typeof t.source=="string"?{source:t.source}:{}}]:[]}async function Tu(e){return te(e.queries||[],async t=>Fe({toolName:ge,query:t,contextMessage:"lspGetSemantics execution failed",execute:async()=>{let n=await aE(t);return ng(cu(t,rg(t,n)))}}),{toolName:ge,minQueryTimeoutMs:3e4},e)}async function aE(e){if(e.type==="documentSymbols")return Cu(e);if(e.type==="workspaceSymbol")return Pu(e);if(e.type==="diagnostic")return wu(e);let t=await Wh(e,ge);if(t.ok===!1){let u=typeof t.error.error=="string"?t.error.error:"Symbol anchor resolution failed";return ru(e,u)}let n=e.workspaceRoot??await sE(t.value.absolutePath);await iE(t.value.absolutePath,n)||Xe(t.value.uri,e.type);let o=await oE(n,t.value.absolutePath);o.ok===!1&&Xe(t.value.uri,e.type,o);let i=o.client,s=mg.has(e.type)?await fg(i,t.value,n):void 0,a=i.getReadiness?.(),c=await hg(e,t.value,i,s);return zh(c,a)}import{z as ps}from"zod";import{LspGetSemanticsQuerySchema as Ig}from"@octocodeai/octocode-core/schemas";var cE=_(1,1e9).describe("1-based source line for symbol-anchored semantic operations. Get it from search/localSearchCode, structural AST captures, or documentSymbols; never guess."),uE=_(0,1e5).optional(),lE=["structured","compact"],Og={type:ps.enum(jh).default("definition").describe("Semantic operation for local code intelligence. Use after text or structural AST search when you need identity, references, call flow, type relations, hover, symbols, or diagnostics."),symbolName:ps.string().min(1).max(1024).optional().describe("Exact bare identifier at the lineHint anchor for symbol operations; workspaceSymbol uses this as the fuzzy project-wide symbol query."),lineHint:cE.optional(),orderHint:uE,depth:_(0,20).optional().describe("Traversal depth for call-hierarchy / type-hierarchy queries (0 = direct only)."),includeDeclaration:ps.boolean().optional().default(!0),page:K.describe("Result page for paginated reference/symbol lists (advance while pagination.hasMore)."),itemsPerPage:_(1,100).optional().describe("References/symbols returned per page (with page)."),contextLines:_(0,100).optional().describe("Lines of surrounding source shown around each result location."),format:ps.enum(lE).optional().default("structured")},pE=Z(Ig,Og),Yn=X(Ig,Og),dE=Yn,Xn=Y(pE,{maxQueries:5});import{existsSync as Fg}from"fs";import{delimiter as mE,dirname as fE,join as vg}from"path";function Dg(){return process.platform==="win32"?"npm.cmd":"npm"}function hE(){let e=fE(process.execPath);return vg(e,Dg())}function gE(){return process.platform==="win32"?[]:["/opt/homebrew/bin","/usr/local/bin","/usr/bin"]}function yE(){let e=(process.env.PATH??"").split(mE).map(t=>t.trim()).filter(Boolean);return[...new Set([...e,...gE()])]}function Mg(){let e=hE();if(Fg(e))return{command:process.execPath,argsPrefix:[e]};let t=Dg();for(let n of yE()){let r=vg(n,t);if(Fg(r))return{command:r,argsPrefix:[]}}return{command:t,argsPrefix:[]}}var RE=["view","search","ping","config","whoami"],SE=[...vn,...Ld];async function vz(e=1e4){let t=Mg();return Ad(t.command,[...t.argsPrefix,"--version"],e)}async function Ut(e,t,n={}){if(!RE.includes(e))return{stdout:"",stderr:"",error:new Error(`Command '${e}' is not allowed`)};let r=Fi(t);if(!r.valid)return{stdout:"",stderr:"",error:new Error(`Invalid arguments: ${r.error}`)};let{timeout:o=3e4,cwd:i,env:s}=n,a=Mg(),c=await Zt(a.command,[...a.argsPrefix,e,...t],{timeout:o,cwd:i,env:s,allowEnvVars:SE});return{stdout:c.stdout,stderr:c.stderr,exitCode:c.exitCode??void 0,error:c.error}}var qn="https://registry.npmjs.org",Lo=null;async function Ao(){if(Lo)return Lo;try{let e=await Ut("config",["get","registry","--no-workspaces"],{timeout:1e4});if(!e.error&&e.exitCode===0){let t=e.stdout.trim().replace(/\/+$/,"");if(t&&t.startsWith("http"))return Lo=t,t}}catch{}return Lo=qn,qn}function bE(){Lo=null}async function CE(){try{let e=await Ao(),t=globalThis.fetch;return t?(await t(e,{method:"HEAD",signal:AbortSignal.timeout(5e3)})).ok:!1}catch{return!1}}var Gz=5;var Jn=new Map,Lu=5,ko=3e4;function _o(e){try{return new URL(e).host||e}catch{return e}}var Eu=class extends Error{retryable=!1;host;retryAfterMs;constructor(t,n){super(`Circuit open for ${t}: too many recent failures \u2014 failing fast, retry in ~${Math.ceil(n/1e3)}s.`),this.name="CircuitOpenError",this.host=t,this.retryAfterMs=n}};function Ng(e,t=Date.now()){let n=Jn.get(_o(e));if(!(!n||n.state==="closed")&&n.state==="open"){let r=t-n.openedAt;if(r<ko)throw new Eu(_o(e),ko-r);n.state="half-open"}}function Au(e){let t=Jn.get(_o(e));t&&(t.failures=0,t.state="closed")}function Gg(e,t=Date.now()){let n=_o(e),r=Jn.get(n)??{failures:0,state:"closed",openedAt:0};r.state==="half-open"?(r.state="open",r.openedAt=t):(r.failures+=1,r.failures>=Lu&&(r.state="open",r.openedAt=t)),Jn.set(n,r)}function Hz(){Jn.clear(),Lu=5,ko=3e4}function Bz(e){typeof e.failureThreshold=="number"&&(Lu=e.failureThreshold),typeof e.cooldownMs=="number"&&(ko=e.cooldownMs)}function Hg(e,t=Date.now()){let n=Jn.get(_o(e));return!n||n.state==="closed"?!1:n.state==="open"?t-n.openedAt<ko:!1}import{z as E}from"zod";var ds=E.looseObject({name:E.string(),version:E.string(),repository:E.union([E.string(),E.object({url:E.string().optional(),type:E.string().optional(),directory:E.string().optional()})]).optional(),main:E.string().optional(),module:E.string().optional(),type:E.string().optional(),exports:E.unknown().optional(),types:E.string().optional(),typings:E.string().optional(),description:E.string().optional(),keywords:E.array(E.string()).optional(),license:E.union([E.string(),E.object({type:E.string().optional()})]).optional(),homepage:E.string().optional(),author:E.union([E.string(),E.object({name:E.string().optional(),email:E.string().optional(),url:E.string().optional()})]).optional(),maintainers:E.array(E.object({name:E.string().optional(),email:E.string().optional()})).optional(),engines:E.record(E.string(),E.string()).optional(),dependencies:E.record(E.string(),E.string()).optional(),devDependencies:E.record(E.string(),E.string()).optional(),peerDependencies:E.record(E.string(),E.string()).optional(),time:E.record(E.string(),E.string().optional()).optional()}),xE=E.looseObject({package:E.looseObject({name:E.string().nullish(),version:E.string().nullish(),description:E.string().nullish(),links:E.looseObject({npm:E.string().nullish(),homepage:E.string().nullish(),repository:E.string().nullish()}).nullish()}),score:E.looseObject({final:E.number().nullish(),detail:E.looseObject({quality:E.number().nullish(),popularity:E.number().nullish(),maintenance:E.number().nullish()}).nullish()}).nullish()}),Bg=E.looseObject({objects:E.array(xE),total:E.union([E.number(),E.string()]).optional()}),Ug=E.union([E.string(),E.boolean(),E.number(),E.null(),E.record(E.string(),E.unknown())]);var PE=6e4;function Qg(e){let t=e.get("Retry-After");if(!t)return;let n=parseInt(t,10);return isNaN(n)?void 0:n}function wE(e,t,n,r){e&&_t({limit_type:"primary",retry_after_seconds:Qg(r),api_method:t,api_url:n,provider:e})}function TE(e,t,n,r,o){e.body?.cancel?.().catch(()=>{});let i=new Error(nr.FETCH_HTTP_ERROR.message(e.status,e.statusText));return i.status=e.status,i.headers=e.headers,r&&e.status!==404&&tp(r),e.status===429&&wE(o,t,n,e.headers),i.retryable=e.status===429||e.status===408||e.status>=500&&e.status<600,i}function EE(e,t,n,r){let o=Math.min(t*Math.pow(2,e-1),n);if(o+=Math.floor(Math.random()*t),r&&r.headers&&typeof r.headers.get=="function"){let i=Qg(r.headers);i!==void 0&&(o=Math.min(i*1e3,n))}return o}async function st(e,t={}){let{maxRetries:n=3,initialDelayMs:r=1e3,maxDelayMs:o=PE,headers:i={},method:s="GET",includeVersion:a=!1,signal:c,rateLimitProvider:u,packageRegistry:l}=t,p=e;if(a){let R=e.includes("?")?"&":"?";p=`${e}${R}version=${encodeURIComponent(Yt)}`}let m={"User-Agent":`Octocode-MCP/${Yt}`,...i},d=globalThis.fetch;if(!d)throw new Error(nr.FETCH_NOT_AVAILABLE.message);Ng(p);let f,g=n+1;for(let R=1;R<=g;R++){if(c?.aborted)throw new Error("Request aborted");try{let h=await d(p,{method:s,headers:m,signal:c});if(!h.ok)throw TE(h,s,p,l,u);if(h.status===204)return Au(p),null;let y=await h.json();return Au(p),y}catch(h){let y=h;if(c?.aborted||h instanceof Error&&h.name==="AbortError")throw new Error("Request aborted");if(y&&y.retryable===!1)throw h;if(f=h instanceof Error?h:new Error(String(h)),R===g)break;let S=EE(R,r,o,y);await new Promise(C=>setTimeout(C,S))}}throw Gg(p),new Error(nr.FETCH_FAILED_AFTER_RETRIES.message(g,f?.message||""))}function Qt(e){return e.replace(/^git\+/,"").replace(/\.git$/,"")}var LE="https://api.npmjs.org/downloads/point/last-week";function _e(e){return e===void 0?0:N(e)}async function ms(e){try{let t=`${LE}/${encodeURIComponent(e)}`,n=await st(t,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3),packageRegistry:"npm"});return{downloads:typeof n?.downloads=="number"?n.downloads:void 0,rawResponseChars:_e(n)}}catch{return{rawResponseChars:0}}}function $g(e){if(typeof e=="string")return[e];if(!e||typeof e!="object")return;let n=Object.entries(e).flatMap(([r,o])=>typeof o=="string"?[`${r}:${o}`]:o&&typeof o=="object"?Object.entries(o).filter(([,i])=>typeof i=="string").map(([i,s])=>`${r}:${i}:${s}`):[]).slice(0,12);return n.length>0?n:void 0}function jg(e,t){if(typeof e=="string"){let n=t?.replace(/^@[^/]+\//,"")??"";return[n?`${n} \u2192 ${e}`:e]}if(e&&typeof e=="object"){let n=Object.entries(e).filter(([,r])=>typeof r=="string").map(([r,o])=>`${r} \u2192 ${o}`).slice(0,8);return n.length>0?n:void 0}}function AE(e){return e.type==="module"||e.module?"module":e.main?"commonjs":e.types||e.typings?"types-only":"unknown"}function fs(e,t=!1,n="cli"){let r=null,o;e.repository&&(typeof e.repository=="string"?r=Qt(e.repository):(e.repository.url&&(r=Qt(e.repository.url)),e.repository.directory&&(o=e.repository.directory.replace(/^\.\//,""))));let i;if(e.time){let c=(e.version?e.time[e.version]:void 0)||e.time.modified;c&&(i=c)}let s={name:e.name,npmUrl:`https://www.npmjs.com/package/${encodeURIComponent(e.name)}`,repoUrl:r,version:e.version||"latest",mainEntry:e.main||null,moduleEntry:e.module||null,typeDefinitions:e.types||e.typings||null,packageType:AE(e),...o?{repositoryDirectory:o}:{},...$g(e.exports)?{exports:$g(e.exports)}:{},...jg(e.bin,e.name)?{bin:jg(e.bin,e.name)}:{},lastPublished:i,source:n};return e.description&&(s.description=e.description),e.license&&(s.license=typeof e.license=="string"?e.license:e.license.type),t&&(e.author&&(typeof e.author=="string"?s.author=e.author:e.author.name&&(s.author=e.author.name)),e.keywords&&e.keywords.length>0&&(s.keywords=e.keywords),e.homepage&&(s.homepage=e.homepage),e.engines&&Object.keys(e.engines).length>0&&(s.engines=e.engines),e.dependencies&&Object.keys(e.dependencies).length>0&&(s.dependencies=e.dependencies),e.peerDependencies&&Object.keys(e.peerDependencies).length>0&&(s.peerDependencies=e.peerDependencies)),s}function kE(e){return typeof e.links?.repository=="string"?Qt(e.links.repository):typeof e.repository=="string"?Qt(e.repository):typeof e.repository?.url=="string"?Qt(e.repository.url):null}function zg(e){if(!e.name)return null;let t=(e.links?.npm??"")||`https://www.npmjs.com/package/${encodeURIComponent(e.name)}`,n=e.links?.homepage??void 0;return{name:e.name,npmUrl:t,repoUrl:kE(e),version:e.version??"unknown",source:"cli",...e.description?{description:e.description}:{},...n?{homepage:n}:{},...e.keywords&&e.keywords.length>0?{keywords:e.keywords}:{}}}function ku(e){return e.startsWith("@")?"@"+e.slice(1).replace("/","%2F"):e}function Wg(e,t){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"){let n=Number.parseInt(e,10);if(Number.isFinite(n))return n}return t}var _E=3e3;function _u(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("fetch failed")||t.includes("failed to fetch")||t.includes("network")||t.includes("econnrefused")||t.includes("enotfound")||t.includes("etimedout")||t.includes("socket hang up")||t.includes("connect timeout")||t.includes("command timeout")||t.includes("circuit open")||t.includes("circuit breaker")}async function Iu(e){try{let t=await Ao(),n=ku(e),r=`${t}/${n}`,o=AbortSignal.timeout(8e3);try{let s=await st(r,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/vnd.npm.install-v1+json"},signal:o,packageRegistry:"npm"}),a=_e(s);if(s?.modified)return{lastPublished:s.modified,rawResponseChars:a}}catch{}let i=await st(r,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:o,packageRegistry:"npm"});return{lastPublished:i?.time?.modified||void 0,rawResponseChars:_e(i)}}catch{return{rawResponseChars:0}}}async function gs(e,t,n){let[r,o]=await Promise.all([ms(e),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):Iu(e)]);return r.downloads!==void 0&&(t.weeklyDownloads=r.downloads),o.lastPublished&&!t.lastPublished&&(t.lastPublished=o.lastPublished),{pkg:t,rawResponseChars:n+r.rawResponseChars+o.rawResponseChars}}function hs(e){let t=e.toLowerCase();return t.includes("404")||t.includes("not found")||t.includes("e404")}async function IE(e,t){try{let n=await Ut("view",[e,"--json"],{timeout:_E});if(!n)return{pkg:null,rawResponseChars:0};if(n.error||n.exitCode!==0){let c=n.error?.message||n.stderr||`npm exited ${n.exitCode}`;return{pkg:null,...hs(c)?{}:{errorDetail:c},rawResponseChars:_e(n.stdout)}}let r=n.stdout.trim();if(!r||r==="undefined")return{pkg:null,rawResponseChars:0};let o;try{o=JSON.parse(r)}catch{return{pkg:null,errorDetail:"Invalid npm view JSON output",rawResponseChars:r.length}}let i=_e(o),s=ds.safeParse(o);return s.success?{pkg:fs(s.data,t,"cli"),rawResponseChars:i}:{pkg:null,errorDetail:"Invalid npm view response format",rawResponseChars:i}}catch(n){let r=n instanceof Error?n.message:String(n);return{pkg:null,...hs(r)?{}:{errorDetail:r},rawResponseChars:0}}}async function OE(e,t){try{let n=await Ao(),r=ku(e),o=`${n}/${r}/latest`,i;try{i=await st(o,{maxRetries:1,initialDelayMs:500,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3),packageRegistry:"npm"})}catch(u){let l=u instanceof Error?u.message:String(u);return l.includes("404")||l.toLowerCase().includes("not found")?{pkg:null,rawResponseChars:0}:{pkg:null,errorDetail:l,rawResponseChars:0}}let s=_e(i);if(!i||typeof i!="object")return{pkg:null,rawResponseChars:s};let a=ds.safeParse(i);return a.success?{pkg:fs(a.data,t,"registry"),rawResponseChars:s}:{pkg:null,errorDetail:"Invalid npm registry response format",rawResponseChars:s}}catch(n){let r=n instanceof Error?n.message:String(n);return{pkg:null,...hs(r)?{}:{errorDetail:r},rawResponseChars:0}}}function FE(e){return[`https://cdn.jsdelivr.net/npm/${e}/package.json`,`https://unpkg.com/${e}/package.json`]}async function Ou(e,t){let n=0,r;for(let o of FE(e)){let i;try{i=await st(o,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3)})}catch(c){let u=c instanceof Error?c.message:String(c);hs(u)||(r=u);continue}if(n+=_e(i),!i||typeof i!="object")continue;let s=ds.safeParse(i);if(!s.success){r="Invalid npm CDN package.json response format";continue}return{pkg:fs(s.data,t,"cdn"),rawResponseChars:n}}return{pkg:null,...r?{errorDetail:r}:{},rawResponseChars:n}}async function ys(e,t=!1){let[n,r]=await Promise.allSettled([IE(e,t),OE(e,t)]),o=n.status==="fulfilled"?n.value:{pkg:null,rawResponseChars:0},i=r.status==="fulfilled"?r.value:{pkg:null,rawResponseChars:0},s=o.pkg?o:i.pkg?i:null;return s?.pkg?gs(e,s.pkg,s.rawResponseChars):{pkg:null,errorDetail:o.errorDetail||i.errorDetail,rawResponseChars:o.rawResponseChars+i.rawResponseChars}}async function Vg(e,t,n=!1){let{pkg:r,errorDetail:o,rawResponseChars:i}=await ys(e,t);if(!r){if(o){let s=_u(o);if(s&&n){let a=await Ou(e,t);if(a.pkg){let c=await gs(e,a.pkg,a.rawResponseChars);return{packages:c.pkg?[c.pkg]:[],totalFound:c.pkg?1:0,rawResponseChars:i+c.rawResponseChars}}}return{error:`NPM view failed for '${e}': ${o}`,rawResponseChars:i,hints:s?["npm registry is unreachable.","Use `ghSearchRepos` to find the source repo directly by package name or domain terms."]:["Ensure npm is installed and available in PATH","Check package name for typos",`Try: npm view ${e} --json`]}}return{packages:[],totalFound:0,rawResponseChars:i}}return{packages:[r],totalFound:1,rawResponseChars:i}}async function vE(e,t,n,r=0){let o=Math.max(t+r,t),i=await Ut("search",[e,"--json","--searchlimit",String(o)],{timeout:8e3});if(!i)return{error:"NPM CLI search unavailable",rawResponseChars:0};if(i.error||i.exitCode!==0)return{error:`NPM CLI search failed: ${i.error?.message||i.stderr||`npm exited ${i.exitCode}`}`,rawResponseChars:_e(i.stdout)};let s=i.stdout.trim();if(!s)return{packages:[],totalFound:0,rawResponseChars:0};let a;try{a=JSON.parse(s)}catch{return{error:"Invalid npm search JSON output",rawResponseChars:s.length}}let c=_e(a);if(!Array.isArray(a))return{error:"Invalid npm search response format",rawResponseChars:c};let l=[...a].sort((f,g)=>{let R=f?.score?.final??0;return(g?.score?.final??0)-R}).slice(r,r+t),p=await Promise.all(l.map(async f=>{if(!f||typeof f!="object")return null;let g=f;if(!g.name)return null;if(n){let R=await ys(g.name,!0);if(R.pkg)return R}return{pkg:zg(g),rawResponseChars:0}})),m=p.map(f=>f?.pkg).filter(f=>!!f),d=p.reduce((f,g)=>f+(g?.rawResponseChars??0),0);return{packages:m,totalFound:a.length,rawResponseChars:c+d}}async function DE(e,t,n,r=0){try{let o=r>0?`&from=${r}`:"",i=`${qn}/-/v1/search?text=${encodeURIComponent(e)}&size=${t}${o}`,s;try{s=await st(i,{maxRetries:1,initialDelayMs:500,signal:AbortSignal.timeout(8e3),packageRegistry:"npm"})}catch(f){return{error:`Could not reach the npm search API (${f instanceof Error?f.message:String(f)}). The package may not exist, or the registry search endpoint is unavailable.`,hints:['Verify the exact package name / scope (e.g. "@scope/name")',"For an exact known name, query it directly instead of a keyword search","Ensure the npm registry is accessible from this environment"]}}let a=_e(s);if(!s||typeof s!="object")return{packages:[],totalFound:0,rawResponseChars:a};let c=Bg.safeParse(s);if(!c.success)return{error:`Invalid npm registry search response format: ${c.error.issues.map(g=>g.message).join("; ")}`,rawResponseChars:a,hints:["Try a different search term","Try itemsPerPage=1 for an exact package lookup"]};let l=[...c.data.objects].sort((f,g)=>{let R=f.score?.final??0;return(g.score?.final??0)-R}).map(f=>f.package).filter(f=>typeof f.name=="string"&&f.name.length>0).slice(0,t),p=await Promise.all(l.map(async f=>{if(n){let g=await ys(f.name,!0);if(g.pkg)return g}return{pkg:{name:f.name,npmUrl:(f.links?.npm??"")||`https://www.npmjs.com/package/${encodeURIComponent(f.name)}`,repoUrl:f.links?.repository&&typeof f.links.repository=="string"?Qt(f.links.repository):null,version:f.version??"unknown",source:"registry",...f.description?{description:f.description}:{},...f.links?.homepage?{homepage:f.links.homepage}:{}},rawResponseChars:0}})),m=p.map(f=>f.pkg).filter(f=>!!f),d=p.reduce((f,g)=>f+g.rawResponseChars,0);return{packages:m,totalFound:Wg(c.data.total,m.length),rawResponseChars:a+d}}catch(o){return{error:`NPM registry search failed: ${o instanceof Error?o.message:String(o)}`,hints:["Check package name for typos","Try searching with a simpler term","Ensure npm registry is accessible"]}}}async function Fu(e,t){let n="https://api.npms.io/v2/search",r="octocode-mcp/1.0 (+https://github.com/bgauryy/octocode-mcp)";try{let o=`${n}?q=${encodeURIComponent(e)}&size=${t}`,i;try{i=await st(o,{maxRetries:1,initialDelayMs:500,headers:{Accept:"application/json","User-Agent":r},signal:AbortSignal.timeout(8e3)})}catch(c){return{error:`Web search failed: ${c instanceof Error?c.message:String(c)}`}}if(!i||typeof i!="object")return{packages:[],totalFound:0,rawResponseChars:_e(i)};let s=i;if(!Array.isArray(s.results))return{packages:[],totalFound:0,rawResponseChars:_e(i)};let a=s.results.slice(0,t).map(c=>c.package).filter(c=>typeof c?.name=="string"&&c.name.length>0).map(c=>({name:c.name,npmUrl:c.links?.npm??`https://www.npmjs.com/package/${encodeURIComponent(c.name)}`,repoUrl:c.links?.repository&&typeof c.links.repository=="string"?Qt(c.links.repository):null,version:c.version??"unknown",source:"web",...c.description?{description:c.description}:{},...c.links?.homepage?{homepage:c.links.homepage}:{}}));return{packages:a,totalFound:typeof s.total=="number"?s.total:a.length,rawResponseChars:_e(i)}}catch(o){return{error:`Web search failed: ${o instanceof Error?o.message:String(o)}`}}}async function vu(e,t,n,r=0){try{let o=await vE(e,t,n,r);if(!("error"in o))return o}catch{}return DE(e,t,n,r)}async function Du(e){if(e.packages.length===0)return e;let t=e.packages[0];if(t.weeklyDownloads!==void 0&&t.lastPublished)return e;let[n,r]=await Promise.all([t.weeklyDownloads!==void 0?Promise.resolve({downloads:void 0,rawResponseChars:0}):ms(t.name),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):Iu(t.name)]),o={...t};return n.downloads!==void 0&&(o.weeklyDownloads=n.downloads),r.lastPublished&&(o.lastPublished=r.lastPublished),{...e,packages:[o,...e.packages.slice(1)]}}function un(e){return e.startsWith("@")&&e.includes("/")?!0:e.includes(" ")?!1:/^[a-z0-9][a-z0-9._-]*$/i.test(e)}function Kg(e){return e.replace(/^@/,"").replace(/[/_-]/g," ").replace(/\s+/g," ").trim()}async function Mu(e,t,n,r=0){let o=ce("npm-search",{name:e,limit:t,metadata:n,from:r});return he(o,async()=>{if(Hg(qn)){if(r===0&&t===1&&un(e)){let l=await Ou(e,n);if(l.pkg){let p=await gs(e,l.pkg,l.rawResponseChars);return{packages:p.pkg?[p.pkg]:[],totalFound:p.pkg?1:0,rawResponseChars:p.rawResponseChars}}}let u=await Fu(e,t);return!("error"in u)&&u.packages.length>0?u:{error:"npm registry circuit open and web search returned no results.",hints:["Use `ghSearchRepos` to find the source repo directly."]}}if(r===0&&un(e)){let u=await Vg(e,n,t===1);if("error"in u){if(!_u(u.error))return u}else if(u.packages.length>0||t===1)return u}let s=await vu(e,t,n,r);if(!("error"in s)&&s.packages.length>0)return Du(s);let a=Kg(e);if(a!==e){let u=await vu(a,t,n,r);if(!("error"in u)&&u.packages.length>0)return Du(u)}let c=await Fu(e,t);return!("error"in c)&&c.packages.length>0?c:"error"in s?{...s,hints:["npm registry and web search (npms.io) are both unreachable.","Use `ghSearchRepos` to find the source repo directly by package name or domain terms."]}:s},{shouldCache:i=>!("error"in i||"totalFound"in i&&i.totalFound===0)})}async function Yg(e){try{let t=await Ut("view",[e,"deprecated","--json"]);if(t.error||t.exitCode!==0)return null;let n=t.stdout.trim();if(!n||n==="undefined"||n==="")return{deprecated:!1};try{let r=JSON.parse(n),o=Ug.safeParse(r),i=o.success?o.data:n;return{deprecated:!0,message:typeof i=="string"?i:"This package is deprecated"}}catch{return{deprecated:!0,message:n}}}catch{return null}}async function Xg(e){let t=un(e.name),n=e.itemsPerPage??(t?1:10),r=Math.max(0,((e.page??1)-1)*n);return Mu(e.name,n,!0,r)}function Nu(e){if(e===void 0)return;let n=(Array.isArray(e)?e.join(" "):e).trim();return n.length>0?n:void 0}var ME=/\b(?:404|e404)\b|not\s+found|no\s+such\s+package|does\s+not\s+exist/i;function Gu(e){return ME.test(e)}function NE(e){return"error"in e}function Rs(e){return"npmUrl"in e}function GE(e){return Rs(e)&&e.path?e.path:e.name}function HE(e){return Rs(e)?e.repoUrl:e.repository}function BE(e){if(!e)return;let t=e.replace(/^\.\//,"").replace(/^\//,"");return t.length>0?t:void 0}var UE={github:"github.com",gitlab:"gitlab.com",bitbucket:"bitbucket.org"};function QE(e){if(!e)return;let t=e.trim();if(!t)return;t=t.replace(/^git\+/,"");let n=s=>s.replace(/\.git$/,""),r=t.match(/^(github|gitlab|bitbucket):(.+)$/i);if(r&&r[1]&&r[2]){let s=UE[r[1].toLowerCase()];return n(`https://${s}/${r[2]}`)}let o=t.match(/^[^@/]+@([^:/]+):(.+)$/);if(o&&o[1]&&o[2])return n(`https://${o[1]}/${o[2]}`);let i=t.match(/^(?:ssh|git|https?):\/\/(.+)$/);if(i&&i[1]){let s=i[1].replace(/^[^@/]+@/,"");return n(`https://${s}`)}return n(t)}function Hu(e){if(!e)return;let t=e.match(/^https:\/\/github\.com\/([^/]+)\/([^/#?]+)/i);if(!(!t||!t[1]||!t[2]))return{owner:t[1],repo:t[2]}}function qg(e,t){let n=Hu(e);if(!n)return;let{owner:r,repo:o}=n;return{viewRepoStructure:{tool:"ghViewRepoStructure",query:{owner:r,repo:o,...t?{path:t}:{}}},latestRelease:{tool:"ghListReleases",query:{owner:r,repo:o},why:"npm latest can diverge from the repo release line \u2014 verify against the repo releases/tags (requires ENABLE_RELEASES)"},searchCode:{tool:"ghSearchCode",query:{owner:r,repo:o}},cloneRepo:{tool:"ghCloneRepo",query:{owner:r,repo:o,...t?{sparsePath:t}:{}}}}}function $E(e){let t=GE(e),n=QE(HE(e)),r={name:t};Rs(e)&&(e.version&&e.version!=="unknown"&&(r.version=e.version),e.description&&(r.description=e.description),e.license&&(r.license=e.license),typeof e.weeklyDownloads=="number"&&(r.downloads=e.weeklyDownloads)),n&&(r.repository=n);let o=BE(Rs(e)?e.repositoryDirectory:void 0);o&&(r.repositoryDirectory=o);let i=qg(n,o);return i&&(r.next=i),r.version&&Hu(n)&&(r.warnings=[`npm version ${r.version} is the registry's latest publish and may not correspond to a release/tag in the linked repository \u2014 verify against the repo's releases or tags before citing it as the repo's latest release.`]),r}function jE(e){if(e.length<=1)return{packages:e};let t={},n=new Map,r=1,o=e.map(i=>{if(!i.repository)return i;let s=Hu(i.repository);if(!s)return i;let a=`${i.repository}\0${i.repositoryDirectory??""}`,c=n.get(a);c||(c=`r${r++}`,n.set(a,c),t[c]={repository:i.repository,owner:s.owner,repo:s.repo,...i.repositoryDirectory?{repositoryDirectory:i.repositoryDirectory}:{},next:qg(i.repository,i.repositoryDirectory)});let{repository:u,repositoryDirectory:l,next:p,...m}=i;return{...m,repositoryId:c}});return Object.keys(t).length?{packages:o,repositories:t}:{packages:e}}function zE(e,t,n,r){let o=Math.max(1,e.page??1),i=r?10:1,s=r&&n>=i,a=Math.max(1,Math.ceil(t/i)),c=s||o<a,u=s&&o>=a?o+1:a;return{currentPage:o,totalPages:u,perPage:i,totalFound:t,returned:n,hasMore:c,...c?{nextPage:o+1}:{}}}async function Jg(e){return te(e.queries,async t=>{try{let n=t.packageName??Nu(t.keywords);if(!n)return F("Provide a packageName or keywords for package search",t);let r=await Xg({name:n,page:t.page,mainResearchGoal:t.mainResearchGoal,researchGoal:t.researchGoal,reasoning:t.reasoning});if(NE(r)){if(Gu(r.error)){let p=un(n);return se(t,{packages:[],hints:[p?`No package published under the exact name "${n}". Check the spelling, and try the scoped (@scope/name) vs unscoped form.`:`No packages matched "${n}". Try different or fewer keywords, or search by an exact package name.`]},!1,x.PACKAGE_SEARCH,{rawResponse:r})}return F(r.error,t,{rawResponse:r})}let o=r.packages,i=o.map($E),s=i.length>0,a=o.length>1||r.totalFound>1,c=zE(t,r.totalFound,i.length,a),l={...jE(i),pagination:c};return se(t,l,s,x.PACKAGE_SEARCH,{rawResponse:r.rawResponseChars??r})}catch(n){return F(n,t,{toolName:x.PACKAGE_SEARCH})}},{toolName:x.PACKAGE_SEARCH,keysPriority:["packages","pagination","error"]},e)}import{z as Ss}from"zod";import{NpmPackageQuerySchema as Zg}from"@octocodeai/octocode-core/schemas";var ey={page:K,keywords:Ss.union([Ss.string(),Ss.array(Ss.string())]).optional().describe("Registry keyword query (string; an array of terms is accepted and joined with spaces).")},Io=X(Zg,ey),Oo=Y(Z(Zg,ey,{strict:!0}),{maxQueries:5});var bs={hasTool(e){return Ca(e)},getDescription(e){return ba[e]??""},getToolName(e){return x[e]??String(e)}};var Bu=(e,t=bs)=>t.getDescription(e);function WE(e,t){return t.getToolName(e)}function Pe(e,t,n){let r=WE(t,e);return{...n,name:r,description:Bu(r,e)}}var at={security:"remote",requiresServerRuntime:!0,requiresProviders:!0};function VE(e=bs){let t=Pe(e,"GITHUB_SEARCH_CODE",{isDefault:!0,isLocal:!1,type:"search",direct:{schema:Vr,inputSchema:Kr,executionFn:Pm,...at}}),n=Pe(e,"GITHUB_FETCH_CONTENT",{isDefault:!0,isLocal:!1,type:"content",direct:{schema:en,inputSchema:zr,executionFn:gm,...at}}),r=Pe(e,"GITHUB_VIEW_REPO_STRUCTURE",{isDefault:!0,isLocal:!1,type:"content",direct:{schema:ao,inputSchema:co,executionFn:Pf,...at}}),o=Pe(e,"GITHUB_SEARCH_REPOSITORIES",{isDefault:!0,isLocal:!1,type:"search",direct:{schema:io,inputSchema:so,executionFn:Sf,...at}}),i=Pe(e,"GITHUB_PULL_REQUESTS",{isDefault:!0,isLocal:!1,type:"history",direct:{schema:Zr,inputSchema:eo,executionFn:tf,...at}}),s=Pe(e,"GITHUB_ISSUES",{isDefault:!0,isLocal:!1,type:"history",direct:{schema:to,inputSchema:no,executionFn:nf,...at}}),a=Pe(e,"GITHUB_COMMITS",{isDefault:!0,isLocal:!1,type:"history",direct:{schema:ro,inputSchema:oo,executionFn:rf,...at}}),c=Pe(e,"GITHUB_RELEASES",{isDefault:!1,isLocal:!1,type:"history",direct:{schema:Un,inputSchema:Qn,executionFn:of,...at}}),u=Pe(e,"GITHUB_DISCUSSIONS",{isDefault:!1,isLocal:!1,type:"history",direct:{schema:$n,inputSchema:jn,executionFn:uf,...at}}),l=Pe(e,"PACKAGE_SEARCH",{isDefault:!0,isLocal:!1,type:"search",direct:{schema:Io,inputSchema:Oo,executionFn:Jg,security:"remote",requiresServerRuntime:!0}}),p=Pe(e,"GITHUB_CLONE_REPO",{isDefault:!0,isLocal:!0,isClone:!0,type:"content",skipMetadataCheck:!0,direct:{schema:Nn,inputSchema:jr,executionFn:Kd,...at}}),m=Pe(e,"LOCAL_RIPGREP",{isDefault:!0,isLocal:!0,type:"search",direct:{schema:ht,inputSchema:Ro,executionFn:Oh,security:"basic"}}),d=Pe(e,"LOCAL_VIEW_STRUCTURE",{isDefault:!0,isLocal:!0,type:"content",direct:{schema:cn,inputSchema:Po,executionFn:$h,security:"basic"}}),f=Pe(e,"LOCAL_FIND_FILES",{isDefault:!0,isLocal:!0,type:"search",direct:{schema:on,inputSchema:lo,executionFn:Jf,security:"basic"}}),g=Pe(e,"LOCAL_FIND_DEAD_CODE",{isDefault:!0,isLocal:!0,type:"search",direct:{schema:sn,inputSchema:fo,executionFn:dh,security:"basic"}}),R=Pe(e,"LOCAL_FETCH_CONTENT",{isDefault:!0,isLocal:!0,type:"content",direct:{schema:rn,inputSchema:uo,executionFn:Wf,security:"basic"}}),h={name:ge,description:Bu(ge,e),isDefault:!0,isLocal:!0,skipMetadataCheck:!0,type:"content",direct:{schema:Yn,inputSchema:Xn,executionFn:Tu,security:"basic",requiresServerRuntime:!0}},y=[t,n,r,o,i,s,a,...ho()?[c]:[],...Wn()?[u]:[],l,p,m,d,f,g,R,h];return{GITHUB_SEARCH_CODE:t,GITHUB_FETCH_CONTENT:n,GITHUB_VIEW_REPO_STRUCTURE:r,GITHUB_SEARCH_REPOSITORIES:o,GITHUB_PULL_REQUESTS:i,GITHUB_ISSUES:s,GITHUB_COMMITS:a,GITHUB_RELEASES:c,GITHUB_DISCUSSIONS:u,PACKAGE_SEARCH:l,GITHUB_CLONE_REPO:p,LOCAL_RIPGREP:m,LOCAL_VIEW_STRUCTURE:d,LOCAL_FIND_FILES:f,LOCAL_FIND_DEAD_CODE:g,LOCAL_FETCH_CONTENT:R,LSP_GET_SEMANTIC_CONTENT:h,ALL_TOOLS:y}}var Ce=VE(),TV=Ce.GITHUB_SEARCH_CODE,EV=Ce.GITHUB_FETCH_CONTENT,LV=Ce.GITHUB_VIEW_REPO_STRUCTURE,AV=Ce.GITHUB_SEARCH_REPOSITORIES,kV=Ce.GITHUB_PULL_REQUESTS,_V=Ce.GITHUB_ISSUES,IV=Ce.GITHUB_COMMITS,OV=Ce.GITHUB_RELEASES,FV=Ce.GITHUB_DISCUSSIONS,vV=Ce.PACKAGE_SEARCH,DV=Ce.GITHUB_CLONE_REPO,MV=Ce.LOCAL_RIPGREP,NV=Ce.LOCAL_VIEW_STRUCTURE,GV=Ce.LOCAL_FIND_FILES,HV=Ce.LOCAL_FIND_DEAD_CODE,BV=Ce.LOCAL_FETCH_CONTENT,UV=Ce.LSP_GET_SEMANTIC_CONTENT,ty=Ce.ALL_TOOLS;import{completeMetadata as KE}from"@octocodeai/octocode-core";var Fo=null;function ny(){return Fo||(Fo=KE),Fo}async function jV(){return ny()}async function zV(){ny()}function WV(){return Fo}function VV(){Fo=null}var ry=["GitHub","Local Code","Package","Other"],oy=new Map([D.GITHUB_SEARCH_CODE,D.GITHUB_SEARCH_REPOSITORIES,D.GITHUB_PULL_REQUESTS,D.GITHUB_ISSUES,D.GITHUB_COMMITS,D.GITHUB_FETCH_CONTENT,D.GITHUB_VIEW_REPO_STRUCTURE,D.GITHUB_CLONE_REPO,D.LOCAL_RIPGREP,D.LOCAL_FIND_FILES,D.LOCAL_FIND_DEAD_CODE,D.LOCAL_FETCH_CONTENT,D.LOCAL_VIEW_STRUCTURE,ge,D.PACKAGE_SEARCH,...Wn()?[D.GITHUB_DISCUSSIONS]:[]].map((e,t)=>[e,t])),qe=class extends Error{constructor(n,r=[]){super(n);this.details=r;this.name="DirectToolInputError"}details},YE=["id","mainResearchGoal","researchGoal","reasoning"],vo=new Set([...YE]),XE=[{name:D.GITHUB_SEARCH_CODE,schema:Vr,inputSchema:Kr},{name:D.GITHUB_FETCH_CONTENT,schema:en,inputSchema:zr},{name:D.GITHUB_VIEW_REPO_STRUCTURE,schema:ao,inputSchema:co},{name:D.GITHUB_SEARCH_REPOSITORIES,schema:io,inputSchema:so},{name:D.GITHUB_PULL_REQUESTS,schema:Zr,inputSchema:eo},{name:D.GITHUB_ISSUES,schema:to,inputSchema:no},{name:D.GITHUB_COMMITS,schema:ro,inputSchema:oo},...ho()?[{name:D.GITHUB_RELEASES,schema:Un,inputSchema:Qn}]:[],...Wn()?[{name:D.GITHUB_DISCUSSIONS,schema:$n,inputSchema:jn}]:[],{name:D.PACKAGE_SEARCH,schema:Io,inputSchema:Oo},{name:D.GITHUB_CLONE_REPO,schema:Nn,inputSchema:jr},{name:D.LOCAL_RIPGREP,schema:ht,inputSchema:Ro},{name:D.LOCAL_VIEW_STRUCTURE,schema:cn,inputSchema:Po},{name:D.LOCAL_FIND_FILES,schema:on,inputSchema:lo},{name:D.LOCAL_FIND_DEAD_CODE,schema:sn,inputSchema:fo},{name:D.LOCAL_FETCH_CONTENT,schema:rn,inputSchema:uo},{name:ge,schema:Yn,inputSchema:Xn}],qE=[...ho()?[]:[{name:D.GITHUB_RELEASES,schema:Un,inputSchema:Qn,disabled:{envVar:"ENABLE_RELEASES"}}],...Wn()?[]:[{name:D.GITHUB_DISCUSSIONS,schema:$n,inputSchema:jn,disabled:{envVar:"ENABLE_DISCUSSIONS"}}]];function $t(e){return XE.find(t=>t.name===e)??qE.find(t=>t.name===e)}function Zn(e){return e.startsWith("gh")?"GitHub":e.startsWith("local")||e.startsWith("lsp")?"Local Code":e===D.PACKAGE_SEARCH?"Package":"Other"}function JV(e){return[...e].sort((t,n)=>{let r=ry.indexOf(Zn(t)),o=ry.indexOf(Zn(n));if(r!==o)return r-o;let i=oy.get(t)??Number.MAX_SAFE_INTEGER,s=oy.get(n)??Number.MAX_SAFE_INTEGER;return i!==s?i-s:t.localeCompare(n)})}import{z as iy}from"zod";var JE=["id","researchGoal","reasoning"];function n2(e){let t=$t(e);if(!t)return"{}";try{return JSON.stringify(iy.toJSONSchema(t.inputSchema,{io:"input"}),null,2)}catch{return JSON.stringify(iy.toJSONSchema(t.schema,{io:"input"}),null,2)}}function r2(e){return JSON.stringify(e??{},null,2)}function o2(e){let t=Zn(e),n=[...JE];return(t==="GitHub"||t==="Package")&&n.splice(1,0,"mainResearchGoal"),n}function i2(e,t){return t?.tools?.[e]?.description??e}import{z as ZE}from"zod";function Cs(e){let t=$t(e);if(!t)return[];let n=ZE.toJSONSchema(t.schema,{io:"input"});if(!er(n))return[];let r=St(n.properties)?n.properties:{},o=new Set(Array.isArray(n.required)?n.required.filter(i=>!vo.has(i)&&!$u(r[i])):[]);return Qu(r,o)}function eL(e){let t=[],n=typeof e.minimum=="number"?e.minimum:void 0,r=typeof e.maximum=="number"?e.maximum:void 0;return n!==void 0&&r!==void 0?t.push(`${n}-${r}`):n!==void 0?t.push(`>=${n}`):r!==void 0&&t.push(`<=${r}`),"default"in e&&t.push(`default ${JSON.stringify(e.default)}`),t.length>0?t.join(", "):void 0}function Uu(e){if(Array.isArray(e.enum)&&e.enum.length>0)return`enum(${e.enum.map(String).join(", ")})`;if(e.type==="array"){let n=er(e.items)?e.items:void 0;return`array<${n?Uu(n):"value"}>`}let t=Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:void 0;if(t){let n=t.filter(er).map(Uu).filter(r=>r!=="value");if(n.length>0)return[...new Set(n)].join(" | ")}return Array.isArray(e.type)?e.type.join(" | "):typeof e.type=="string"?e.type:"value"}function Qu(e,t,n=""){let r=[];for(let[o,i]of Object.entries(e)){if(!n&&vo.has(o))continue;let s=er(i)?i:{},a=n?`${n}.${o}`:o;if(r.push({name:a,required:t.has(o),type:Uu(s),constraints:eL(s),description:typeof s.description=="string"?s.description:void 0}),St(s.properties)){let u=new Set(Array.isArray(s.required)?s.required.filter(l=>typeof l=="string"?!$u(s.properties?.[l]):!1):[]);r.push(...Qu(s.properties,u,a))}let c=s.type==="array"&&er(s.items)?s.items:void 0;if(c&&St(c.properties)){let u=new Set(Array.isArray(c.required)?c.required.filter(l=>typeof l=="string"?!$u(c.properties?.[l]):!1):[]);r.push(...Qu(c.properties,u,a))}}return r}function ay(e,t){if(t.startsWith("array<")){let n=t.slice(6,-1);return[sy(e,n)]}return sy(e,t)}function sy(e,t){if(t.startsWith("enum("))return/^enum\(([^,)]+)/.exec(t)?.[1]??e;if(t==="integer"||t==="number")return e==="lineHint"?42:5;if(t==="boolean")return!0;switch(e){case"keywords":case"keywordsToSearch":case"query":case"text":return"runCLI";case"path":return".";case"uri":return"/path/to/file.ts";case"owner":return"bgauryy";case"repo":return"octocode";case"extension":return"ts";case"filename":return"package.json";case"language":return"TypeScript";case"symbolName":return"myFunction";case"name":case"packageName":return"zod";default:return e}}function St(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function er(e){return St(e)}function $u(e){return er(e)&&"default"in e}function cy(e){return e===D.GITHUB_PULL_REQUESTS?[{label:"PR search (list)",query:{owner:"bgauryy",repo:"octocode",keywordsToSearch:["localSearchCode"],concise:!0,limit:5}},{label:"PR detail (diffs + reviews)",query:{owner:"sindresorhus",repo:"slugify",prNumber:1,content:{comments:{discussion:!0},reviews:!0,patches:{mode:"all"}}}}]:e===D.GITHUB_SEARCH_CODE?[{label:"path search",query:{keywords:["package.json"],owner:"bgauryy",repo:"octocode",match:"path",concise:!0,limit:5}},{label:"content search",query:{keywords:["localSearchCode"],owner:"bgauryy",repo:"octocode",extension:"ts",limit:5}}]:e===D.GITHUB_SEARCH_REPOSITORIES?[{label:"repository search",query:{keywords:["react"],language:"TypeScript",stars:">1000",concise:!0,limit:5}},{label:"owner repositories",query:{owner:"bgauryy",concise:!0,limit:5}}]:e===D.GITHUB_VIEW_REPO_STRUCTURE?[{label:"repo tree",query:{owner:"bgauryy",repo:"octocode",path:"packages",maxDepth:2,itemsPerPage:50}}]:e===D.GITHUB_CLONE_REPO?[{label:"full repo clone",query:{owner:"bgauryy",repo:"octocode"}},{label:"subtree clone",query:{owner:"bgauryy",repo:"octocode",sparsePath:"packages/octocode-tools-core"}}]:e===D.LOCAL_RIPGREP?[{label:"text search",query:{path:"packages/octocode-tools-core/src",searchText:"buildDirectToolCommandPatterns",maxFiles:20}},{label:"structural code search",query:{path:"packages/octocode-tools-core/src/tools",mode:"structural",pattern:"eval($X)"}}]:e===D.LOCAL_FETCH_CONTENT?[{label:"exact line range",query:{path:"packages/octocode-tools-core/package.json",startLine:1,endLine:30,minify:"none"}},{label:"matched slice",query:{path:"packages/octocode-tools-core/src/tools/directToolCatalog.meta.ts",matchString:"buildKnownDirectToolCommandPatternQueries",contextLines:8,minify:"standard"}}]:e===D.LOCAL_FIND_FILES?[{label:"basename globs",query:{path:"packages/octocode-tools-core",names:["scheme.ts","package.json"],entryType:"f",itemsPerPage:20}},{label:"monorepo path glob",query:{path:".",pathPattern:"packages/*/src/tools/**",entryType:"f",itemsPerPage:20}},{label:"prune build dirs",query:{path:"packages/octocode-tools-core",names:["*.js"],entryType:"f",excludeDir:["node_modules","dist","coverage","out"],itemsPerPage:20}}]:e===D.LOCAL_FIND_DEAD_CODE?[{label:"default entrypoints (package.json + tests)",query:{path:"packages/octocode-tools-core",itemsPerPage:20}},{label:"explicit entrypoints",query:{path:"packages/octocode-tools-core",entrypoints:["src/index.ts","src/direct.ts"],includeTests:!1}}]:e===D.LOCAL_VIEW_STRUCTURE?[{label:"shallow tree",query:{path:"packages/octocode-tools-core/src/tools",maxDepth:2,itemsPerPage:50}},{label:"files only at depth 1",query:{path:"packages/octocode-engine/src",maxDepth:1,entryType:"f",itemsPerPage:100}}]:e===D.GITHUB_FETCH_CONTENT?[{label:"matched slice (cheap read of one function)",query:{owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src/responses.ts",matchString:"export function cleanJsonObject",contextLines:8}},{label:"symbols outline (unknown/large file)",query:{owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src/responses.ts",minify:"symbols"}}]:e===D.GITHUB_COMMITS?[{label:"file history (bounded window)",query:{owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src/responses.ts",since:"6m",itemsPerPage:10}},{label:"compare two refs (base...head)",query:{owner:"bgauryy",repo:"octocode",base:"main",head:"update-tools"}}]:e===D.PACKAGE_SEARCH?[{label:"exact package \u2192 source repo",query:{packageName:"zod"}},{label:"keyword discovery (paged candidates)",query:{packageName:"schema validation",page:1}}]:e===ge?[{label:"symbol outline (absolute uri)",query:{uri:"/ABS/packages/octocode-tools-core/src/scheme/pagination.ts",type:"documentSymbols"}},{label:"semantic definition (absolute uri + lineHint)",query:{uri:"/ABS/packages/octocode-tools-core/src/scheme/pagination.ts",type:"definition",symbolName:"buildNextPageContinuation",lineHint:72}}]:[]}function uy(e,t){return`tools ${e} --queries '${JSON.stringify(t)}'`}function tL(e){let t=cy(e);if(t.length>0)return t.map(r=>({...r,command:uy(e,r.query)}));let n=nL(e);return Object.keys(n).length===0?[]:[{label:"schema-derived",query:n,command:uy(e,n)}]}function g2(e){return tL(e)[0]?.query??{}}function nL(e){if(!$t(e))return{};let t=Cs(e),n=t.filter(i=>!i.name.includes(".")),r=rL(n),o={};for(let i of r)o[i.name]=ay(i.name,i.type);return e.startsWith("lsp")&&t.some(i=>i.name==="uri")&&(o.uri??="uri"),e===ge&&(o.type??="definition",o.symbolName??="symbolName",o.lineHint??=1),o}var ly=4,ju=new Map([["keywords",10],["keywordsToSearch",11],["query",12],["text",13],["packageName",14],["name",15],["uri",20],["type",21],["owner",30],["repo",31],["extension",32],["filename",33],["language",34],["path",40],["target",50],["from",51],["scope",52],["pattern",60],["rule",61],["op",80],["operation",81],["minify",90]]),py=new Set(["page","itemsPerPage","limit","matchPage","maxFiles","maxMatchesPerFile","matchContentLength","responseCharLength","responseCharOffset"]);function rL(e){let t=e.filter(i=>i.required),n=new Map;for(let i of t)n.set(i.name,i);let r=e.filter(i=>!i.required&&oL(i)).sort(iL),o=Math.max(ly,t.length);for(let i of r){if(n.size>=o)break;n.set(i.name,i)}return n.size>0?[...n.values()]:e.filter(i=>!py.has(i.name)).filter(i=>i.type!=="boolean").slice(0,ly)}function oL(e){return py.has(e.name)||e.type==="boolean"?!1:sL(e)?ju.has(e.name):!0}function iL(e,t){let n=ju.get(e.name)??Number.MAX_SAFE_INTEGER,r=ju.get(t.name)??Number.MAX_SAFE_INTEGER;return n!==r?n-r:e.name.localeCompare(t.name)}function sL(e){return e.constraints?.includes("default ")===!0}function b2(e,t,n={}){if(typeof t!="string")return null;let r;try{r=JSON.parse(t)}catch{throw new qe("Tool input must be valid JSON.")}return aL(e,r,n)}function aL(e,t,n={}){let r=uL(e,t,n),o=$t(e);if(!o)throw new qe(`Unknown tool: ${e}`);let i=o.inputSchema.safeParse(r);if(!i.success)throw new qe("Tool input does not match the expected schema.",cL(i.error));return i.data}function cL(e){return e.issues.map(t=>`${t.path.length>0?t.path.join("."):"input"}: ${t.message}`)}function uL(e,t,n){let r=[];if(Array.isArray(t))r=t;else if(St(t)&&Array.isArray(t.queries))r=t.queries;else if(St(t))r=[t];else throw new qe('Tool input must be a JSON object, an array of query objects, or { "queries": [...] }.');if(r.length===0)throw new qe("At least one query is required.");let o=St(t)&&Array.isArray(t.queries)?Object.fromEntries(Object.entries(t).filter(([s])=>s!=="queries")):{},i=r.map((s,a)=>lL(e,a,yL(e,s,a,n),{sourceLabel:n.sourceLabel}));return{...o,queries:i}}function lL(e,t,n,r){let o={...n},i=Zn(e),s=r.sourceLabel??"direct tool execution",a=pL(e,s);return(typeof o.id!="string"||o.id.trim().length===0)&&(o.id=`${e}-${t+1}`),(i==="GitHub"||i==="Package")&&(typeof o.mainResearchGoal!="string"||o.mainResearchGoal.trim().length===0)&&(o.mainResearchGoal=a),(typeof o.researchGoal!="string"||o.researchGoal.trim().length===0)&&(o.researchGoal=a),(typeof o.reasoning!="string"||o.reasoning.trim().length===0)&&(o.reasoning=`Executed via ${s} tool command`),o}function pL(e,t){return`Execute ${e} via ${t}`}function dL(e,t){let n=e.length+1,r=t.length+1,o=Array.from({length:n*r},()=>0);for(let i=0;i<n;i++)o[i*r]=i;for(let i=0;i<r;i++)o[i]=i;for(let i=1;i<n;i++)for(let s=1;s<r;s++){let a=e[i-1]===t[s-1]?0:1;o[i*r+s]=Math.min(o[(i-1)*r+s]+1,o[i*r+s-1]+1,o[(i-1)*r+s-1]+a)}return o[n*r-1]}function mL(e,t){let n=e.toLowerCase(),r,o=Number.POSITIVE_INFINITY,i,s=Number.POSITIVE_INFINITY;for(let a of t){let c=a.toLowerCase(),u=dL(n,c);if(c.includes(n)||n.includes(c)){u<o&&(r=a,o=u);continue}if(n.length<3)continue;let l=Math.max(2,Math.floor(a.length/3));u<=l&&u<s&&(i=a,s=u)}return r??i}var fL=new Set(["none","standard","symbols"]),hL={ghSearchCode:{keywordsToSearch:"keywords"},ghSearchRepos:{keywordsToSearch:"keywords"},npmSearch:{name:"packageName"},ghViewRepoStructure:{depth:"maxDepth"},lspGetSemantics:{op:"type",line:"lineHint",path:"uri"},localGetFileContent:{filePath:"path"},localSearchCode:{keywordsToSearch:"searchText",keywords:"searchText",language:"langType"},ghGetFileContent:{matchStringContextLines:"contextLines",minified:{field:"minify",map:e=>{if(e===!0)return"standard";if(e===!1)return"none";if(typeof e=="string"&&fL.has(e))return e}}},ghSearchPullRequests:{merged:{field:"state",map:e=>e===!0?"merged":void 0}},ghSearchCommits:{filePath:"path"},localFindFiles:{maxResults:"limit"}};function gL(e,t){let n=hL[e];if(!n)return t;let r;for(let[o,i]of Object.entries(n)){if(!(o in t))continue;let s=typeof i=="string"?i:i.field;if(s in t){r??={...t},delete r[o];continue}let a=typeof i=="string"?t[o]:i.map(t[o]);a!==void 0&&(r??={...t},r[s]=a,delete r[o])}return r??t}function yL(e,t,n,r={}){if(!St(t))throw new qe("Tool input must be a JSON object or an array of objects.");let o=gL(e,t),i=new Set([...Cs(e).filter(c=>!c.name.includes(".")).map(c=>c.name),...vo]),s={},a=[];for(let[c,u]of Object.entries(o)){if(i.has(c)){s[c]=u;continue}a.push(c)}if(a.length>0&&i.size>0&&(r.onUnknownFields?.(a,n),r.rejectUnknownFields===!0)){let c=a.map(u=>{let l=mL(u,i);return l?`'${u}' \u2192 did you mean '${l}'?`:""}).filter(Boolean);throw new qe(`Unknown field(s): ${a.join(", ")}`,[...c,`Remove unknown field(s) from query ${n+1}: ${a.join(", ")}`,`Run tools ${e} --scheme to see valid fields.`])}return s}import{getConfigSync as kL}from"@octocodeai/config";import{ContentSanitizer as RL}from"@octocodeai/octocode-engine/security";import{getRuntimeSurface as SL}from"@octocodeai/config";var my="OCTOCODE_MCP_FULL_TEXT",bL="[content withheld: sanitization failed \u2014 retry the call; if this persists, report it]";function zu(e){let t=e;if(t.structuredContent)try{t={...t,structuredContent:Ve(t.structuredContent)}}catch{t={...t,structuredContent:{status:"error",code:"SANITIZATION_FAILED",error:"structuredContent withheld: sanitization failed \u2014 retry the call; if this persists, report it"},isError:!0}}return CL(t)?xL(t):(t.content?.length&&(t={...t,content:t.content.map(n=>{if(n.type==="text"&&"text"in n&&typeof n.text=="string")try{let{content:r}=RL.sanitizeContent(n.text);return{...n,text:r}}catch{return{...n,text:bL}}return n})}),t)}function CL(e){return SL()==="mcp"&&process.env[my]!=="true"&&e.isError!==!0&&e.structuredContent!==void 0}function xL(e){let t=(e.content??[]).filter(n=>n.type!=="text");return{...e,content:[{type:"text",text:PL(e.structuredContent)},...t]}}var dy=3;function PL(e){let t=["structuredContent available"];if(Do(e)){if(typeof e.status=="string"&&t.push(`status=${e.status}`),Array.isArray(e.results)){t.push(`results=${e.results.length}`);let r=TL(e.results);r.error>0&&t.push(`errors=${r.error}`),r.empty>0&&t.push(`empty=${r.empty}`)}let n=e.pagination;if(Do(n)&&typeof n.hasMore=="boolean"&&t.push(`hasMore=${n.hasMore}`),Array.isArray(e.results)&&e.results.length>0){let r=e.results.slice(0,dy).map(wL).filter(Boolean);if(r.length>0){let o=e.results.length-dy;t.push(`[${r.join(" \xB7 ")}${o>0?` \xB7 +${o} more`:""}]`)}}}return`${t.join(" \xB7 ")}. Read structuredContent for full data; if your client cannot read structuredContent, set ${my}=true.`}function wL(e){if(!Do(e))return"";let t=[];typeof e.id=="string"&&t.push(e.id),t.push(typeof e.status=="string"?e.status:"ok");let n=e.data;return Do(n)&&typeof n.path=="string"&&n.path&&t.push(n.path.split("/").slice(-2).join("/").slice(0,80)),t.join(" ")}function TL(e){let t=0,n=0;for(let r of e)Do(r)&&(r.status==="error"&&(t+=1),r.status==="empty"&&(n+=1));return{error:t,empty:n}}function Do(e){return typeof e=="object"&&e!==null}var EL="TOOL_CALLBACK_EXCEPTION";function Wu(e,t){let n=LL(t),r={content:[{type:"text",text:`error: tool "${e}" threw an exception
67
- message: ${n.message}`}],structuredContent:{status:"error",tool:e,code:EL,error:{name:n.name,message:n.message,code:n.code}},isError:!0};try{return zu(r)}catch{return r}}function LL(e){if(e instanceof Error){let t=e.code;return{name:e.name||"Error",message:e.message||String(e),code:typeof t=="string"?t:void 0}}if(typeof e=="string")return{name:"Error",message:e};if(e&&typeof e=="object"){let t=e,n=typeof t.message=="string"?t.message:AL(t)??"Unknown error",r=typeof t.name=="string"?t.name:"Error",o=typeof t.code=="string"?t.code:void 0;return{name:r,message:n,code:o}}return{name:"Error",message:e===void 0?"undefined":String(e)}}function AL(e){try{return JSON.stringify(e)}catch{return}}var xs=null,Ps=null,_L=Zl;function IL(e){let t=e;return n=>t(n)}function OL(e){let{direct:t}=e;return{name:e.name,schema:t.schema,inputSchema:t.inputSchema,execute:IL(t.executionFn),security:t.security,isLocal:e.isLocal,isClone:e.isClone,requiresServerRuntime:t.requiresServerRuntime,requiresProviders:t.requiresProviders}}var FL=ty.map(OL);function vL(e){return FL.find(t=>t.name===e)}async function DL(e,t){let n=vL(e);if(!n)throw new Error(`Unknown tool: ${e}`);try{let r=ML(n,t);return await NL(n),GL(n),await HL(n,r)}catch(r){return Wu(n.name,r)}}function ML(e,t){let n=e.inputSchema.safeParse(t);if(!n.success)throw n.error;return n.data}async function NL(e){e.requiresServerRuntime&&(xs||(xs=_L().catch(t=>{throw xs=null,t})),await xs),e.requiresProviders&&(Ps||(Ps=Td().then(()=>{}).catch(t=>{throw Ps=null,t})),await Ps)}function GL(e){if(!e.isLocal&&!e.isClone)return;let t=kL();if(e.isLocal&&!t.local.enabled){let n=new Error(`Tool "${e.name}" requires local tools. Set ENABLE_LOCAL=true to use it.`);throw n.code="localToolsDisabled",n}}async function HL(e,t){try{let n=e.security==="remote"?await BL(e,t):await UL(e,t);return zu(n)}catch(n){return Wu(e.name,n)}}async function BL(e,t){return Vu(e.name,async(r,o)=>e.execute({...r,authInfo:o.authInfo,sessionId:o.sessionId,signal:o.signal}))(t,{})}async function UL(e,t){return Ku(e.execute,e.name)(t)}var $2={success:"\u2705",empty:"\u{1F4ED}",error:"\u274C",partial:"\u26A0\uFE0F",searching:"\u{1F50D}",loading:"\u23F3",info:"\u2139\uFE0F",file:"\u{1F4C4}",folder:"\u{1F4C1}",page:"\u{1F4C3}",definition:"\u{1F3AF}",reference:"\u{1F517}",call:"\u{1F4DE}"};import{getConfigSync as fy}from"@octocodeai/config";function W2(){return process.env.VSCODE_PID||process.env.VSCODE_IPC_HOOK?"vscode":process.env.CURSOR_CHANNEL||process.env.CURSOR_TRACE_ID?"cursor":"standalone"}function V2(){try{return fy().local.enabled}catch{return!1}}function K2(){try{if(!fy().local.enabled)return"Local tools are disabled (ENABLE_LOCAL=false). MCP LSP tools are unavailable."}catch{}return null}import{validateCommand as QL}from"@octocodeai/octocode-engine/commandValidator";async function J2(e,t=[],n={}){let r=QL(e,t);if(!r.isValid)throw new Error(`Command validation failed: ${r.error||"Command not allowed"}`);let o=Fi(t);if(!o.valid)throw new Error(`Argument validation failed: ${o.error||"Invalid arguments"}`);let{timeout:i=3e4,cwd:s,env:a,maxOutputSize:c=10*1024*1024,tolerateOutputLimit:u=!1}=n,l=await Zt(e,t,{timeout:i,cwd:s,env:a,maxOutputSize:c});if(l.outputLimitExceeded&&u)return{success:!0,code:l.exitCode,stdout:l.stdout,stderr:l.stderr,truncated:!0};if(l.error)throw l.error;return{success:l.success,code:l.exitCode,stdout:l.stdout,stderr:l.stderr}}import{z as G}from"zod";var ws=G.object({text:G.string()}),$L=G.object({match:G.object({text:G.string()}).optional(),start:G.number(),end:G.number()}),jL=G.object({type:G.literal("match"),data:G.object({path:ws,lines:G.object({text:G.string()}),line_number:G.number(),absolute_offset:G.number(),submatches:G.array($L)})}),zL=G.object({type:G.literal("context"),data:G.object({path:ws,lines:G.object({text:G.string()}),line_number:G.number(),absolute_offset:G.number()})}),WL=G.object({type:G.literal("begin"),data:G.object({path:ws})}),VL=G.object({type:G.literal("end"),data:G.object({path:ws,stats:G.object({elapsed:G.object({human:G.string()}),searches:G.number(),searches_with_match:G.number()}).optional()})}),KL=G.object({type:G.literal("summary"),data:G.object({elapsed_total:G.object({human:G.string()}),stats:G.object({elapsed:G.object({human:G.string()}),searches:G.number(),searches_with_match:G.number(),bytes_searched:G.number(),bytes_printed:G.number(),matched_lines:G.number(),matches:G.number()})})}),tK=G.discriminatedUnion("type",[jL,zL,WL,VL,KL]);import{securityRegistry as qY,ContentSanitizer as JY}from"@octocodeai/octocode-engine/security";import{maskSensitiveData as eX}from"@octocodeai/octocode-engine/mask";import{configureSecurity as nX}from"@octocodeai/octocode-engine/withSecurityValidation";import{completeMetadata as lX}from"@octocodeai/octocode-core";import{z as dX}from"zod";export{eA as ALL_ERROR_CODES,ty as ALL_TOOLS,_S as BASE_SCHEMA,jr as BulkCloneRepoLocalSchema,Xn as BulkLspGetSemanticsQuerySchema,Ts as CONFIG_ERRORS,Br as CORE_ALLOWED_ENV_VARS,lt as CREDENTIALS_FILE,Eu as CircuitOpenError,Nn as CloneRepoQueryLocalSchema,JY as ContentSanitizer,UB as DEFAULTS,Gz as DEFAULT_CIRCUIT_FAILURE_THRESHOLD,Ju as DEFAULT_MATCH_SNIPPET_CHARS,bs as DEFAULT_TOOL_METADATA_GATEWAY,ba as DESCRIPTIONS,ZS as DIFF_PREVIEW_MAX_LINES,vo as DIRECT_TOOL_AUTO_FILLED_FIELDS,ry as DIRECT_TOOL_CATEGORIES,XE as DIRECT_TOOL_DEFINITIONS,qe as DirectToolInputError,z as ERROR_CODES,ye as ERROR_MESSAGES,nr as FETCH_ERRORS,Ct as FILE_OPERATION_ERRORS,zr as FileContentBulkQueryLocalSchema,ox as FileContentQueryBaseLocalSchema,en as FileContentQueryLocalSchema,DV as GITHUB_CLONE_REPO,IV as GITHUB_COMMITS,FV as GITHUB_DISCUSSIONS,EV as GITHUB_FETCH_CONTENT,qu as GITHUB_FILE_CONTENT_DEFAULT_CHAR_LENGTH,_V as GITHUB_ISSUES,kV as GITHUB_PULL_REQUESTS,OV as GITHUB_RELEASES,TV as GITHUB_SEARCH_CODE,me as GITHUB_SEARCH_DEFAULT_LIMIT,oe as GITHUB_SEARCH_MAX_LIMIT,qL as GITHUB_SEARCH_MAX_PAGES,AV as GITHUB_SEARCH_REPOSITORIES,Mt as GITHUB_STRUCTURE_DEFAULTS,JL as GITHUB_STRUCTURE_DEFAULT_ENTRIES_PER_PAGE,Yu as GITHUB_STRUCTURE_MAX_ENTRIES_PER_PAGE,LV as GITHUB_VIEW_REPO_STRUCTURE,iD as GenericToolResultRowSchema,Kr as GitHubCodeSearchBulkQueryLocalSchema,Vr as GitHubCodeSearchQueryLocalSchema,Li as GitHubProvider,sP as GitHubPullRequestSearchBulkQueryLocalSchema,Sc as GitHubPullRequestSearchQueryLocalSchema,so as GitHubReposSearchBulkQueryLocalSchema,io as GitHubReposSearchSingleQueryLocalSchema,co as GitHubViewRepoStructureBulkQueryLocalSchema,ao as GitHubViewRepoStructureQueryLocalSchema,mn as HOME,J_ as IGNORED_FILE_EXTENSIONS,Z_ as IGNORED_FILE_NAMES,eI as IGNORED_FOLDER_NAMES,et as KEY_FILE,Mo as LOCAL_DEFAULT_FILES_PER_PAGE,BV as LOCAL_FETCH_CONTENT,HV as LOCAL_FIND_DEAD_CODE,GV as LOCAL_FIND_FILES,bt as LOCAL_MAX_DEPTH,ln as LOCAL_MAX_FILES_PER_PAGE,Je as LOCAL_MAX_LIMIT,MV as LOCAL_RIPGREP,H as LOCAL_TOOL_ERROR_CODES,Zu as LOCAL_TOOL_ERROR_REGISTRY,NV as LOCAL_VIEW_STRUCTURE,ge as LSP_GET_SEMANTICS_TOOL_NAME,UV as LSP_GET_SEMANTIC_CONTENT,Qn as ListReleasesBulkLocalSchema,Un as ListReleasesLocalSchema,uo as LocalFetchContentBulkQuerySchema,rn as LocalFetchContentQuerySchema,fo as LocalFindDeadCodeBulkQuerySchema,sn as LocalFindDeadCodeQuerySchema,lo as LocalFindFilesBulkQuerySchema,on as LocalFindFilesQuerySchema,Ro as LocalRipgrepBulkQuerySchema,ht as LocalRipgrepQuerySchema,by as LocalToolErrorCategory,Po as LocalViewStructureBulkQuerySchema,cn as LocalViewStructureQuerySchema,Yn as LspGetSemanticsQueryDisplaySchema,dE as LspGetSemanticsQuerySchema,xR as MAX_BRANCH_CACHE_SIZE,pn as MAX_CHAR_LENGTH,Xu as MAX_CONTEXT_LINES,Wp as MAX_DEFAULT_OUTPUT_CHAR_LENGTH,xr as MAX_DIRECTORY_FILES,Go as MAX_MATCH_CONTENT_LENGTH,No as MAX_PAGE_NUMBER,ci as MAX_TOTAL_SIZE,Xs as NETWORK_ERROR_PATTERNS,Ug as NpmDeprecationOutputSchema,Bg as NpmRegistrySearchSchema,Oo as NpmSearchBulkQueryLocalSchema,Io as NpmSearchQueryLocalSchema,ds as NpmViewResultSchema,As as OCTOCODE_DIR,Ie as OCTOCODE_HOME,ql as OctocodeConfigSchema,gR as OctokitWithThrottling,vV as PACKAGE_SEARCH,rr as PROMISE_ERRORS,Rd as PROVIDER_CAPABILITIES,Ld as PROXY_ENV_VARS,Ne as PR_CONTENT_DEFAULT_ITEMS_PER_PAGE,ct as PR_CONTENT_MAX_ITEMS_PER_PAGE,ac as ProviderInitializationError,ii as RATE_LIMIT_CONFIG,qs as RATE_LIMIT_PATTERNS,xt as REPOSITORY_ERRORS,Gt as RESOURCE_LIMITS,tK as RipgrepJsonMessageSchema,Ee as SEARCH_ERRORS,jh as SEMANTIC_CONTENT_TYPES,yD as SENSITIVE_ENV_VARS,Vt as SESSION_FILE,Ry as STARTUP_ERRORS,D as STATIC_TOOL_NAMES,Kt as STATS_FILE,lp as STATUS_TO_ERROR_CODE,oo as SearchCommitsBulkLocalSchema,ro as SearchCommitsLocalSchema,jn as SearchDiscussionsBulkLocalSchema,$n as SearchDiscussionsLocalSchema,no as SearchIssuesBulkLocalSchema,to as SearchIssuesLocalSchema,eo as SearchPullRequestsBulkLocalSchema,Zr as SearchPullRequestsLocalSchema,$2 as StatusEmojis,vn as TOOLING_ALLOWED_ENV_VARS,Sy as TOOL_ERRORS,yy as TOOL_METADATA_ERRORS,x as TOOL_NAMES,xe as ToolError,Le as ToolErrors,tr as VALIDATION_ERRORS,Kg as _packageNameToSearchKeywords,VV as _resetMetadataState,bE as _resetNpmRegistryUrlCache,Xl as _resetSessionState,Wk as _resetTokenResolvers,zk as _setTokenResolvers,gP as applyConfiguredAllowedRoots,ka as applyContentPagination,Gh as applyEntryFilters,pc as applyExactMatchRanking,gi as applyPagination,vr as applyPartialContentFilter,ld as applyStructurePagination,Ng as assertCircuitAvailable,$ as attachRawResponseChars,NO as buildBlockBoundaryHint,Oi as buildChildProcessEnv,na as buildCodeSearchQuery,oF as buildDiffPreview,tL as buildDirectToolCommandPatterns,g2 as buildDirectToolExampleQuery,vP as buildEntryPaginationHints,ay as buildExampleValue,dc as buildGhSearchCodeFinalizer,Gb as buildGitHubPullRequestsSearchParams,hm as buildGithubFetchContentFinalizer,ca as buildIssueSearchQuery,Pc as buildMergedPagination,zE as buildPackagePagination,xc as buildPartialFailureWarnings,ub as buildPullRequestSearchCacheKey,ia as buildPullRequestSearchQuery,ra as buildRepoSearchQuery,Cc as buildResultPagination,sy as buildScalarExampleValue,Rh as buildSearchNextMap,ss as buildSearchResult,Wu as buildToolErrorResult,mo as buildWalkWarnings,sD as bulkOutputEnvelopeFields,WS as byteSlice,hi as byteToCharIndex,Vp as charToByteIndex,HB as checkLargeOutputSafety,vz as checkNpmAvailability,Yg as checkNpmDeprecation,CE as checkNpmRegistryReachable,Jc as checkRegexSafety,_ as clampedInt,Jt as cleanJsonObject,Vk as cleanup,H_ as clearAllCache,U_ as clearLSPToolCache,B_ as clearLocalToolCache,s_ as clearOctokitInstances,U0 as clearProviderCache,Q_ as clearRemoteAPICache,Od as cloneRepo,Qu as collectDisplayFields,Ui as collectFlatErrors,HC as commonDirPrefix,Zc as compactLocation,jE as compactPackageRepositories,gt as compactResolvedSymbol,ff as compareIsoDateDescending,lX as completeMetadata,Bd as computeQueryTimeout,Bz as configureCircuitBreaker,nX as configureSecurity,In as contextLinesField,_O as convertByteMatchToChar,rt as countLines,N as countSerializedChars,Oa as createBasePRTransformation,Ln as createCacheMeta,To as createCallItemKey,F as createErrorResult,mt as createGitHubProviderError,Ei as createGitHubProviderErrorFromResult,Be as createLazyProviderContext,Aa as createPaginationInfo,JC as createProviderExecutionContext,Y as createRelaxedBulkQuerySchema,Nt as createResponseFormat,W0 as createResult,Tj as createSafeRegExp,se as createSuccessResult,zo as decrypt,hl as deleteCredentials,Yl as deleteSession,eL as describeSchemaConstraints,Uu as describeSchemaType,W2 as detectEnvironment,jo as encrypt,ol as ensureClone,vt as ensureCloneParentDir,Qo as ensureHome,Pt as ensureOctocodeDir,wy as ensureRepos,Ls as ensureTmp,Ty as ensureTree,br as etagSoftCache,pi as evictExpiredClones,wn as evictExpiredTrees,te as executeBulkOperation,Kd as executeCloneRepo,DL as executeDirectTool,Wf as executeFetchContent,dh as executeFindDeadCode,Jf as executeFindFiles,Tu as executeLspGetSemantics,Ut as executeNpmCommand,ft as executeProviderOperation,Vd as executeProviderOperations,Oh as executeRipgrepSearch,Ch as executeRipgrepSearchInternal,$h as executeViewStructure,Nd as executeWithErrorIsolation,Fe as executeWithToolBoundary,Pf as exploreMultipleRepositoryStructures,xn as extractEtag,mi as extractMatchingLines,kf as fallbackOnBestEffortFailure,$f as fetchContent,Ra as fetchDirectoryContents,Gr as fetchDirectoryContentsRecursivelyAPI,Ea as fetchFileContentToDisk,_a as fetchFileTimestamp,qp as fetchGitHubFileContentAPI,BF as fetchGitHubPullRequestByNumberAPI,Qa as fetchGitHubPullRequestByNumberAPIInternal,sd as fetchHistory,gm as fetchMultipleGitHubFileContents,Ar as fetchRawGitHubFileContent,st as fetchWithRetries,Jp as filterPatch,hP as filterStructure,Sh as finalizeRipgrepResult,ph as findDeadCode,$t as findDirectToolDefinition,qf as findFiles,Ir as findNextBlockBoundary,Bl as flushSession,Ul as flushSessionSync,Nu as foldKeywords,cR as formatBytes,V0 as formatCallToolResultForOutput,uy as formatDirectToolCommandPattern,r2 as formatDirectToolMetadataSchemaText,n2 as formatDirectToolSchemaText,cL as formatDirectToolValidationIssues,zn as formatFileSize,Qi as formatFinalizedResponse,An as formatPRForResponse,$E as formatPackageData,su as gatherIncomingCallsRecursive,au as gatherOutgoingCallsRecursive,ce as generateCacheKey,Ev as generatePaginationHints,wi as generateStructurePaginationHints,Ws as getActiveProvider,Vs as getActiveProviderConfig,Tl as getAppDataPath,Al as getArchitecture,LO as getBulkDefaultCharLength,Kp as getByteLength,$_ as getCacheStats,RS as getCacheTTL,Pr as getCloneBaseDir,ha as getCloneDir,Wt as getCredentials,bl as getCredentialsFilePath,Ko as getCredentialsSync,rl as getDefaultOctocodeHome,Bu as getDescription,o2 as getDirectToolAutoFilledFields,Zn as getDirectToolCategory,i2 as getDirectToolDescription,Cs as getDirectToolDisplayFields,hr as getDirectorySizeBytes,fp as getExtension,Cd as getFileContent,Wo as getGhCliToken,zs as getGitHubToken,El as getLocalAppDataPath,K2 as getLspEnvironmentHint,SS as getMaxCacheSizeBytes,bS as getMaxCloneCount,WV as getMetadataOrNull,Ao as getNpmRegistryUrl,zt as getOctocodeDir,Q as getOctokit,Ql as getOrCreateSession,Dt as getOutputCharLimit,dp as getOwnerQualifier,Ll as getPlatformName,qa as getProvider,ne as getRawResponseChars,Nr as getRecursiveFetchFailureCount,Pd as getRepoStructure,iS as getReposBaseDir,gr as getServerConfig,$l as getSessionId,Cl as getToken,Yk as getTokenSource,xl as getTokenSync,Ds as getTokenWithRefresh,li as getTreeBaseDir,wr as getTreeDir,be as handleCatchError,V as handleGitHubAPIError,Ii as handleProviderError,Rl as hasCredentials,Sl as hasCredentialsSync,WN as hasExpensiveContentRequest,$u as hasSchemaDefault,Gx as hasValidCodeSearchParams,sp as hashGitHubToken,Mn as hoistSharedFields,$B as ignoreBestEffortFailure,zl as incrementErrors,ni as incrementGitHubCacheHits,ri as incrementGitHubCacheRateLimits,Vl as incrementPackageRegistryFailures,Wl as incrementRateLimitByProvider,ei as incrementRateLimits,jl as incrementToolCalls,ti as incrementToolCharSavings,Dw as inferLspSymbolName,Zl as initialize,Td as initializeProviders,zV as initializeToolMetadata,ar as invalidateCredentialsCache,mD as invokeCallbackSafely,En as isCacheHit,Op as isCacheValid,Hg as isCircuitOpen,ep as isCloneEnabled,Wn as isDiscussionsEnabled,un as isExactPackageName,Oe as isGitHubAPIError,Eb as isGitHubAPISuccess,er as isJsonSchemaObject,Ns as isLinux,Kk as isLocalEnabled,bQ as isLocalTool,Ms as isMac,_r as isMidBlockCut,nt as isNoResultsSearchError,Gu as isPackageNotFoundError,XC as isProviderError,vi as isProviderSuccess,St as isRecord,ir as isRefreshTokenExpired,ho as isReleasesEnabled,Lb as isRepository,ut as isTokenExpired,Es as isToolError,Ca as isToolInMetadata,cr as isWindows,On as lineNumberField,of as listMultipleGitHubReleases,gl as listStoredHosts,yl as listStoredHostsSync,jV as loadToolContent,uC as makeToolResultRowSchema,tm as mapCodeSearchProviderResult,em as mapCodeSearchToolQuery,am as mapFileContentProviderResult,sm as mapFileContentToolQuery,im as mapPullRequestProviderResultData,om as mapPullRequestToolQuery,rm as mapRepoSearchProviderRepositories,nm as mapRepoSearchToolQuery,cm as mapRepoStructureProviderResult,cc as mapRepoStructureToolQuery,eX as maskSensitiveData,Fr as normalizeOwnerRepo,Em as normalizePullRequestContentRequest,QE as normalizeRepoUrl,Cn as normalizeResponseHeaders,Ic as paginateEntries,po as parseFileSize,Re as parseGitHubProjectId,_n as parseHasMore,we as paths,bh as preflightValidateRipgrepPattern,aL as prepareDirectToolInput,b2 as prepareDirectToolInputFromJsonText,Xp as processFileContentAPI,Di as providerSupports,yp as rateLimitWarning,ga as readCacheMeta,pt as readCredentialsStore,Rp as recomputeMatchPositions,Gg as recordCircuitFailure,Au as recordCircuitSuccess,tp as recordPackageRegistryFailure,_t as recordRateLimit,or as redactPath,Pl as refreshAuthToken,Dn as relativizeResultPaths,K as relaxedPageNumberField,di as removeCloneDir,Hz as resetCircuitBreaker,Kl as resetSessionStats,Is as resetTokenResolution,fe as resolveCacheAuthFingerprint,Ae as resolveDefaultBranch,eu as resolveFileAnchor,Qr as resolveQueryId,Wh as resolveSymbolAnchor,Os as resolveToken,Tt as resolveTokenFull,Fs as resolveTokenWithRefresh,$r as resolveUniqueQueryIds,Ed as responseEnvelopeFields,J2 as safeExec,ke as safeParseOrError,zu as sanitizeCallToolResult,Ve as sanitizeStructuredContent,Sd as searchCode,as as searchContentRipgrep,bp as searchGitHubCodeAPI,id as searchGitHubPullRequestsAPI,ud as searchGitHubReposAPI,Pm as searchMultipleGitHubCode,rf as searchMultipleGitHubCommits,uf as searchMultipleGitHubDiscussions,nf as searchMultipleGitHubIssues,Jr as searchMultipleGitHubPullRequests,tf as searchMultipleGitHubPullRequestsSplit,Sf as searchMultipleGitHubRepos,Mu as searchNpmPackage,Xg as searchPackage,Jg as searchPackages,xd as searchPullRequests,bd as searchRepos,qY as securityRegistry,FO as serializeForPagination,Om as shapePullRequestForContent,Fa as shouldEnrichPullRequestFromSearch,Cr as shouldIgnoreDir,bn as shouldIgnoreFile,V2 as shouldUseMCPLsp,ua as shouldUseSearchForIssues,sa as shouldUseSearchForPRs,vO as sliceByCharRespectLines,La as sliceContent,yi as snapToSemanticBoundary,JV as sortDirectToolNames,Ad as spawnCheckSuccess,PD as spawnCollectStdout,Zt as spawnWithTimeout,kr as splitLines,LI as startCacheGC,AI as stopCacheGC,vs as storeCredentials,_c as summarizeEntries,Bh as toEntryObject,Hh as toGroupedLists,el as toToolError,Ib as transformCodeSearchResult,vb as transformFileContentResult,Dr as transformPullRequestItemFromREST,Ua as transformPullRequestItemFromSearch,Nb as transformPullRequestResult,Ob as transformRepoSearchResult,jb as transformRepoStructureResult,Zp as trimDiffContext,ix as truncateSnippetChars,Ge as updateSessionStats,Yo as updateToken,Fi as validateArgs,ve as validateToolPath,Ya as viewGitHubRepositoryStructureAPI,Qh as viewStructure,Ku as withBasicSecurityValidation,he as withDataCache,ai as withDataCacheConditional,oD as withResponseEnvelope,Vu as withSecurityValidation,Tn as writeCacheMeta,dX as z};
54
+ `);if(t){let i=n?t:t.toLowerCase();for(let s of o)if((n?s:s.toLowerCase()).includes(i))return s}return o.find(i=>i.trim().length>0)??o[0]??""}function Np(e,t,n,r){if(n==="markdown")return/<!--/.test(e)?"comment":"code";if(n==="json")return"code";if(kp.test(e))return"comment";let o=q_(e,t,r);if(o<0)return"code";let i=J_(e);return i>=0&&o>i?"comment":Yb(e,o)?"string":"code"}function q_(e,t,n){return t?n?e.indexOf(t):e.toLowerCase().indexOf(t.toLowerCase()):-1}function J_(e){let t=-1,n=i=>{i>=0&&(t<0||i<t)&&(t=i)};for(let i of["//","/*","<!--"])n(e.indexOf(i));let r=/(^|\s)#(?![!{])/.exec(e);r&&n(r.index+(r[1]?.length??0));let o=/(^|\s)--\s/.exec(e);return o&&n(o.index+(o[1]?.length??0)),t}function Yb(e,t){let n="";for(let r=0;r<t&&r<e.length;r++){let o=e[r];n?o===n&&e[r-1]!=="\\"&&(n=""):(o==='"'||o==="'"||o==="`")&&(n=o)}return n!==""}function ek(e){if(!e)return;let t=/[A-Za-z_$][\w$]*/.exec(e);return t?t[0]:void 0}function tk(e,t){if(!e)return[];let n=new Set,r=[];for(let o of e.matchAll(/[A-Za-z_$][\w$]*/g)){let i=o[0],s=t?i:i.toLowerCase();n.has(s)||(n.add(s),r.push(i))}return r}function nk(e,t,n,r,o){if(!e||e.length===0)return 0;let i=Fp(n.keyword),s=0,a="";for(let c of e){let l=c.value??"";if(!l)continue;let u=Mp(l,r,n.caseSensitive),p=0,d=[];r&&i&&(new RegExp(`(^|[^\\w$])${Za(r)}([^\\w$]|$)`,n.caseSensitive?"":"i").test(u)?(p+=ae.exactWholeWord,d.push("whole-word match")):!n.caseSensitive&&u.toLowerCase().includes(r.toLowerCase())?(p+=ae.exactCaseInsensitive,d.push("case-insensitive match")):u.includes(r)&&(p+=ae.substring,d.push("substring match")));let m=c.kind;if(m)p+=rk(m,d);else{let f=Np(u,r,t.id,n.caseSensitive);f!=="code"?(p+=ae.commentOrStringPenalty,d.push(f==="comment"?"comment match (weak)":"string literal (weak)")):(Li(t.declaration,u)&&(p+=ae.declarationLine,d.push("declaration line")),Li(t.export,u)&&(p+=ae.exportLine,d.push("export/public line")),Li(t.import,u)&&(p+=ae.importLine,d.push("import line")),t.id==="markdown"&&Ip.test(u)&&(p+=ae.headingLine,d.push("markdown heading")),(t.id==="json"||t.id==="yaml")&&ok(u,r)&&(p+=ae.configKeyLine,d.push("config key match")))}p>s&&(s=p,a=d.join(", "))}return a&&o.push(a),s}function rk(e,t){switch(e){case"declaration":return t.push("AST: declaration"),ae.declarationLine;case"export":return t.push("AST: export/public"),ae.exportLine;case"configKey":return t.push("AST: config key"),ae.configKeyLine;case"heading":return t.push("AST: heading"),ae.headingLine;case"import":return t.push("AST: import"),ae.importLine;case"comment":case"string":return t.push(`AST: ${e} (weak)`),ae.commentOrStringPenalty;case"callsite":return t.push("AST: callsite"),1;default:return 0}}function ok(e,t){let n=e.indexOf(":");if(n<0)return!1;let r=e.slice(0,n);return t?r.includes(t):/["'\w]/.test(r)}function ik(e,t,n,r,o,i){let s=0;if(n){let c=e.toLowerCase(),l=n.toLowerCase();c.split("/").some(u=>u.replace(Xa,"").includes(l))&&(s+=ae.pathSegmentToken,i.push("query token in path"))}let a=Ai(e);return r.extensions.includes(a)&&t.langType&&(s+=ae.extMatchesLangType,i.push("extension matches langType")),o==="source"&&(s+=ae.sourceDir,i.push("source file")),s}function sk(e,t,n){return t.explicitLowSignal?0:e==="generated"||e==="fixture"?(n.push(`${e} file (penalized)`),ae.lowSignalPathPenalty):e==="test"?(n.push("test file (penalized)"),ae.testPathPenalty):0}function ak(e,t){if(e<=0)return 0;let n=Math.log2(e+1)*ae.matchCountScale,r=Math.min(n,ae.matchCountCap);return e>1&&t.push(`match count saturated (${e})`),r}function Dp(e,t){let n=tk(t.keyword,t.caseSensitive);if(n.length<2||e.length<2)return;let r=new Map,o=new Map;for(let i of e){let s=n.filter(a=>ck(i,a,t.caseSensitive));if(s.length!==0){r.set(i.path,s);for(let a of s)o.set(a,(o.get(a)??0)+1)}}if(r.size!==0)return{candidateCount:e.length,fileTokens:r,documentFrequency:o}}function ck(e,t,n){let r=n?"":"i",o=new RegExp(`(^|[^\\w$])${Za(t)}([^\\w$]|$)`,r);for(let i of e.matches??[])if(o.test(i.value??""))return!0;return o.test(e.path)}function lk(e,t,n){if(!t)return 0;let r=t.fileTokens.get(e.path);if(!r?.length)return 0;let o="",i=0,s=0;for(let a of r){let c=t.documentFrequency.get(a)??t.candidateCount;if(c>t.candidateCount/2)continue;let l=Math.log2((t.candidateCount+1)/(c+1)),u=Math.min(l*ae.rareQueryTokenScale,ae.rareQueryTokenCap);u>i&&(i=u,o=a,s=c)}return i<=0?0:(n.push(`rare query token: ${o} (${s}/${t.candidateCount} files)`),i)}function Hp(e,t,n){let r=Op(e.path,t.langType,t.profileOverride),o=Ya(e.path),i=ek(t.keyword),s=[],a=0;return a+=nk(e.matches,r,t,i,s),a+=ik(e.path,t,i,r,o,s),t.queryPath&&e.path.startsWith(t.queryPath.replace(/\/+$/,"")+"/")&&(a+=ae.pathUnderQuery,s.push("under requested subtree")),a+=sk(o,t,s),Ei.test(e.path)&&!t.explicitLowSignal&&(a+=ae.lowSignalPathPenalty,s.push("low-signal path (penalized)")),a+=ak(e.matchCount??0,s),a+=lk(e,n,s),{score:Math.round(a*100)/100,profile:r.id,pathRole:o,reasons:s}}function Gp(e,t,n,r={}){if(t==="matchCount"){let d=[...e].sort(Zb);return{files:r.sortReverse?d.reverse():d,cappedCandidates:0}}if(t==="path"){let d=[...e].sort((m,f)=>m.path.localeCompare(f.path));return{files:r.sortReverse?d.reverse():d,cappedCandidates:0}}if(t==="created"||t==="modified"||t==="accessed")return{files:[...e],cappedCandidates:0};let o=r.candidateCap??_p,i=e,s=[],a=0;if(e.length>o){let d=[...e].sort(Zb);i=d.slice(0,o),s=d.slice(o),a=s.length}let c=Dp(i,n),l=i.map(d=>{try{return{file:d,s:Hp(d,n,c)}}catch{return{file:d,s:uk()}}});l.sort((d,m)=>{if(m.s.score!==d.s.score)return m.s.score-d.s.score;let f=(m.file.matchCount??0)-(d.file.matchCount??0);return f!==0?f:d.file.path.localeCompare(m.file.path)});let u=[...l.map(d=>d.file),...s],p={files:r.sortReverse?u.reverse():u,cappedCandidates:a};return r.debug&&(p.debug=new Map(l.map(d=>[d.file.path,d.s]))),p}function uk(){return{score:0,profile:"generic",pathRole:"unknown",reasons:["ranking unavailable for this file"]}}function Zb(e,t){let n=(t.matchCount??0)-(e.matchCount??0);return n!==0?n:e.path.localeCompare(t.path)}var qb=8,pk=new Set(["async","await","break","case","catch","class","const","def","do","else","enum","export","for","function","if","import","interface","let","match","return","struct","switch","type","var","while","true","false","null","undefined","NaN","Infinity","this","super"]),dk=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Jb(e,t,n,r){let o=e.find(a=>a.path),i=o?.matches?.find(a=>a.line),s={};if(n==="structural"&&e.some(a=>a.matches?.some(c=>c.capturesTruncated===!0))&&(s.expandCaptures={tool:"local.text",query:qa({...t,captureText:!0}),why:"Replay this structural page with verbatim capture text because the default capture budget omitted or shortened capture payloads.",confidence:"exact"}),o?.path){if(i?.line){let c=mk(i);s.fetch={tool:"localGetFileContent",query:qa({path:o.path,startLine:c.startLine,endLine:c.endLine,minify:"none"}),why:'Read exact source around the first match (set minify:"standard" for a token-lean slice, or drop the line range with minify:"symbols" for a skeleton).',confidence:"exact"}}else s.fetch={tool:"localGetFileContent",query:{path:o.path,minify:"standard"},why:'Read the first matched file (minify:"symbols" gives a skeleton for orientation; minify:"none" gives exact bytes).',confidence:r.isFileListMode?"low":"exact"};let a=fk(i,t,n);if(a&&i?.line){let c={uri:o.path,symbolName:a.symbol,lineHint:a.line??i.line};s.lspDefinition={tool:"lspGetSemantics",query:{...c,type:"definition"},why:"Use the grep line as an LSP lineHint to resolve the symbol definition.",confidence:"low"},s.lspReferences={tool:"lspGetSemantics",query:{...c,type:"references"},why:"Use the grep line as an LSP lineHint to inspect semantic usages.",confidence:"low"}}}return r.currentPage<r.totalFilePages&&r.currentPage<1e3&&(s.nextPage={tool:"local.text",query:qa({...t,page:r.currentPage+1}),why:"Continue to the next page of matched files.",confidence:"exact"}),r.hasFileWithMoreMatches&&r.matchPage<1e3&&(s.nextMatchPage={tool:"local.text",query:qa({...t,maxMatchesPerFile:r.matchesPerPage,matchPage:r.matchPage+1}),why:"Continue within files that have more matches than this response returned.",confidence:"exact"}),s}function mk(e){let t=Math.max(1,e.line??1),n=Math.max(t,e.endLine??t);return{startLine:Math.max(1,t-qb),endLine:n+qb}}function fk(e,t,n){if(t.output==="countLines"||t.output==="countMatches"||t.unique==="list"||t.unique==="count")return;if(n==="structural")return hk(e?.metavars,e?.metavarRanges);if(t.matchWindow)return;if(t.output==="matchOnly"){let o=Bp(e?.value);return o?{symbol:o}:void 0}let r=Bp(t.searchText);return r?{symbol:r}:void 0}function hk(e,t){if(e)for(let[n,r]of Object.entries(e))for(let[o,i]of r.entries()){let s=Bp(i);if(s)return{symbol:s,line:t?.[n]?.[o]?.line}}}function Bp(e){if(typeof e!="string")return;let t=e.trim();if(dk.test(t)&&!pk.has(t))return t}function qa(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function Ja(e,t,n,r,o){let i=t.sort??"relevance",s=n==="structural"&&i==="relevance"?"path":i,a;try{a=Gp(e,s,yk(t),{debug:!1,sortReverse:t.sortReverse})}catch{a={files:e,cappedCandidates:0},r.push("Relevance ranking failed; returning results in unranked engine order.")}let c=a.files,l=a.debug,u=c.length,p=t.output==="files"||t.output==="filesWithout",d=t.output==="countLines"||t.output==="countMatches",m=p||d,f=c.reduce((A,q)=>A+(q.matchCount??0),0),h=m?o?.totalOccurrences??o?.totalStructuralMatches??f:f,y=t,g=Math.min(y.itemsPerPage||Kt.DEFAULT_FILES_PER_PAGE,t.maxFiles||Number.POSITIVE_INFINITY),S=y.page||1,R=Math.max(1,Math.ceil(u/g)),C=(S-1)*g,P=Math.min(C+g,u),T=c.slice(C,P),E=u>0&&C>=u;E&&r.push(`page:${S} is out of range (only ${R} page(s), ${u} total file(s)) \u2014 returned 0 files. Use page:1..${R}.`);let k=y.maxMatchesPerFile||Kt.DEFAULT_MATCHES_PER_PAGE,x=T.map(A=>{let q=A.matches?.length??0,ne=Math.max(1,Math.ceil(q/k)),Me=Math.max(1,y.matchPage||1),X=(Me-1)*k,re=q>0&&X>=q,de=Math.min(X+k,q),Ee=m?void 0:A.matches?.slice(X,de),Se=Ee?.length;re&&r.push(`${A.path}: matchPage:${Me} is out of range under maxMatchesPerFile:${k} (only ${ne} page(s), ${q} total match(es) for this file) \u2014 returned 0 rows for this file. Use matchPage:1..${ne}, or drop matchPage to re-derive it from the current maxMatchesPerFile.`);let pt=l?.get(A.path);return{path:A.path,...p?{}:t.output==="countLines"?{totalMatchedLines:A.matchCount||1}:t.output==="countMatches"?{totalOccurrences:A.matchCount||1}:{totalMatchRows:q,...Se!==void 0?{returnedMatchRows:Se}:{}},...Ee!==void 0&&{matches:Ee},...pt?{ranking:{score:pt.score,profile:pt.profile,pathRole:pt.pathRole,reasons:pt.reasons}}:{},pagination:!m&&(q>k||re)?{currentPage:Me,totalPages:ne,matchesPerPage:k,totalMatches:q,hasMore:Me<ne,...Me<ne&&Me<1e3?{nextMatchPage:Me+1}:{},...re?{outOfRange:!0}:{}}:void 0}}),b=x.filter(A=>A.pagination?.hasMore),w=S<R&&S>=1e3||b.length>0&&(y.matchPage||1)>=1e3||o?.capReached===!0&&(t.maxFiles??Kt.MAX_FILES_DEFAULT)>=1e5,L=Jb(x,t,n,{isFileListMode:m,currentPage:S,totalFilePages:R,matchPage:y.matchPage||1,matchesPerPage:k,hasFileWithMoreMatches:b.length>0}),O=t.maxFiles??Kt.MAX_FILES_DEFAULT;o?.capReached===!0&&O<1e5&&(L.expandScan={tool:"local.text",query:{...t,maxFiles:Math.min(1e5,Math.max(O+1,O*2)),page:1},why:"Re-run with a larger file-scan bound because this search is partial.",confidence:"exact"});let v={searchEngine:n,...o?{stats:o}:{},files:x,pagination:{currentPage:S,totalPages:R,filesPerPage:g,totalFiles:u,...p?{}:{totalMatches:h},hasMore:S<R,...S<R&&S<1e3?{nextPage:S+1}:{},...E?{outOfRange:!0}:{}},...r.length>0?{warnings:r}:{},...Object.keys(L).length>0?{next:L}:{},...w?{terminalLimit:!0}:{},...o?.capReached===!0?{truncated:!0,partialReasons:["maxFiles"]}:{}};return gk(v,t,{totalMatches:h,totalFiles:u})}function gk(e,t,n){return e}function yk(e){let t=e.rankingProfile,n=!!(e.include?.length||vp(e.path));return{queryPath:e.path,keyword:e.searchText,langType:e.langType,caseSensitive:e.caseMode==="sensitive",wholeWord:e.wholeWord,profileOverride:t,explicitLowSignal:n}}function eS(e){let t=[],n=[],r=e.pattern;if(typeof r!="string"||r.length===0)return t.push("pattern is empty \u2014 provide a non-empty search string"),{isValid:!1,errors:t,warnings:n};let o=D.validateRipgrepPattern(r,e.fixedString,e.perlRegex);return o.valid||t.push(`invalid regex: ${o.error??"unknown regex parse error"}`),!e.fixedString&&bk(r)&&n.push(`pattern '${r}' looks literal \u2014 set regex:"fixed" to skip regex parsing and avoid accidental wildcards`),!e.perlRegex&&Sk(r)&&n.push("pattern uses lookaround (?= / ?! / ?<= / ?<!) which requires perlRegex: true; ripgrep will refuse it otherwise"),{isValid:t.length===0,errors:t,warnings:n}}function bk(e){return/[\\^$|()[\]{}+*?]/.test(e)?!1:!!(e.includes(".")&&/^[\w.\-/:]+$/.test(e)||e.length>2&&/^\w+$/.test(e))}function Sk(e){return/\(\?[=!<]/.test(e)}function Rk(e){return e==="created"||e==="modified"||e==="accessed"?e:"path"}function Ck(e){return{path:e.path,pattern:e.searchText??"",fixedString:e.regex==="fixed",perlRegex:e.regex==="perl",caseSensitive:e.caseMode==="sensitive",caseInsensitive:e.caseMode==="insensitive",wholeWord:e.wholeWord,invertMatch:e.invertMatch,multiline:e.multiline==="on"||e.multiline==="dotall",multilineDotall:e.multiline==="dotall",filesOnly:e.output==="files",filesWithoutMatch:e.output==="filesWithout",countLinesPerFile:e.output==="countLines",countMatchesPerFile:e.output==="countMatches",contextLines:e.contextLines,langType:e.langType,include:e.include,exclude:e.exclude,excludeDir:e.excludeDir,noIgnore:e.noIgnore,hidden:e.hidden,maxDepth:e.maxDepth,sort:Rk(e.sort),sortReverse:e.sortReverse,classifyMatches:e.sort==="relevance"||e.sort===void 0,maxSnippetChars:e.matchContentLength,onlyMatching:e.output==="matchOnly",unique:e.unique==="list"||e.unique==="count",countUnique:e.unique==="count",matchWindow:e.matchWindow,maxCollectedFiles:1e4}}function xk(e){let t=0;for(let n of e)if(t+=n.path.length,n.matches)for(let r of n.matches)t+=r.value?.length??0;return t}async function tS(e){let t=[],n=Vb(e);if(!n.isValid)return N(new Error(`Query validation failed: ${n.errors.join("; ")}`),e,{toolName:I.LOCAL_RIPGREP,extra:{warnings:n.warnings}});t.push(...n.warnings);let r=so.safeParse(e);if(!r.success){let h=r.error.issues.map(y=>y.message);return N(new Error(`Query validation failed: ${h.join(", ")}`),e,{toolName:I.LOCAL_RIPGREP,extra:{warnings:t}})}let o=r.data;if(!o.path)return N(new Error("Path is required for search"),o,{toolName:I.LOCAL_RIPGREP,extra:{warnings:t}});let s=lt(o,I.LOCAL_RIPGREP);if(!s.isValid)return s.errorResult;let a={...o,path:s.sanitizedPath},c=eS({pattern:a.searchText??"",fixedString:a.regex==="fixed",perlRegex:a.regex==="perl"});if(!c.isValid)return N(new Error(`Pattern validation failed: ${c.errors.join("; ")}`),o,{toolName:I.LOCAL_RIPGREP,extra:{warnings:[...t,...c.warnings]}});let l=[...c.warnings],u;try{u=await D.searchRipgrep(Ck(a))}catch(h){return N(h instanceof Error?h:new Error(String(h)),o,{toolName:I.LOCAL_RIPGREP})}let p=u.files.map(h=>({path:h.path,matchCount:h.matchCount,matches:h.matches.map(y=>{let g={line:y.line,column:y.column,value:y.value};return y.count!==void 0&&(g.count=y.count),y.kind!==void 0&&(g.kind=y.kind),y.scoreHint!==void 0&&(g.scoreHint=y.scoreHint),g})})),d=xk(p),m={totalOccurrences:u.stats.matchCount,matchedLines:u.stats.matchedLines,filesMatched:p.length,filesSearched:u.stats.filesSearched,bytesSearched:u.stats.bytesSearched??void 0,searchTime:u.stats.searchTime,capped:u.stats.capped??void 0,capReason:u.stats.capReason??void 0};if(u.stats.capped&&l.push(`Search hit native collection cap (${u.stats.capReason??"resource limit"}); narrow path/include/keywords for exhaustive results.`),p.length===0){let h=['No matches. Try caseMode:"insensitive", a shorter term, or regex:"smart".',...a.include?.length||a.maxDepth!==void 0?["Remove include/maxDepth to search a wider tree."]:[],...a.wholeWord?["Set wholeWord:false to match substrings."]:[]];return W({status:"empty",searchEngine:"rg",stats:m,hints:h,warnings:[...t,...l]},d)}a.output!=="files"&&d>Kt.LARGE_RESULT_BYTES_HINT&&l.push(`Result payload is large (~${Math.round(d/1024)}KB).`);let f=await Ja(p,o,"rg",[...t,...l],m);return W(f,d)}import{readFile as Tk,stat as Ek}from"node:fs/promises";var nS={bash:{kind:"extension",canonicalLanguage:"Shell",extension:"bash",extensions:["bash"]},c:{kind:"extension",canonicalLanguage:"C",extension:"c",extensions:["c"]},cc:{kind:"extension",canonicalLanguage:"C++",extension:"cc",extensions:["cc"]},cjs:{kind:"extension",canonicalLanguage:"JavaScript",extension:"cjs",extensions:["cjs"]},cpp:{kind:"extension",canonicalLanguage:"C++",extension:"cpp",extensions:["cpp"]},cs:{kind:"extension",canonicalLanguage:"C#",extension:"cs",extensions:["cs"]},cts:{kind:"extension",canonicalLanguage:"TypeScript",extension:"cts",extensions:["cts"]},cxx:{kind:"extension",canonicalLanguage:"C++",extension:"cxx",extensions:["cxx"]},go:{kind:"extension",canonicalLanguage:"Go",extension:"go",extensions:["go"]},h:{kind:"extension",canonicalLanguage:"C",extension:"h",extensions:["h"]},html:{kind:"extension",canonicalLanguage:"HTML",extension:"html",extensions:["html"]},htm:{kind:"extension",canonicalLanguage:"HTML",extension:"htm",extensions:["htm"]},hpp:{kind:"extension",canonicalLanguage:"C++",extension:"hpp",extensions:["hpp"]},js:{kind:"extension",canonicalLanguage:"JavaScript",extension:"js",extensions:["js"]},json:{kind:"extension",canonicalLanguage:"JSON",extension:"json",extensions:["json"]},jsonc:{kind:"extension",canonicalLanguage:"JSON",extension:"jsonc",extensions:["jsonc"]},jsx:{kind:"extension",canonicalLanguage:"JavaScript",extension:"jsx",extensions:["jsx"]},java:{kind:"extension",canonicalLanguage:"Java",extension:"java",extensions:["java"]},less:{kind:"extension",canonicalLanguage:"Less",extension:"less",extensions:["less"]},md:{kind:"extension",canonicalLanguage:"Markdown",extension:"md",extensions:["md"]},mdx:{kind:"extension",canonicalLanguage:"MDX",extension:"mdx",extensions:["mdx"]},mjs:{kind:"extension",canonicalLanguage:"JavaScript",extension:"mjs",extensions:["mjs"]},mts:{kind:"extension",canonicalLanguage:"TypeScript",extension:"mts",extensions:["mts"]},py:{kind:"extension",canonicalLanguage:"Python",extension:"py",extensions:["py"]},pyi:{kind:"extension",canonicalLanguage:"Python",extension:"pyi",extensions:["pyi"]},rs:{kind:"extension",canonicalLanguage:"Rust",extension:"rs",extensions:["rs"]},scala:{kind:"extension",canonicalLanguage:"Scala",extension:"scala",extensions:["scala"]},sc:{kind:"extension",canonicalLanguage:"Scala",extension:"sc",extensions:["sc"]},scss:{kind:"extension",canonicalLanguage:"SCSS",extension:"scss",extensions:["scss"]},sh:{kind:"extension",canonicalLanguage:"Shell",extension:"sh",extensions:["sh"]},ts:{kind:"extension",canonicalLanguage:"TypeScript",extension:"ts",extensions:["ts"]},tsx:{kind:"extension",canonicalLanguage:"TypeScript",extension:"tsx",extensions:["tsx"]},toml:{kind:"extension",canonicalLanguage:"TOML",extension:"toml",extensions:["toml"]},yaml:{kind:"extension",canonicalLanguage:"YAML",extension:"yaml",extensions:["yaml"]},yml:{kind:"extension",canonicalLanguage:"YAML",extension:"yml",extensions:["yml"]},zsh:{kind:"extension",canonicalLanguage:"Shell",extension:"zsh",extensions:["zsh"]}},rS={bash:{kind:"language",canonicalLanguage:"Shell",extensions:["sh","bash","zsh"]},c:{kind:"language",canonicalLanguage:"C",extensions:["c","h"]},"c++":{kind:"language",canonicalLanguage:"C++",extensions:["cpp","hpp","cc","cxx","hh","hxx"]},cpp:{kind:"language",canonicalLanguage:"C++",extensions:["cpp","hpp","cc","cxx","hh","hxx"]},csharp:{kind:"language",canonicalLanguage:"C#",extensions:["cs"]},css:{kind:"language",canonicalLanguage:"CSS",extensions:["css"]},go:{kind:"language",canonicalLanguage:"Go",extensions:["go"]},html:{kind:"language",canonicalLanguage:"HTML",extensions:["html","htm"]},java:{kind:"language",canonicalLanguage:"Java",extensions:["java"]},javascript:{kind:"language",canonicalLanguage:"JavaScript",extensions:["js","jsx","mjs","cjs"]},json:{kind:"language",canonicalLanguage:"JSON",extensions:["json","jsonc"]},less:{kind:"language",canonicalLanguage:"Less",extensions:["less"]},markdown:{kind:"language",canonicalLanguage:"Markdown",extensions:["md","markdown"]},python:{kind:"language",canonicalLanguage:"Python",extensions:["py","pyi"]},rust:{kind:"language",canonicalLanguage:"Rust",extensions:["rs"]},scala:{kind:"language",canonicalLanguage:"Scala",extensions:["scala","sc","sbt"]},scss:{kind:"language",canonicalLanguage:"SCSS",extensions:["scss"]},shell:{kind:"language",canonicalLanguage:"Shell",extensions:["sh","bash","zsh"]},typescript:{kind:"language",canonicalLanguage:"TypeScript",extensions:["ts","tsx","mts","cts"]},toml:{kind:"language",canonicalLanguage:"TOML",extensions:["toml"]},yaml:{kind:"language",canonicalLanguage:"YAML",extensions:["yaml","yml"]},yml:{kind:"language",canonicalLanguage:"YAML",extensions:["yaml","yml"]}};function wk(e){return e.trim().replace(/^\./,"").toLowerCase()}function oS(e){if(!e?.trim())return;let t=wk(e),n=nS[t]??rS[t];return n?{raw:e,normalized:t,...n}:{raw:e,normalized:t,kind:"unknown",canonicalLanguage:e.trim()}}function zp(e){let t=oS(e);if(!t)return;let r=(t.extensions?.length?t.extensions:[t.normalized.replace(/^[.*]+/,"")]).filter(Boolean).map(o=>`*.${o}`);return r.length?r:void 0}var Pk=/^\s*(\/\/|\/\*|\*|#)/;function sS(e,t,n){let r=t&&Object.keys(t).length>0;if(n)return{...e?{metavars:e}:{},...r?{metavarRanges:t??void 0}:{}};let o=!1,i;if(e){i={};for(let[a,c]of Object.entries(e))c.length<=1?(c.some(l=>l.length>120)&&(o=!0),i[a]=c.map(iS)):o=!0;Object.keys(i).length===0&&(i=void 0)}let s;if(r&&t){s={};for(let[a,c]of Object.entries(t)){let u=c.length>1?c.filter(d=>!Pk.test(d.text)):c;(u.length!==c.length||u.some(d=>d.text.length>120))&&(o=!0);let p=u.map(d=>({...d,text:iS(d.text)}));p.length>0&&(s[a]=p)}Object.keys(s).length===0&&(s=void 0)}return{...i?{metavars:i}:{},...s?{metavarRanges:s}:{},...o?{capturesTruncated:!0}:{}}}function iS(e){return e.length>120?`${e.slice(0,120)}\u2026`:e}var aS=300;function Ak(e){let t=e.replace(/\s+/g," ").trim();return t.length>aS?`${t.slice(0,aS-1)}\u2026`:t}var cS=[],lS=2e3,Lk=1e6,_k="0 structural matches. A pattern matches a complete AST node \u2014 a class/function usually needs a body (add `$$$BODY`), and Python/TS definitions may carry a return type (`-> $RET:`) or decorators the pattern must include. For partial or relational matches use a YAML `rule` instead of `pattern`.";function pS(e){if(!e||!/\)\s*\{/.test(e))return;let t=e.replace(/\)\s*\{/,"): $R {");return t===e?void 0:t}function kk(e){let t=pS(e);return t?` Try: \`${t}\`.`:""}function uS(e){return e.include?.length?e.include:zp(e.langType)}async function Ik(e){try{return(await Ek(e)).isFile()}catch{return!1}}async function Ok(e,t,n){let r=await Tk(e,"utf8"),o=await D.structuralSearch(r,e,n??t.pattern,t.rule);return{files:o.length>0?[{path:e,matches:o}]:[],totalMatches:o.length,parsedFiles:1,skippedByPreFilter:0,skippedUnsupported:0,skippedUnreadable:0,skippedLarge:0,warnings:[]}}async function dS(e){let t=lt(e,I.LOCAL_RIPGREP);if(!t.isValid)return t.errorResult;let n=await Ik(t.sanitizedPath),r=!!e.captureText,o=R=>({path:t.sanitizedPath,pattern:R??e.pattern,rule:e.rule,...uS(e)?{include:uS(e)}:{},...e.exclude?.length?{exclude:e.exclude}:{},...e.excludeDir?.length?{excludeDir:e.excludeDir}:cS.length?{excludeDir:cS}:{},...e.hidden!==void 0?{hidden:e.hidden}:{},...e.noIgnore!==void 0?{noIgnore:e.noIgnore}:{},maxFiles:e.maxFiles??lS,maxFileBytes:Lk}),i=R=>n?Ok(t.sanitizedPath,e,R):D.structuralSearchFiles(o(R)),s,a=!1,c;try{if(s=await i(),s.totalMatches===0&&e.pattern&&!e.rule&&!/[;}]\s*$/.test(e.pattern))try{let R=await i(`${e.pattern};`);R.totalMatches>0&&(s=R,a=!0)}catch{}if(s.totalMatches===0&&e.pattern&&!e.rule){let R=pS(e.pattern);if(R)try{let C=await i(R);C.totalMatches>0&&(s=C,c=R)}catch{}}}catch(R){let C=R instanceof Error?R.message:String(R),P=e.langType||"source";return N(new Error(`Invalid structural ${e.rule?"rule":"pattern"}: ${C} \u2014 use valid ${P} and match a complete node; a class/def usually needs a body (add \`$$$BODY\`). Run \`octocode tools localSearch --scheme\` for the live schema.`),e,{toolName:I.LOCAL_RIPGREP})}let l=s.files.map(R=>({path:R.path,matchCount:R.matches.length,matches:R.matches.map(C=>({line:C.startLine,endLine:C.endLine,value:Ak(C.text),column:C.startCol,endColumn:C.endCol,...sS(C.metavars,C.metavarRanges,r)}))})),u=e.maxDepth,p=l,d=0;if(typeof u=="number"&&!n){let R=t.sanitizedPath.replace(/\/+$/,"");p=l.filter(C=>(C.path.startsWith(`${R}/`)?C.path.slice(R.length+1):C.path).split("/").length<=u+1),d=l.length-p.length}let m=p.reduce((R,C)=>R+(C.matchCount??C.matches?.length??0),0),f=e.maxFiles??lS,y=(s.parsedFiles??0)+(s.skippedUnreadable??0)+(s.skippedLarge??0)>=f,g={totalStructuralMatches:typeof u=="number"?m:s.totalMatches,...y?{capReached:!0}:{}},S=[...s.warnings];if(d>0&&S.push(`maxDepth ${u}: dropped ${d} deeper file(s) \u2014 raise maxDepth or omit it to include them.`),a&&S.push(`Matched after appending ';' \u2014 statement patterns must parse as complete statements; the bare pattern parsed as an expression fragment. Results are for "${e.pattern};".`),c&&S.push(`Matched after adding a return-type metavar \u2014 the bare pattern missed functions that declare a return type. Results are for "${c}".`),s.totalMatches===0&&!n)try{let R=D.structuralSearchFilesDetailed(o()),C=R.query;if(C){let P=[`query parsed as ${C.kind}`];C.literalAnchor&&P.push(`literal anchor "${C.literalAnchor}"`),P.push(`pre-filter: ${C.preFilter}`),C.unsafeReason&&P.push(`unsafe: ${C.unsafeReason}`),S.push(`Engine explanation: ${P.join(", ")}.`);let T=[...C.diagnostics??[],...R.diagnostics??[]];for(let E of T.slice(0,3))S.push(`Engine ${E.severity} [${E.stage}/${E.code}]: ${E.message}${E.recovery?` \u2014 ${E.recovery}`:""}`);T.length>3&&S.push(`${T.length-3} additional engine diagnostic(s) omitted from this summary.`)}}catch{}return(p.length===0||g.totalStructuralMatches===0)&&e.pattern&&!e.rule&&d===0&&S.push(_k+kk(e.pattern)),await Ja(p,e,"structural",S,g)}function vk(e){let t=e.mode;if(!t)return e;let n={...e};return t==="discovery"&&n.output==="content"?n.output="files":t==="detailed"&&n.contextLines===void 0&&(n.contextLines=3),n}async function _i(e){let t=vk(e);if(t.mode==="structural")return await dS(t);t.contextLines===void 0&&(t.contextLines=2);try{return await tS(t)}catch(n){let r=n instanceof Error?n.message:String(n);return r.includes("Output size limit exceeded")?{status:"error",error:r,errorCode:j.OUTPUT_TOO_LARGE}:N(n,t,{toolName:I.LOCAL_RIPGREP})}}var Fk=new Set(["+","*","?"]),Mk=1e3;function Nk(e,t){let n=t+1;for(;n<e.length&&e[n]!=="]";)e[n]==="\\"&&n++,n++;return n+1}function mS(e,t){let n=e[t];return n===void 0?!1:Fk.has(n)||n==="{"&&Gk(e,t)}function Dk(e,t,n){let r=n.pop()??!1,o=mS(e,t+1);return o&&r?{unsafe:!0,next:t+1}:((o||r)&&n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:o?fS(e,t+1):t+1})}function Hk(e,t,n){return n.some(r=>r)?{unsafe:!0,next:t+1}:(n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:fS(e,t)})}function jp(e){if(e.length>Mk)return{safe:!1,reason:"Pattern too long (max 1000 characters)"};let t="Nested quantifiers detected (potential ReDoS). Simplify the pattern.",n=[],r=0;for(;r<e.length;){let o=e[r];if(o==="\\"){r+=2;continue}if(o==="["){r=Nk(e,r);continue}if(o==="("){n.push(!1),r++;continue}if(o===")"){let i=Dk(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}if(mS(e,r)){let i=Hk(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}r++}return{safe:!0}}function Gk(e,t){if(e[t]!=="{")return!1;let n=e.indexOf("}",t);return n===-1?!1:/^\{\d+,?\d*\}$/.test(e.slice(t,n+1))}function fS(e,t){return e[t]==="{"?t=e.indexOf("}",t)+1:t++,t<e.length&&(e[t]==="?"||e[t]==="+")&&t++,t}function HY(e,t){let n=jp(e);if(!n.safe)throw new Error(n.reason);return new RegExp(e,t)}function hS(e,t){let n=e;if(t.pattern){let r=t.pattern;if(r.includes("*")||r.includes("?")||r.includes("[")){let i=r.replace(/[.+^${}()|[\]\\*?]/g,"\\$&");i=i.replace(/\\\*/g,".*").replace(/\\\?/g,".").replace(/\\\[!/g,"[^").replace(/\\\[/g,"[").replace(/\\\]/g,"]");try{let s=`^${i}$`;if(!jp(s).safe)return n=n.filter(l=>(l.name.includes("/")?l.name.split("/").pop():l.name).includes(r)),n;let c=new RegExp(s,"i");n=n.filter(l=>{let u=l.name.includes("/")?l.name.split("/").pop():l.name;return c.test(u)})}catch{n=n.filter(s=>(s.name.includes("/")?s.name.split("/").pop():s.name).includes(r))}}else n=n.filter(i=>(i.name.includes("/")?i.name.split("/").pop():i.name).includes(r))}return n}function gS(e){let t=[],n=[],r=[];for(let o of e)o.type==="directory"?n.push(o.name):o.type==="symlink"?r.push(o.name):t.push(o.size?`${o.name} (${o.size})`:o.name);return{...t.length>0&&{files:t},...n.length>0&&{folders:n},...r.length>0&&{links:r}}}function yS(e){let t={type:e.type==="directory"?"dir":e.type==="symlink"?"link":"file"};return e.depth!==void 0&&e.depth>0&&(t.depth=e.depth),e.size&&e.type==="file"&&(t.size=e.size),e.modified&&(t.modified=e.modified),e.permissions&&(t.permissions=e.permissions),t}function bS(e){let t={},n=e.find(o=>o.type==="file"&&o.path);n?.path&&(t.fetch={tool:"localGetFileContent",query:{path:n.path,minify:"standard"},why:'Read the first listed file (minify:"symbols" for a skeleton, minify:"none" for exact bytes).',confidence:"exact"});let r=e.find(o=>o.type==="directory"&&o.path);return r?.path&&(t.viewDeeper={tool:"local.tree",query:{path:r.path},why:"Descend into the first listed subdirectory.",confidence:"exact"}),t.fetch||t.viewDeeper?t:void 0}var Bk=["node_modules",".git","dist","build","out","coverage","target",".next",".cache"];function zk(e,t){let n=t??Bk,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}async function SS(e){try{let t=lt(e,I.LOCAL_VIEW_STRUCTURE);if(!t.isValid)return t.errorResult;let n=e.detail==="modified"||e.detail==="full"||e.sortBy==="time";return await jk(e,t.sanitizedPath,n)}catch(t){let n=Xe.toolExecutionFailed("LOCAL_VIEW_STRUCTURE",t instanceof Error?t:void 0);return{status:"error",error:n.message,errorCode:n.errorCode}}}async function jk(e,t,n=!1){let r=!!(e.maxDepth||e.recursive),o=r?e.maxDepth||(e.recursive?5:2):1,i=Uk(e),s=Qk(e,i),a=r&&s?1e4:1e4,c=zk(t,e.excludeDir),l;try{l=await D.queryFileSystem({path:t,recursive:r,includeRoot:!1,showHidden:e.hidden??!1,maxDepth:o,names:i,extensions:e.extensions,entryType:$k(e),excludeDir:c,limit:a})}catch(O){return Kk(O,e,t)}let u=l.entries.map(O=>Wk(O,n,e.detail==="full")),p=hS(u,e),d=e.sortBy??"name";p=p.sort((O,v)=>{let A=0;switch(d){case"size":{let q=O.sizeBytes??(O.size?wi(O.size):0),ne=v.sizeBytes??(v.size?wi(v.size):0);A=q-ne;break}case"time":n&&O.modified&&v.modified?A=O.modified.localeCompare(v.modified):A=O.name.localeCompare(v.name);break;case"extension":A=(O.extension||"").localeCompare(v.extension||"");break;default:A=O.name.localeCompare(v.name);break}return e.reverse?-A:A});let m=p.length;e.limit&&(p=p.slice(0,e.limit));let f=p.length<m,h=l.wasCapped,y=p.length,{paginatedEntries:g,pagination:S}=Ap(p,e),C=e.detail==="full"||e.detail==="modified"?{path:t,entries:g.map(O=>({...yS(O),path:O.path??`${t.replace(/\/$/,"")}/${O.name}`}))}:{path:t,...gS(g)},P=[...l.warnings,...Pi({skipped:l.skipped,permissionDenied:l.permissionDenied}),...l.wasCapped?[`Results capped at ${a} entries during the walk before sorting \u2014 sortBy:"${d}" only orders that partial set, not the true top-N across the whole tree. Add pattern/extensions/entryType/excludeDir or reduce depth to narrow the scope.`]:[],...S.outOfRange?[`page:${e.page} is out of range (only ${S.totalPages} page(s), ${S.totalEntries} total entries) \u2014 returned page ${S.currentPage} instead.`]:[]],T=y===0,E=Ep(p),k=bS(g)??{},x=e.limit??1e4,b=f&&x<1e4,w=S.hasMore&&S.currentPage>=1e3||(f||h)&&!b,L={...k,...S.hasMore&&!w?{nextPage:We(I.LOCAL_VIEW_STRUCTURE,{...e,page:S.currentPage+1},"Continue to the next page of directory entries.")}:{},...b?{expandLimit:We(I.LOCAL_VIEW_STRUCTURE,{...e,limit:Math.min(1e4,Math.max(x+1,x*2)),page:1},"Re-run with a larger entry limit because directory entries remain.")}:{}};return W({...T?{status:"empty"}:{},...C,summary:E,...S.hasMore||S.totalPages>1||S.outOfRange?{pagination:S}:{},...Object.keys(L).length>0?{next:L}:{},...w?{terminalLimit:!0}:{},...f||h?{truncated:!0,partialReasons:[...f?["limit"]:[],...h?["walkLimit"]:[]],totalAvailable:Math.max(l.totalDiscovered,m)}:{},...P.length>0&&{warnings:P}},l.entries.reduce((O,v)=>O+v.path.length,0))}function Qk(e,t){return!!((typeof e.pattern=="string"?e.pattern:void 0)&&!t)}function Uk(e){let t=typeof e.pattern=="string"?e.pattern:void 0;if(t&&!t.includes("["))return t.includes("*")||t.includes("?")?[t]:[`*${t}*`]}function $k(e){return e.entryType}function Wk(e,t,n){let r=e.entryType==="directory"?"directory":e.entryType==="symlink"?"symlink":"file",o={name:e.relativePath||e.name,path:e.path,type:r,...e.size!==void 0?{size:io(e.size),sizeBytes:e.size}:{},...e.extension?{extension:e.extension}:{},depth:e.depth};return(n||t)&&e.modifiedMs!==void 0&&(o.modified=new Date(e.modifiedMs).toISOString()),n&&e.permissions&&(o.permissions=Vk(e.permissions)),o}function Vk(e){let t=Number.parseInt(e,8);if(!Number.isFinite(t))return e;let n=["---","--x","-w-","-wx","r--","r-x","rw-","rwx"];return`${n[t>>6&7]}${n[t>>3&7]}${n[t&7]}`}function Kk(e,t,n){let r=e instanceof Error?e.message:String(e),o=/ENOENT|not found|no such file/i.test(r),i=/EACCES|permission denied/i.test(r),s=/ENOTDIR|not a directory/i.test(r),a=Xe.pathValidationFailed(n,o?`Directory not found: ${n}`:i?`Permission denied: ${n}`:s?`Not a directory: ${n}`:`Cannot access path: ${n}`);return N(a,t,{toolName:I.LOCAL_VIEW_STRUCTURE})}import{z as CS}from"zod";function Qp(e,t){let{pageSize:n,reverse:r,...o}=e,i={...o,...n!==void 0?{itemsPerPage:n}:{},...r!==void 0?{sortReverse:r}:{}};return t==="paginated"||t==="discovery"||t==="detailed"?{...i,mode:t}:{...i,mode:"paginated",output:t}}var[Xk,Yk,Zk,qk,Jk]=$l.options,RS=CS.enum(["content","files","countMatches"]).optional().default("content").describe("Structural result shape; content is the default."),ao=CS.union([Xk,Yk.extend({resultView:RS}),Zk.extend({resultView:RS}),qk,Jk]),Up=Z(ao,{maxQueries:5});var tI={"local.text":"text","local.files":"files","local.tree":"tree"};async function xS(e){return he(e.queries||[],t=>Ct({toolName:et,query:t,contextMessage:"localSearch execution failed",execute:async()=>{let n=ao.safeParse(t);if(!n.success)throw n.error;try{await eI(n.data.path)}catch(r){throw Xe.fileAccessFailed(n.data.path,r instanceof Error?r:void 0)}return $p(await nI(n.data))}}),{toolName:et},e)}async function nI(e){switch(e.operation){case"text":{let{operation:t,resultView:n,...r}=e;return _i(so.parse(Qp(r,n)))}case"structural":{let{operation:t,resultView:n,...r}=e;return _i(so.parse({...Qp(r,n),mode:"structural",output:n}))}case"files":{let{operation:t,pathRegex:n,limit:r,sort:o,pageSize:i,...s}=e;return Wb({...s,regex:n,limit:r,sortBy:o,itemsPerPage:i})}case"tree":{let{operation:t,namePattern:n,limit:r,sort:o,pageSize:i,...s}=e;return SS({...s,pattern:n,limit:r,sortBy:o,itemsPerPage:i})}default:throw new Error("Unsupported localSearch operation")}}function $p(e){if(Array.isArray(e))return e.map($p);if(!e||typeof e!="object")return e;let t=Object.fromEntries(Object.entries(e).map(([r,o])=>[r,$p(o)])),n=typeof t.tool=="string"?tI[t.tool]:void 0;if(t.tool==="local.text"&&t.query&&typeof t.query=="object"&&t.query.mode==="structural"&&(n="structural"),n&&(t.tool=et,t.query&&typeof t.query=="object")){let r={...t.query};delete r.goal,delete r.reasoning,n==="text"?(r.resultView=typeof r.output=="string"&&r.output!=="content"?r.output:typeof r.mode=="string"&&r.mode!=="structural"?r.mode:"paginated",delete r.mode,delete r.output):n==="structural"&&(r.resultView=typeof r.output=="string"?r.output:"content",delete r.mode,delete r.output,delete r.searchText,delete r.regex,delete r.caseMode,delete r.wholeWord,delete r.invertMatch,delete r.multiline,delete r.unique,delete r.matchWindow),n==="text"||n==="structural"?(r.pageSize=r.itemsPerPage,r.reverse=r.sortReverse,delete r.itemsPerPage,delete r.sortReverse):(r.pageSize=r.itemsPerPage,r.sort=r.sortBy,delete r.itemsPerPage,delete r.sortBy,n==="files"?(r.pathRegex=r.regex,delete r.regex):(r.namePattern=r.pattern,delete r.pattern)),t.query={operation:n,...r}}return t}import{acquirePooledClientDetailed as JI,isLanguageServerAvailable as eO}from"@octocodeai/octocode-engine/lsp/manager";import{resolveWorkspaceRootForFile as tO}from"@octocodeai/octocode-engine/lsp/workspaceRoot";var wS=["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation","workspaceSymbol","supertypes","subtypes","diagnostic"];function cn(e){return{name:e.name,uri:e.uri,foundAtLine:e.foundAtLine,...e.orderHint!==void 0&&{orderHint:e.orderHint},...e.isAmbiguous===!0&&{isAmbiguous:!0},...e.lineDeviation!==void 0&&{lineDeviation:e.lineDeviation}}}function Wp(e){let t=e.displayRange??(e.range?{startLine:e.range.start.line+1,endLine:e.range.end.line+1}:void 0);return{uri:e.uri,...e.content!==void 0&&{content:e.content},...t&&{displayRange:t},...e.isDefinition&&{isDefinition:!0}}}var rI=new Set(["noLocations","noReferences","noCalls","noTypeHierarchy","noHover"]);function oI(e){let t=e.payload;return t.kind==="empty"?t.category:t.empty?.category}function PS(e,t){if(t===void 0||t==="progressIdle")return e;let n=oI(e);if(!n||!rI.has(n))return e;let r=`Language server did not confirm indexing completion (readiness: ${t}) \u2014 zero results may mean the project is not yet indexed, not that the symbol is absent. Retry the query, or warm the relevant consumer files first.`;return{...e,warnings:[...e.warnings??[],r]}}import{readFile as iI,stat as sI}from"node:fs/promises";import{SymbolResolver as aI,SymbolResolutionError as cI}from"@octocodeai/octocode-engine/lsp/resolver";import{toUri as lI}from"@octocodeai/octocode-engine/lsp/uri";import{LSP_ERROR_CODES as ec}from"@octocodeai/octocode-engine/lsp/lspErrorCodes";async function Vp(e,t){let n=e.uri,r=lt({...e,path:n},t);if(!r.isValid)return{ok:!1,error:r.errorResult};let o=r.sanitizedPath;try{if((await sI(o)).isDirectory())return{ok:!1,error:{status:"error",error:`Path is a directory: ${o}.`,errorType:"not_a_file",errorCode:ec.LSP_REQUEST_FAILED,hints:["Choose a source file, or use workspaceSymbol with symbolName."]}}}catch{return{ok:!1,error:{status:"error",error:`File not found: ${o}.`,errorType:"file_not_found",errorCode:ec.LSP_REQUEST_FAILED,hints:['Use localSearch with operation:"files" to resolve the path.']}}}try{return{ok:!0,value:{uri:lI(o),absolutePath:o,content:await iI(o,"utf-8")}}}catch(i){return{ok:!1,error:{status:"error",error:i instanceof Error?i.message:String(i),errorType:"file_not_found",errorCode:ec.LSP_REQUEST_FAILED,hints:[`Could not read file: ${n??"<missing>"}`]}}}}async function TS(e,t){let n=await Vp(e,t);if(n.ok===!1)return n;if(e.type==="documentSymbols")return{ok:!1,error:{status:"error",error:"documentSymbols is file-level and does not use a symbol anchor"}};let r=new aI({lineSearchRadius:5});try{let o=r.resolvePositionFromContent(n.value.content,{symbolName:e.symbolName,lineHint:e.lineHint,orderHint:e.orderHint??0}),i=e.symbolName.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`\\b${i}\\b`,"g"),a=(n.value.content.match(s)??[]).length,c=e.lineHint!==void 0?Math.abs(o.foundAtLine-e.lineHint):void 0,l=a>1&&c!==void 0&&c>0?!0:void 0;return{ok:!0,value:{...n.value,resolvedSymbol:{name:e.symbolName,uri:n.value.uri,range:uI(o.position),foundAtLine:o.foundAtLine,orderHint:e.orderHint,position:o.position,...l&&{isAmbiguous:l},...c!==void 0&&c>0?{lineDeviation:c}:{}}}}}catch(o){if(o instanceof cI)return{ok:!1,error:{status:"empty",error:o.message,errorType:"symbol_not_found",errorCode:ec.SYMBOL_NOT_FOUND,searchRadius:o.searchRadius,hints:[`Symbol "${e.symbolName}" was not found near line ${e.lineHint}.`,'Run localSearch with operation:"text" and the exact symbol name to refresh lineHint, then retry.']}};throw o}}function uI(e){return{start:e,end:{line:e.line,character:e.character}}}import Oi from"node:path";import{readFile as xI}from"node:fs/promises";import{resolveImportAliasDefinitions as wI}from"@octocodeai/octocode-engine/lsp/resolver";var Hn=40,tc=40,Kp=10;function Xp(e,t){return/unsupported/i.test(t)?"unsupportedOperation":/could not find symbol|symbol.*not found/i.test(t)?"symbolNotFound":/call/i.test(t)?"noCalls":e==="references"?"noReferences":e==="hover"?"noHover":e==="documentSymbols"?"anchorFailed":"noLocations"}function Yp(e,t){let n=e.uri??"";return{type:e.type,uri:n,lsp:{},payload:{kind:"empty",category:Xp(e.type,t),reason:t}}}function Pt(e,t,n,r=!1){return{type:e,uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:r},payload:{kind:"empty",category:Xp(e,n),reason:n}}}function Tt(e,t,n){let r=Math.max(1,n),o=Math.max(1,Math.ceil(e.length/r)),i=Math.min(Math.max(1,t),o),s=(i-1)*r,a=e.slice(s,s+r),c=i<o;return{pageItems:a,pagination:{currentPage:i,totalPages:o,totalResults:e.length,hasMore:c,pageSize:r,...c&&i<1e3?{nextPage:i+1}:{}}}}function ki(e,t,n,r,o){let i=o.length>0,s=o.map(Wp),{pageItems:a,pagination:c}=Tt(s,e.page??1,e.pageSize??tc);return{type:e.type,uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:r},payload:i?{kind:n,locations:a}:{kind:"empty",category:"noLocations",reason:`${r} returned no locations`},...i?{pagination:c}:{}}}function Zp(e,t,n,r){let o=n.map(p=>{let d=p.uri===t.uri&&p.range.start.line===t.resolvedSymbol.position.line&&p.range.start.character===t.resolvedSymbol.position.character;return{...p,...d?{isDefinition:!0}:{}}}),i=e.groupByFile?ES(o):void 0,s=i??o.map(Wp),{pageItems:a,pagination:c}=Tt(s,e.page??1,e.pageSize??tc),l=o.length===0?{category:"noReferences",reason:"referencesProvider returned no references"}:void 0,u=r?.possiblyTruncated===!0?[`Reference warmup opened ${r.warmedFiles}/${r.candidates} candidate file(s) and may be incomplete because the candidate set hit the warmup cap; narrow workspaceRoot/path or confirm with localSearch operation:"text" before unused/safe-delete claims.`]:[];return{type:"references",uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"referencesProvider",source:"lsp"},payload:{kind:"references",...i?{byFile:a}:{locations:a},totalReferences:o.length,totalFiles:new Set(o.map(p=>p.uri)).size,...o.length>0&&o.every(p=>p.isDefinition)?{definitionOnly:!0}:{},...r?{warmup:r}:{},...l?{empty:l}:{}},pagination:c,...u.length>0?{warnings:u}:{}}}async function qp(e,t,n){let r=AS(n),o=!!(r.markdown||r.text);return{type:"hover",uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"hoverProvider"},payload:o?{kind:"hover",...r}:{kind:"empty",category:"noHover",reason:"hoverProvider returned no hover content"}}}function ES(e){let t=new Map;for(let n of e){let r=n.range.start.line+1,o=t.get(n.uri);if(o){o.count+=1,o.lines.push(r),n.isDefinition&&(o.hasDefinition=!0);continue}t.set(n.uri,{uri:n.uri,count:1,firstLine:r,firstCharacter:n.range.start.character,lines:[r],...n.isDefinition?{hasDefinition:!0}:{}})}return[...t.values()]}function AS(e){if(!e||typeof e!="object")return{};let n=e.contents;if(typeof n=="string")return{text:n.trim()};if(Array.isArray(n))return{markdown:n.map(r=>LS(r)).join(`
55
+ `).trim()};if(n&&typeof n=="object"){let r=n;if(typeof r.value=="string")return r.kind==="markdown"?{markdown:r.value.trim()}:{text:r.value.trim()}}return{}}function LS(e){if(typeof e=="string")return e;if(e&&typeof e=="object"){let t=e.value;if(typeof t=="string")return t}return String(e)}import{safeReadLineWindow as pI}from"@octocodeai/octocode-engine/lsp/validation";var dI={maxNodes:100,maxRequests:50},_S={truncatedByDepth:!1,truncatedByBudget:!1,visitedNodeCount:0,requestCount:0,cycleCount:0,failedRequestCount:0};function kS(e){return{...dI,...e,visitedNodeCount:0,requestCount:0,truncatedByBudget:!1}}function IS(e){return e.requestCount>=e.maxRequests?(e.truncatedByBudget=!0,!1):(e.requestCount+=1,!0)}function OS(e){return e.visitedNodeCount>=e.maxNodes?(e.truncatedByBudget=!0,!1):(e.visitedNodeCount+=1,!0)}function Xt(e,t){return{...e,truncatedByBudget:t.truncatedByBudget,visitedNodeCount:t.visitedNodeCount,requestCount:t.requestCount}}function Ii(e){return`${e.uri}:${e.range.start.line}:${e.name}`}async function vS(e,t,n){if(t<=0)return e;let r=n?.[0]?.start.line??e.range.start.line,o=await pI(e.uri,r,t);if(!o)return e;let i=Xo(o).length,s=Math.max(0,r-t),a=s+Math.max(0,i-1);return{...e,content:o,displayRange:{startLine:s+1,endLine:a+1}}}async function mI(e,t){return Promise.all(e.map(async n=>({...n,from:await vS(n.from,t,n.fromRanges)})))}async function fI(e,t){return Promise.all(e.map(async n=>({...n,to:await vS(n.to,t)})))}async function Jp(e,t,n,r,o,i=kS(void 0)){if(n<=0||!e)return{calls:[],..._S};if(!IS(i))return Xt({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},i);try{let s=await e.getIncomingCalls(t),a=o>0?await mI(s,o):s;if(n===1)return Xt({calls:a,truncatedByDepth:a.length>0,cycleCount:0,failedRequestCount:0},i);let c=[];for(let l of a){let u=Ii(l.from);if(r.has(u)){c.push(Xt({calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0},i));continue}if(!OS(i)||(r.add(u),c.push(await Jp(e,l.from,n-1,r,o,i)),i.truncatedByBudget))break}return Xt({calls:[...a,...c.flatMap(l=>l.calls)],truncatedByDepth:c.some(l=>l.truncatedByDepth),cycleCount:c.reduce((l,u)=>l+u.cycleCount,0),failedRequestCount:c.reduce((l,u)=>l+u.failedRequestCount,0)},i)}catch{return Xt({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1},i)}}async function ed(e,t,n,r,o,i=kS(void 0)){if(n<=0||!e)return{calls:[],..._S};if(!IS(i))return Xt({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},i);try{let s=await e.getOutgoingCalls(t),a=o>0?await fI(s,o):s;if(n===1)return Xt({calls:a,truncatedByDepth:a.length>0,cycleCount:0,failedRequestCount:0},i);let c=[];for(let l of a){let u=Ii(l.to);if(r.has(u)){c.push(Xt({calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0},i));continue}if(!OS(i)||(r.add(u),c.push(await ed(e,l.to,n-1,r,o,i)),i.truncatedByBudget))break}return Xt({calls:[...a,...c.flatMap(l=>l.calls)],truncatedByDepth:c.some(l=>l.truncatedByDepth),cycleCount:c.reduce((l,u)=>l+u.cycleCount,0),failedRequestCount:c.reduce((l,u)=>l+u.failedRequestCount,0)},i)}catch{return Xt({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1},i)}}var hI=8;function MS(e){return W(e,B(e))}function NS(e,t){return e.format!=="compact"||!td(t)?t:gI(t)}function td(e){return Nt(e)&&typeof e.type=="string"&&typeof e.uri=="string"&&Nt(e.payload)}function gI(e){return{...e,format:"compact",payload:yI(e.payload)}}function yI(e){switch(e.kind){case"definition":case"typeDefinition":case"implementation":return{kind:e.kind,locations:e.locations.map(FS)};case"references":return{kind:"references",...e.byFile?{byFile:e.byFile.map(SI)}:{locations:(e.locations??[]).map(FS)},totalReferences:e.totalReferences,totalFiles:e.totalFiles};case"callers":case"callees":case"callHierarchy":return{kind:e.kind,...e.root?{root:DS(e.root)}:{},direction:e.direction,calls:e.calls.map(RI),...e.incomingCalls!==void 0?{incomingCalls:e.incomingCalls}:{},...e.outgoingCalls!==void 0?{outgoingCalls:e.outgoingCalls}:{},completeness:e.completeness};case"documentSymbols":return{kind:"documentSymbols",symbols:e.symbols.map(bI)};case"hover":case"empty":case"workspaceSymbol":case"typeHierarchy":case"diagnostic":return e}}function bI(e){if(!Nt(e))return String(e);let t=ut(e,"line"),n=ut(e,"character"),r=ut(e,"endLine"),o=ln(e,"kind"),i=ln(e,"name"),s=ut(e,"childCount"),a=ln(e,"containerName");return[`${t}:${n}${r!==t?`-${r}`:""}`,o,i,a?`< ${a}`:"",s>0?`children=${s}`:""].filter(Boolean).join(" ")}function FS(e){if(typeof e=="string")return e;let t=e.displayRange?`${e.displayRange.startLine}-${e.displayRange.endLine}`:"?",n=e.isDefinition?" def":"",r=e.content?` | ${GS(e.content,180)}`:"";return`${e.uri}:${t}${n}${r}`}function SI(e){if(!Nt(e))return String(e);let t=ln(e,"uri"),n=ut(e,"firstLine"),r=ut(e,"firstCharacter"),o=ut(e,"count"),i=HS(e,"lines").map(a=>typeof a=="number"?a:void 0).filter(a=>a!==void 0).join(","),s=e.hasDefinition===!0?" def":"";return`${t}:${n}:${r} count=${o} lines=${i}${s}`}function RI(e){if(!Nt(e))return String(e);let t=ln(e,"direction"),n=DS(e.item),r=HS(e,"ranges").map(CI).join(","),o=ut(e,"rangeCount"),i=ut(e,"rangeSampleCount"),s=ln(e,"contentPreview");return[t,n,r?`ranges=${r}`:"",o>i?`totalRanges=${o}`:"",s?`| ${GS(s,180)}`:""].filter(Boolean).join(" ")}function DS(e){if(!Nt(e))return String(e);let t=ln(e,"name"),n=ln(e,"kind"),r=ln(e,"uri"),o=ut(e,"line"),i=ut(e,"endLine"),s=ut(e,"selectionLine"),a=s>0?` sel=${s}`:"";return`${t} ${n} ${r}:${o}-${i}${a}`}function CI(e){return Nt(e)?`${ut(e,"line")}:${ut(e,"character")}`:String(e)}function Nt(e){return typeof e=="object"&&e!==null}function ln(e,t,n=""){let r=e[t];return typeof r=="string"?r:n}function ut(e,t,n=0){let r=e[t];return typeof r=="number"?r:n}function HS(e,t){let n=e[t];return Array.isArray(n)?n:[]}function GS(e,t){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,Math.max(0,t-3))}... (truncated for single-line display \u2014 use charOffset or startLine to read full content)`:n}function BS(e,t){let n=jS(e.fromRanges);return{direction:"incoming",item:nc(e.from),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...QS(e.from,t)}}function zS(e,t){let n=jS(e.fromRanges);return{direction:"outgoing",item:nc(e.to),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...QS(e.to,t)}}function nc(e){return{name:e.name,kind:co(e.kind),uri:e.uri,line:e.range.start.line+1,endLine:e.range.end.line+1,...e.selectionRange?{selectionLine:e.selectionRange.start.line+1}:{}}}function jS(e){let t=new Set,n=[];for(let r of e){let o=r.start.line+1,i=r.start.character,s=`${o}:${i}`;if(!t.has(s)&&(t.add(s),n.push({line:o,character:i}),n.length>=hI))break}return n}function QS(e,t){return t<=0||!e.content?{}:{contentPreview:e.content}}function co(e){if(typeof e=="string")return e;switch(typeof e=="number"?e:void 0){case 1:return"file";case 2:return"module";case 3:return"namespace";case 4:return"package";case 5:return"class";case 6:return"method";case 7:return"property";case 8:return"field";case 9:return"constructor";case 10:return"enum";case 11:return"interface";case 12:return"function";case 13:return"variable";case 14:return"constant";case 15:return"string";case 16:return"number";case 17:return"boolean";case 18:return"array";case 19:return"object";case 20:return"key";case 21:return"null";case 22:return"enumMember";case 23:return"struct";case 24:return"event";case 25:return"operator";case 26:return"typeParameter";default:return"unknown"}}async function nd(e,t,n){let o=(await n.prepareCallHierarchy(t.absolutePath,t.resolvedSymbol.position,t.content))[0];if(!o)return Pt(e.type,t,"No callable symbol found",!0);let i=e.depth??1,s={calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0,truncatedByBudget:!1,visitedNodeCount:0,requestCount:0},a=e.type==="callers"||e.type==="callHierarchy"?await Jp(n,o,i,new Set([Ii(o)]),e.contextLines??0):s,c=e.type==="callees"||e.type==="callHierarchy"?await ed(n,o,i,new Set([Ii(o)]),e.contextLines??0):s,l=S=>/node_modules\/typescript\/lib\/lib\.[^/]*\.d\.ts$/.test(S.to.uri),u=c.calls.filter(l).length,p=c.calls.filter(S=>!l(S)),d=[...a.calls.map(S=>({direction:"incoming",...S})),...p.map(S=>({direction:"outgoing",...S}))],m=d.map(S=>S.direction==="incoming"?BS(S,e.contextLines??0):zS(S,e.contextLines??0)),{pageItems:f,pagination:h}=Tt(m,e.page??1,e.pageSize??Kp),y=e.type==="callers"?"incoming":e.type==="callees"?"outgoing":"both",g=!a.truncatedByDepth&&!c.truncatedByDepth&&!a.truncatedByBudget&&!c.truncatedByBudget&&a.failedRequestCount+c.failedRequestCount===0;return{type:e.type,uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"callHierarchyProvider"},payload:{kind:e.type,root:nc(o),direction:y,calls:f,incomingCalls:a.calls.length,outgoingCalls:p.length,completeness:{complete:g,truncatedByDepth:a.truncatedByDepth||c.truncatedByDepth,truncatedByBudget:a.truncatedByBudget||c.truncatedByBudget,visitedNodeCount:a.visitedNodeCount+c.visitedNodeCount,requestCount:a.requestCount+c.requestCount,cycleCount:a.cycleCount+c.cycleCount,failedRequestCount:a.failedRequestCount+c.failedRequestCount,dynamicCallsExcluded:!0,...u>0&&{stdlibCallsExcluded:u}},...d.length===0?{empty:{category:"noCalls",reason:"callHierarchyProvider returned no calls"}}:{}},pagination:h}}async function rd(e,t,n){let o=(await n.prepareTypeHierarchy(t.absolutePath,t.resolvedSymbol.position,t.content))[0];if(!o)return Pt(e.type,t,"No type-hierarchy item found at position",!0);let i=e.type==="supertypes"?"supertypes":"subtypes",s=i==="supertypes"?await n.typeHierarchySupertypes(o):await n.typeHierarchySubtypes(o),{pageItems:a,pagination:c}=Tt(s,e.page??1,e.pageSize??Hn);return{type:e.type,uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"typeHierarchyProvider"},payload:s.length>0?{kind:"typeHierarchy",direction:i,root:o,items:a,totalItems:s.length}:{kind:"empty",category:"noTypeHierarchy",reason:`typeHierarchyProvider returned no ${i} for this symbol`},pagination:c}}var WS=new Set(["references","callers","callees","callHierarchy","implementation"]),US=100,PI=512*1024,$S=["ts","tsx","mts","cts","js","jsx","mjs","cjs"];async function VS(e,t,n){let r={candidates:0,warmedFiles:0,skippedLarge:0,possiblyTruncated:!1};if(typeof e.openDocument!="function")return r;try{let o=Oi.extname(t.absolutePath).slice(1),i=$S.includes(o)?$S:[o],s=await _i({path:n,searchText:t.resolvedSymbol.name,regex:"fixed",wholeWord:!0,output:"files",maxFiles:US,include:i.filter(Boolean).map(c=>`*.${c}`)}),a={candidates:s.files?.length??0,warmedFiles:0,skippedLarge:0,possiblyTruncated:(s.files?.length??0)>=US||!!s.stats?.capped};for(let c of s.files??[]){let l=typeof c.path=="string"?c.path:void 0;if(!l)continue;let u=Oi.isAbsolute(l)?l:Oi.join(n,l);if(Oi.resolve(u)!==Oi.resolve(t.absolutePath))try{let p=await xI(u,"utf-8");if(p.length>PI){a.skippedLarge+=1;continue}await e.openDocument(u,p),a.warmedFiles+=1}catch{}}return a}catch{return r}}async function KS(e,t,n,r){switch(e.type){case"definition":return n.hasCapability("definitionProvider")?ki(e,t,"definition","definitionProvider",await wI({anchorUri:t.uri,symbolName:t.resolvedSymbol.name,locations:await n.gotoDefinition(t.absolutePath,t.resolvedSymbol.position,t.content)})):Pt(e.type,t,"definitionProvider unsupported",!0);case"typeDefinition":return n.hasCapability("typeDefinitionProvider")?ki(e,t,"typeDefinition","typeDefinitionProvider",await n.typeDefinition(t.absolutePath,t.resolvedSymbol.position,t.content)):Pt(e.type,t,"typeDefinitionProvider unsupported",!0);case"implementation":return n.hasCapability("implementationProvider")?ki(e,t,"implementation","implementationProvider",await n.implementation(t.absolutePath,t.resolvedSymbol.position,t.content)):Pt(e.type,t,"implementationProvider unsupported",!0);case"references":return n.hasCapability("referencesProvider")?Zp(e,t,await n.findReferences(t.absolutePath,t.resolvedSymbol.position,e.includeDeclaration??!0,t.content),r):Pt(e.type,t,"referencesProvider unsupported",!0);case"hover":return n.hasCapability("hoverProvider")?qp(e,t,await n.hover(t.absolutePath,t.resolvedSymbol.position,t.content)):Pt(e.type,t,"hoverProvider unsupported",!0);case"callers":case"callees":case"callHierarchy":return n.hasCapability("callHierarchyProvider")?nd(e,t,n):Pt(e.type,t,"callHierarchyProvider unsupported",!0);case"supertypes":case"subtypes":return n.hasCapability("typeHierarchyProvider")?rd(e,t,n):Pt(e.type,t,"typeHierarchyProvider unsupported",!0)}}import id from"node:path";import{fileURLToPath as TI}from"node:url";import{unavailableHintFor as EI}from"@octocodeai/octocode-engine/lsp/manager";import{detectLanguageId as AI}from"@octocodeai/octocode-engine/lsp/config";var od;function sd(e){return od||(od=new Set(D.getSupportedJsTsExtensions().map(t=>`.${t}`))),od.has(id.extname(e).toLowerCase())}function Dt(e,t,n){let r=AI(e),o=EI(r,void 0),i=n?.message?` LSP startup detail (${n.kind??"startupFailed"}): ${n.message}.`:"";throw new Ge(j.LSP_SERVER_UNAVAILABLE,`No ${r} language server is available for ${e}, so "${t}" cannot be answered semantically.${i} ${o} Meanwhile, use localSearch operation:"text" or "structural" to find occurrences, then localGetFileContent for surrounding code.`)}var LI=["py","rs","go","java","kt","cs","c","cc","cpp","h","hpp","rb","php","swift","scala","lua","dart","ex","exs","erl","hrl","clj","cljs"];function XS(e,t){let n=e.startsWith("file://")?TI(e):e;return id.isAbsolute(n)?n:id.resolve(t,n)}function ad(){return[...D.getSupportedJsTsExtensions(),...LI]}function YS(){return ad().map(e=>`**/*.${e}`)}var _I=[".git","node_modules","dist","out","coverage","target"];async function ZS(e,t){let n=e.symbolName?.trim();if(n)try{return(await D.searchRipgrep({path:t,pattern:n,fixedString:!0,caseSensitive:!0,filesOnly:!0,include:YS(),excludeDir:[..._I],maxSnippetChars:1})).files[0]?.path}catch{return}}async function cd(e,t){if(e.uri)return XS(e.uri,t);let n=await ZS(e,t);if(n)return n;try{let o=(await D.queryFileSystem({path:t,recursive:!0,includeRoot:!1,showHidden:!1,entryType:"f",extensions:ad(),maxDepth:5,limit:1})).entries[0];if(o)return o.path}catch{}return t}function ld(e){return e instanceof Error?e.message:String(e)}function ud(e,t){if(!sd(e))return null;try{let n=D.extractJsSymbols(t,e);if(!n)return null;let r=JSON.parse(n);return Array.isArray(r)?r:null}catch{return null}}function kI(e){if(!e||typeof e!="object")return!1;let t=e,n=r=>!!r&&typeof r=="object"&&typeof r.line=="number"&&typeof r.character=="number";return n(t.start)&&n(t.end)}function qS(e,t){if(!sd(e))return null;try{let n=D.extractGraphFacts(t,e);if(!n)return null;let r=JSON.parse(n),i=(Array.isArray(r.declarations)?r.declarations:[]).filter(s=>typeof s.name=="string"&&Ba(s.name)&&typeof s.kind=="string"&&kI(s.range)).map(s=>({name:s.name,kind:s.kind,range:s.range}));return i.length>0?i:null}catch{return null}}import{acquirePooledClient as II,isLanguageServerAvailable as OI}from"@octocodeai/octocode-engine/lsp/manager";import{resolveWorkspaceRootForFile as vI}from"@octocodeai/octocode-engine/lsp/workspaceRoot";async function md(e){let t=await Vp(e,we);if(t.ok===!1)return t.error;let n=e.workspaceRoot??await vI(t.value.absolutePath),r=await OI(t.value.absolutePath,n),o=r?await II(n,t.value.absolutePath):null,i=!!o?.hasCapability("documentSymbolProvider"),s=[],a,c=ud(t.value.uri,t.value.content),l=c?.length?null:qS(t.value.uri,t.value.content);if(c?.length)s=c,a="native";else if(l?.length)s=l,a="native-graph-facts";else if(i&&o){let g=await o.documentSymbols(t.value.absolutePath,t.value.content);s=Array.isArray(g)?g:[],a="lsp"}else{let g=Nh(t.value.content,t.value.uri);g&&(s=g,a="markdown")}let u=a!==void 0;!u&&!r&&Dt(t.value.uri,"documentSymbols");let p=JS(s),d=tR(s),{pageItems:m,pagination:f}=Tt(p,e.page??1,e.pageSize??Hn),h=nR(p,g=>g.kind),y=u?void 0:{category:"unsupportedOperation",reason:"documentSymbolProvider unsupported"};return{type:"documentSymbols",uri:t.value.uri,lsp:{serverAvailable:r,...a==="lsp"?{provider:"documentSymbolProvider"}:{},...a?{source:a}:{}},summary:{totalSymbols:p.length,returnedSymbols:m.length,topLevelSymbols:d,kinds:h},payload:{kind:"documentSymbols",symbols:m,...y?{empty:y}:{}},pagination:f}}function JS(e){let t=[];for(let n of e)fd(n,t);return t.sort((n,r)=>n.line-r.line||n.character-r.character)}function fd(e,t,n){if(!e||typeof e!="object")return;let r=e,o=eR(r);if(typeof r.name=="string"&&o&&t.push({name:r.name,kind:co(r.kind),line:o.start.line+1,character:o.start.character,endLine:o.end.line+1,childCount:Array.isArray(r.children)?r.children.length:0,...n?{containerName:n}:{}}),Array.isArray(r.children)&&FI.has(co(r.kind))){let i=typeof r.name=="string"?r.name:n;for(let s of r.children)fd(s,t,i)}}var FI=new Set(["file","module","namespace","package","class","enum","interface","markdownHeading","struct"]);function eR(e){if(pd(e.range))return e.range;let t=e.location;return t&&pd(t.range)?t.range:void 0}function pd(e){if(!e||typeof e!="object")return!1;let t=e;return dd(t.start)&&dd(t.end)}function dd(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.line=="number"&&typeof t.character=="number"}function tR(e){return e.filter(t=>t&&typeof t=="object"&&"name"in t).length}function nR(e,t){let n={};for(let r of e){let o=t(r),i=n[o];n[o]=typeof i=="number"?i+1:1}return n}import rR from"node:path";import{readFile as MI}from"node:fs/promises";import{acquirePooledClientDetailed as oR,isLanguageServerAvailable as iR}from"@octocodeai/octocode-engine/lsp/manager";import{resolveImportAliasDefinitions as NI}from"@octocodeai/octocode-engine/lsp/resolver";import{resolveWorkspaceRootForFile as sR}from"@octocodeai/octocode-engine/lsp/workspaceRoot";async function hd(e){let t=e.symbolName??"",n=rR.resolve(e.workspaceRoot??(e.uri?await sR(e.uri):process.cwd())),r=await cd(e,n);await iR(r,n)||Dt(r,"workspaceSymbol");let i=await oR(n,r);i.ok===!1&&Dt(r,"workspaceSymbol",i);let s=i.client;if(!s.hasCapability("workspaceSymbolProvider"))return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"workspaceSymbolProvider unsupported"}};let a;try{rR.extname(r)&&await s.openDocument(r),a=await s.workspaceSymbol(t)}catch(p){return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:`workspaceSymbolProvider failed: ${ld(p)}`}}}let c=await HI(s,aR(a)),{pageItems:l,pagination:u}=Tt(c,e.page??1,e.pageSize??Hn);return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},summary:{query:t,totalSymbols:c.length},payload:c.length>0?{kind:"workspaceSymbol",query:t,symbols:l,totalSymbols:c.length}:{kind:"empty",category:"noWorkspaceSymbols",reason:`workspaceSymbolProvider returned no symbols for query "${t}"`},pagination:u}}var DI=10;async function HI(e,t){return t.length===0||t.length>DI?t:Promise.all(t.map(async n=>{try{if(!n.uri)return n;let r=n.uri.startsWith("file://")?decodeURIComponent(n.uri.slice(7)):n.uri,o=await MI(r,"utf8");await e.openDocument(r);let i=await NI({anchorUri:r,symbolName:n.name,locations:await e.gotoDefinition(r,{line:n.line-1,character:n.character},o)});if(!Array.isArray(i)||i.length!==1)return n;let s=i[0],a=(s.range?.start?.line??-1)+1;return!s.uri||a<1||s.uri===n.uri&&a===n.line?n:{...n,uri:s.uri,line:a,endLine:(s.range?.end?.line??s.range?.start?.line??a-1)+1,character:s.range?.start?.character??n.character}}catch{return n}}))}function aR(e){return e.flatMap(t=>{if(!t||typeof t!="object")return[];let n=t,r=typeof n.name=="string"?n.name:void 0;if(!r)return[];let o=n.kind,i=n.location,s=i?.range,a=typeof i?.uri=="string"?i.uri:"",c=(s?.start?.line??0)+1,l=(s?.end?.line??s?.start?.line??0)+1,u=typeof n.containerName=="string"?n.containerName:void 0;return[{name:r,kind:co(o),line:c,character:s?.start?.character??0,endLine:l,childCount:0,...u?{containerName:u}:{},uri:a}]})}async function gd(e){let t=e.uri??"",n=e.workspaceRoot??(t?await sR(t):process.cwd());await iR(t,n)||Dt(t,"diagnostic");let o=await oR(n,t);o.ok===!1&&Dt(t,"diagnostic",o);let i=o.client;if(!i.hasCapability("diagnosticProvider"))return{type:"diagnostic",uri:t,lsp:{serverAvailable:!0,provider:"diagnosticProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"diagnosticProvider (pull) unsupported \u2014 server uses push (publishDiagnostics) instead"},warnings:['This server pushes diagnostics via textDocument/publishDiagnostics. Pull diagnostics (type: "diagnostic") require LSP 3.17 pull support. Check server docs to enable it.']};let s=await i.getDiagnostics(t),a=cR(s),c=a.filter(d=>d.severity===1).length,l=a.filter(d=>d.severity===2).length,{pageItems:u,pagination:p}=Tt(a,e.page??1,e.pageSize??Hn);return{type:"diagnostic",uri:t,lsp:{serverAvailable:!0,provider:"diagnosticProvider"},summary:{totalDiagnostics:a.length,errorCount:c,warningCount:l},payload:a.length>0?{kind:"diagnostic",diagnostics:u,totalDiagnostics:a.length,errorCount:c,warningCount:l}:{kind:"empty",category:"noDiagnostics",reason:"No diagnostics \u2014 file has no errors or warnings"},pagination:p}}function cR(e){if(e&&typeof e=="object"){let t=e;return(Array.isArray(t.items)?t.items:[]).flatMap(r=>lR(r))}return[]}function lR(e){if(!e||typeof e!="object")return[];let t=e,n=t.range,r=typeof t.message=="string"?t.message:"";return r?[{severity:typeof t.severity=="number"?t.severity:void 0,message:r,line:(n?.start?.line??0)+1,endLine:(n?.end?.line??n?.start?.line??0)+1,character:n?.start?.character??0,...t.code!==void 0?{code:t.code}:{},...typeof t.source=="string"?{source:t.source}:{}}]:[]}var GI=new Set(["unsupportedOperation","symbolNotFound","anchorFailed","noLocations","noReferences","noHover","noCalls","noWorkspaceSymbols","noTypeHierarchy","noDiagnostics"]),BI=new Set(["symbolNotFound","anchorFailed"]);function zI(e){if(e.kind==="empty"&&typeof e.category=="string")return{category:e.category,...typeof e.reason=="string"?{reason:e.reason}:{}};let t=e.empty;if(Nt(t)&&typeof t.category=="string")return{category:t.category,...typeof t.reason=="string"?{reason:t.reason}:{}}}function jI(e){switch(e.slice(e.lastIndexOf(".")+1).toLowerCase()){case"rs":return"^\\s*pub\\s";case"py":case"pyi":return"^\\s*(def|class)\\s";case"go":return"^(func|type|var|const)\\s";case"java":case"kt":case"scala":case"cs":return"^\\s*(public|protected|internal)\\s";case"rb":return"^\\s*(def|class|module)\\s";default:return"^\\s*export\\s"}}function QI(e,t){let n=e.symbolName;if(typeof n=="string"&&n.trim())return n.trim();let r=t.resolvedSymbol?.name;if(typeof r=="string"&&r.trim())return r.trim()}function rc(e){return e.startsWith("file://")?decodeURIComponent(e.slice(7)):e}function UI(e,t){if(!Nt(t.pagination))return;let{hasMore:n,nextPage:r}=t.pagination;if(!(n!==!0||typeof r!="number"||r>1e3))return We("lspGetSemantics",{...e,page:r},`Continue semantic ${e.type} results on page ${r}.`)}function uR(e,t){if(!td(t))return t;let n=t;if(Nt(n.pagination)&&n.pagination.hasMore===!0&&typeof n.pagination.currentPage=="number"&&n.pagination.currentPage>=1e3){let{nextPage:C,...P}=n.pagination;n={...n,pagination:P,terminalLimit:!0}}let r=n.payload,o=r.warmup?.possiblyTruncated===!0,i=r.completeness?.truncatedByDepth===!0,s=r.completeness?.truncatedByBudget===!0,a="depth"in e?e.depth??1:1,c=i&&a<20,l=QI(e,n),u=n.workspaceRoot??e.workspaceRoot??(n.uri?rc(n.uri):void 0),p=[...o?["warmupCap"]:[],...i?["depth"]:[],...s?["budget"]:[]];p.length>0&&(n={...n,truncated:!0,partialReasons:p,...(s||i&&!c)&&{terminalLimit:!0}});let d=UI(e,n),m={...n.next??{},...d?{nextPage:d}:{},...c?{expandDepth:We("lspGetSemantics",{...e,depth:Math.min(20,Math.max(a+1,a*2)),page:1},"Re-run with a larger call-hierarchy depth because deeper calls remain.")}:{},...o&&l&&u?{verifyCompleteness:We("localSearch",{operation:"text",path:u,searchText:l,wholeWord:!0,resultView:"files"},"The LSP consumer warmup hit its file cap; search the complete workspace lexically for additional consumer files.")}:{}},f=r.locations?.[0],h=f?.displayRange?.startLine;if(f?.uri&&typeof h=="number"){let C=rc(f.uri);return{...n,next:{...m,readSite:{tool:"localGetFileContent",query:{path:C,startLine:Math.max(1,h-3),endLine:(f.displayRange?.endLine??h)+10},why:"Read the top result location with surrounding context",confidence:"exact"}}}}let y=zI(r);if(y?.category==="unsupportedOperation"&&n.type==="documentSymbols"&&n.uri){let C=rc(n.uri);return{...n,next:{...m,textSearch:{tool:"localSearch",query:{operation:"text",path:C,searchText:jI(C),regex:"perl"},why:"documentSymbols is unsupported for this file's language server \u2014 fall back to a regex search over top-level declarations for an outline.",confidence:"low"}}}}if(!y||!l||!GI.has(y.category))return Object.keys(m).length>0?{...n,next:m}:n;let g=n.type==="workspaceSymbol"?n.workspaceRoot??e.workspaceRoot??n.uri??e.uri:n.uri??e.uri??n.workspaceRoot??e.workspaceRoot;if(!g)return n;let S=rc(g),R={...m,textSearch:{tool:"localSearch",query:{operation:"text",path:S,searchText:l},why:`Semantic ${n.type} returned no result (${y.category}) \u2014 fall back to a text search for "${l}"`,confidence:"low"}};return BI.has(y.category)&&n.uri&&(R.reAnchor={tool:"lspGetSemantics",query:{type:"documentSymbols",uri:n.uri},why:"Re-anchor: list this file's symbols to find the correct lineHint, then retry the semantic query",confidence:"medium"}),{...n,next:R}}import{z as Gn}from"zod";var $I=M(1,1e9),WI=M(0,1e5).optional(),VI=["structured","compact"],pR={type:Gn.enum(wS).default("definition"),symbolName:Gn.string().min(1).max(1024).optional(),lineHint:$I.optional(),orderHint:WI,depth:M(0,20).optional(),includeDeclaration:Gn.boolean().optional().default(!0),page:be,pageSize:M(1,100).optional(),contextLines:M(0,100).optional(),format:Gn.enum(VI).optional().default("structured")},Bn=pe(Bs,pR),KI=["definition","references","callers","callees","callHierarchy","hover","typeDefinition","implementation","supertypes","subtypes"],XI=["documentSymbols","diagnostic"],YI=Bn.extend({type:Gn.enum(KI).optional(),uri:Te(Bn.shape,"uri"),symbolName:Te(Bn.shape,"symbolName"),lineHint:Te(Bn.shape,"lineHint")}),ZI=Bn.extend({type:Gn.enum(XI),uri:Te(Bn.shape,"uri")}),qI=Bn.extend({type:Gn.literal("workspaceSymbol"),symbolName:Te(Bn.shape,"symbolName")}),lo=se(Bs,pR),oc=Z(Gn.union([YI,ZI,qI]),{maxQueries:5});async function yd(e){return he(e.queries||[],async t=>{let n=tt(lo,t);if(n.ok===!1)return n.error;let r=n.data;return Ct({toolName:we,query:r,contextMessage:"lspGetSemantics execution failed",execute:async()=>{let o=await nO(r);return MS(uR(r,NS(r,o)))}})},{toolName:we,minQueryTimeoutMs:3e4},e)}async function nO(e){if(e.type==="documentSymbols")return md(e);if(e.type==="workspaceSymbol")return hd(e);if(e.type==="diagnostic")return gd(e);let t=await TS(e,we);if(t.ok===!1){let l=typeof t.error.error=="string"?t.error.error:"Symbol anchor resolution failed";return Yp(e,l)}let n=e.workspaceRoot??await tO(t.value.absolutePath);await eO(t.value.absolutePath,n)||Dt(t.value.uri,e.type);let o=await JI(n,t.value.absolutePath);o.ok===!1&&Dt(t.value.uri,e.type,o);let i=o.client,s=WS.has(e.type)?await VS(i,t.value,n):void 0,a=i.getReadiness?.(),c=await KS(e,t.value,i,s);return PS({...c,workspaceRoot:n},a)}import{existsSync as dR}from"fs";import{delimiter as rO,dirname as oO,join as mR}from"path";function fR(){return process.platform==="win32"?"npm.cmd":"npm"}function iO(){let e=oO(process.execPath);return mR(e,fR())}function sO(){return process.platform==="win32"?[]:["/opt/homebrew/bin","/usr/local/bin","/usr/bin"]}function aO(){let e=(process.env.PATH??"").split(rO).map(t=>t.trim()).filter(Boolean);return[...new Set([...e,...sO()])]}function hR(){let e=iO();if(dR(e))return{command:process.execPath,argsPrefix:[e]};let t=fR();for(let n of aO()){let r=mR(n,t);if(dR(r))return{command:r,argsPrefix:[]}}return{command:t,argsPrefix:[]}}var cO=["view","search","ping","config","whoami"],lO=[...Vr,...Sg];async function cZ(e=1e4){let t=hR();return Rg(t.command,[...t.argsPrefix,"--version"],e)}async function zn(e,t,n={}){if(!cO.includes(e))return{stdout:"",stderr:"",error:new Error(`Command '${e}' is not allowed`)};let r=sa(t);if(!r.valid)return{stdout:"",stderr:"",error:new Error(`Invalid arguments: ${r.error}`)};let{timeout:o=3e4,cwd:i,env:s}=n,a=hR(),c=await ar(a.command,[...a.argsPrefix,e,...t],{timeout:o,cwd:i,env:s,allowEnvVars:lO});return{stdout:c.stdout,stderr:c.stderr,exitCode:c.exitCode??void 0,error:c.error}}var uo="https://registry.npmjs.org",vi=null;async function Fi(){if(vi)return vi;try{let e=await zn("config",["get","registry","--no-workspaces"],{timeout:1e4});if(!e.error&&e.exitCode===0){let t=e.stdout.trim().replace(/\/+$/,"");if(t&&t.startsWith("http"))return vi=t,t}}catch{}return vi=uo,uo}function uO(){vi=null}async function pO(){try{let e=await Fi(),t=globalThis.fetch;return t?(await t(e,{method:"HEAD",signal:AbortSignal.timeout(5e3)})).ok:!1}catch{return!1}}var dZ=5;var po=new Map,Sd=5,Mi=3e4;function Ni(e){try{return new URL(e).host||e}catch{return e}}var bd=class extends Error{retryable=!1;host;retryAfterMs;constructor(t,n){super(`Circuit open for ${t}: too many recent failures \u2014 failing fast, retry in ~${Math.ceil(n/1e3)}s.`),this.name="CircuitOpenError",this.host=t,this.retryAfterMs=n}};function gR(e,t=Date.now()){let n=po.get(Ni(e));if(!(!n||n.state==="closed")&&n.state==="open"){let r=t-n.openedAt;if(r<Mi)throw new bd(Ni(e),Mi-r);n.state="half-open"}}function Rd(e){let t=po.get(Ni(e));t&&(t.failures=0,t.state="closed")}function yR(e,t=Date.now()){let n=Ni(e),r=po.get(n)??{failures:0,state:"closed",openedAt:0};r.state==="half-open"?(r.state="open",r.openedAt=t):(r.failures+=1,r.failures>=Sd&&(r.state="open",r.openedAt=t)),po.set(n,r)}function mZ(){po.clear(),Sd=5,Mi=3e4}function fZ(e){typeof e.failureThreshold=="number"&&(Sd=e.failureThreshold),typeof e.cooldownMs=="number"&&(Mi=e.cooldownMs)}function bR(e,t=Date.now()){let n=po.get(Ni(e));return!n||n.state==="closed"?!1:n.state==="open"?t-n.openedAt<Mi:!1}import{z as _}from"zod";var ic=_.looseObject({name:_.string(),version:_.string(),repository:_.union([_.string(),_.object({url:_.string().optional(),type:_.string().optional(),directory:_.string().optional()})]).optional(),main:_.string().optional(),module:_.string().optional(),type:_.string().optional(),exports:_.unknown().optional(),types:_.string().optional(),typings:_.string().optional(),description:_.string().optional(),keywords:_.array(_.string()).optional(),license:_.union([_.string(),_.object({type:_.string().optional()})]).optional(),homepage:_.string().optional(),author:_.union([_.string(),_.object({name:_.string().optional(),email:_.string().optional(),url:_.string().optional()})]).optional(),maintainers:_.array(_.object({name:_.string().optional(),email:_.string().optional()})).optional(),engines:_.record(_.string(),_.string()).optional(),dependencies:_.record(_.string(),_.string()).optional(),devDependencies:_.record(_.string(),_.string()).optional(),peerDependencies:_.record(_.string(),_.string()).optional(),time:_.record(_.string(),_.string().optional()).optional()}),dO=_.looseObject({package:_.looseObject({name:_.string().nullish(),version:_.string().nullish(),description:_.string().nullish(),links:_.looseObject({npm:_.string().nullish(),homepage:_.string().nullish(),repository:_.string().nullish()}).nullish()}),score:_.looseObject({final:_.number().nullish(),detail:_.looseObject({quality:_.number().nullish(),popularity:_.number().nullish(),maintenance:_.number().nullish()}).nullish()}).nullish()}),SR=_.looseObject({objects:_.array(dO),total:_.union([_.number(),_.string()]).optional()}),RR=_.union([_.string(),_.boolean(),_.number(),_.null(),_.record(_.string(),_.unknown())]);var mO=6e4;function CR(e){let t=e.get("Retry-After");if(!t)return;let n=parseInt(t,10);return isNaN(n)?void 0:n}function fO(e,t,n,r){e&&An({limit_type:"primary",retry_after_seconds:CR(r),api_method:t,api_url:n,provider:e})}function hO(e,t,n,r,o){e.body?.cancel?.().catch(()=>{});let i=new Error(bo.FETCH_HTTP_ERROR.message(e.status,e.statusText));return i.status=e.status,i.headers=e.headers,r&&e.status!==404&&Vf(r),e.status===429&&fO(o,t,n,e.headers),i.retryable=e.status===429||e.status===408||e.status>=500&&e.status<600,i}function gO(e,t,n,r){let o=Math.min(t*Math.pow(2,e-1),n);if(o+=Math.floor(Math.random()*t),r&&r.headers&&typeof r.headers.get=="function"){let i=CR(r.headers);i!==void 0&&(o=Math.min(i*1e3,n))}return o}async function Yt(e,t={}){let{maxRetries:n=3,initialDelayMs:r=1e3,maxDelayMs:o=mO,headers:i={},method:s="GET",includeVersion:a=!1,signal:c,rateLimitProvider:l,packageRegistry:u}=t,p=e;if(a){let y=e.includes("?")?"&":"?";p=`${e}${y}version=${encodeURIComponent(Vn)}`}let d={"User-Agent":`Octocode-MCP/${Vn}`,...i},m=globalThis.fetch;if(!m)throw new Error(bo.FETCH_NOT_AVAILABLE.message);gR(p);let f,h=n+1;for(let y=1;y<=h;y++){if(c?.aborted)throw new Error("Request aborted");try{let g=await m(p,{method:s,headers:d,signal:c});if(!g.ok)throw hO(g,s,p,u,l);if(g.status===204)return Rd(p),null;let S=await g.json();return Rd(p),S}catch(g){let S=g;if(c?.aborted||g instanceof Error&&g.name==="AbortError")throw new Error("Request aborted");if(S&&S.retryable===!1)throw g;if(f=g instanceof Error?g:new Error(String(g)),y===h)break;let R=gO(y,r,o,S);await new Promise(C=>setTimeout(C,R))}}throw yR(p),new Error(bo.FETCH_FAILED_AFTER_RETRIES.message(h,f?.message||""))}function jn(e){return e.replace(/^git\+/,"").replace(/\.git$/,"")}var yO="https://api.npmjs.org/downloads/point/last-week";function rt(e){return e===void 0?0:B(e)}async function ac(e){try{let t=`${yO}/${encodeURIComponent(e)}`,n=await Yt(t,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3),packageRegistry:"npm"});return{downloads:typeof n?.downloads=="number"?n.downloads:void 0,rawResponseChars:rt(n)}}catch{return{rawResponseChars:0}}}function sc(e,t){return{values:e.slice(0,t),total:e.length,truncated:e.length>t}}function bO(e){if(typeof e=="string")return sc([e],12);if(!e||typeof e!="object")return;let n=Object.entries(e).flatMap(([r,o])=>typeof o=="string"?[`${r}:${o}`]:o&&typeof o=="object"?Object.entries(o).filter(([,i])=>typeof i=="string").map(([i,s])=>`${r}:${i}:${s}`):[]);return n.length>0?sc(n,12):void 0}function SO(e,t){if(typeof e=="string"){let n=t?.replace(/^@[^/]+\//,"")??"";return sc([n?`${n} \u2192 ${e}`:e],8)}if(e&&typeof e=="object"){let n=Object.entries(e).filter(([,r])=>typeof r=="string").map(([r,o])=>`${r} \u2192 ${o}`);return n.length>0?sc(n,8):void 0}}function RO(e){return e.type==="module"||e.module?"module":e.main?"commonjs":e.types||e.typings?"types-only":"unknown"}function cc(e,t=!1,n="cli"){let r=bO(e.exports),o=SO(e.bin,e.name),i=null,s;e.repository&&(typeof e.repository=="string"?i=jn(e.repository):(e.repository.url&&(i=jn(e.repository.url)),e.repository.directory&&(s=e.repository.directory.replace(/^\.\//,""))));let a;if(e.time){let u=(e.version?e.time[e.version]:void 0)||e.time.modified;u&&(a=u)}let c={name:e.name,npmUrl:`https://www.npmjs.com/package/${encodeURIComponent(e.name)}`,repoUrl:i,version:e.version||"latest",mainEntry:e.main||null,moduleEntry:e.module||null,typeDefinitions:e.types||e.typings||null,packageType:RO(e),...s?{repositoryDirectory:s}:{},...r?{exports:r.values,exportsTotal:r.total,...r.truncated?{exportsTruncated:!0}:{}}:{},...o?{bin:o.values,binTotal:o.total,...o.truncated?{binTruncated:!0}:{}}:{},lastPublished:a,source:n};return e.description&&(c.description=e.description),e.license&&(c.license=typeof e.license=="string"?e.license:e.license.type),t&&(e.author&&(typeof e.author=="string"?c.author=e.author:e.author.name&&(c.author=e.author.name)),e.keywords&&e.keywords.length>0&&(c.keywords=e.keywords),e.homepage&&(c.homepage=e.homepage),e.engines&&Object.keys(e.engines).length>0&&(c.engines=e.engines),e.dependencies&&Object.keys(e.dependencies).length>0&&(c.dependencies=e.dependencies),e.peerDependencies&&Object.keys(e.peerDependencies).length>0&&(c.peerDependencies=e.peerDependencies)),c}function CO(e){return typeof e.links?.repository=="string"?jn(e.links.repository):typeof e.repository=="string"?jn(e.repository):typeof e.repository?.url=="string"?jn(e.repository.url):null}function xR(e){if(!e.name)return null;let t=(e.links?.npm??"")||`https://www.npmjs.com/package/${encodeURIComponent(e.name)}`,n=e.links?.homepage??void 0;return{name:e.name,npmUrl:t,repoUrl:CO(e),version:e.version??"unknown",source:"cli",...e.description?{description:e.description}:{},...n?{homepage:n}:{},...e.keywords&&e.keywords.length>0?{keywords:e.keywords}:{}}}function Cd(e){return e.startsWith("@")?"@"+e.slice(1).replace("/","%2F"):e}function wR(e,t){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"){let n=Number.parseInt(e,10);if(Number.isFinite(n))return n}return t}var xO=3e3;function xd(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("fetch failed")||t.includes("failed to fetch")||t.includes("network")||t.includes("econnrefused")||t.includes("enotfound")||t.includes("etimedout")||t.includes("socket hang up")||t.includes("connect timeout")||t.includes("command timeout")||t.includes("circuit open")||t.includes("circuit breaker")}async function wd(e){try{let t=await Fi(),n=Cd(e),r=`${t}/${n}`,o=AbortSignal.timeout(8e3);try{let s=await Yt(r,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/vnd.npm.install-v1+json"},signal:o,packageRegistry:"npm"}),a=rt(s);if(s?.modified)return{lastPublished:s.modified,rawResponseChars:a}}catch{}let i=await Yt(r,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:o,packageRegistry:"npm"});return{lastPublished:i?.time?.modified||void 0,rawResponseChars:rt(i)}}catch{return{rawResponseChars:0}}}async function uc(e,t,n){let[r,o]=await Promise.all([ac(e),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):wd(e)]);return r.downloads!==void 0&&(t.weeklyDownloads=r.downloads),o.lastPublished&&!t.lastPublished&&(t.lastPublished=o.lastPublished),{pkg:t,rawResponseChars:n+r.rawResponseChars+o.rawResponseChars}}function lc(e){let t=e.toLowerCase();return t.includes("404")||t.includes("not found")||t.includes("e404")}async function wO(e,t){try{let n=await zn("view",[e,"--json"],{timeout:xO});if(!n)return{pkg:null,rawResponseChars:0};if(n.error||n.exitCode!==0){let c=n.error?.message||n.stderr||`npm exited ${n.exitCode}`;return{pkg:null,...lc(c)?{}:{errorDetail:c},rawResponseChars:rt(n.stdout)}}let r=n.stdout.trim();if(!r||r==="undefined")return{pkg:null,rawResponseChars:0};let o;try{o=JSON.parse(r)}catch{return{pkg:null,errorDetail:"Invalid npm view JSON output",rawResponseChars:r.length}}let i=rt(o),s=ic.safeParse(o);return s.success?{pkg:cc(s.data,t,"cli"),rawResponseChars:i}:{pkg:null,errorDetail:"Invalid npm view response format",rawResponseChars:i}}catch(n){let r=n instanceof Error?n.message:String(n);return{pkg:null,...lc(r)?{}:{errorDetail:r},rawResponseChars:0}}}async function PO(e,t){try{let n=await Fi(),r=Cd(e),o=`${n}/${r}/latest`,i;try{i=await Yt(o,{maxRetries:1,initialDelayMs:500,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3),packageRegistry:"npm"})}catch(l){let u=l instanceof Error?l.message:String(l);return u.includes("404")||u.toLowerCase().includes("not found")?{pkg:null,rawResponseChars:0}:{pkg:null,errorDetail:u,rawResponseChars:0}}let s=rt(i);if(!i||typeof i!="object")return{pkg:null,rawResponseChars:s};let a=ic.safeParse(i);return a.success?{pkg:cc(a.data,t,"registry"),rawResponseChars:s}:{pkg:null,errorDetail:"Invalid npm registry response format",rawResponseChars:s}}catch(n){let r=n instanceof Error?n.message:String(n);return{pkg:null,...lc(r)?{}:{errorDetail:r},rawResponseChars:0}}}function TO(e){return[`https://cdn.jsdelivr.net/npm/${e}/package.json`,`https://unpkg.com/${e}/package.json`]}async function Pd(e,t){let n=0,r;for(let o of TO(e)){let i;try{i=await Yt(o,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3)})}catch(c){let l=c instanceof Error?c.message:String(c);lc(l)||(r=l);continue}if(n+=rt(i),!i||typeof i!="object")continue;let s=ic.safeParse(i);if(!s.success){r="Invalid npm CDN package.json response format";continue}return{pkg:cc(s.data,t,"cdn"),rawResponseChars:n}}return{pkg:null,...r?{errorDetail:r}:{},rawResponseChars:n}}async function pc(e,t=!1){let[n,r]=await Promise.allSettled([wO(e,t),PO(e,t)]),o=n.status==="fulfilled"?n.value:{pkg:null,rawResponseChars:0},i=r.status==="fulfilled"?r.value:{pkg:null,rawResponseChars:0},s=o.pkg?o:i.pkg?i:null;return s?.pkg?uc(e,s.pkg,s.rawResponseChars):{pkg:null,errorDetail:o.errorDetail||i.errorDetail,rawResponseChars:o.rawResponseChars+i.rawResponseChars}}async function PR(e,t,n=!1){let{pkg:r,errorDetail:o,rawResponseChars:i}=await pc(e,t);if(!r){if(o){let s=xd(o);if(s&&n){let a=await Pd(e,t);if(a.pkg){let c=await uc(e,a.pkg,a.rawResponseChars);return{packages:c.pkg?[c.pkg]:[],totalFound:c.pkg?1:0,rawResponseChars:i+c.rawResponseChars}}}return{error:`NPM view failed for '${e}': ${o}`,rawResponseChars:i,hints:s?["npm registry is unreachable.",'Use ghSearch operation:"repositories" with the package name or domain terms.']:["Ensure npm is installed and available in PATH","Check package name for typos",`Try: npm view ${e} --json`]}}return{packages:[],totalFound:0,rawResponseChars:i}}return{packages:[r],totalFound:1,rawResponseChars:i}}async function EO(e,t,n,r=0){let o=Math.max(t+r,t),i=await zn("search",[e,"--json","--searchlimit",String(o)],{timeout:8e3});if(!i)return{error:"NPM CLI search unavailable",rawResponseChars:0};if(i.error||i.exitCode!==0)return{error:`NPM CLI search failed: ${i.error?.message||i.stderr||`npm exited ${i.exitCode}`}`,rawResponseChars:rt(i.stdout)};let s=i.stdout.trim();if(!s)return{packages:[],totalFound:0,rawResponseChars:0};let a;try{a=JSON.parse(s)}catch{return{error:"Invalid npm search JSON output",rawResponseChars:s.length}}let c=rt(a);if(!Array.isArray(a))return{error:"Invalid npm search response format",rawResponseChars:c};let u=[...a].sort((f,h)=>{let y=f?.score?.final??0;return(h?.score?.final??0)-y}).slice(r,r+t),p=await Promise.all(u.map(async f=>{if(!f||typeof f!="object")return null;let h=f;if(!h.name)return null;if(n){let y=await pc(h.name,!0);if(y.pkg)return y}return{pkg:xR(h),rawResponseChars:0}})),d=p.map(f=>f?.pkg).filter(f=>!!f),m=p.reduce((f,h)=>f+(h?.rawResponseChars??0),0);return{packages:d,totalFound:a.length,rawResponseChars:c+m}}async function AO(e,t,n,r=0){try{let o=r>0?`&from=${r}`:"",i=`${uo}/-/v1/search?text=${encodeURIComponent(e)}&size=${t}${o}`,s;try{s=await Yt(i,{maxRetries:1,initialDelayMs:500,signal:AbortSignal.timeout(8e3),packageRegistry:"npm"})}catch(f){return{error:`Could not reach the npm search API (${f instanceof Error?f.message:String(f)}). The package may not exist, or the registry search endpoint is unavailable.`,hints:['Verify the exact package name / scope (e.g. "@scope/name")',"For an exact known name, query it directly instead of a keyword search","Ensure the npm registry is accessible from this environment"]}}let a=rt(s);if(!s||typeof s!="object")return{packages:[],totalFound:0,rawResponseChars:a};let c=SR.safeParse(s);if(!c.success)return{error:`Invalid npm registry search response format: ${c.error.issues.map(h=>h.message).join("; ")}`,rawResponseChars:a,hints:["Try a different search term","Try itemsPerPage=1 for an exact package lookup"]};let u=[...c.data.objects].sort((f,h)=>{let y=f.score?.final??0;return(h.score?.final??0)-y}).map(f=>f.package).filter(f=>typeof f.name=="string"&&f.name.length>0).slice(0,t),p=await Promise.all(u.map(async f=>{if(n){let h=await pc(f.name,!0);if(h.pkg)return h}return{pkg:{name:f.name,npmUrl:(f.links?.npm??"")||`https://www.npmjs.com/package/${encodeURIComponent(f.name)}`,repoUrl:f.links?.repository&&typeof f.links.repository=="string"?jn(f.links.repository):null,version:f.version??"unknown",source:"registry",...f.description?{description:f.description}:{},...f.links?.homepage?{homepage:f.links.homepage}:{}},rawResponseChars:0}})),d=p.map(f=>f.pkg).filter(f=>!!f),m=p.reduce((f,h)=>f+h.rawResponseChars,0);return{packages:d,totalFound:wR(c.data.total,d.length),rawResponseChars:a+m}}catch(o){return{error:`NPM registry search failed: ${o instanceof Error?o.message:String(o)}`,hints:["Check package name for typos","Try searching with a simpler term","Ensure npm registry is accessible"]}}}async function Td(e,t){let n="https://api.npms.io/v2/search",r="octocode-mcp/1.0 (+https://github.com/bgauryy/octocode-mcp)";try{let o=`${n}?q=${encodeURIComponent(e)}&size=${t}`,i;try{i=await Yt(o,{maxRetries:1,initialDelayMs:500,headers:{Accept:"application/json","User-Agent":r},signal:AbortSignal.timeout(8e3)})}catch(c){return{error:`Web search failed: ${c instanceof Error?c.message:String(c)}`}}if(!i||typeof i!="object")return{packages:[],totalFound:0,rawResponseChars:rt(i)};let s=i;if(!Array.isArray(s.results))return{packages:[],totalFound:0,rawResponseChars:rt(i)};let a=s.results.slice(0,t).map(c=>c.package).filter(c=>typeof c?.name=="string"&&c.name.length>0).map(c=>({name:c.name,npmUrl:c.links?.npm??`https://www.npmjs.com/package/${encodeURIComponent(c.name)}`,repoUrl:c.links?.repository&&typeof c.links.repository=="string"?jn(c.links.repository):null,version:c.version??"unknown",source:"web",...c.description?{description:c.description}:{},...c.links?.homepage?{homepage:c.links.homepage}:{}}));return{packages:a,totalFound:typeof s.total=="number"?s.total:a.length,rawResponseChars:rt(i)}}catch(o){return{error:`Web search failed: ${o instanceof Error?o.message:String(o)}`}}}async function Ed(e,t,n,r=0){try{let o=await EO(e,t,n,r);if(!("error"in o))return o}catch{}return AO(e,t,n,r)}async function Ad(e){if(e.packages.length===0)return e;let t=e.packages[0];if(t.weeklyDownloads!==void 0&&t.lastPublished)return e;let[n,r]=await Promise.all([t.weeklyDownloads!==void 0?Promise.resolve({downloads:void 0,rawResponseChars:0}):ac(t.name),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):wd(t.name)]),o={...t};return n.downloads!==void 0&&(o.weeklyDownloads=n.downloads),r.lastPublished&&(o.lastPublished=r.lastPublished),{...e,packages:[o,...e.packages.slice(1)]}}function pr(e){return e.startsWith("@")&&e.includes("/")?!0:e.includes(" ")?!1:/^[a-z0-9][a-z0-9._-]*$/i.test(e)}function TR(e){return e.replace(/^@/,"").replace(/[/_-]/g," ").replace(/\s+/g," ").trim()}async function Ld(e,t,n,r=0){let o=xe("npm-search",{name:e,limit:t,metadata:n,from:r});return De(o,async()=>{if(bR(uo)){if(r===0&&t===1&&pr(e)){let u=await Pd(e,n);if(u.pkg){let p=await uc(e,u.pkg,u.rawResponseChars);return{packages:p.pkg?[p.pkg]:[],totalFound:p.pkg?1:0,rawResponseChars:p.rawResponseChars}}}let l=await Td(e,t);return!("error"in l)&&l.packages.length>0?l:{error:"npm registry circuit open and web search returned no results.",hints:['Use ghSearch operation:"repositories" to find the source repository.']}}if(r===0&&pr(e)){let l=await PR(e,n,t===1);if("error"in l){if(!xd(l.error))return l}else if(l.packages.length>0||t===1)return l}let s=await Ed(e,t,n,r);if(!("error"in s)&&s.packages.length>0)return Ad(s);let a=TR(e);if(a!==e){let l=await Ed(a,t,n,r);if(!("error"in l)&&l.packages.length>0)return Ad(l)}let c=await Td(e,t);return!("error"in c)&&c.packages.length>0?c:"error"in s?{...s,hints:["npm registry and web search (npms.io) are both unreachable.",'Use ghSearch operation:"repositories" with the package name or domain terms.']}:s},{shouldCache:i=>!("error"in i||"totalFound"in i&&i.totalFound===0)})}async function ER(e){try{let t=await zn("view",[e,"deprecated","--json"]);if(t.error||t.exitCode!==0)return null;let n=t.stdout.trim();if(!n||n==="undefined"||n==="")return{deprecated:!1};try{let r=JSON.parse(n),o=RR.safeParse(r),i=o.success?o.data:n;return{deprecated:!0,message:typeof i=="string"?i:"This package is deprecated"}}catch{return{deprecated:!0,message:n}}}catch{return null}}async function AR(e){let t=pr(e.name),n=e.itemsPerPage??(t?1:10),r=Math.max(0,((e.page??1)-1)*n);return Ld(e.name,n,!0,r)}function _d(e){if(e===void 0)return;let t=e.join(" ").trim();return t.length>0?t:void 0}var LO=/\b(?:404|e404)\b|not\s+found|no\s+such\s+package|does\s+not\s+exist/i;function kd(e){return LO.test(e)}function Id(e,t,n,r){let o=Math.max(1,e.page??1),i=r?e.pageSize??10:1,s=r&&n>=i,a=Math.max(1,Math.ceil(t/i)),c=s||o<a,l=s&&o>=a?o+1:a;return{currentPage:o,totalPages:l,perPage:i,totalFound:t,returned:n,hasMore:c,...c&&o<1e3?{nextPage:o+1}:{},...c&&o>=1e3?{continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}function LR(e,t){if(!(!Array.isArray(e.keywords)||typeof t.nextPage!="number"))return{nextPage:{tool:"npmSearch",query:{keywords:e.keywords,page:t.nextPage,...typeof e.pageSize=="number"?{pageSize:e.pageSize}:{}},why:`Continue npm keyword discovery on page ${t.nextPage}.`,confidence:"exact"}}}function _O(e){return"error"in e}function dc(e){return"npmUrl"in e}function kO(e){return dc(e)&&e.path?e.path:e.name}function IO(e){return dc(e)?e.repoUrl:e.repository}function OO(e){if(!e)return;let t=e.replace(/^\.\//,"").replace(/^\//,"");return t.length>0?t:void 0}var vO={github:"github.com",gitlab:"gitlab.com",bitbucket:"bitbucket.org"};function FO(e){if(!e)return;let t=e.trim();if(!t)return;t=t.replace(/^git\+/,"");let n=s=>s.replace(/\.git$/,""),r=t.match(/^(github|gitlab|bitbucket):(.+)$/i);if(r&&r[1]&&r[2]){let s=vO[r[1].toLowerCase()];return n(`https://${s}/${r[2]}`)}let o=t.match(/^[^@/]+@([^:/]+):(.+)$/);if(o&&o[1]&&o[2])return n(`https://${o[1]}/${o[2]}`);let i=t.match(/^(?:ssh|git|https?):\/\/(.+)$/);if(i&&i[1]){let s=i[1].replace(/^[^@/]+@/,"");return n(`https://${s}`)}return n(t)}function Od(e){if(!e)return;let t=e.match(/^https:\/\/github\.com\/([^/]+)\/([^/#?]+)/i);if(!(!t||!t[1]||!t[2]))return{owner:t[1],repo:t[2]}}function _R(e,t){let n=Od(e);if(!n)return;let{owner:r,repo:o}=n;return{viewTree:{tool:"ghSearch",query:{operation:"tree",owner:r,repo:o,...t?{path:t}:{}}},searchRepositoryCode:{tool:"ghSearch",query:{operation:"code",owner:r,repo:o}},cloneRepo:{tool:"ghCloneRepo",query:{owner:r,repo:o,...t?{sparsePath:t}:{}}}}}function MO(e){let t=kO(e),n=FO(IO(e)),r={name:t};dc(e)&&(e.version&&e.version!=="unknown"&&(r.version=e.version),e.description&&(r.description=e.description),e.license&&(r.license=e.license),typeof e.weeklyDownloads=="number"&&(r.downloads=e.weeklyDownloads)),n&&(r.repository=n);let o=OO(dc(e)?e.repositoryDirectory:void 0);o&&(r.repositoryDirectory=o);let i=_R(n,o);return i&&(r.next=i),r.version&&Od(n)&&(r.warnings=[`npm version ${r.version} is the registry's latest publish and may not correspond to a release/tag in the linked repository \u2014 verify against the repo's releases or tags before citing it as the repo's latest release.`]),r}function NO(e){if(e.length<=1)return{packages:e};let t={},n=new Map,r=1,o=e.map(i=>{if(!i.repository)return i;let s=Od(i.repository);if(!s)return i;let a=`${i.repository}\0${i.repositoryDirectory??""}`,c=n.get(a);c||(c=`r${r++}`,n.set(a,c),t[c]={repository:i.repository,owner:s.owner,repo:s.repo,...i.repositoryDirectory?{repositoryDirectory:i.repositoryDirectory}:{},next:_R(i.repository,i.repositoryDirectory)});let{repository:l,repositoryDirectory:u,next:p,...d}=i;return{...d,repositoryId:c}});return Object.keys(t).length?{packages:o,repositories:t}:{packages:e}}async function kR(e){return he(e.queries,async t=>{try{let n=t.packageName??_d(t.keywords),r=Array.isArray(t.keywords);if(!n)return N("Provide a packageName or keywords for package search",t);let o=await AR({name:n,page:t.page,...r&&typeof t.pageSize=="number"?{itemsPerPage:t.pageSize}:{},goal:t.goal,reasoning:t.reasoning});if(_O(o)){if(kd(o.error)){let d=pr(n);return ge(t,{packages:[],hints:[d?`No package named "${n}". Check spelling and scope.`:`No packages matched "${n}". Try fewer keywords or an exact name.`]},!1,I.PACKAGE_SEARCH,{rawResponse:o})}return N(o.error,t,{rawResponse:o})}let s=o.packages.map(MO),a=s.length>0,c=Id(t,o.totalFound,s.length,r),l=NO(s),u=LR(t,c),p={...l,pagination:c,...c.continuationUnavailable?{terminalLimit:!0}:{},...u?{next:u}:{}};return ge(t,p,a,I.PACKAGE_SEARCH,{rawResponse:o.rawResponseChars??o})}catch(n){return N(n,t,{toolName:I.PACKAGE_SEARCH})}},{toolName:I.PACKAGE_SEARCH,keysPriority:["packages","pagination","error"]},e)}import{z as dr}from"zod";var IR={page:be,pageSize:M(1,100).optional().describe("Packages returned per keyword-discovery page."),keywords:dr.array(dr.string()).optional()};function vd(e,t){let n=Array.isArray(e.keywords)?e.keywords.join(" ").trim():e.keywords?.trim();!e.packageName?.trim()&&!n&&t.addIssue({code:"custom",path:["packageName"],message:"provide packageName or keywords"}),e.packageName?.trim()&&n&&t.addIssue({code:"custom",path:["keywords"],message:"provide packageName or keywords, not both"}),e.packageName?.trim()&&e.pageSize!==void 0&&t.addIssue({code:"custom",path:["pageSize"],message:"pageSize is only available for keyword discovery"})}var Fd=se(Hs,IR).superRefine(vd),mc=pe(Hs,IR,{strict:!0}),OR=mc.omit({packageName:!0,keywords:!0,pageSize:!0}).shape,DO=dr.object({...OR,packageName:Te(mc.shape,"packageName")}).strict().superRefine((e,t)=>vd(e,t)),HO=dr.object({...OR,keywords:dr.array(dr.string()).min(1).describe(Pe(mc.shape,"keywords").description??""),pageSize:Pe(mc.shape,"pageSize")}).strict().superRefine((e,t)=>vd(e,t)),Md=Z(dr.union([DO,HO]),{maxQueries:5});import{z as GO}from"zod";var vR={limit:M(1,100).optional(),page:be.default(1),match:GO.enum(["file","path"]).default("file")},BO=se(kn,vR),zO=Z(pe(kn,vR));import{z as fc}from"zod";var mr=e=>fc.literal(e).describe("Required operation selector."),mo=e=>Te(e,"owner"),fo=e=>Te(e,"repo"),jO=rp.extend({operation:mr("pullRequests")}).strict(),QO=yi.extend({operation:mr("issues"),owner:mo(yi.shape),repo:fo(yi.shape)}).strict(),Nd=op.omit({includeDiff:!0,filePage:!0,charOffset:!0,charLength:!0}),UO=Nd.extend({operation:mr("commits"),owner:mo(Nd.shape),repo:fo(Nd.shape)}).strict(),ho=fc.discriminatedUnion("operation",[jO,QO,UO]).describe("Search or list GitHub pull requests, issues, or commits using one strict operation branch."),Bd=Z(ho),Dd=Na.omit({prNumber:!0}),$O=Dd.extend({operation:mr("pullRequest"),owner:mo(Dd.shape),repo:fo(Dd.shape),number:Na.shape.prNumber}).strict(),Hd=Da.omit({issueNumber:!0}),WO=Hd.extend({operation:mr("issue"),owner:mo(Hd.shape),repo:fo(Hd.shape),number:Da.shape.issueNumber}).strict(),Gd=no.omit({base:!0,head:!0}),VO=Gd.extend({operation:mr("commit"),owner:mo(Gd.shape),repo:fo(Gd.shape),ref:fc.string().min(1).describe("Commit SHA or ref to retrieve exactly.")}).strict(),KO=no.extend({operation:mr("compare"),owner:mo(no.shape),repo:fo(no.shape)}).strict(),un=fc.discriminatedUnion("operation",[$O,WO,VO,KO]).describe("Retrieve one GitHub pull request, issue, commit, or ref comparison using one strict operation branch."),zd=Z(un);import{z as FR}from"zod";var MR={limit:M(1,100).optional(),page:be.default(1),match:FR.array(FR.enum(["name","description","readme"])).optional()},XO=se(rn,MR),YO=Z(pe(rn,MR));var NR={maxDepth:M(0,20).optional(),page:be.default(1),itemsPerPage:M(1,200).optional()},ZO=se(er,NR),qO=Z(pe(er,NR));import{z as jd}from"zod";var DR={maxDepth:M(0,100).optional(),minDepth:M(0,100).optional(),limit:M(1,1e4).optional(),page:be.default(1),itemsPerPage:M(1,50).optional(),excludeDir:jd.array(jd.string()).optional()},HR=jd.object(Object.fromEntries(Object.entries(Ut.shape).filter(([e])=>e!=="regexType")));function JO(e,t){e.minDepth!==void 0&&e.maxDepth!==void 0&&e.minDepth>e.maxDepth&&t.addIssue({code:"custom",message:"minDepth must be less than or equal to maxDepth.",path:["minDepth"]})}var ev=pe(HR,DR),tv=se(HR,DR).superRefine(JO),nv=Z(ev,{maxQueries:5});import{z as GR}from"zod";var BR={excludeDir:GR.array(GR.string()).optional(),maxDepth:M(0,20).optional(),limit:M(1,1e4).optional(),page:be.default(1),itemsPerPage:M(1,50).optional()},rv=pe($t,BR),ov=se($t,BR),iv=Z(rv,{maxQueries:5});var Di=[{name:St,title:"GitHub Search",description:Ue.ghSearch,schema:Xr,inputSchema:Vu},{name:oe.GITHUB_FETCH_CONTENT,title:"GitHub File Content Fetch",description:Ue.ghGetFileContent,schema:ci,inputSchema:Fu},{name:le,title:"GitHub History Search",description:Ue.ghSearchHistory,schema:ho,inputSchema:Bd},{name:ye,title:"GitHub History Item",description:Ue.ghGetHistoryItem,schema:un,inputSchema:zd},{name:oe.PACKAGE_SEARCH,title:"Package Search",description:Ue.npmSearch,schema:Fd,inputSchema:Md},{name:oe.GITHUB_CLONE_REPO,title:"Clone / Fetch GitHub Repository Locally",description:Ue.ghCloneRepo,schema:ma,inputSchema:vu},{name:et,title:"Local Search",description:Ue.localSearch,schema:ao,inputSchema:Up},{name:Wt,title:"Local Analyze Graph",description:Ue.localAnalyzeGraph,schema:On,inputSchema:Tp},{name:oe.LOCAL_FETCH_CONTENT,title:"Local Fetch Content",description:Ue.localGetFileContent,schema:bi,inputSchema:up},{name:we,title:"Get Semantic Content",description:Ue.lspGetSemantics,schema:lo,inputSchema:oc}];async function zR(e,t){try{let o=(await(await $(t)).rest.repos.getCommit({owner:e.owner,repo:e.repo,ref:e.ref})).data,i=o.files??[],s=e.path,a=s?i.filter(f=>f.filename===s||f.previous_filename===s||f.filename.startsWith(s.endsWith("/")?s:`${s}/`)):i,c=o.commit.author,l=o.commit.committer,u=o.author?.login,p=o.committer?.login,d=o.commit.message,m={type:"commit",owner:e.owner,repo:e.repo,ref:e.ref,sha:o.sha,message:d,messageHeadline:d.split(`
56
+ `)[0]??d,author:{name:c?.name??"unknown",email:c?.email??"",...u?{login:u}:{},...c?.date?{date:c.date}:{}},...l?{committer:{name:l.name??"unknown",email:l.email??"",...p?{login:p}:{},...l.date?{date:l.date}:{}}}:{},parents:o.parents.map(f=>f.sha),...o.stats?.additions===void 0?{}:{additions:o.stats.additions},...o.stats?.deletions===void 0?{}:{deletions:o.stats.deletions},changedFiles:a.length};return e.includeDiff?{data:{...m,...sr(a,{filePage:e.filePage,itemsPerPage:e.itemsPerPage,charOffset:e.charOffset,charLength:e.charLength})},status:200}:{data:m,status:200}}catch(n){return J(n)}}var jR={body:"continueBody",changedFiles:"nextChangedFilesPage",comments:"nextCommentsPage",commentBody:"continueCommentBody",commits:"nextCommitsPage",patches:"continuePatch",filePaths:"nextFilePathsPage"},sv={body:"charOffset",changedFiles:"filePage",comments:"commentPage",commentBody:"commentBodyOffset",commits:"commitPage",patches:"charOffset",filePaths:"filePage"};function pn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Hi(e,t){let n=Array.isArray(e)?e.filter(r=>typeof r=="string"):[];return[...new Set([...n,t])]}function av(e){return{body:"Continue the pull-request or issue body.",changedFiles:"Continue the pull-request changed-file list.",comments:"Continue the discussion comment list.",commentBody:"Continue the current comment body.",commits:"Continue the pull-request commit list.",patches:"Continue the current patch window.",filePaths:"Continue the pull-request file-path list."}[e]}function cv(e,t){return["filePage","commentPage","commitPage","charOffset","commentBodyOffset"].every(n=>e[n]===void 0||e[n]===t[n])}function Qd(e,t){let n=t==="pullRequest"?"pullRequests":"issues",r=e[n];if(!Array.isArray(r)||r.length===0||!pn(r[0]))return e;let o=r[0].contentPagination;if(!pn(o))return e;let s={...pn(e.next)?e.next:{}},a={},c=!1,l=!1;for(let[p,d]of Object.entries(o)){if(!pn(d)){a[p]=d;continue}let{nextQuery:m,...f}=d,h=p;if(f.hasMore===!0&&h in jR){c=!0;let y=pn(m)?un.safeParse(m):void 0,g=sv[h],S=pn(m)&&typeof m[g]=="number";y?.success&&S&&cv(m,y.data)?s[jR[h]]={tool:ye,query:y.data,why:av(h),confidence:"exact"}:(l=!0,f.continuationUnavailable={reason:S?"schemaLimit":"missingCursor"})}a[p]=f}if(!c)return e;let u=[...r];return u[0]={...r[0],contentPagination:a},{...e,[n]:u,isPartial:!0,partialReasons:Hi(e.partialReasons,"contentPagination"),...l?{terminalLimit:!0}:{},...Object.keys(s).length>0?{next:s}:{}}}function QR(e,t){let r=(Array.isArray(e.commits)?e.commits:[]).find(a=>pn(a)&&a.messageTruncated===!0);if(!pn(r)||typeof r.sha!="string")return e;let o={operation:"commit",owner:t.owner,repo:t.repo,ref:r.sha},i=un.safeParse(o);if(!i.success)return e;let s=pn(e.next)?e.next:{};return{...e,isPartial:!0,partialReasons:Hi(e.partialReasons,"commitMessageTruncated"),next:{...s,readCommit:{tool:ye,query:i.data,why:`Read the complete message for commit ${r.sha}.`,confidence:"exact"}}}}var $d=1e3;function hc(e,t,n){let r=n==="commits"?QR(e,t):e,o=r.incompleteResults===!0,i=Wd(r.next),s=typeof t.page=="number"&&Number.isInteger(t.page)?t.page:1,a=o?{...r,isPartial:!0,partialReasons:Hi(r.partialReasons,"providerIncompleteResults"),next:{...i,retry:{tool:le,query:Yu(t,n,s),why:`Retry the same ${n} provider page because the provider reported incomplete results.`,confidence:"exact"}}}:r,c=a.pagination;if(!c||typeof c!="object")return a;let l=c,u=l.totalMatchesCapped===!0,p=u?lv(a):a;if(l.hasMore!==!0)return p;let d=l.nextPage;if(typeof d!="number"||!Number.isInteger(d))return Ud(p,l,{reason:"missingProviderCursor"});if(d>1e3)return Ud(p,l,{reason:"schemaPageLimit",maxPage:1e3});let m=typeof l.perPage=="number"&&l.perPage>0?l.perPage:typeof t.pageSize=="number"&&t.pageSize>0?t.pageSize:void 0;return u&&m!==void 0&&(d-1)*m>=$d?Ud(p,l,{reason:"providerResultCap",maxResults:$d}):{...p,next:{...Wd(p.next),nextPage:{tool:le,query:Yu(t,n,d),why:`Continue ${n} search/list results on page ${d}.`,confidence:"exact"}}}}function lv(e){return{...e,isPartial:!0,terminalLimit:!0,partialReasons:Hi(e.partialReasons,"providerResultCap"),providerLimit:{reason:"providerResultCap",maxResults:$d}}}function Ud(e,t,n){let{nextPage:r,...o}=t,{nextPage:i,...s}=Wd(e.next);return{...e,terminalLimit:!0,pagination:{...o,continuationUnavailable:n},...Object.keys(s).length>0?{next:s}:{}}}function Wd(e){return e&&typeof e=="object"?e:{}}function UR(e){return tt(gi,e)}function $R(e){let{operation:t,...n}=e;return n}function uv(e,t){let n=e.filesPagination,o=(Array.isArray(e.files)?e.files:[]).find(s=>s&&typeof s=="object"&&typeof s.patchPagination?.nextCharOffset=="number"),i={};return typeof n?.nextFilePage=="number"&&(i.nextFilePage={tool:ye,query:Xu(t,{filePage:n.nextFilePage}),why:"Continue the changed-file list.",confidence:"exact"}),typeof o?.patchPagination?.nextCharOffset=="number"&&(i.continuePatch={tool:ye,query:Xu(t,{charOffset:o.patchPagination.nextCharOffset}),why:"Continue the current patch window.",confidence:"exact"}),Object.keys(i).length>0?{...e,next:i}:e}async function pv(e,t,n){let r=tt(ho,e);if(r.ok===!1)return r.error;let o=r.data,i=o.operation,s={...$R(o),type:i==="pullRequests"?"prs":i==="issues"?"issues":"commits"},a=UR(s);return a.ok===!1?a.error:i==="pullRequests"?hc(await hi(s,a.data,n,le),e,i):i==="issues"?hc(await mi(s,a.data,t.authInfo,le),e,i):hc(await fi(s,a.data,t.authInfo,le),e,i)}async function dv(e,t,n){let r=tt(un,e);if(r.ok===!1)return r.error;let o=r.data;if(o.operation==="commit"){let c=await zR({owner:String(o.owner),repo:String(o.repo),ref:String(o.ref),...typeof o.includeDiff!="boolean"?{}:{includeDiff:o.includeDiff},...typeof o.path!="string"?{}:{path:o.path},...typeof o.filePage!="number"?{}:{filePage:o.filePage},...typeof o.pageSize!="number"?{}:{itemsPerPage:o.pageSize},...typeof o.charOffset!="number"?{}:{charOffset:o.charOffset},...typeof o.charLength!="number"?{}:{charLength:o.charLength}},t.authInfo);return Rt(c)?N(c,e,{toolName:ye}):ge(e,uv(c.data,e),!0,ye)}let s={...$R(o),...o.operation==="pullRequest"?{type:"prs",prNumber:o.number,number:void 0}:o.operation==="issue"?{type:"issues",issueNumber:o.number,number:void 0}:{type:"commits"}};delete s.number;let a=UR(s);return a.ok===!1?a.error:o.operation==="pullRequest"?Qd(await hi(s,a.data,n,ye),o.operation):o.operation==="issue"?Qd(await mi(s,a.data,t.authInfo,ye),o.operation):fi(s,a.data,t.authInfo,ye)}function WR(e,t,n){let r=$e(e.authInfo);return he(e.queries,async o=>{try{return await n(o,e,r)}catch(i){return He(i,o,void 0,t)}},{toolName:t},e)}function VR(e){return WR(e,le,pv)}function KR(e){return WR(e,ye,dv)}var Gi={security:"remote",requiresServerRuntime:!0,requiresProviders:!0},mv={[St]:{isDefault:!0,isLocal:!1,type:"search",direct:{executionFn:Ny,...Gi}},[oe.GITHUB_FETCH_CONTENT]:{isDefault:!0,isLocal:!1,type:"content",direct:{executionFn:hy,...Gi}},[le]:{isDefault:!0,isLocal:!1,type:"history",direct:{executionFn:VR,...Gi}},[ye]:{isDefault:!0,isLocal:!1,type:"history",direct:{executionFn:KR,...Gi}},[oe.PACKAGE_SEARCH]:{isDefault:!0,isLocal:!1,type:"search",direct:{executionFn:kR,security:"remote",requiresServerRuntime:!0}},[oe.GITHUB_CLONE_REPO]:{isDefault:!0,isLocal:!0,isClone:!0,type:"content",direct:{executionFn:zg,timeoutMs:15e4,...Gi}},[et]:{isDefault:!0,isLocal:!0,type:"search",direct:{executionFn:xS,security:"basic"}},[Wt]:{isDefault:!0,isLocal:!0,type:"search",direct:{executionFn:Ub,security:"basic"}},[oe.LOCAL_FETCH_CONTENT]:{isDefault:!0,isLocal:!0,type:"content",direct:{executionFn:Ab,security:"basic"}},[we]:{isDefault:!0,isLocal:!0,type:"content",direct:{executionFn:yd,security:"basic",requiresServerRuntime:!0}}};function fv(e){let t=mv[e.name];if(!t)throw new Error(`Missing runtime configuration for ${e.name}`);return{name:e.name,title:e.title,description:e.description,...t,direct:{schema:e.schema,inputSchema:e.inputSchema,...t.direct}}}function hv(){let e=new Map(Di.map(m=>{let f=fv(m);return[f.name,f]})),t=m=>{let f=e.get(m);if(!f)throw new Error(`Missing direct-tool specification for ${m}`);return f},n=t(St),r=t(oe.GITHUB_FETCH_CONTENT),o=t(le),i=t(ye),s=t(oe.PACKAGE_SEARCH),a=t(oe.GITHUB_CLONE_REPO),c=t(et),l=t(Wt),u=t(oe.LOCAL_FETCH_CONTENT),p=t(we),d=Di.map(m=>t(m.name));return{GITHUB_SEARCH:n,GITHUB_FETCH_CONTENT:r,GITHUB_SEARCH_HISTORY:o,GITHUB_GET_HISTORY_ITEM:i,PACKAGE_SEARCH:s,GITHUB_CLONE_REPO:a,LOCAL_SEARCH:c,LOCAL_ANALYZE_GRAPH:l,LOCAL_FETCH_CONTENT:u,LSP_GET_SEMANTIC_CONTENT:p,ALL_TOOLS:d}}var Ht=hv(),i3=Ht.GITHUB_SEARCH,s3=Ht.GITHUB_FETCH_CONTENT,a3=Ht.GITHUB_SEARCH_HISTORY,c3=Ht.GITHUB_GET_HISTORY_ITEM,l3=Ht.PACKAGE_SEARCH,u3=Ht.GITHUB_CLONE_REPO,p3=Ht.LOCAL_SEARCH,d3=Ht.LOCAL_ANALYZE_GRAPH,m3=Ht.LOCAL_FETCH_CONTENT,f3=Ht.LSP_GET_SEMANTIC_CONTENT,XR=Ht.ALL_TOOLS;import{SYSTEM_PROMPT as bv}from"@octocodeai/octocode-core";var YR=["GitHub","Local Code","Package","Other"],ZR=new Map([St,le,ye,oe.GITHUB_FETCH_CONTENT,oe.GITHUB_CLONE_REPO,et,Wt,oe.LOCAL_FETCH_CONTENT,we,oe.PACKAGE_SEARCH].map((e,t)=>[e,t])),Gt=class extends Error{constructor(n,r=[]){super(n);this.details=r;this.name="DirectToolInputError"}details},gv=["goal","reasoning"],go=new Set([...gv]);function yv(e){return{name:e.name,title:e.title,description:e.description,schema:e.schema,inputSchema:e.inputSchema}}var JR=Di.map(e=>yv(e)),eC=[...JR];function ot(e){return JR.find(t=>t.name===e)}function qR(e){return e.startsWith("gh")?"GitHub":e.startsWith("local")||e.startsWith("lsp")?"Local Code":e===oe.PACKAGE_SEARCH?"Package":"Other"}function S3(e){return[...e].sort((t,n)=>{let r=YR.indexOf(qR(t)),o=YR.indexOf(qR(n));if(r!==o)return r-o;let i=ZR.get(t)??Number.MAX_SAFE_INTEGER,s=ZR.get(n)??Number.MAX_SAFE_INTEGER;return i!==s?i-s:t.localeCompare(n)})}var Vd={systemPrompt:bv,toolNames:mt,baseSchema:qn,tools:Object.fromEntries(eC.map(e=>[e.name,{description:e.description}]))};var Bi=null;function tC(){return Bi||(Bi=Vd),Bi}async function E3(){return tC()}async function A3(){tC()}function L3(){return Bi}function _3(){Bi=null}import{z as nC}from"zod";var Sv=["goal","reasoning"];function v3(e){let t=ot(e);if(!t)return"{}";try{return JSON.stringify(nC.toJSONSchema(t.inputSchema,{io:"input"}),null,2)}catch{return JSON.stringify(nC.toJSONSchema(t.schema,{io:"input"}),null,2)}}function F3(e){return JSON.stringify(e??{},null,2)}function M3(e){return ot(e)?[...Sv]:[]}function N3(e,t){return ot(e)?.description??e}import{z as Xd}from"zod";function bc(e){let t=ot(e);if(!t)return[];let n=Xd.toJSONSchema(t.schema,{io:"input"});if(!Et(n))return[];let r=Sc(n),o=iC(r),i=sC(r,o);return yc(o,i)}function B3(e){let t=ot(e);if(!t)return{};let n=Xd.toJSONSchema(t.schema,{io:"input"});if(!Et(n))return{};let r=new Map;for(let o of Sc(n)){if(!ht(o.properties))continue;let i=o.properties.operation;if(!Et(i)||typeof i.const!="string")continue;let s=r.get(i.const)??[];s.push(o),r.set(i.const,s)}return Object.fromEntries([...r].map(([o,i])=>{let s=iC(i),a=sC(i,s);return[o,yc(s,a).filter(c=>!go.has(c.name)&&c.name!=="operation")]}))}function oC(e,t){let n=ot(e);if(!n)return new Set;let r=Xd.toJSONSchema(n.schema,{io:"input"});if(!Et(r))return new Set;let o=Sc(r),i=o.filter(a=>Rv(a,t)),s=i.length>0?i:o;return new Set(s.flatMap(a=>ht(a.properties)?Object.keys(a.properties):[]))}function Rv(e,t){if(!ht(e.properties))return!0;for(let[n,r]of Object.entries(t)){let o=e.properties[n];if(Et(o)&&("const"in o&&r!==o.const||Array.isArray(o.enum)&&!o.enum.some(i=>i===r)))return!1}return!0}function Cv(e){let t=[],n=typeof e.minimum=="number"?e.minimum:void 0,r=typeof e.maximum=="number"?e.maximum:void 0;return n!==void 0&&r!==void 0?t.push(`${n}-${r}`):n!==void 0?t.push(`>=${n}`):r!==void 0&&t.push(`<=${r}`),"default"in e&&t.push(`default ${JSON.stringify(e.default)}`),t.length>0?t.join(", "):void 0}function gc(e){if("const"in e)return`enum(${String(e.const)})`;if(Array.isArray(e.enum)&&e.enum.length>0)return`enum(${e.enum.map(String).join(", ")})`;if(e.type==="array"){let n=Et(e.items)?e.items:void 0;return`array<${n?gc(n):"value"}>`}let t=Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:void 0;if(t){let n=t.filter(Et).map(gc).filter(r=>r!=="value");if(n.length>0)return[...new Set(n)].join(" | ")}return Array.isArray(e.type)?e.type.join(" | "):typeof e.type=="string"?e.type:"value"}function Sc(e){return ht(e.properties)?[e]:(Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:[]).filter(Et).flatMap(n=>Sc(n))}function iC(e){let t=new Map;for(let n of e)if(ht(n.properties))for(let[r,o]of Object.entries(n.properties)){if(!Et(o))continue;let i=t.get(r)??[];i.push(o),t.set(r,i)}return Object.fromEntries([...t].map(([n,r])=>{let o=r.filter(s=>"const"in s).map(s=>s.const);return o.length===r.length?[n,{enum:[...new Set(o)],description:n==="operation"?"Required operation selector.":r[0]?.description}]:new Set(r.map(gc)).size>1?[n,{anyOf:r}]:[n,r[0]??{}]}))}function sC(e,t){if(e.length===0)return new Set;let n=e.map(o=>new Set(Array.isArray(o.required)?o.required:[])),r=[...n[0]??new Set].filter(o=>n.every(i=>i.has(o)));return new Set(r.filter(o=>!go.has(o)&&!Kd(t[o])))}function yc(e,t,n=""){let r=[];for(let[o,i]of Object.entries(e)){if(!n&&go.has(o))continue;let s=Et(i)?i:{},a=n?`${n}.${o}`:o;if(r.push({name:a,required:t.has(o),type:gc(s),constraints:Cv(s),description:typeof s.description=="string"?s.description:void 0}),ht(s.properties)){let l=new Set(Array.isArray(s.required)?s.required.filter(u=>typeof u=="string"?!Kd(s.properties?.[u]):!1):[]);r.push(...yc(s.properties,l,a))}let c=s.type==="array"&&Et(s.items)?s.items:void 0;if(c&&ht(c.properties)){let l=new Set(Array.isArray(c.required)?c.required.filter(u=>typeof u=="string"?!Kd(c.properties?.[u]):!1):[]);r.push(...yc(c.properties,l,a))}}return r}function aC(e,t){if(t.startsWith("array<")){let n=t.slice(6,-1);return[rC(e,n)]}return rC(e,t)}function rC(e,t){if(t.startsWith("enum("))return/^enum\(([^,)]+)/.exec(t)?.[1]??e;if(t==="integer"||t==="number")return e==="lineHint"?42:5;if(t==="boolean")return!0;switch(e){case"keywords":case"keywordsToSearch":case"query":case"text":return"runCLI";case"path":return".";case"uri":return"/path/to/file.ts";case"owner":return"bgauryy";case"repo":return"octocode";case"extension":return"ts";case"filename":return"package.json";case"language":return"TypeScript";case"symbolName":return"myFunction";case"name":case"packageName":return"zod";default:return e}}function ht(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Et(e){return ht(e)}function Kd(e){return Et(e)&&"default"in e}function cC(e){return e!==St?[]:[{label:"code search",query:{operation:"code",keywords:["localSearch"],owner:"bgauryy",repo:"octocode",pageSize:5}},{label:"repository search",query:{operation:"repositories",keywords:["code research"],language:"TypeScript",pageSize:5}},{label:"repository tree",query:{operation:"tree",owner:"bgauryy",repo:"octocode",path:"packages",maxDepth:2}}]}function lC(e){let t=cC(e);return t.length>0?t:e===le?[{label:"PR search (list)",query:{operation:"pullRequests",owner:"bgauryy",repo:"octocode",keywords:["localSearch"],concise:!0,pageSize:5}},{label:"issue search (list)",query:{operation:"issues",owner:"bgauryy",repo:"octocode",keywords:["schema"],state:"open",pageSize:5}},{label:"commit history",query:{operation:"commits",owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src",since:"6m",pageSize:10}}]:e===oe.GITHUB_CLONE_REPO?[{label:"full repo clone",query:{owner:"bgauryy",repo:"octocode"}},{label:"subtree clone",query:{owner:"bgauryy",repo:"octocode",sparsePath:"packages/octocode-tools-core"}}]:e===et?[{label:"text anchors",query:{operation:"text",path:"/ABS/repo/src",searchText:"buildDirectToolCommandPatterns",maxFiles:20}},{label:"structural matches",query:{operation:"structural",path:"/ABS/repo/src",pattern:"eval($X)",langType:"typescript"}},{label:"file discovery",query:{operation:"files",path:"/ABS/repo",names:["package.json"],entryType:"f"}},{label:"tree orientation",query:{operation:"tree",path:"/ABS/repo/src",maxDepth:2}}]:e===oe.LOCAL_FETCH_CONTENT?[{label:"exact line range",query:{path:"/ABS/repo/packages/octocode-tools-core/package.json",startLine:1,endLine:30,minify:"none"}},{label:"matched slice",query:{path:"/ABS/repo/packages/octocode-tools-core/src/tools/directToolCatalog.meta.ts",matchString:"buildKnownDirectToolCommandPatternQueries",contextLines:8,minify:"standard"}}]:e===Wt?[{label:"dead code from detected entrypoints",query:{operation:"deadCode",path:"/ABS/repo",limit:20}},{label:"cycles",query:{operation:"cycles",path:"/ABS/repo",limit:20}},{label:"dependencies of one file",query:{operation:"dependencies",path:"/ABS/repo",file:"src/index.ts",depth:2}},{label:"dependents of one file",query:{operation:"dependents",path:"/ABS/repo",file:"src/index.ts",depth:2}},{label:"shortest dependency path",query:{operation:"path",path:"/ABS/repo",file:"src/index.ts",target:"src/responses.ts"}},{label:"reachability from detected entrypoints",query:{operation:"reachability",path:"/ABS/repo",limit:20}}]:e===oe.GITHUB_FETCH_CONTENT?[{label:"matched slice (cheap read of one function)",query:{owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src/responses.ts",matchString:"export function cleanJsonObject",contextLines:8}},{label:"symbols outline (unknown/large file)",query:{owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src/responses.ts",minify:"symbols"}}]:e===ye?[{label:"pull request detail",query:{operation:"pullRequest",owner:"bgauryy",repo:"octocode",number:1,content:{body:!0,patches:{mode:"all"}}}},{label:"issue detail",query:{operation:"issue",owner:"bgauryy",repo:"octocode",number:1,content:{body:!0,comments:{discussion:!0}}}},{label:"exact commit",query:{operation:"commit",owner:"bgauryy",repo:"octocode",ref:"main"}},{label:"compare two refs (base...head)",query:{operation:"compare",owner:"bgauryy",repo:"octocode",base:"main",head:"update-tools"}}]:e===oe.PACKAGE_SEARCH?[{label:"exact package \u2192 source repo",query:{packageName:"zod"}},{label:"keyword discovery (paged candidates)",query:{keywords:["schema","validation"],page:1}}]:e===we?[{label:"symbol outline (absolute uri)",query:{uri:"/ABS/packages/octocode-tools-core/src/scheme/pagination.ts",type:"documentSymbols"}},{label:"semantic definition (absolute uri + lineHint)",query:{uri:"/ABS/packages/octocode-tools-core/src/scheme/pagination.ts",type:"definition",symbolName:"buildNextPageContinuation",lineHint:72}}]:[]}function uC(e,t){return`tools ${e} --queries '${JSON.stringify(t)}'`}function xv(e){let t=lC(e);if(t.length>0)return t.map(r=>({...r,command:uC(e,r.query)}));let n=wv(e);return Object.keys(n).length===0?[]:[{label:"schema-derived",query:n,command:uC(e,n)}]}function Z3(e){return xv(e)[0]?.query??{}}function wv(e){if(!ot(e))return{};let t=bc(e),n=t.filter(i=>!i.name.includes(".")),r=Pv(n),o={};for(let i of r)o[i.name]=aC(i.name,i.type);return e.startsWith("lsp")&&t.some(i=>i.name==="uri")&&(o.uri??="uri"),e===we&&(o.type??="definition",o.symbolName??="symbolName",o.lineHint??=1),o}var pC=4,Yd=new Map([["keywords",10],["keywordsToSearch",11],["query",12],["text",13],["packageName",14],["name",15],["uri",20],["type",21],["owner",30],["repo",31],["extension",32],["filename",33],["language",34],["path",40],["target",50],["from",51],["scope",52],["pattern",60],["rule",61],["op",80],["operation",81],["minify",90]]),dC=new Set(["page","itemsPerPage","limit","pageSize","matchPage","maxFiles","maxMatchesPerFile","matchContentLength","responseCharLength","responseCharOffset"]);function Pv(e){let t=e.filter(i=>i.required),n=new Map;for(let i of t)n.set(i.name,i);let r=e.filter(i=>!i.required&&Tv(i)).sort(Ev),o=Math.max(pC,t.length);for(let i of r){if(n.size>=o)break;n.set(i.name,i)}return n.size>0?[...n.values()]:e.filter(i=>!dC.has(i.name)).filter(i=>i.type!=="boolean").slice(0,pC)}function Tv(e){return dC.has(e.name)||e.type==="boolean"?!1:Av(e)?Yd.has(e.name):!0}function Ev(e,t){let n=Yd.get(e.name)??Number.MAX_SAFE_INTEGER,r=Yd.get(t.name)??Number.MAX_SAFE_INTEGER;return n!==r?n-r:e.name.localeCompare(t.name)}function Av(e){return e.constraints?.includes("default ")===!0}import{z as hC}from"zod";import{z as Lv}from"zod";function Rc(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function mC(e){return Rc(e.properties)?[e]:(Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:[]).filter(Rc).flatMap(mC)}function _v(e){let t=ot(e)?.schema;if(!t)return new Map;let n=Lv.toJSONSchema(t),r=new Map;for(let o of mC(n)){if(!Rc(o.properties))continue;let i=o.properties.operation;if(!Rc(i)||typeof i.const!="string")continue;let s=r.get(i.const)??new Set;for(let a of Object.keys(o.properties))["goal","reasoning","operation"].includes(a)||s.add(a);r.set(i.const,s)}return new Map([...r].map(([o,i])=>[o,[...i]]))}function Zd(e){if(e==="ghSearch"){let[t,...n]=Ls(e);return[...t?[t]:[],"code and repositories need at least one search term or scope filter.",...n]}return e==="localSearch"?["text needs searchText.","structural needs exactly one of pattern or rule.","Fields from different operations cannot be mixed."]:e==="ghSearchHistory"?["Choose pullRequests, issues, or commits; fields cannot cross operations.","issues and commits require owner+repo; pullRequests may search globally.","Search/list operations reject exact identities, content, and diff pagination."]:e==="ghGetHistoryItem"?["Every operation requires owner+repo.","pullRequest and issue need number; commit needs ref; compare needs base+head.","Fields and pagination axes cannot cross operations."]:Ls(e)}function fC(e){let t=_v(e);return(e==="ghSearchHistory"?[{name:"pullRequests",when:"Search or list pull requests",requires:["operation"],example:{operation:"pullRequests",keywords:["schema"]}},{name:"issues",when:"Search or list issues",requires:["operation","owner","repo"],example:{operation:"issues",owner:"o",repo:"r"}},{name:"commits",when:"List commit history",requires:["operation","owner","repo"],example:{operation:"commits",owner:"o",repo:"r"}}]:e==="ghGetHistoryItem"?[{name:"pullRequest",when:"Retrieve one pull request",requires:["operation","owner","repo","number"],example:{operation:"pullRequest",owner:"o",repo:"r",number:1}},{name:"issue",when:"Retrieve one issue",requires:["operation","owner","repo","number"],example:{operation:"issue",owner:"o",repo:"r",number:1}},{name:"commit",when:"Retrieve one commit",requires:["operation","owner","repo","ref"],example:{operation:"commit",owner:"o",repo:"r",ref:"main"}},{name:"compare",when:"Compare two refs",requires:["operation","owner","repo","base","head"],example:{operation:"compare",owner:"o",repo:"r",base:"main",head:"next"}}]:Al(e)).map(r=>({...r,...e==="localSearch"&&r.name==="structural"?{requires:["operation","path"]}:{},...e==="lspGetSemantics"&&r.name==="workspace"?{requires:["type","symbolName"]}:{},...t.has(r.name)?{fields:t.get(r.name)}:{}}))}function a6(e,t,n={}){if(typeof t!="string")return null;let r;try{r=JSON.parse(t)}catch{throw new Gt("Tool input must be valid JSON.")}return kv(e,r,n)}function kv(e,t,n={}){let r=vv(e,t,n),o=ot(e);if(!o)throw new Gt(`Unknown tool: ${e}`);let i=o.inputSchema.safeParse(r);if(!i.success)throw new Gt("Check the query fields.",[...Iv(e),...Ov(i.error)]);return i.data}function Iv(e){if(e==="npmSearch")return Zd(e).slice(0,1);if(e==="localSearch"){let t=fC(e).map(n=>n.name);return t.length>0?[`operation must be one of ${t.map((n,r)=>r===t.length-1&&t.length>1?`or ${n}`:n).join(", ")}.`]:[]}if(e==="lspGetSemantics"){let t=Zd(e);return t.length>0?[t.join(" ")]:[]}return[]}function Ov(e){let t=n=>{let r=n.errors;if(n.code!=="invalid_union"||!Array.isArray(r))return[n];let o=r.filter(s=>Array.isArray(s));return o.length===0?[n]:o.reduce((s,a)=>a.length<s.length?a:s).map(s=>({...s,path:[...n.path,...s.path]}))};return e.issues.flatMap(t).map(n=>`${n.path.length>0?n.path.join("."):"input"}: ${n.message}`)}function vv(e,t,n){let r=[];if(Array.isArray(t))r=t;else if(ht(t)&&Array.isArray(t.queries))r=t.queries;else if(ht(t))r=[t];else throw new Gt('Tool input must be a JSON object, an array of query objects, or { "queries": [...] }.');if(r.length===0)throw new Gt("At least one query is required.");let o=ht(t)&&Array.isArray(t.queries)?Object.fromEntries(Object.entries(t).filter(([s])=>s!=="queries")):{},i=r.map((s,a)=>Fv(e,Gv(e,s,a,n),{sourceLabel:n.sourceLabel}));return{...o,queries:i}}function Fv(e,t,n){let r={...t},o=n.sourceLabel??"direct tool execution",i=Mv(e,o);return(typeof r.goal!="string"||r.goal.trim().length===0)&&(r.goal=i),(typeof r.reasoning!="string"||r.reasoning.trim().length===0)&&(r.reasoning=`Executed via ${o} tool command`),r}function Mv(e,t){return`Execute ${e} via ${t}`}function Nv(e,t){let n=e.length+1,r=t.length+1,o=Array.from({length:n*r},()=>0);for(let i=0;i<n;i++)o[i*r]=i;for(let i=0;i<r;i++)o[i]=i;for(let i=1;i<n;i++)for(let s=1;s<r;s++){let a=e[i-1]===t[s-1]?0:1;o[i*r+s]=Math.min(o[(i-1)*r+s]+1,o[i*r+s-1]+1,o[(i-1)*r+s-1]+a)}return o[n*r-1]}function Dv(e,t){let n=e.toLowerCase(),r,o=Number.POSITIVE_INFINITY,i,s=Number.POSITIVE_INFINITY;for(let a of t){let c=a.toLowerCase(),l=Nv(n,c);if(c.includes(n)||n.includes(c)){l<o&&(r=a,o=l);continue}if(n.length<3)continue;let u=Math.max(2,Math.floor(a.length/3));l<=u&&l<s&&(i=a,s=l)}return r??i}var Hv={npmSearch:{name:"packageName"},lspGetSemantics:{op:"type",line:"lineHint",path:"uri",itemsPerPage:"pageSize",limit:""},localGetFileContent:{filePath:"path"},localSearch:{itemsPerPage:"pageSize",maxResults:["maxFiles","limit","pageSize"],keywords:"searchText",language:"langType",regexType:"regex",sortBy:"sort",sortReverse:"reverse"},ghGetFileContent:{matchStringContextLines:"contextLines",minified:"minify"},ghSearch:{itemsPerPage:"pageSize",limit:"",topicsToSearch:"topics"},localAnalyzeGraph:{itemsPerPage:"pageSize",maxResults:"limit",maxDepth:"depth"}};function Gv(e,t,n,r={}){if(!ht(t))throw new Gt("Tool input must be a JSON object or an array of objects.");let o=new Set([...bc(e).filter(a=>!a.name.includes(".")).map(a=>a.name),...gC(ot(e)?.schema),...go]),i={},s=[];for(let[a,c]of Object.entries(t)){if(o.has(a)){i[a]=c;continue}s.push(a)}if(s.length>0&&o.size>0&&(r.onUnknownFields?.(s,n),r.rejectUnknownFields===!0)){let a=oC(e,t),c=s.map(l=>{let u=Hv[e]?.[l],d=(Array.isArray(u)?u:u===void 0?[]:[u]).find(m=>a.has(m))??Dv(l,a);return d?`'${l}' \u2192 did you mean '${d}'?`:""}).filter(Boolean);throw new Gt(`Unknown field(s): ${s.join(", ")}`,[...c,`Remove unknown field(s) from query ${n+1}: ${s.join(", ")}`,`Run tools ${e} --scheme to see valid fields.`])}return i}function gC(e){if(!e)return[];if(e instanceof hC.ZodObject)return Object.keys(e.shape);let t=e.options,n=e instanceof hC.ZodUnion?e.options:Array.isArray(t)?t:[];return n.length>0?[...new Set(n.flatMap(r=>gC(r)))]:[]}import{getConfigSync as Uv}from"@octocodeai/config";import{ContentSanitizer as zv}from"@octocodeai/octocode-engine/security";function yC(e){if(e instanceof Error){let t=e.code;return{name:e.name||"Error",message:e.message||String(e),code:typeof t=="string"?t:void 0}}if(typeof e=="string")return{name:"Error",message:e};if(e&&typeof e=="object"){let t=e,n=typeof t.message=="string"?t.message:Bv(t)??"Unknown error",r=typeof t.name=="string"?t.name:"Error",o=typeof t.code=="string"?t.code:void 0;return{name:r,message:n,code:o}}return{name:"Error",message:e===void 0?"undefined":String(e)}}function Bv(e){try{return JSON.stringify(e)}catch{return}}var jv="[content withheld: sanitization failed \u2014 retry the call; if this persists, report it]";function qd(e){let t=e;if(t.structuredContent)try{t={...t,structuredContent:sn(t.structuredContent)}}catch{t={...t,structuredContent:{results:[],status:"error",code:"SANITIZATION_FAILED",error:"structuredContent withheld: sanitization failed \u2014 retry the call; if this persists, report it"},isError:!0}}return t.content?.length&&(t={...t,content:t.content.map(n=>{if(n.type==="text"&&"text"in n&&typeof n.text=="string")try{let{content:r}=zv.sanitizeContent(n.text);return{...n,text:r}}catch{return{...n,text:jv}}return n})}),t}var Qv="TOOL_CALLBACK_EXCEPTION";function Jd(e,t){let n=yC(t),r={content:[{type:"text",text:`error: tool "${e}" threw an exception
57
+ message: ${n.message}`}],structuredContent:{results:[],status:"error",tool:e,code:Qv,error:{name:n.name,message:n.message,code:n.code}},isError:!0};try{return qd(r)}catch{return r}}var Cc=null,xc=null,wc=null,$v=$f;function Wv(e){let t=e;return n=>t(n)}function Vv(e){let{direct:t}=e;return{name:e.name,title:e.title,description:e.description,schema:t.schema,inputSchema:t.inputSchema,execute:Wv(t.executionFn),security:t.security,isLocal:e.isLocal,isDefault:e.isDefault,isClone:e.isClone,requiresServerRuntime:t.requiresServerRuntime,requiresProviders:t.requiresProviders,timeoutMs:t.timeoutMs}}var Kv=XR.map(Vv);function Xv(e){return Kv.find(t=>t.name===e)}async function Yv(e,t){let n=Xv(e);if(!n)throw new Error(`Unknown tool: ${e}`);try{let r=Zv(n,t);return Jv(n),await qv(n),await eF(n,r)}catch(r){return Jd(n.name,r)}}function Zv(e,t){let n=e.inputSchema.safeParse(t);if(!n.success)throw n.error;return n.data}async function qv(e){e.requiresServerRuntime||(wc||(wc=Ar(At()).then(()=>{}).catch(t=>{throw wc=null,t})),await wc),e.requiresServerRuntime&&(Cc||(Cc=$v().catch(t=>{throw Cc=null,t})),await Cc),e.requiresProviders&&(xc||(xc=bg().then(()=>{}).catch(t=>{throw xc=null,t})),await xc)}function Jv(e){let t=Uv(),n=t.tools.enabled??[],r=t.tools.disabled??[];if(e.isLocal&&!t.local.enabled){let o=new Error(`Tool "${e.name}" requires local tools. Set ENABLE_LOCAL=true to use it.`);throw o.code="localToolsDisabled",o}if(e.isClone&&!t.local.enableClone){let o=new Error(`Tool "${e.name}" requires clone support. Set ENABLE_CLONE=true to use it.`);throw o.code="cloneDisabled",o}if(n.length>0&&!n.includes(e.name)){let o=new Error(`Tool "${e.name}" is outside the TOOLS_TO_RUN allowlist.`);throw o.code="toolNotEnabled",o}if(!e.isDefault&&!n.includes(e.name)){let o=new Error(`Tool "${e.name}" is opt-in. Add it to TOOLS_TO_RUN or .octocoderc tools.enabled.`);throw o.code="toolNotEnabled",o}if(n.length===0&&r.includes(e.name)){let o=new Error(`Tool "${e.name}" is disabled by DISABLE_TOOLS.`);throw o.code="toolDisabled",o}}async function eF(e,t){try{let n=e.security==="remote"?await tF(e,t):await nF(e,t);return qd(n)}catch(n){return Jd(e.name,n)}}async function tF(e,t){return em(e.name,async(r,o)=>e.execute({...r,authInfo:o.authInfo,sessionId:o.sessionId,signal:o.signal}),{timeoutMs:e.timeoutMs})(t)}async function nF(e,t){return tm(e.execute,e.name,{timeoutMs:e.timeoutMs})(t)}var F6={success:"\u2705",empty:"\u{1F4ED}",error:"\u274C",partial:"\u26A0\uFE0F",searching:"\u{1F50D}",loading:"\u23F3",info:"\u2139\uFE0F",file:"\u{1F4C4}",folder:"\u{1F4C1}",page:"\u{1F4C3}",definition:"\u{1F3AF}",reference:"\u{1F517}",call:"\u{1F4DE}"};import{getConfigSync as bC}from"@octocodeai/config";function D6(){return process.env.VSCODE_PID||process.env.VSCODE_IPC_HOOK?"vscode":process.env.CURSOR_CHANNEL||process.env.CURSOR_TRACE_ID?"cursor":"standalone"}function H6(){try{return bC().local.enabled}catch{return!1}}function G6(){try{if(!bC().local.enabled)return"Local tools are disabled (ENABLE_LOCAL=false). MCP LSP tools are unavailable."}catch{}return null}import{validateCommand as rF}from"@octocodeai/octocode-engine/commandValidator";async function Q6(e,t=[],n={}){let r=rF(e,t);if(!r.isValid)throw new Error(`Command validation failed: ${r.error||"Command not allowed"}`);let o=sa(t);if(!o.valid)throw new Error(`Argument validation failed: ${o.error||"Invalid arguments"}`);let{timeout:i=3e4,cwd:s,env:a,maxOutputSize:c=10*1024*1024,tolerateOutputLimit:l=!1}=n,u=await ar(e,t,{timeout:i,cwd:s,env:a,maxOutputSize:c});if(u.outputLimitExceeded&&l)return{success:!0,code:u.exitCode,stdout:u.stdout,stderr:u.stderr,truncated:!0};if(u.error)throw u.error;return{success:u.success,code:u.exitCode,stdout:u.stdout,stderr:u.stderr}}import{z}from"zod";var Pc=z.object({text:z.string()}),oF=z.object({match:z.object({text:z.string()}).optional(),start:z.number(),end:z.number()}),iF=z.object({type:z.literal("match"),data:z.object({path:Pc,lines:z.object({text:z.string()}),line_number:z.number(),absolute_offset:z.number(),submatches:z.array(oF)})}),sF=z.object({type:z.literal("context"),data:z.object({path:Pc,lines:z.object({text:z.string()}),line_number:z.number(),absolute_offset:z.number()})}),aF=z.object({type:z.literal("begin"),data:z.object({path:Pc})}),cF=z.object({type:z.literal("end"),data:z.object({path:Pc,stats:z.object({elapsed:z.object({human:z.string()}),searches:z.number(),searches_with_match:z.number()}).optional()})}),lF=z.object({type:z.literal("summary"),data:z.object({elapsed_total:z.object({human:z.string()}),stats:z.object({elapsed:z.object({human:z.string()}),searches:z.number(),searches_with_match:z.number(),bytes_searched:z.number(),bytes_printed:z.number(),matched_lines:z.number(),matches:z.number()})})}),W6=z.discriminatedUnion("type",[iF,sF,aF,cF,lF]);import{securityRegistry as C9,ContentSanitizer as x9}from"@octocodeai/octocode-engine/security";import{maskSensitiveData as P9}from"@octocodeai/octocode-engine/mask";import{configureSecurity as E9}from"@octocodeai/octocode-engine/withSecurityValidation";import{z as M9}from"zod";export{hF as ALL_ERROR_CODES,XR as ALL_TOOLS,qn as BASE_SCHEMA,vu as BulkCloneRepoLocalSchema,oc as BulkLspGetSemanticsQuerySchema,Df as CACHE_MAINTENANCE_INTERVAL_MS,Tc as CONFIG_ERRORS,si as CORE_ALLOWED_ENV_VARS,qt as CREDENTIALS_FILE,bd as CircuitOpenError,ma as CloneRepoQueryLocalSchema,no as CommitCompareQueryShape,op as CommitHistoryQueryShape,x9 as ContentSanitizer,f2 as DEFAULTS,dZ as DEFAULT_CIRCUIT_FAILURE_THRESHOLD,sm as DEFAULT_MATCH_SNIPPET_CHARS,Ue as DESCRIPTIONS,pT as DIFF_PREVIEW_MAX_LINES,go as DIRECT_TOOL_AUTO_FILLED_FIELDS,YR as DIRECT_TOOL_CATEGORIES,JR as DIRECT_TOOL_DEFINITIONS,eC as DIRECT_TOOL_DISCOVERY_DEFINITIONS,Gt as DirectToolInputError,K as ERROR_CODES,Ie as ERROR_MESSAGES,bo as FETCH_ERRORS,fn as FILE_OPERATION_ERRORS,Fu as FileContentBulkQueryLocalSchema,hA as FileContentQueryBaseLocalSchema,ci as FileContentQueryLocalSchema,u3 as GITHUB_CLONE_REPO,s3 as GITHUB_FETCH_CONTENT,im as GITHUB_FILE_CONTENT_DEFAULT_CHAR_LENGTH,c3 as GITHUB_GET_HISTORY_ITEM,ye as GITHUB_GET_HISTORY_ITEM_TOOL_NAME,i3 as GITHUB_SEARCH,Re as GITHUB_SEARCH_DEFAULT_LIMIT,a3 as GITHUB_SEARCH_HISTORY,le as GITHUB_SEARCH_HISTORY_TOOL_NAME,ue as GITHUB_SEARCH_MAX_LIMIT,dF as GITHUB_SEARCH_MAX_PAGES,St as GITHUB_SEARCH_TOOL_NAME,mF as GITHUB_STRUCTURE_DEFAULT_ENTRIES_PER_PAGE,nm as GITHUB_STRUCTURE_MAX_ENTRIES_PER_PAGE,na as GitHubProvider,kL as GitHubPullRequestSearchBulkQueryLocalSchema,gi as GitHubPullRequestSearchQueryLocalSchema,Vu as GitHubSearchBulkQuerySchema,Xr as GitHubSearchQuerySchema,gr as HOME,qN as IGNORED_FILE_EXTENSIONS,JN as IGNORED_FILE_NAMES,eD as IGNORED_FOLDER_NAMES,Da as IssueDetailQueryShape,yi as IssueListQueryShape,zt as KEY_FILE,d3 as LOCAL_ANALYZE_GRAPH,Wt as LOCAL_ANALYZE_GRAPH_TOOL_NAME,ji as LOCAL_DEFAULT_FILES_PER_PAGE,m3 as LOCAL_FETCH_CONTENT,dn as LOCAL_MAX_DEPTH,Qi as LOCAL_MAX_FILES_PER_PAGE,Ve as LOCAL_MAX_LIMIT,p3 as LOCAL_SEARCH,et as LOCAL_SEARCH_TOOL_NAME,j as LOCAL_TOOL_ERROR_CODES,am as LOCAL_TOOL_ERROR_REGISTRY,we as LSP_GET_SEMANTICS_TOOL_NAME,f3 as LSP_GET_SEMANTIC_CONTENT,Tp as LocalAnalyzeGraphBulkQuerySchema,On as LocalAnalyzeGraphQuerySchema,up as LocalFetchContentBulkQuerySchema,bi as LocalFetchContentQuerySchema,Up as LocalSearchBulkQuerySchema,ao as LocalSearchQuerySchema,PC as LocalToolErrorCategory,lo as LspGetSemanticsQuerySchema,vw as MAX_BRANCH_CACHE_SIZE,fr as MAX_CHAR_LENGTH,om as MAX_CONTEXT_LINES,zo as MAX_DIRECTORY_FILES,mn as MAX_MATCH_CONTENT_LENGTH,G as MAX_PAGE_NUMBER,Ts as MAX_TOTAL_SIZE,sl as NETWORK_ERROR_PATTERNS,RR as NpmDeprecationOutputSchema,SR as NpmRegistrySearchSchema,Md as NpmSearchBulkQueryLocalSchema,Fd as NpmSearchQueryLocalSchema,ic as NpmViewResultSchema,Lc as OCTOCODE_DIR,Ye as OCTOCODE_HOME,sf as OctocodeConfigSchema,Aw as OctokitWithThrottling,l3 as PACKAGE_SEARCH,So as PROMISE_ERRORS,ug as PROVIDER_CAPABILITIES,Sg as PROXY_ENV_VARS,Qn as PR_CONTENT_DEFAULT_ITEMS_PER_PAGE,rm as PR_CONTENT_MAX_ITEMS_PER_PAGE,Ue as PUBLIC_TOOL_DESCRIPTIONS,Ou as ProviderInitializationError,Na as PullRequestDetailQueryShape,rp as PullRequestListQueryShape,Ps as RATE_LIMIT_CONFIG,al as RATE_LIMIT_PATTERNS,hn as REPOSITORY_ERRORS,Kt as RESOURCE_LIMITS,W6 as RipgrepJsonMessageSchema,Ke as SEARCH_ERRORS,wS as SEMANTIC_CONTENT_TYPES,WQ as SENSITIVE_ENV_VARS,$n as SESSION_FILE,xC as STARTUP_ERRORS,oe as STATIC_TOOL_NAMES,Wn as STATS_FILE,nh as STATUS_TO_ERROR_CODE,e2 as SearchCommitsBulkLocalSchema,JV as SearchCommitsLocalSchema,qV as SearchIssuesBulkLocalSchema,ZV as SearchIssuesLocalSchema,YV as SearchPullRequestsBulkLocalSchema,XV as SearchPullRequestsLocalSchema,F6 as StatusEmojis,Vr as TOOLING_ALLOWED_ENV_VARS,wC as TOOL_ERRORS,CC as TOOL_METADATA_ERRORS,I as TOOL_NAMES,Ge as ToolError,Xe as ToolErrors,yo as VALIDATION_ERRORS,TR as _packageNameToSearchKeywords,_3 as _resetMetadataState,uO as _resetNpmRegistryUrlCache,of as _resetSessionState,hN as _resetTokenResolvers,fN as _setTokenResolvers,WL as applyConfiguredAllowedRoots,ql as applyContentPagination,Us as applyPagination,ei as applyPartialContentFilter,ng as applyStructurePagination,gR as assertCircuitAvailable,W as attachRawResponseChars,CB as buildBlockBoundaryHint,ia as buildChildProcessEnv,dl as buildCodeSearchQuery,jB as buildDiffPreview,xv as buildDirectToolCommandPatterns,Z3 as buildDirectToolExampleQuery,k_ as buildEntryPaginationHints,aC as buildExampleValue,YT as buildGitHubPullRequestsSearchParams,my as buildGithubFetchContentFinalizer,bl as buildIssueSearchQuery,Id as buildPackagePagination,CT as buildPullRequestSearchCacheKey,hl as buildPullRequestSearchQuery,ml as buildRepoSearchQuery,rC as buildScalarExampleValue,Jd as buildToolErrorResult,Pi as buildWalkWarnings,oT as byteSlice,Qs as byteToCharIndex,Gh as charToByteIndex,d2 as checkLargeOutputSafety,cZ as checkNpmAvailability,ER as checkNpmDeprecation,pO as checkNpmRegistryReachable,jp as checkRegexSafety,M as clampedInt,ii as cleanJsonObject,gN as cleanup,$c as cleanupStaleCloneArtifacts,zM as clearAllCache,TM as clearDiskCache,QM as clearLSPToolCache,jM as clearLocalToolCache,_N as clearOctokitInstances,EQ as clearProviderCache,UM as clearRemoteAPICache,Pg as cloneRepo,yc as collectDisplayFields,oy as collectFlatErrors,WE as commonDirPrefix,Wp as compactLocation,NO as compactPackageRepositories,cn as compactResolvedSymbol,Ay as compareIsoDateDescending,Vd as completeMetadata,Ig as computeQueryTimeout,fZ as configureCircuitBreaker,E9 as configureSecurity,$r as contextLinesField,fB as convertByteMatchToChar,Vt as countLines,B as countSerializedChars,tu as createBasePRTransformation,wr as createCacheMeta,Ii as createCallItemKey,N as createErrorResult,on as createGitHubProviderError,ta as createGitHubProviderErrorFromResult,$e as createLazyProviderContext,Zl as createPaginationInfo,cA as createProviderExecutionContext,Z as createRelaxedBulkQuerySchema,Qr as createResponseFormat,IQ as createResult,HY as createSafeRegExp,ge as createSuccessResult,Yi as decrypt,xm as deleteCredentials,rf as deleteSession,Cv as describeSchemaConstraints,gc as describeSchemaType,D6 as detectEnvironment,Xi as encrypt,pm as ensureClone,Pn as ensureCloneParentDir,Vi as ensureHome,yn as ensureOctocodeDir,LC as ensureRepos,Ac as ensureTmp,_C as ensureTree,Tr as etagSoftCache,ms as evictExpiredClones,Pr as evictExpiredTrees,Ub as executeAnalyzeGraph,he as executeBulkOperation,zg as executeCloneRepo,Yv as executeDirectTool,Ab as executeFetchContent,Ny as executeGitHubSearch,xS as executeLocalSearch,yd as executeLspGetSemantics,zn as executeNpmCommand,an as executeProviderOperation,Bg as executeProviderOperations,_g as executeWithErrorIsolation,Ct as executeWithToolBoundary,Or as extractEtag,zs as extractMatchingLines,pb as fallbackOnBestEffortFailure,Tb as fetchContent,Tl as fetchDirectoryContents,ri as fetchDirectoryContentsRecursivelyAPI,Xl as fetchFileContentToDisk,Jl as fetchFileTimestamp,Qh as fetchGitHubFileContentAPI,Pz as fetchGitHubPullRequestByNumberAPI,pu as fetchGitHubPullRequestByNumberAPIInternal,qh as fetchHistory,hy as fetchMultipleGitHubFileContents,Ko as fetchRawGitHubFileContent,Yt as fetchWithRetries,Uh as filterPatch,ot as findDirectToolDefinition,Zo as findNextBlockBoundary,Km as flushSession,Xm as flushSessionSync,_d as foldKeywords,dx as formatBytes,OQ as formatCallToolResultForOutput,uC as formatDirectToolCommandPattern,F3 as formatDirectToolMetadataSchemaText,v3 as formatDirectToolSchemaText,Ov as formatDirectToolValidationIssues,io as formatFileSize,Kr as formatFinalizedResponse,zr as formatPRForResponse,MO as formatPackageData,Jp as gatherIncomingCallsRecursive,ed as gatherOutgoingCallsRecursive,xe as generateCacheKey,pj as generatePaginationHints,Js as generateStructurePaginationHints,nl as getActiveProvider,rl as getActiveProviderConfig,Om as getAppDataPath,Mm as getArchitecture,Bh as getByteLength,Zc as getCacheMaintenanceDelayMs,jf as getCacheMaintenanceMarkerPath,$M as getCacheStats,Mx as getCacheTTL,Oo as getCloneBaseDir,Qc as getCloneDir,Un as getCredentials,Am as getCredentialsFilePath,Ji as getCredentialsSync,gn as getDefaultOctocodeHome,oC as getDirectToolAllowedFieldNames,M3 as getDirectToolAutoFilledFields,qR as getDirectToolCategory,N3 as getDirectToolDescription,bc as getDirectToolDisplayFields,Zd as getDirectToolSchemaRelations,fC as getDirectToolSchemaVariants,B3 as getDirectToolVariantDisplayFields,Io as getDirectorySizeBytes,Af as getDiskCacheEntryPath,Yc as getDiskCacheRoot,If as getDiskCacheStats,ih as getExtension,mg as getFileContent,Zi as getGhCliToken,tl as getGitHubToken,vm as getLocalAppDataPath,G6 as getLspEnvironmentHint,Nx as getMaxCacheSizeBytes,Dx as getMaxCloneCount,L3 as getMetadataOrNull,Fi as getNpmRegistryUrl,At as getOctocodeDir,$ as getOctokit,Ym as getOrCreateSession,or as getOutputCharLimit,oh as getOwnerQualifier,Fm as getPlatformName,Su as getProvider,ie as getRawResponseChars,ni as getRecursiveFetchFailureCount,hg as getRepoStructure,fx as getReposBaseDir,Go as getServerConfig,Zm as getSessionId,Lm as getToken,bN as getTokenSource,_m as getTokenSync,Mc as getTokenWithRefresh,us as getTreeBaseDir,vo as getTreeDir,He as handleCatchError,J as handleGitHubAPIError,oa as handleProviderError,Tm as hasCredentials,Em as hasCredentialsSync,gW as hasExpensiveContentRequest,Kd as hasSchemaDefault,qf as hashGitHubToken,ca as hoistSharedFields,g2 as ignoreBestEffortFailure,Jm as incrementErrors,as as incrementGitHubCacheHits,cs as incrementGitHubCacheRateLimits,tf as incrementPackageRegistryFailures,ef as incrementRateLimitByProvider,is as incrementRateLimits,qm as incrementToolCalls,ss as incrementToolCharSavings,$f as initialize,bg as initializeProviders,A3 as initializeToolMetadata,wo as invalidateCredentialsCache,jQ as invokeCallbackSafely,xr as isCacheHit,hf as isCacheValid,bR as isCircuitOpen,Wf as isCloneEnabled,Xc as isDiskCacheEnabled,pr as isExactPackageName,Rt as isGitHubAPIError,HT as isGitHubAPISuccess,Et as isJsonSchemaObject,Dc as isLinux,yN as isLocalEnabled,RG as isLocalTool,Nc as isMac,Yo as isMidBlockCut,Qt as isNoResultsSearchError,kd as isPackageNotFoundError,sA as isProviderError,pa as isProviderSuccess,ht as isRecord,Co as isRefreshTokenExpired,GT as isRepository,Zt as isTokenExpired,Ec as isToolError,jP as isToolInMetadata,Po as isWindows,Wr as lineNumberField,wm as listStoredHosts,Pm as listStoredHostsSync,E3 as loadToolContent,Yg as mapCodeSearchProviderResult,Xg as mapCodeSearchToolQuery,ny as mapFileContentProviderResult,ty as mapFileContentToolQuery,ey as mapPullRequestProviderResultData,Jg as mapPullRequestToolQuery,qg as mapRepoSearchProviderRepositories,Zg as mapRepoSearchToolQuery,ry as mapRepoStructureProviderResult,Mu as mapRepoStructureToolQuery,P9 as maskSensitiveData,yC as normalizeError,Jo as normalizeOwnerRepo,Dy as normalizePullRequestContentRequest,FO as normalizeRepoUrl,Ir as normalizeResponseHeaders,at as offsetField,Ap as paginateEntries,wi as parseFileSize,Fe as parseGitHubProjectId,qs as parseHasMore,ze as paths,kv as prepareDirectToolInput,a6 as prepareDirectToolInputFromJsonText,jh as processFileContentAPI,da as providerSupports,ch as rateLimitWarning,Wc as readCacheMeta,Jt as readCredentialsStore,ys as readDiskCache,lh as recomputeMatchPositions,yR as recordCircuitFailure,Rd as recordCircuitSuccess,Vf as recordPackageRegistryFailure,An as recordRateLimit,Ro as redactPath,km as refreshAuthToken,aa as relativizeResultPaths,be as relaxedPageNumberField,ds as removeCloneDir,mZ as resetCircuitBreaker,Of as resetDiskCacheStats,nf as resetSessionStats,Ic as resetTokenResolution,ke as resolveCacheAuthFingerprint,Be as resolveDefaultBranch,Vp as resolveFileAnchor,TS as resolveSymbolAnchor,Oc as resolveToken,Sn as resolveTokenFull,vc as resolveTokenWithRefresh,Ar as runCacheMaintenanceIfDue,Q6 as safeExec,tt as safeParseOrError,qd as sanitizeCallToolResult,sn as sanitizeStructuredContent,pg as searchCode,ph as searchGitHubCodeAPI,Zh as searchGitHubPullRequestsAPI,tg as searchGitHubReposAPI,i2 as searchMultipleGitHubCommits,o2 as searchMultipleGitHubIssues,Fa as searchMultipleGitHubPullRequests,r2 as searchMultipleGitHubPullRequestsSplit,Ld as searchNpmPackage,AR as searchPackage,kR as searchPackages,fg as searchPullRequests,dg as searchRepos,C9 as securityRegistry,yB as serializeForPagination,Wy as shapePullRequestForContent,nu as shouldEnrichPullRequestFromSearch,Bo as shouldIgnoreDir,kr as shouldIgnoreFile,H6 as shouldUseMCPLsp,Sl as shouldUseSearchForIssues,gl as shouldUseSearchForPRs,bB as sliceByCharRespectLines,Yl as sliceContent,$s as snapToSemanticBoundary,S3 as sortDirectToolNames,Rg as spawnCheckSuccess,qQ as spawnCollectStdout,ar as spawnWithTimeout,Xo as splitLines,iN as startCacheGC,sN as stopCacheGC,Fc as storeCredentials,Ep as summarizeEntries,PM as sweepDiskCacheIfDue,kf as sweepDiskCacheNow,Qp as toLegacyTextQuery,cm as toToolError,QT as transformCodeSearchResult,WT as transformFileContentResult,ti as transformPullRequestItemFromREST,uu as transformPullRequestItemFromSearch,XT as transformPullRequestResult,UT as transformRepoSearchResult,nE as transformRepoStructureResult,$h as trimDiffContext,gA as truncateSnippetChars,ps as tryRecoverStaleCloneLock,dt as updateSessionStats,es as updateToken,sa as validateArgs,lt as validateToolPath,bu as viewGitHubRepositoryStructureAPI,tm as withBasicSecurityValidation,De as withDataCache,Rs as withDataCacheConditional,em as withSecurityValidation,Cr as writeCacheMeta,Uc as writeCloneLockMeta,Ho as writeDiskCache,M9 as z};