@octocodeai/octocode-tools-core 18.3.0 → 19.1.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 (242) hide show
  1. package/README.md +19 -19
  2. package/dist/chunks/direct/chunk-3AA4F3QO.js +10 -0
  3. package/dist/chunks/direct/chunk-43RVQWTG.js +8 -0
  4. package/dist/chunks/direct/chunk-7DYE654A.js +8 -0
  5. package/dist/chunks/direct/chunk-A4WMBDEC.js +8 -0
  6. package/dist/chunks/direct/chunk-AWZG43MA.js +8 -0
  7. package/dist/chunks/direct/chunk-BICVXQ5F.js +8 -0
  8. package/dist/chunks/direct/chunk-BMM5H6QF.js +11 -0
  9. package/dist/chunks/direct/chunk-C6HFNIDL.js +8 -0
  10. package/dist/chunks/direct/chunk-CBCZVCTZ.js +8 -0
  11. package/dist/chunks/direct/chunk-CBIKUVP6.js +11 -0
  12. package/dist/chunks/direct/chunk-CKB2ME2J.js +8 -0
  13. package/dist/chunks/direct/chunk-DBI23PBG.js +9 -0
  14. package/dist/chunks/direct/chunk-DBSQWRFS.js +9 -0
  15. package/dist/chunks/direct/chunk-DKGYPFGX.js +8 -0
  16. package/dist/chunks/direct/chunk-EOLHXX5I.js +8 -0
  17. package/dist/chunks/direct/chunk-IFPXDKUV.js +8 -0
  18. package/dist/chunks/direct/chunk-J3WYA3IJ.js +8 -0
  19. package/dist/chunks/direct/chunk-MCMOWPYL.js +8 -0
  20. package/dist/chunks/direct/chunk-MPTAIBY7.js +8 -0
  21. package/dist/chunks/direct/chunk-NQRDACK3.js +8 -0
  22. package/dist/chunks/direct/chunk-O5ETB2W5.js +8 -0
  23. package/dist/chunks/direct/chunk-OA6NU4KO.js +8 -0
  24. package/dist/chunks/direct/chunk-QKDE2HIF.js +10 -0
  25. package/dist/chunks/direct/chunk-RRSY2ZPX.js +13 -0
  26. package/dist/chunks/direct/chunk-UKQLRZEW.js +8 -0
  27. package/dist/chunks/direct/chunk-USZL65FN.js +8 -0
  28. package/dist/chunks/direct/chunk-WH6GL3J2.js +8 -0
  29. package/dist/chunks/direct/chunk-Y5OCKUQX.js +9 -0
  30. package/dist/chunks/direct/chunk-ZO44CZN5.js +8 -0
  31. package/dist/chunks/direct/chunk-ZSXRT7JL.js +12 -0
  32. package/dist/chunks/direct/chunk-ZUNPQVMO.js +8 -0
  33. package/dist/chunks/direct/execution-3T4B776P.js +9 -0
  34. package/dist/chunks/direct/execution-5BJNS7D7.js +8 -0
  35. package/dist/chunks/direct/execution-5O6QHKBR.js +8 -0
  36. package/dist/chunks/direct/execution-A4NK3BQO.js +8 -0
  37. package/dist/chunks/direct/execution-K4UOPXRQ.js +9 -0
  38. package/dist/chunks/direct/execution-SWWZOOA7.js +13 -0
  39. package/dist/chunks/direct/execution-X4MUJL4L.js +8 -0
  40. package/dist/chunks/direct/execution-XA6PXPRB.js +8 -0
  41. package/dist/chunks/direct/historyExecutions-6F3AA5PY.js +14 -0
  42. package/dist/direct.d.ts +6 -1
  43. package/dist/direct.js +2 -46
  44. package/dist/github/canonicalRepo.d.ts +2 -1
  45. package/dist/github/client.d.ts +3 -8
  46. package/dist/github/codeSearch/compactFragment.d.ts +7 -0
  47. package/dist/github/codeSearch.d.ts +2 -3
  48. package/dist/github/commit.d.ts +8 -0
  49. package/dist/github/commitDetail.d.ts +20 -0
  50. package/dist/github/commitSearch.d.ts +17 -0
  51. package/dist/github/compare.d.ts +15 -0
  52. package/dist/github/directoryFetch/cacheMetadata.d.ts +25 -0
  53. package/dist/github/directoryFetch/helpers.d.ts +1 -3
  54. package/dist/github/directoryFetch/snapshot.d.ts +10 -0
  55. package/dist/github/fileContentProcess.d.ts +0 -1
  56. package/dist/github/fileContentRaw/cache.d.ts +9 -0
  57. package/dist/github/fileContentRaw/fetch.d.ts +1 -1
  58. package/dist/github/githubAPI.d.ts +19 -2
  59. package/dist/github/history/commitFiles.d.ts +12 -0
  60. package/dist/github/issues/fetchers.d.ts +1 -1
  61. package/dist/github/issues/types.d.ts +3 -1
  62. package/dist/github/prContentFetcher/collectionPaging.d.ts +27 -0
  63. package/dist/github/prContentFetcher/comments.d.ts +7 -5
  64. package/dist/github/prContentFetcher/commits.d.ts +13 -14
  65. package/dist/github/prContentFetcher/flags.d.ts +0 -1
  66. package/dist/github/prContentFetcher/transform.d.ts +1 -1
  67. package/dist/github/prTransformation.d.ts +3 -1
  68. package/dist/github/queryBuilders/codeAndRepo.d.ts +2 -1
  69. package/dist/github/repoSearch.d.ts +2 -1
  70. package/dist/github/repoStructure/fetchOrchestration.d.ts +1 -1
  71. package/dist/github/repoStructurePagination.d.ts +1 -1
  72. package/dist/github/repoStructureTree.d.ts +4 -2
  73. package/dist/graph/advancedOperations.d.ts +2 -2
  74. package/dist/graph/buildFileGraph.d.ts +8 -13
  75. package/dist/graph/coverage.d.ts +6 -0
  76. package/dist/graph/diagnosticSnapshot.d.ts +10 -0
  77. package/dist/graph/fileImportLinker.d.ts +28 -0
  78. package/dist/graph/importResolver.d.ts +1 -1
  79. package/dist/graph/languageImportResolver.d.ts +5 -0
  80. package/dist/graph/metadataImports.d.ts +7 -0
  81. package/dist/graph/packageExportTargets.d.ts +11 -0
  82. package/dist/graph/rustCargoMetadata.d.ts +31 -0
  83. package/dist/graph/rustCargoProcess.d.ts +16 -0
  84. package/dist/graph/rustModules.d.ts +7 -0
  85. package/dist/graph/rustWorkspace.d.ts +5 -0
  86. package/dist/graph/types.d.ts +94 -3
  87. package/dist/graph/workspacePackageResolver.d.ts +7 -2
  88. package/dist/index.d.ts +46 -19
  89. package/dist/index.js +36 -45
  90. package/dist/providers/github/GitHubProvider.d.ts +3 -1
  91. package/dist/providers/github/githubContent.d.ts +3 -2
  92. package/dist/providers/github/githubPullRequests.d.ts +3 -2
  93. package/dist/providers/github/githubSearch.d.ts +6 -3
  94. package/dist/providers/github/githubStructure.d.ts +3 -2
  95. package/dist/providers/providerQueries.d.ts +4 -0
  96. package/dist/providers/providerResults.d.ts +29 -1
  97. package/dist/providers/types.d.ts +0 -2
  98. package/dist/schema.d.ts +9 -3
  99. package/dist/schema.js +4 -12
  100. package/dist/scheme/fields.d.ts +8 -8
  101. package/dist/scheme/pagination.d.ts +1 -0
  102. package/dist/serverConfig.d.ts +1 -1
  103. package/dist/shared/session/index.d.ts +1 -1
  104. package/dist/shared/session/index.js +1 -1
  105. package/dist/shared/session/storage.d.ts +0 -1
  106. package/dist/toolContract/descriptions.d.ts +6 -6
  107. package/dist/toolContract/input/resources/tools/ghSearch.d.ts +21 -20
  108. package/dist/toolContract/input/resources/tools/githubHistorySchema.d.ts +14 -6
  109. package/dist/toolContract/input/resources/tools/githubRepositoriesOperation.d.ts +3 -3
  110. package/dist/toolContract/input/resources/tools/githubTreeOperation.d.ts +4 -2
  111. package/dist/toolContract/input/resources/tools/historyCommitInput.d.ts +9 -0
  112. package/dist/toolContract/input/resources/tools/historyIssueInput.d.ts +4 -4
  113. package/dist/toolContract/input/resources/tools/historyPullRequestInput.d.ts +13 -5
  114. package/dist/toolContract/input/resources/tools/localAnalyzeGraph.d.ts +74 -32
  115. package/dist/toolContract/input/resources/tools/localFilesOperation.d.ts +1 -1
  116. package/dist/toolContract/input/resources/tools/localSearch.d.ts +43 -43
  117. package/dist/toolContract/input/resources/tools/localTextOperation.d.ts +1 -1
  118. package/dist/toolContract/input/resources/tools/localTreeOperation.d.ts +2 -2
  119. package/dist/toolContract/input/resources/tools/lspGetSemantics.d.ts +11 -2
  120. package/dist/toolContract/input/resources/tools/npmSearch.d.ts +2 -1
  121. package/dist/toolContract/metadata.d.ts +1 -1
  122. package/dist/toolContract/runtime.d.ts +1 -1
  123. package/dist/toolContract/types.d.ts +0 -1
  124. package/dist/tools/directToolCatalog/toolCatalogDefinitions.d.ts +2 -4
  125. package/dist/tools/directToolCatalog/toolInputPreparation.d.ts +2 -5
  126. package/dist/tools/directToolCatalog.exec.d.ts +10 -7
  127. package/dist/tools/github_clone_repo/cache.d.ts +0 -2
  128. package/dist/tools/github_clone_repo/cacheArtifacts.d.ts +3 -1
  129. package/dist/tools/github_clone_repo/cachePaths.d.ts +3 -2
  130. package/dist/tools/github_clone_repo/gitCheckout.d.ts +5 -0
  131. package/dist/tools/github_clone_repo/scheme.d.ts +3 -3
  132. package/dist/tools/github_clone_repo/types.d.ts +6 -1
  133. package/dist/tools/github_fetch_content/finalizer/types.d.ts +10 -2
  134. package/dist/tools/github_fetch_content/scheme.d.ts +3 -4
  135. package/dist/tools/github_fetch_content/types.d.ts +4 -3
  136. package/dist/tools/github_search/scheme.d.ts +24 -23
  137. package/dist/tools/github_search_code/execution.d.ts +1 -1
  138. package/dist/tools/github_search_code/finalizer/groups.d.ts +1 -1
  139. package/dist/tools/github_search_code/finalizer/ranking.d.ts +1 -1
  140. package/dist/tools/github_search_code/scheme.d.ts +3 -3
  141. package/dist/tools/github_search_pull_requests/contentResponse/commentsShaping.d.ts +4 -1
  142. package/dist/tools/github_search_pull_requests/contentResponse/contentView.d.ts +3 -0
  143. package/dist/tools/github_search_pull_requests/contentResponse/fileSurfaces.d.ts +30 -2
  144. package/dist/tools/github_search_pull_requests/contentResponse/nextCalls.d.ts +1 -7
  145. package/dist/tools/github_search_pull_requests/contentResponse/pagination.d.ts +14 -2
  146. package/dist/tools/github_search_pull_requests/historyContinuations.d.ts +1 -1
  147. package/dist/tools/github_search_pull_requests/historyDiffContinuations.d.ts +2 -0
  148. package/dist/tools/github_search_pull_requests/historySchemes.d.ts +23 -22
  149. package/dist/tools/github_search_pull_requests/scheme.d.ts +17 -9
  150. package/dist/tools/github_search_pull_requests/splitSchemes.d.ts +35 -26
  151. package/dist/tools/github_search_pull_requests/types.d.ts +5 -0
  152. package/dist/tools/github_search_repos/execution/pagination.d.ts +0 -17
  153. package/dist/tools/github_search_repos/execution/queryVariants.d.ts +1 -23
  154. package/dist/tools/github_search_repos/execution.d.ts +0 -1
  155. package/dist/tools/github_search_repos/scheme.d.ts +6 -6
  156. package/dist/tools/github_view_repo_structure/execution.d.ts +1 -1
  157. package/dist/tools/github_view_repo_structure/scheme.d.ts +6 -5
  158. package/dist/tools/local_analyze_graph/analysisTypes.d.ts +16 -3
  159. package/dist/tools/local_analyze_graph/analyzeGraph.d.ts +1 -1
  160. package/dist/tools/local_analyze_graph/completeness.d.ts +3 -0
  161. package/dist/tools/local_analyze_graph/deadCodeScan.d.ts +9 -5
  162. package/dist/tools/local_analyze_graph/rootInference.d.ts +2 -0
  163. package/dist/tools/local_analyze_graph/scheme.d.ts +13 -25
  164. package/dist/tools/local_fetch_content/fetchContent/pagination.d.ts +7 -0
  165. package/dist/tools/local_fetch_content/scheme.d.ts +3 -3
  166. package/dist/tools/local_find_files/findFiles.d.ts +1 -1
  167. package/dist/tools/local_find_files/scheme.d.ts +4 -4
  168. package/dist/tools/local_ripgrep/execution.d.ts +0 -1
  169. package/dist/tools/local_ripgrep/rankingProfile/rankingProfiles.d.ts +1 -2
  170. package/dist/tools/local_ripgrep/rankingProfile/rankingResults.d.ts +2 -2
  171. package/dist/tools/local_ripgrep/rankingProfile/rankingScoring.d.ts +1 -3
  172. package/dist/tools/local_ripgrep/ripgrepResultBuilder/buildResult.d.ts +0 -4
  173. package/dist/tools/local_ripgrep/ripgrepResultBuilder/searchNext.d.ts +1 -0
  174. package/dist/tools/local_ripgrep/scheme.d.ts +13 -5
  175. package/dist/tools/local_ripgrep/structuralCompleteness.d.ts +9 -0
  176. package/dist/tools/local_search/execution.d.ts +0 -1
  177. package/dist/tools/local_search/scheme.d.ts +46 -46
  178. package/dist/tools/local_view_structure/scheme.d.ts +5 -5
  179. package/dist/tools/lsp/semantic_content/scheme.d.ts +29 -7
  180. package/dist/tools/lsp/semantic_content/semanticAnchored.d.ts +2 -9
  181. package/dist/tools/lsp/semantic_content/semanticEnvelopes/callEnvelopes.d.ts +2 -2
  182. package/dist/tools/lsp/semantic_content/semanticEnvelopes/envelopeHelpers.d.ts +2 -1
  183. package/dist/tools/lsp/semantic_content/semanticEnvelopes/locationEnvelopes.d.ts +2 -3
  184. package/dist/tools/lsp/semantic_content/semanticFileOps/anchor.d.ts +0 -1
  185. package/dist/tools/lsp/semantic_content/semanticPresentation.d.ts +1 -0
  186. package/dist/tools/lsp/semantic_content/semanticSnapshot.d.ts +16 -0
  187. package/dist/tools/lsp/shared/callHierarchyTraversal.d.ts +2 -1
  188. package/dist/tools/lsp/shared/semanticTypes.d.ts +19 -10
  189. package/dist/tools/package_search/execution.d.ts +3 -4
  190. package/dist/tools/package_search/pagination.d.ts +1 -0
  191. package/dist/tools/package_search/scheme.d.ts +5 -4
  192. package/dist/tools/providerMappers/codeSearch.d.ts +2 -9
  193. package/dist/tools/providerMappers/fileContent.d.ts +1 -1
  194. package/dist/tools/providerMappers/pullRequests.d.ts +24 -4
  195. package/dist/tools/providerMappers/repoSearch.d.ts +4 -4
  196. package/dist/tools/providerMappers/repoStructure.d.ts +4 -3
  197. package/dist/tools/toolAvailability.d.ts +19 -0
  198. package/dist/tools/toolConfig.d.ts +1 -3
  199. package/dist/types/toolResults.d.ts +1 -0
  200. package/dist/utils/contextUtils.d.ts +1 -1
  201. package/dist/utils/core/types.d.ts +0 -2
  202. package/dist/utils/exec/npm.d.ts +2 -0
  203. package/dist/utils/file/byteOffset.d.ts +1 -1
  204. package/dist/utils/package/common.d.ts +0 -3
  205. package/dist/utils/package/npm/npmDeprecation.d.ts +1 -2
  206. package/dist/utils/package/npm/npmDetailsFetchers.d.ts +3 -15
  207. package/dist/utils/package/npm/npmMappers.d.ts +0 -4
  208. package/dist/utils/package/npm/npmRegistry.d.ts +9 -1
  209. package/dist/utils/package/npm/npmSearchStrategies.d.ts +2 -5
  210. package/dist/utils/package/types.d.ts +3 -0
  211. package/dist/utils/pagination/types.d.ts +1 -0
  212. package/dist/utils/response/callToolResult.d.ts +3 -1
  213. package/package.json +19 -15
  214. package/dist/errors/pathUtils.d.ts +0 -1
  215. package/dist/github/directoryFetch.d.ts +0 -3
  216. package/dist/github/fileContentRaw.d.ts +0 -2
  217. package/dist/github/issues.d.ts +0 -3
  218. package/dist/github/prContentFetcher.d.ts +0 -2
  219. package/dist/github/queryBuilders.d.ts +0 -4
  220. package/dist/github/repoStructure.d.ts +0 -1
  221. package/dist/shared/index.d.ts +0 -6
  222. package/dist/shared/languageSelectors.d.ts +0 -3
  223. package/dist/toolContract/schemas.d.ts +0 -31
  224. package/dist/tools/directToolCatalog.d.ts +0 -15
  225. package/dist/tools/directToolCatalog.meta.d.ts +0 -28
  226. package/dist/tools/github_search_code/finalizer.d.ts +0 -2
  227. package/dist/tools/github_search_repos/execution/ranking.d.ts +0 -4
  228. package/dist/tools/local_ripgrep/rankingProfile.d.ts +0 -35
  229. package/dist/tools/local_ripgrep/ripgrepResultBuilder.d.ts +0 -2
  230. package/dist/tools/lsp/semantic_content/index.d.ts +0 -3
  231. package/dist/tools/lsp/semantic_content/semanticEnvelopes.d.ts +0 -3
  232. package/dist/tools/lsp/semantic_content/semanticFileOps.d.ts +0 -8
  233. package/dist/tools/providerMappers.d.ts +0 -11
  234. package/dist/tools/toolMetadata/baseSchema.d.ts +0 -1
  235. package/dist/tools/toolMetadata/descriptions.d.ts +0 -1
  236. package/dist/tools/toolMetadata/proxies.d.ts +0 -4
  237. package/dist/tools/toolSchemaImports.d.ts +0 -16
  238. package/dist/utils/exec/spawn.d.ts +0 -2
  239. package/dist/utils/file/filters.d.ts +0 -2
  240. package/dist/utils/http/cache.d.ts +0 -5
  241. package/dist/utils/package/npm.d.ts +0 -2
  242. package/dist/utils/response/bulk.d.ts +0 -2
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __dirname_fn } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __dirname_fn(__filename);
8
+ import{a as _}from"./chunk-J3WYA3IJ.js";import{b as q}from"./chunk-MPTAIBY7.js";import{a as pe,b as ge}from"./chunk-DKGYPFGX.js";import{b as Q}from"./chunk-NQRDACK3.js";import{a as j,b as Z,c as ue,f as de}from"./chunk-USZL65FN.js";import{d as he,f as P}from"./chunk-ZSXRT7JL.js";import{X as O,fa as ee,ha as T}from"./chunk-BMM5H6QF.js";import{z as F}from"zod";var Xe=["paginated","discovery","detailed","structural"],Ke=["semanticRanking"],me={mode:F.enum(Xe).optional().default("paginated"),searchText:F.string().optional(),output:F.enum(["content","files","filesWithout","countLines","countMatches","matchOnly"]).optional().default("content"),pattern:F.string().optional(),maxDepth:j(0,20).optional(),rule:F.string().optional(),captureText:F.boolean().optional(),contextLines:ue,matchContentLength:j(1,1e5).optional().default(500),maxMatchesPerFile:j(1,1e5).optional(),maxFiles:j(1,1e5).optional(),matchPage:Z.optional(),itemsPerPage:j(1,1e3).optional(),page:Z.default(1),unique:F.enum(["off","list","count"]).optional().default("off")},Je={...me,semanticRanking:F.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.')},Ye=ge(q,Je),Ze=pe(q,me,{strict:!0,omit:Ke}),fe=Ze.superRefine((e,t)=>{if(e.mode==="structural"){e.pattern===void 0&&e.rule===void 0&&t.addIssue({code:"custom",message:'mode:"structural" requires `pattern` or `rule`.',path:["pattern"]}),e.pattern!==void 0&&e.rule!==void 0&&t.addIssue({code:"custom",message:"`pattern` and `rule` are mutually exclusive.",path:["rule"]});for(let a of["pattern","rule"])e[a]!==void 0&&e[a].trim().length===0&&t.addIssue({code:"custom",message:`Structural \`${a}\` must not be empty or whitespace.`,path:[a]});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 a=n[0].slice(2);t.addIssue({code:"custom",message:`\`${n[0]}\` is not a metavariable and matches nothing \u2014 use \`$${a}\` for one node or \`$$$${a}\` 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"]})}),Yt=de(Ye,{maxQueries:5});function xe(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})}var Re=["typescript","javascript","rust","python","go","java","scala","markdown","json","yaml","generic"],m={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},Se=2e3,ye=/^\s*(\/\/|#|\*|\/\*|<!--|--)/,Le={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+['"]/]},U={typescript:{id:"typescript",extensions:["ts","tsx","mts","cts"],...Le},javascript:{id:"javascript",extensions:["js","jsx","mjs","cjs"],...Le},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/]}},Ce=/^\s*#{1,6}\s/,H=/(^|\/)(dist|build|out|coverage|node_modules|vendor|\.next|__snapshots__)(\/|$)/,qe=/(\.min\.|\.bundle\.|\.generated\.|\.d\.ts$|-lock\.)/,et=/(^|\/)(tests?|__tests__|spec|e2e)(\/|$)|\.(test|spec)\./,tt=/(^|\/)(fixtures?|__fixtures__|snapshots?)(\/|$)/,nt=/(^|\/)(docs?|examples?)(\/|$)|\.(md|markdown|mdx|rst|txt)$/i,at=/(^|\/)(config|\.github)(\/|$)|\.(json|ya?ml|toml|ini|cfg|conf|env)$|(^|\/)[^/]*\.config\.[jt]s$/i,ot=/(^|\/)(src|lib|app|packages|internal|pkg|cmd|crates|include|sources?)(\/|$)/,it=new Set(["typescript","javascript","rust","python","go","java","scala"]),te=/\.([a-z0-9]+)$/i;function B(e){return te.exec(e)?.[1]?.toLowerCase()??""}function rt(e){let t=B(e);if(!t)return!1;for(let n of it)if(U[n].extensions.includes(t))return!0;return!1}function be(e,t,n){if(n&&n!=="auto")return U[n];let a=B(e),o=(t??"").toLowerCase();for(let r of Re){let i=U[r];if(r!=="generic"&&o&&(r===o||i.extensions.includes(o)))return i}for(let r of Re){let i=U[r];if(r!=="generic"&&i.extensions.includes(a))return i}return U.generic}function ne(e){return qe.test(e)?"generated":tt.test(e)?"fixture":et.test(e)?"test":at.test(e)?"config":nt.test(e)?"docs":!H.test(e)&&(ot.test(e)||rt(e))?"source":"unknown"}function Te(e){if(!e)return!1;if(H.test(e))return!0;let t=ne(e);return t==="test"||t==="docs"||t==="fixture"||t==="generated"}function V(e,t){for(let n of e)if(n.test(t))return!0;return!1}function ae(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ke(e){return!!e&&/^[A-Za-z_$][\w$]*$/.test(e.trim())}function Pe(e,t,n){if(e.indexOf(`
9
+ `)<0)return e;let o=e.split(`
10
+ `);if(t){let r=n?t:t.toLowerCase();for(let i of o)if((n?i:i.toLowerCase()).includes(r))return i}return o.find(r=>r.trim().length>0)??o[0]??""}function we(e,t,n,a){if(n==="markdown")return/<!--/.test(e)?"comment":"code";if(n==="json")return"code";if(ye.test(e))return"comment";let o=st(e,t,a);if(o<0)return"code";let r=ct(e);return r>=0&&o>r?"comment":lt(e,o)?"string":"code"}function st(e,t,n){return t?n?e.indexOf(t):e.toLowerCase().indexOf(t.toLowerCase()):-1}function ct(e){let t=-1,n=r=>{r>=0&&(t<0||r<t)&&(t=r)};for(let r of["//","/*","<!--"])n(e.indexOf(r));let a=/(^|\s)#(?![!{])/.exec(e);a&&n(a.index+(a[1]?.length??0));let o=/(^|\s)--\s/.exec(e);return o&&n(o.index+(o[1]?.length??0)),t}function lt(e,t){let n="";for(let a=0;a<t&&a<e.length;a++){let o=e[a];n?o===n&&e[a-1]!=="\\"&&(n=""):(o==='"'||o==="'"||o==="`")&&(n=o)}return n!==""}function ut(e){if(!e)return;let t=/[A-Za-z_$][\w$]*/.exec(e);return t?t[0]:void 0}function dt(e,t){if(!e)return[];let n=new Set,a=[];for(let o of e.matchAll(/[A-Za-z_$][\w$]*/g)){let r=o[0],i=t?r:r.toLowerCase();n.has(i)||(n.add(i),a.push(r))}return a}function pt(e,t,n,a,o){if(!e||e.length===0)return 0;let r=ke(n.keyword),i=0,c="";for(let s of e){let h=s.value??"";if(!h)continue;let d=Pe(h,a,n.caseSensitive),g=0,l=[];a&&r&&(new RegExp(`(^|[^\\w$])${ae(a)}([^\\w$]|$)`,n.caseSensitive?"":"i").test(d)?(g+=m.exactWholeWord,l.push("whole-word match")):!n.caseSensitive&&d.toLowerCase().includes(a.toLowerCase())?(g+=m.exactCaseInsensitive,l.push("case-insensitive match")):d.includes(a)&&(g+=m.substring,l.push("substring match")));let x=s.kind;if(x)g+=gt(x,l);else{let L=we(d,a,t.id,n.caseSensitive);L!=="code"?(g+=m.commentOrStringPenalty,l.push(L==="comment"?"comment match (weak)":"string literal (weak)")):(V(t.declaration,d)&&(g+=m.declarationLine,l.push("declaration line")),V(t.export,d)&&(g+=m.exportLine,l.push("export/public line")),V(t.import,d)&&(g+=m.importLine,l.push("import line")),t.id==="markdown"&&Ce.test(d)&&(g+=m.headingLine,l.push("markdown heading")),(t.id==="json"||t.id==="yaml")&&ht(d,a)&&(g+=m.configKeyLine,l.push("config key match")))}g>i&&(i=g,c=l.join(", "))}return c&&o.push(c),i}function gt(e,t){switch(e){case"declaration":return t.push("AST: declaration"),m.declarationLine;case"export":return t.push("AST: export/public"),m.exportLine;case"configKey":return t.push("AST: config key"),m.configKeyLine;case"heading":return t.push("AST: heading"),m.headingLine;case"import":return t.push("AST: import"),m.importLine;case"comment":case"string":return t.push(`AST: ${e} (weak)`),m.commentOrStringPenalty;case"callsite":return t.push("AST: callsite"),1;default:return 0}}function ht(e,t){let n=e.indexOf(":");if(n<0)return!1;let a=e.slice(0,n);return t?a.includes(t):/["'\w]/.test(a)}function mt(e,t,n,a,o,r){let i=0;if(n){let s=e.toLowerCase(),h=n.toLowerCase();s.split("/").some(d=>d.replace(te,"").includes(h))&&(i+=m.pathSegmentToken,r.push("query token in path"))}let c=B(e);return a.extensions.includes(c)&&t.langType&&(i+=m.extMatchesLangType,r.push("extension matches langType")),o==="source"&&(i+=m.sourceDir,r.push("source file")),i}function ft(e,t,n){return t.explicitLowSignal?0:e==="generated"||e==="fixture"?(n.push(`${e} file (penalized)`),m.lowSignalPathPenalty):e==="test"?(n.push("test file (penalized)"),m.testPathPenalty):0}function xt(e,t){if(e<=0)return 0;let n=Math.log2(e+1)*m.matchCountScale,a=Math.min(n,m.matchCountCap);return e>1&&t.push(`match count saturated (${e})`),a}function Me(e,t){let n=dt(t.keyword,t.caseSensitive);if(n.length<2||e.length<2)return;let a=new Map,o=new Map;for(let r of e){let i=n.filter(c=>Rt(r,c,t.caseSensitive));if(i.length!==0){a.set(r.path,i);for(let c of i)o.set(c,(o.get(c)??0)+1)}}if(a.size!==0)return{candidateCount:e.length,fileTokens:a,documentFrequency:o}}function Rt(e,t,n){let a=n?"":"i",o=new RegExp(`(^|[^\\w$])${ae(t)}([^\\w$]|$)`,a);for(let r of e.matches??[])if(o.test(r.value??""))return!0;return o.test(e.path)}function Lt(e,t,n){if(!t)return 0;let a=t.fileTokens.get(e.path);if(!a?.length)return 0;let o="",r=0,i=0;for(let c of a){let s=t.documentFrequency.get(c)??t.candidateCount;if(s>t.candidateCount/2)continue;let h=Math.log2((t.candidateCount+1)/(s+1)),d=Math.min(h*m.rareQueryTokenScale,m.rareQueryTokenCap);d>r&&(r=d,o=c,i=s)}return r<=0?0:(n.push(`rare query token: ${o} (${i}/${t.candidateCount} files)`),r)}function Ee(e,t,n){let a=be(e.path,t.langType,t.profileOverride),o=ne(e.path),r=ut(t.keyword),i=[],c=0;return c+=pt(e.matches,a,t,r,i),c+=mt(e.path,t,r,a,o,i),t.queryPath&&e.path.startsWith(t.queryPath.replace(/\/+$/,"")+"/")&&(c+=m.pathUnderQuery,i.push("under requested subtree")),c+=ft(o,t,i),H.test(e.path)&&!t.explicitLowSignal&&(c+=m.lowSignalPathPenalty,i.push("low-signal path (penalized)")),c+=xt(e.matchCount??0,i),c+=Lt(e,n,i),{score:Math.round(c*100)/100,profile:a.id,pathRole:o,reasons:i}}function _e(e,t,n,a={}){if(t==="matchCount"){let l=[...e].sort(ve);return{files:a.sortReverse?l.reverse():l,cappedCandidates:0}}if(t==="path"){let l=[...e].sort((x,L)=>x.path.localeCompare(L.path));return{files:a.sortReverse?l.reverse():l,cappedCandidates:0}}if(t==="created"||t==="modified"||t==="accessed")return{files:[...e],cappedCandidates:0};let o=a.candidateCap??Se,r=e,i=[],c=0;if(e.length>o){let l=[...e].sort(ve);r=l.slice(0,o),i=l.slice(o),c=i.length}let s=Me(r,n),h=r.map(l=>{try{return{file:l,s:Ee(l,n,s)}}catch{return{file:l,s:St()}}});h.sort((l,x)=>{if(x.s.score!==l.s.score)return x.s.score-l.s.score;let L=(x.file.matchCount??0)-(l.file.matchCount??0);return L!==0?L:l.file.path.localeCompare(x.file.path)});let d=[...h.map(l=>l.file),...i],g={files:a.sortReverse?d.reverse():d,cappedCandidates:c};return a.debug&&(g.debug=new Map(h.map(l=>[l.file.path,l.s]))),g}function St(){return{score:0,profile:"generic",pathRole:"unknown",reasons:["ranking unavailable for this file"]}}function ve(e,t){let n=(t.matchCount??0)-(e.matchCount??0);return n!==0?n:e.path.localeCompare(t.path)}var Fe=8,yt=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"]),Ct=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Ie(e,t,n,a){let o=e.find(s=>s.path),r=o?.matches?.find(s=>s.line),i={},c=t.maxFiles??_.MAX_FILES_DEFAULT;if(a.scanCapReached&&c<1e5&&(i.expandScan={tool:"local.text",query:W({...t,maxFiles:Math.min(1e5,Math.max(c+1,c*2)),page:1}),why:"Re-run with a larger file-scan bound because this search is partial.",confidence:"exact"}),n==="structural"&&e.some(s=>s.matches?.some(h=>h.capturesTruncated===!0))&&(i.expandCaptures={tool:"local.text",query:W({...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(r?.line){let h=bt(r);i.fetch={tool:"localGetFileContent",query:W({path:o.path,startLine:h.startLine,endLine:h.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 i.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:a.isFileListMode?"low":"exact"};let s=Tt(r,t,n);if(s&&r?.line){let h={uri:o.path,symbolName:s.symbol,lineHint:s.line??r.line};i.lspDefinition={tool:"lspGetSemantics",query:{...h,type:"definition"},why:"Use the grep line as an LSP lineHint to resolve the symbol definition.",confidence:"low"},i.lspReferences={tool:"lspGetSemantics",query:{...h,type:"references"},why:"Use the grep line as an LSP lineHint to inspect semantic usages.",confidence:"low"}}}return a.currentPage<a.totalFilePages&&a.currentPage<1e3&&(i.nextPage={tool:"local.text",query:W({...t,page:a.currentPage+1}),why:"Continue to the next page of matched files.",confidence:"exact"}),a.hasFileWithMoreMatches&&a.matchPage<1e3&&(i.nextMatchPage={tool:"local.text",query:W({...t,maxMatchesPerFile:a.matchesPerPage,matchPage:a.matchPage+1}),why:"Continue within files that have more matches than this response returned.",confidence:"exact"}),i}function bt(e){let t=Math.max(1,e.line??1),n=Math.max(t,e.endLine??t);return{startLine:Math.max(1,t-Fe),endLine:n+Fe}}function Tt(e,t,n){if(t.output==="countLines"||t.output==="countMatches"||t.unique==="list"||t.unique==="count")return;if(n==="structural")return kt(e?.metavars,e?.metavarRanges);if(t.matchWindow)return;if(t.output==="matchOnly"){let o=oe(e?.value);return o?{symbol:o}:void 0}let a=oe(t.searchText);return a?{symbol:a}:void 0}function kt(e,t){if(!e)return;let n=Object.keys(e).sort((a,o)=>+(o.toLowerCase()==="name")-+(a.toLowerCase()==="name")||(a<o?-1:a>o?1:0));for(let a of n){let o=e[a]??[];for(let[r,i]of o.entries()){let c=oe(i);if(c)return{symbol:c,line:t?.[a]?.[r]?.line}}}}function oe(e){if(typeof e!="string")return;let t=e.trim();if(Ct.test(t)&&!yt.has(t))return t}function W(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function z(e,t,n,a,o){let r=t.sort??"relevance",i=n==="structural"&&r==="relevance"?"path":r,c;try{c=_e(e,i,Pt(t),{debug:!1,sortReverse:t.sortReverse})}catch{c={files:e,cappedCandidates:0},a.push("Relevance ranking failed; returning results in unranked engine order.")}let s=c.files,h=c.debug,d=s.length,g=t.output==="files"||t.output==="filesWithout",l=t.output==="countLines"||t.output==="countMatches",x=g||l,L=s.reduce((k,M)=>k+(M.matchCount??0),0),S=x?o?.totalOccurrences??o?.totalStructuralMatches??L:L,f=t,R=Math.min(f.itemsPerPage||_.DEFAULT_FILES_PER_PAGE,t.maxFiles||Number.POSITIVE_INFINITY),y=f.page||1,w=Math.max(1,Math.ceil(d/R)),u=(y-1)*R,p=Math.min(u+R,d),C=s.slice(u,p),b=d>0&&u>=d;b&&a.push(`page:${y} is out of range (only ${w} page(s), ${d} total file(s)) \u2014 returned 0 files. Use page:1..${w}.`);let E=f.maxMatchesPerFile||_.DEFAULT_MATCHES_PER_PAGE,N=C.map(k=>{let M=k.matches?.length??0,D=Math.max(1,Math.ceil(M/E)),A=Math.max(1,f.matchPage||1),K=(A-1)*E,J=M>0&&K>=M,Be=Math.min(K+E,M),Y=x?void 0:k.matches?.slice(K,Be),le=Y?.length;J&&a.push(`${k.path}: matchPage:${A} is out of range under maxMatchesPerFile:${E} (only ${D} page(s), ${M} total match(es) for this file) \u2014 returned 0 rows for this file. Use matchPage:1..${D}, or drop matchPage to re-derive it from the current maxMatchesPerFile.`);let G=h?.get(k.path);return{path:k.path,...g?{}:t.output==="countLines"?{totalMatchedLines:k.matchCount||1}:t.output==="countMatches"?{totalOccurrences:k.matchCount||1}:{totalMatchRows:M,...le!==void 0?{returnedMatchRows:le}:{}},...Y!==void 0&&{matches:Y},...G?{ranking:{score:G.score,profile:G.profile,pathRole:G.pathRole,reasons:G.reasons}}:{},pagination:!x&&(M>E||J)?{currentPage:A,totalPages:D,matchesPerPage:E,totalMatches:M,hasMore:A<D,...A<D&&A<1e3?{nextMatchPage:A+1}:{},...J?{outOfRange:!0}:{}}:void 0}}),se=N.filter(k=>k.pagination?.hasMore),He=y<w&&y>=1e3||se.length>0&&(f.matchPage||1)>=1e3||o?.capReached===!0&&(t.maxFiles??_.MAX_FILES_DEFAULT)>=1e5,ce=Ie(N,t,n,{isFileListMode:x,currentPage:y,totalFilePages:w,matchPage:f.matchPage||1,matchesPerPage:E,hasFileWithMoreMatches:se.length>0,scanCapReached:o?.capReached});return{searchEngine:n,...o?{stats:o}:{},files:N,pagination:{currentPage:y,totalPages:w,filesPerPage:R,totalFiles:d,...g?{}:{totalMatches:S},hasMore:y<w,...y<w&&y<1e3?{nextPage:y+1}:{},...b?{outOfRange:!0}:{}},...a.length>0?{warnings:a}:{},...Object.keys(ce).length>0?{next:ce}:{},...He?{terminalLimit:!0}:{},...o?.capReached===!0?{truncated:!0,partialReasons:["maxFiles"]}:{}}}function Pt(e){let t=e.rankingProfile,n=!!(e.include?.length||Te(e.path));return{queryPath:e.path,keyword:e.searchText,langType:e.langType,caseSensitive:e.caseMode==="sensitive",wholeWord:e.wholeWord,profileOverride:t,explicitLowSignal:n}}function Ae(e){let t=[],n=[],a=e.pattern;if(typeof a!="string"||a.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(a,e.fixedString,e.perlRegex);return o.valid||t.push(`invalid regex: ${o.error??"unknown regex parse error"}`),!e.fixedString&&wt(a)&&n.push(`pattern '${a}' looks literal \u2014 set regex:"fixed" to skip regex parsing and avoid accidental wildcards`),!e.perlRegex&&Mt(a)&&n.push("pattern uses lookaround (?= / ?! / ?<= / ?<!) which requires perlRegex: true; ripgrep will refuse it otherwise"),{isValid:t.length===0,errors:t,warnings:n}}function wt(e){return/[\\^$|()[\]{}+*?]/.test(e)?!1:!!(e.includes(".")&&/^[\w.\-/:]+$/.test(e)||e.length>2&&/^\w+$/.test(e))}function Mt(e){return/\(\?[=!<]/.test(e)}function Et(e){return e==="created"||e==="modified"||e==="accessed"?e:"path"}function vt(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:Et(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 _t(e){let t=0;for(let n of e)if(t+=n.path.length,n.matches)for(let a of n.matches)t+=a.value?.length??0;return t}async function Oe(e){let t=[],n=xe(e);if(!n.isValid)return P(new Error(`Query validation failed: ${n.errors.join("; ")}`),e,{toolName:T.LOCAL_RIPGREP,extra:{warnings:n.warnings}});t.push(...n.warnings);let a=fe.safeParse(e);if(!a.success){let S=a.error.issues.map(f=>f.message);return P(new Error(`Query validation failed: ${S.join(", ")}`),e,{toolName:T.LOCAL_RIPGREP,extra:{warnings:t}})}let o=a.data;if(!o.path)return P(new Error("Path is required for search"),o,{toolName:T.LOCAL_RIPGREP,extra:{warnings:t}});let i=Q(o,T.LOCAL_RIPGREP);if(!i.isValid)return i.errorResult;let c={...o,path:i.sanitizedPath},s=Ae({pattern:c.searchText??"",fixedString:c.regex==="fixed",perlRegex:c.regex==="perl"});if(!s.isValid)return P(new Error(`Pattern validation failed: ${s.errors.join("; ")}`),o,{toolName:T.LOCAL_RIPGREP,extra:{warnings:[...t,...s.warnings]}});let h=[...s.warnings],d;try{d=await O.searchRipgrep(vt(c))}catch(S){return P(S instanceof Error?S:new Error(String(S)),o,{toolName:T.LOCAL_RIPGREP})}let g=d.files.map(S=>({path:S.path,matchCount:S.matchCount,matches:S.matches.map(f=>{let R={line:f.line,column:f.column,value:f.value};return f.count!==void 0&&(R.count=f.count),f.kind!==void 0&&(R.kind=f.kind),f.scoreHint!==void 0&&(R.scoreHint=f.scoreHint),R})})),l=_t(g),x={totalOccurrences:d.stats.matchCount,matchedLines:d.stats.matchedLines,filesMatched:g.length,filesSearched:d.stats.filesSearched,bytesSearched:d.stats.bytesSearched??void 0,searchTime:d.stats.searchTime,capped:d.stats.capped??void 0,capReason:d.stats.capReason??void 0};if(d.stats.capped&&h.push(`Search hit native collection cap (${d.stats.capReason??"resource limit"}); narrow path/include/keywords for exhaustive results.`),g.length===0){let S=['No matches. Try caseMode:"insensitive", a shorter term, or regex:"smart".',...c.include?.length||c.maxDepth!==void 0?["Remove include/maxDepth to search a wider tree."]:[],...c.wholeWord?["Set wholeWord:false to match substrings."]:[]];return ee({status:"empty",searchEngine:"rg",stats:x,hints:S,warnings:[...t,...h]},l)}c.output!=="files"&&l>_.LARGE_RESULT_BYTES_HINT&&h.push(`Result payload is large (~${Math.round(l/1024)}KB).`);let L=await z(g,o,"rg",[...t,...h],x);return ee(L,l)}import{readFile as Ot,stat as $t}from"node:fs/promises";var $e={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"]},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"]}},Ne={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"]},yaml:{kind:"language",canonicalLanguage:"YAML",extensions:["yaml","yml"]},yml:{kind:"language",canonicalLanguage:"YAML",extensions:["yaml","yml"]}};function Ft(e){return e.trim().replace(/^\./,"").toLowerCase()}function It(e){if(!e?.trim())return;let t=Ft(e),n=$e[t]??Ne[t];return n?{raw:e,normalized:t,...n}:{raw:e,normalized:t,kind:"unknown",canonicalLanguage:e.trim()}}function je(e){let t=It(e);if(!t)return;let a=(t.extensions?.length?t.extensions:[t.normalized.replace(/^[.*]+/,"")]).filter(Boolean).map(o=>`*.${o}`);return a.length?a:void 0}var At=/^\s*(\/\/|\/\*|\*|#)/;function Ge(e,t,n){let a=t&&Object.keys(t).length>0;if(n)return{...e?{metavars:e}:{},...a?{metavarRanges:t??void 0}:{}};let o=!1,r;if(e){r={};for(let[c,s]of Object.entries(e))s.length<=1?(s.some(h=>h.length>120)&&(o=!0),r[c]=s.map(De)):o=!0;Object.keys(r).length===0&&(r=void 0)}let i;if(a&&t){i={};for(let[c,s]of Object.entries(t)){let d=s.length>1?s.filter(l=>!At.test(l.text)):s;(d.length!==s.length||d.some(l=>l.text.length>120))&&(o=!0);let g=d.map(l=>({...l,text:De(l.text)}));g.length>0&&(i[c]=g)}Object.keys(i).length===0&&(i=void 0)}return{...r?{metavars:r}:{},...i?{metavarRanges:i}:{},...o?{capturesTruncated:!0}:{}}}function De(e){return e.length>120?`${e.slice(0,120)}\u2026`:e}function $(e){return e.scanTruncated||e.status==="truncated"||e.status==="partial"}function ie(e,t,n){let a=e;return n.length&&(a.diagnostics=n),(t==="truncated"||t==="partial")&&(a.truncated=!0,a.terminalLimit=!0,a.partialReasons=[...a.partialReasons??[],t==="truncated"?"structuralLimit":"skippedFiles"]),a}function X(e,t){let n=/^\[(structural\.(?:match\.(?:depthLimit|backtrackingLimit|deadline)|parse\.interrupted|content\.tooLarge))\]/.exec(e)?.[1];if(n)return{code:n,severity:"warning",stage:n.startsWith("structural.match.")?"match":"parse",message:e,path:t,recovery:"Narrow the source or simplify the query. This execution was incomplete; zero matches does not prove absence."}}function re(e,t,n){if(!(!t||t===e))return{code:"structural.query.rewritten",severity:"info",stage:"match",message:`Executed pattern ${JSON.stringify(t)} after the requested pattern ${JSON.stringify(e)} returned no matches.`,path:n,recovery:`Use pattern: ${JSON.stringify(t)} to repeat this query explicitly.`}}var Ue=300;function Nt(e){let t=e.replace(/\s+/g," ").trim();return t.length>Ue?`${t.slice(0,Ue-1)}\u2026`:t}var We=2e3,jt=1e6,Dt="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 Gt(e){if(!e||!/\)\s*\{/.test(e))return;let t=e.replace(/\)\s*\{/,"): $R {");return t===e?void 0:t}function ze(e){return e.include?.length?e.include:je(e.langType)}async function Ut(e){try{return(await $t(e)).isFile()}catch{return!1}}async function Wt(e,t,n){let a=await Ot(e,"utf8"),o=await O.structuralSearch(a,e,n??t.pattern,t.rule);return{status:"ok",diagnostics:[],scanTruncated:!1,files:o.length>0?[{path:e,matches:o}]:[],totalMatches:o.length,parsedFiles:1,skippedByPreFilter:0,skippedUnsupported:0,skippedUnreadable:0,skippedLarge:0,warnings:[]}}async function Qe(e){let t=Q(e,T.LOCAL_RIPGREP);if(!t.isValid)return t.errorResult;let n=await Ut(t.sanitizedPath),a=!!e.captureText,o=u=>({path:t.sanitizedPath,pattern:u??e.pattern,rule:e.rule,...ze(e)?{include:ze(e)}:{},...e.exclude?.length?{exclude:e.exclude}:{},...e.excludeDir?.length?{excludeDir:e.excludeDir}:{},...e.hidden!==void 0?{hidden:e.hidden}:{},...e.noIgnore!==void 0?{noIgnore:e.noIgnore}:{},...e.maxDepth!==void 0?{maxDepth:e.maxDepth+1}:{},maxFiles:e.maxFiles??We,maxFileBytes:jt}),r=e.pattern,i=e.pattern,c=u=>(r=u??e.pattern,n?Wt(t.sanitizedPath,e,u):O.structuralSearchFiles(o(u))),s;try{if(s=await c(),s.totalMatches===0&&!$(s)&&e.pattern&&!e.rule&&!/[;}]\s*$/.test(e.pattern))try{let u=await c(`${e.pattern};`);(u.totalMatches>0||$(u))&&(s=u,i=`${e.pattern};`)}catch(u){let p=u instanceof Error?u.message:String(u);if(X(p,t.sanitizedPath))throw u}if(s.totalMatches===0&&!$(s)&&e.pattern&&!e.rule){let u=Gt(e.pattern);if(u)try{let p=await c(u);(p.totalMatches>0||$(p))&&(s=p,i=u)}catch(p){let C=p instanceof Error?p.message:String(p);if(X(C,t.sanitizedPath))throw p}}}catch(u){let p=u instanceof Error?u.message:String(u),C=/^\[(structural\.[A-Za-z.]+)\]/.exec(p)?.[1];if(C==="structural.language.unsupported")return P(`${p}. Use localSearch operation:"text" to search this file.`,e,{toolName:T.LOCAL_RIPGREP,extra:{errorCode:"structural.language.unsupported"}});let b=X(p,t.sanitizedPath);if(b){let N=re(e.pattern,r,t.sanitizedPath);return ie(await z([],e,"structural",[b.message],{totalStructuralMatches:0}),"truncated",[b,...N?[N]:[]])}let E=e.langType||"source";return P(new Error(`Invalid structural ${e.rule?"rule":"pattern"}: ${p} \u2014 use valid ${E} 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:T.LOCAL_RIPGREP,...C?{extra:{errorCode:C}}:{}})}let h=s.files.map(u=>({path:u.path,matchCount:u.matches.length,matches:u.matches.map(p=>({line:p.startLine,endLine:p.endLine,value:Nt(p.text),column:p.startCol,endColumn:p.endCol,...Ge(p.metavars,p.metavarRanges,a)}))})),d=e.maxDepth,g=h,l=0;if(typeof d=="number"&&!n){let u=t.sanitizedPath.replace(/\/+$/,"");g=h.filter(p=>(p.path.startsWith(`${u}/`)?p.path.slice(u.length+1):p.path).split("/").length<=d+1),l=h.length-g.length}let x=g.reduce((u,p)=>u+(p.matchCount??p.matches?.length??0),0),L=e.maxFiles??We,S=!n&&s.scanTruncated===!0,f={totalStructuralMatches:typeof d=="number"?x:s.totalMatches,...S?{capReached:!0}:{}},R=[...s.warnings],y=[...s.diagnostics??[]],w=re(e.pattern,i,t.sanitizedPath);if(w&&y.push(w),l>0&&R.push(`maxDepth ${d}: dropped ${l} deeper file(s) \u2014 raise maxDepth or omit it to include them.`),s.totalMatches===0&&!$(s)&&!n){let u=s.query;if(u){let p=[`query parsed as ${u.kind}`];u.literalAnchor&&p.push(`literal anchor "${u.literalAnchor}"`),p.push(`pre-filter: ${u.preFilter}`),u.unsafeReason&&p.push(`unsafe: ${u.unsafeReason}`),R.push(`Engine explanation: ${p.join(", ")}.`);let C=u.diagnostics??[];y.push(...C);for(let b of C.slice(0,3))R.push(`Engine ${b.severity} [${b.stage}/${b.code}]: ${b.message}${b.recovery?` \u2014 ${b.recovery}`:""}`);C.length>3&&R.push(`${C.length-3} additional engine diagnostic(s) omitted from this summary.`)}}if((g.length===0||f.totalStructuralMatches===0)&&!$(s)&&e.pattern&&!e.rule&&l===0){let u=Dt;R.push(u),y.push({code:"structural.query.noMatches",severity:"info",stage:"match",message:u,path:t.sanitizedPath})}return ie(await z(g,{...e,pattern:i,maxFiles:L},"structural",R,f),s.status,y)}function zt(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 Jn(e){let t=zt(e);if(t.mode==="structural")return await Qe(t);t.contextLines===void 0&&(t.contextLines=2);try{return await Oe(t)}catch(n){let a=n instanceof Error?n.message:String(n);return a.includes("Output size limit exceeded")?{status:"error",error:a,errorCode:he.OUTPUT_TOO_LARGE}:P(n,t,{toolName:T.LOCAL_RIPGREP})}}export{fe as a,Jn as b};
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __dirname_fn } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __dirname_fn(__filename);
8
+ import{a as Pe,b as Xt,d as Jt,e as Zt,f as er,g as tr}from"./chunk-CBIKUVP6.js";import{b as Se,c as rr}from"./chunk-Y5OCKUQX.js";import{a as Bt,b as Ze,c as $t,d as F,e as Qt,f as ye,g as be,h as Fe,i as Wt,j as Vt,k as Le,l as z}from"./chunk-CBCZVCTZ.js";import{P as Dt,Q as Je,R as zt,T as se,U as re,V as U,X as W,Y as Ut,Z as jt,aa as qt,ca as Kt,da as Oe,ea as w,fa as G,ga as T,ha as Yt,k as Nt}from"./chunk-BMM5H6QF.js";import{Octokit as Li}from"octokit";import{throttling as Oi}from"@octokit/plugin-throttling";import{createHash as Hi}from"crypto";import{getConfigSync as Tr}from"@octocodeai/config";var He="19.1.0";import{maskSensitiveData as xi}from"@octocodeai/octocode-engine/mask";import{mkdirSync as Pr,readFileSync as bi,renameSync as wr,rmSync as Ar,statSync as Pi,writeFileSync as Si}from"node:fs";import{join as ot}from"node:path";import{isPersistentStorageEnabled as Ci}from"@octocodeai/config";import{existsSync as Ae,readFileSync as ni,writeFileSync as ii,mkdirSync as oi,rmSync as nt,readdirSync as si,statSync as ai,rmdirSync as hr}from"node:fs";import{join as ee}from"node:path";import{existsSync as Dn,readdirSync as zn,lstatSync as Bn}from"node:fs";import{join as $n}from"node:path";function nr(e){if(!Dn(e))return 0;let t=0,r=[e];for(;r.length>0;){let n=r.pop(),i;try{i=zn(n)}catch{continue}for(let s of i){let a=$n(n,s);try{let o=Bn(a);if(o.isSymbolicLink())continue;o.isDirectory()?r.push(a):o.isFile()&&(t+=o.size)}catch{}}}return t}import{join as ae}from"node:path";import{createHash as Ce}from"node:crypto";function et(e){return ae(e,"tmp","clone")}function tt(e){return ae(e,"tmp","tree")}function ir(e,t){return ae(e,"tmp","tree-locks",Ce("sha256").update(t).digest("hex"))}function or(e,t){return ae(e,"tmp","clone-locks",Ce("sha256").update(t).digest("hex").slice(0,16))}function Un(e){return e?`__sp_${Ce("sha256").update(e).digest("hex").substring(0,6)}`:""}function jn(e){if(!/[\\/]/.test(e))return e;let t=Ce("sha256").update(e).digest("hex").substring(0,8);return`${e.replace(/[\\/]/g,"_")}__b_${t}`}function Qs(e,t,r,n,i,s){let a=s?`__host_${Ce("sha256").update(s).digest("hex").slice(0,16)}`:"",o=`${jn(n)}${Un(i)}${a}`;return ae(et(e),t,r,o)}function Ws(e,t,r,n){if(!/^[0-9a-f]{40}$/i.test(n))throw new Error("Tree cache identity must be a 40-character commit SHA.");return ae(tt(e),t,r,n.toLowerCase())}import{readFileSync as qn,readdirSync as Qn,renameSync as Wn,rmSync as rt,statSync as ur,writeFileSync as Vn,mkdirSync as sr}from"node:fs";import{dirname as Kn,join as ce}from"node:path";var Yn=900*1e3,ar=300*1e3,lr=".octocode-lock.json";function ke(e){sr(Kn(e),{recursive:!0,mode:448});try{sr(e,{mode:448})}catch(t){if(t.code==="EEXIST")return;throw t}return Jn(e),()=>rt(e,{recursive:!0,force:!0})}function Xn(e){return typeof e=="object"&&e!==null}function cr(e){try{return Qn(e)}catch{return[]}}function Jn(e,t=process.pid,r=Date.now()){try{Vn(ce(e,lr),JSON.stringify({pid:t,createdAt:r}),{encoding:"utf8",mode:384})}catch{}}function Zn(e){try{let t=JSON.parse(qn(ce(e,lr),"utf8"));return!Xn(t)||!Number.isInteger(t.pid)||t.pid<=0||typeof t.createdAt!="number"?null:{pid:t.pid,createdAt:t.createdAt}}catch{return null}}function ei(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function ti(e,t=Date.now()){let r;try{r=ke(`${e}.recovery`)}catch{return!1}if(!r)return!1;try{return ri(e,t)}finally{r()}}function ri(e,t){let r,n=Zn(e);if(n){if(r=n.createdAt,t-r<=ar||ei(n.pid))return!1}else{try{r=ur(e).mtimeMs}catch{return!1}if(t-r<=ar)return!1}let i=`${e}.stale-${process.pid}-${t}`;try{return Wn(e,i),rt(i,{recursive:!0,force:!0}),!0}catch{return!1}}function dr(e,t=Date.now()){let r=0;for(let n of["clone-tmp","tree-staging"]){let i=ce(e,"tmp",n);for(let s of cr(i)){let a=ce(i,s);try{let o=ur(a);if(t-o.mtimeMs<=Yn)continue;rt(a,{recursive:!0,force:!0}),r++}catch{}}}for(let n of["clone-locks","tree-locks"]){let i=ce(e,"tmp",n);for(let s of cr(i))ti(ce(i,s),t)&&r++}return r}var ci=1440*60*1e3,ui=2*1024*1024*1024,li=50,fr=".octocode-clone-meta.json";function di(e){return typeof e=="object"&&e!==null}function hi(e){if(!di(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!=="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.snapshotId=="string"&&/^[0-9a-f-]{36}$/.test(e.snapshotId)&&(t.snapshotId=e.snapshotId),typeof e.commitSha=="string"&&e.commitSha.length===40&&(t.commitSha=e.commitSha),t}function it(e){let t=ee(e,fr);if(!Ae(t))return null;try{return hi(JSON.parse(ni(t,"utf-8")))}catch{return null}}function na(e,t){try{ii(ee(e,fr),JSON.stringify(t,null,2),"utf-8")}catch{}}function pr(e){return Date.now()<new Date(e.expiresAt).getTime()}function ia(e){let t=it(e);return t?pr(t)?Ae(e)?{hit:!0,meta:t}:{hit:!1}:{hit:!1}:{hit:!1}}function mi(){let e=process.env.OCTOCODE_CACHE_TTL_MS;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return ci}function fi(){let e=process.env.OCTOCODE_MAX_CACHE_SIZE;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return ui}function pi(){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 li}function oa(e,t,r,n,i,s,a){let o=new Date;return{clonedAt:o.toISOString(),expiresAt:new Date(o.getTime()+mi()).toISOString(),owner:e,repo:t,branch:r,source:n,...i?{sparsePath:i}:{},...s!=null?{sizeBytes:s}:{},...a?{commitSha:a}:{}}}function sa(e){let t=ee(e,"..");try{Ae(t)||oi(t,{recursive:!0,mode:448})}catch(r){throw new Error(`Failed to create clone parent directory '${t}': ${r instanceof Error?r.message:String(r)}`,{cause:r})}}function aa(e){try{Ae(e)&&nt(e,{recursive:!0,force:!0})}catch{}}function we(e){try{return ai(e).isDirectory()}catch{return!1}}function ne(e){try{return si(e)}catch{return[]}}function*gr(e){for(let t of ne(e)){let r=ee(e,t);if(we(r))for(let n of ne(r)){let i=ee(r,n);if(we(i))for(let s of ne(i)){let a=ee(i,s);we(a)&&(yield a)}}}}function mr(e){for(let t of[...ne(e)]){let r=ee(e,t);if(we(r)){for(let n of[...ne(r)]){let i=ee(r,n);if(we(i)&&ne(i).length===0)try{hr(i)}catch{}}if(ne(r).length===0)try{hr(r)}catch{}}}}function gi(e,t){let r=0;for(let n of gr(e)){let i=t(n);if(i)try{let s=it(n);(!s||!pr(s))&&(nt(n,{recursive:!0,force:!0}),r++)}catch{}finally{i()}}return r}function Ri(e,t){let r=[];for(let n of gr(e)){let i=t(n);if(i)try{let s=it(n);if(!s)continue;let a=Number.isNaN(Date.parse(s.clonedAt))?0:Date.parse(s.clonedAt);r.push({branchDir:n,clonedAtMs:a,sizeBytes:s.sizeBytes??nr(n)})}finally{i()}}return r}function yi(e,t,r,n){let i=e.reduce((o,c)=>o+c.sizeBytes,0),s=e.length;if(i<=t&&s<=r)return 0;e.sort((o,c)=>o.clonedAtMs-c.clonedAtMs);let a=0;for(let o of e){if(i<=t&&s<=r)break;let c=n(o.branchDir);if(c)try{nt(o.branchDir,{recursive:!0,force:!0}),a++,i-=o.sizeBytes,s-=1}catch{}finally{c()}}return a}function Rr(e,t){if(!Ae(e))return 0;let r=0;try{r+=gi(e,t)}catch{return r}mr(e);let n=yi(Ri(e,t),fi(),pi(),t);return r+=n,n>0&&mr(e),r}function yr(e){return Rr(et(e),t=>ke(or(e,t)))}function br(e){return Rr(tt(e),t=>ke(ir(e,t)))}var Sr=1440*60*1e3,pa=60*1e3,wi=900*1e3,Ai=".last-cache-maintenance",Ii=".cache-maintenance.lock";var Ge=new Map;function Ir(e){return ot(e,"tmp")}function _r(e){return ot(Ir(e),Ai)}function _i(e){try{let t=Number(bi(_r(e),"utf8"));return Number.isFinite(t)&&t>=0?t:null}catch{return null}}function Cr(e,t=Date.now()){let r=_i(e);return r===null?0:Math.min(Sr,Math.max(0,r+Sr-t))}function Ei(e,t){let r=Ir(e),n=ot(r,Ii);try{Pr(r,{recursive:!0,mode:448})}catch{return null}let i=()=>{try{return Pr(n,{mode:448}),!0}catch{return!1}};if(i())return n;try{if(t-Pi(n).mtimeMs<=wi)return null;let s=`${n}.stale-${process.pid}-${t}`;wr(n,s),Ar(s,{recursive:!0,force:!0})}catch{return null}return i()?n:null}function Ti(e,t){let r=_r(e),n=`${r}.tmp-${process.pid}-${t}`;Si(n,String(t),{encoding:"utf8",mode:384}),wr(n,r)}async function vi(e,t){if(Cr(e,t)>0)return!1;let r=Ei(e,t);if(!r)return!1;try{if(Cr(e,t)>0)return!1;try{return yr(e),br(e),dr(e,t),await $t(e,t),Ti(e,t),!0}catch{return!1}}finally{try{Ar(r,{recursive:!0,force:!0})}catch{}}}function Er(e,t=Date.now()){if(!Ci())return Promise.resolve(!1);let r=Ge.get(e);if(r)return r;let n=vi(e,t).finally(()=>{Ge.get(e)===n&&Ge.delete(e)});return Ge.set(e,n),n}var _e=null,Ie=null,Mi=Je;var Fi=new Set(["env:OCTOCODE_TOKEN","env:GH_TOKEN","env:GITHUB_TOKEN","env:GITHUB_PERSONAL_ACCESS_TOKEN","octocode-storage","gh-cli","none"]);async function vr(){try{let e=await Mi({hostname:"github.com"});if(e?.token){let t=e.source??"none";return{token:e.token,source:Fi.has(t)?t:"none"}}return{token:null,source:"none"}}catch{return{token:null,source:"none"}}}async function Aa(){if(_e!==null)return;if(Ie!==null)return Ie;let e=(async()=>{let t=Tr(),r=await vr();_e={version:He,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:r.source},t.local.enableClone&&t.storage.mode!=="persistent"&&process.stderr.write(`[octocode] ENABLE_CLONE is set but OCTOCODE_STORAGE_MODE is "memory" \u2014 clone is disabled. Remove OCTOCODE_STORAGE_MODE=memory or set it to "persistent" to enable ghCloneRepo.
9
+ `),await Er(Dt())})();Ie=e;try{await e}catch(t){throw Ie===e&&(_e=null,Ie=null),t}}function Ne(){if(!_e){let e=xi(zt.NOT_INITIALIZED.message);throw new Error(e)}return _e}async function st(){return(await vr()).token}function Ia(){let e=Ne();return e.enableLocal&&e.enableClone}function _a(){return"github"}function Ea(){let e=Tr().github.apiUrl;return{provider:"github",baseUrl:e!=="https://api.github.com"?e:void 0}}function ue(e){(e.provider?Ut({rateLimits:1,rateLimitsByProvider:{[e.provider]:1}}):jt(1)).session&&e.provider==="github"&&qt(1)}function Or(e){return Hi("sha256").update(e).digest("hex").substring(0,16)}function Hr(e){try{let t=new URL(e);return t.hash="",t.toString().replace(/\/$/,"")}catch{return e}}async function O(e){let t=e?.token??await st(),r=t?Or(t):"anon",n=Hr(Ne().githubApiUrl||"https://api.github.com");return n==="https://api.github.com"?r:`${r}@${n}`}var ki=Li.plugin(Oi),Gi=300*1e3,at=50,Ni=60*1e3;function kr(e){return Date.now()-e.createdAt>Gi}var X=new Map,Ee=null;function Gr(){for(let[e,t]of X.entries())kr(t)&&X.delete(e);if(X.size>at){let e=X.size-at,t=0;for(let[r]of X){if(t>=e)break;X.delete(r),t++}}}function Di(){Ee||(Ee=setInterval(Gr,Ni),typeof Ee=="object"&&"unref"in Ee&&Ee.unref())}var xr=3,Mr=60;function Fr(e,t,r){ue({limit_type:e,retry_after_seconds:t,api_method:r.method,api_url:r.url,provider:"github"})}var zi=()=>({onRateLimit:(e,t,r,n)=>(Fr("primary",e,t),n<xr&&e<Mr),onSecondaryRateLimit:(e,t,r,n)=>(Fr("secondary",e,t),n<xr&&e<Mr)});function Bi(e,t,r){let n={debug:()=>{},info:()=>{},warn:()=>{},error:(...s)=>console.error(...s)},i={userAgent:`octocode-mcp/${He}`,baseUrl:t,request:{timeout:r,log:n},throttle:zi(),log:n,...e&&{auth:e}};return new ki(i)}async function M(e){Di();let t=e?.token??await st(),r=Ne(),n=Hr(r.githubApiUrl||"https://api.github.com"),i=r.timeout||3e4,s=JSON.stringify([t?Or(t):"ANONYMOUS",n,i]),a=X.get(s);if(a&&!kr(a))return a.client;X.size>=at&&Gr();let o=Bi(t??void 0,n,i);return X.set(s,{client:o,createdAt:Date.now()}),o}var $i=200,Ui=300*1e3,le=new Map;async function K(e,t,r){let i=`${await O(r)}:${e}/${t}`,s=le.get(i);if(s&&s.expiresAt>Date.now())return s.branch;s&&le.delete(i);let a=await M(r);try{let{data:c}=await a.rest.repos.get({owner:e,repo:t}),l=c.default_branch;return Lr(i,l),l}catch{}let o=["main","master"];for(let c of o)try{return await a.rest.repos.getBranch({owner:e,repo:t,branch:c}),Lr(i,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 Lr(e,t){if(le.size>=$i){let r=le.keys().next().value;r!==void 0&&le.delete(r)}le.set(e,{branch:t,expiresAt:Date.now()+Ui})}function De(e){return!!(e&&typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&"type"in e)}import{RequestError as Dr}from"octokit";var S={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"},H={[S.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."},[S.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."},[S.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},[S.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)."},[S.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."},[S.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."},[S.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."},[S.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."},[S.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."},[S.UNKNOWN]:{message:"Unknown error occurred",explanation:"An unexpected error occurred that does not match known error patterns."}},Nr={401:S.AUTH_REQUIRED,403:S.FORBIDDEN_PERMISSIONS,404:S.NOT_FOUND,422:S.INVALID_REQUEST,502:S.SERVER_UNAVAILABLE,503:S.SERVER_UNAVAILABLE,504:S.SERVER_UNAVAILABLE},ct={CONNECTION_FAILED:["ENOTFOUND","ECONNREFUSED"],TIMEOUT:["timeout"]},ut={SECONDARY:/\bsecondary rate\b/i,GRAPHQL_TYPE:"RATE_LIMITED"},ze={RESET_BUFFER_SECONDS:1,SECONDARY_FALLBACK_SECONDS:60};var ji=["cannot be searched","do not exist","does not exist","could not be found","cannot be found"];function te(e){if(!(e instanceof Dr)||e.status!==422)return!1;let t=e.response?.data?.errors;return!Array.isArray(t)||t.length===0?!1:t.some(r=>{let n=typeof r?.message=="string"?r.message.toLowerCase():"";return ji.some(i=>n.includes(i))})}function E(e){return e instanceof Dr?qi(e):e instanceof Error?Zi(e):{error:typeof e=="string"?e:H[S.UNKNOWN].message,type:"unknown"}}function qi(e){let{status:t,message:r,response:n}=e;if(t===403)return Wi(r,n);if(t===429)return Qi(r,n);let i=Nr[t];return i?Ji(i,t):de(S.UNKNOWN,{error:r||H[S.UNKNOWN].message,status:t})}function lt(e,t){let r=e?.[t],n=r===void 0?NaN:parseInt(String(r),10);return isNaN(n)?void 0:n}function Qi(e,t){let r=t?.headers,n=lt(r,"retry-after"),i=lt(r,"x-ratelimit-reset"),s=lt(r,"x-ratelimit-remaining")??0,a=i?new Date(i*1e3):null,o=n??(a?Math.max(Math.ceil((a.getTime()-Date.now())/1e3)+ze.RESET_BUFFER_SECONDS,0):void 0);return ue({limit_type:"primary",retry_after_seconds:o,rate_limit_remaining:s,rate_limit_reset_ms:a?a.getTime():void 0,provider:"github"}),de(S.RATE_LIMIT_PRIMARY,{error:e||H[S.RATE_LIMIT_PRIMARY].messageWithoutTime,status:429,rateLimitRemaining:s,rateLimitReset:a?a.getTime():void 0,retryAfter:o,scopesSuggestion:H[S.RATE_LIMIT_PRIMARY].suggestion})}function Wi(e,t){let r=t?.headers;if(ut.SECONDARY.test(e))return Vi(r);let n=r?.["x-ratelimit-remaining"],i=Xi(t);return n!==void 0&&String(n)==="0"||i?Ki(r):Yi(r)}function Vi(e){let t=Number(e?.["retry-after"]),r=isNaN(t)?ze.SECONDARY_FALLBACK_SECONDS:t;return ue({limit_type:"secondary",retry_after_seconds:r,provider:"github"}),de(S.RATE_LIMIT_SECONDARY,{error:H[S.RATE_LIMIT_SECONDARY].message(r),status:403,rateLimitRemaining:0,retryAfter:r,scopesSuggestion:H[S.RATE_LIMIT_SECONDARY].suggestion})}function Ki(e){let t=e?.["x-ratelimit-reset"],r=t?parseInt(String(t),10):NaN,n=isNaN(r)?null:new Date(r*1e3),i=n?Math.max(Math.ceil((n.getTime()-Date.now())/1e3)+ze.RESET_BUFFER_SECONDS,0):void 0,s=n?H[S.RATE_LIMIT_PRIMARY].messageWithTime(n,i):H[S.RATE_LIMIT_PRIMARY].messageWithoutTime;return ue({limit_type:"primary",retry_after_seconds:i,rate_limit_remaining:0,rate_limit_reset_ms:n?n.getTime():void 0,provider:"github"}),de(S.RATE_LIMIT_PRIMARY,{error:s,status:403,rateLimitRemaining:0,rateLimitReset:n?n.getTime():void 0,retryAfter:i,scopesSuggestion:H[S.RATE_LIMIT_PRIMARY].suggestion})}function Yi(e){let t=e?.["x-accepted-oauth-scopes"],r=e?.["x-oauth-scopes"],n=H[S.FORBIDDEN_PERMISSIONS].suggestion;return t&&r&&(n=eo(String(t),String(r))),de(S.FORBIDDEN_PERMISSIONS,{error:H[S.FORBIDDEN_PERMISSIONS].message,status:403,scopesSuggestion:n})}function Xi(e){return e?.data?.errors?.some(r=>r.type===ut.GRAPHQL_TYPE)??!1}function Ji(e,t){let r=H[e];return de(e,{error:r.message,status:t,..."suggestion"in r&&{scopesSuggestion:r.suggestion}})}function Zi(e){return ct.CONNECTION_FAILED.some(t=>e.message.includes(t))?{error:H[S.NETWORK_CONNECTION_FAILED].message,type:"network",scopesSuggestion:H[S.NETWORK_CONNECTION_FAILED].suggestion}:ct.TIMEOUT.some(t=>e.message.includes(t))?{error:H[S.REQUEST_TIMEOUT].message,type:"network",scopesSuggestion:H[S.REQUEST_TIMEOUT].suggestion}:{error:e.message,type:"unknown"}}function de(e,t){return{type:"http",...t}}function eo(e,t){let r=e.split(",").map(s=>s.trim()).filter(Boolean),n=t.split(",").map(s=>s.trim()).filter(Boolean),i=r.filter(s=>!n.includes(s));return i.length>0?H[S.FORBIDDEN_PERMISSIONS].suggestionWithScopes(i):H[S.FORBIDDEN_PERMISSIONS].fallbackSuggestion}import to from"node-cache";var zr=86400;function Br(e,t){if(t)return t;let r=e.match(/^v\d+-([^:]+):/);return Vt(r?.[1]??"default")}var dt=new to({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1});async function Be(e,t,r={}){return Kt(()=>ro(e,t,r),r.cacheRole)}async function ro(e,t,r){if(r.skipCache)return(await t({})).value;let n;if(!r.forceRefresh){try{let o=Qt.get(e);if(o!==void 0)return ye.hits++,Fe(e),Oe(),o}catch{}if(n=await Bt(e,{allowStale:!0}),n?.state==="fresh")return ye.hits++,Fe(e),Oe(),Le(e,n.value,Math.max(1,(n.expiresAt-Date.now())/1e3)),n.etag&&dt.set(e,{data:n.value,etag:n.etag}),n.value}Wt();let i=be.get(e);if(i)return i.promise;let s=Symbol(e),a=(async()=>{try{let c=(r.forceRefresh?void 0:dt.get(e))??(n?{data:n.value,etag:n.etag}:void 0),l=await t({ifNoneMatch:!r.forceRefresh&&c?.etag?c.etag:void 0});if(l.notModified&&c){ye.hits++,Fe(e),Oe();let u=Br(e,r.ttl);return Le(e,c.data,u),await Ze(e,c.data,u,{...c.etag?{etag:c.etag}:{},staleTtlSeconds:zr}),c.data}if(r.forceRefresh||ye.misses++,(r.shouldCache??(()=>!0))(l.value)){let u=Br(e,r.ttl);Le(e,l.value,u),dt.set(e,{data:l.value,etag:l.etag}),await Ze(e,l.value,u,{...l.etag?{etag:l.etag}:{},staleTtlSeconds:zr})}return l.value}finally{be.get(e)?.requestId===s&&be.delete(e)}})();return be.set(e,{promise:a,startedAt:Date.now(),requestId:s}),a}import{RequestError as ft}from"octokit";function he(e){let t={};if(!e||typeof e!="object")return t;for(let[r,n]of Object.entries(e))typeof n=="string"?t[r]=n:typeof n=="number"&&Number.isFinite(n)&&(t[r]=String(n));return t}function Ya(e){let t=he(e),r=Number(t["x-ratelimit-remaining"]),n=Number(t["x-ratelimit-limit"]),i=Number(t["x-ratelimit-reset"]);if(!Number.isFinite(r)||!Number.isFinite(n)||n<=0||r>Math.max(3,n*.15))return;let s=Number.isFinite(i)?Math.max(0,Math.round((i*1e3-Date.now())/1e3)):void 0;return`GitHub rate limit low: ${r}/${n} remaining${s!==void 0?` (resets in ~${s}s)`:""} \u2014 pace or narrow further requests.`}function me(e){let t=he(e),r=t.etag||t.ETag||t.Etag||Object.entries(t).find(([n])=>n.toLowerCase()==="etag")?.[1];return r&&r.length>0?r:void 0}function ht(e,t){let r=e.split("/").pop()||"",n=t.some(s=>{let a=s.split("/").pop()||"";return a.toLowerCase()===r.toLowerCase()&&a!==r}),i=[];return n&&i.push('GitHub paths are case-sensitive. Verify exact casing with ghSearch operation:"tree".'),i.push(`Did you mean: ${t.join(", ")}?`),i}async function mt(e,t,r,n,i){try{let s=n.split("/").slice(0,-1).join("/"),a=n.split("/").pop();if(!a)return[];let o=await e.rest.repos.getContent({owner:t,repo:r,path:s,ref:i});if(!Array.isArray(o.data))return[];let c=o.data,l=[],m=c.find(f=>f.name.toLowerCase()===a.toLowerCase());m&&l.push(m.path);let u=a.replace(/\.[^/.]+$/,"");return c.filter(f=>f.name===a?!1:!!f.name.startsWith(u+".")).forEach(f=>l.push(f.path)),l.length===0&&u.length>=3&&c.filter(d=>{let p=d.name.replace(/\.[^/.]+$/,"");return p!==u&&p.length>=3&&(u.startsWith(p)||p.startsWith(u))}).forEach(d=>l.push(d.path)),Array.from(new Set(l)).slice(0,3)}catch{return[]}}async function no(e,t,r,n,i,s,a){let o=await K(r,n,a).catch(()=>{}),c=E(t),l=`Path '${i}' could not be read at ref '${s}'. Verify the path and ref.${o?` The default branch is '${o}'. Omit branch to read the default branch.`:""}`,m=await mt(e,r,n,i,s);return m.length>0&&(c.hints=[...c.hints||[],...ht(i,m)]),{...c,...l&&{scopesSuggestion:l}}}async function io(e,t,r,n,i,s){let a=E(t),o=await mt(e,r,n,i,s||"main");return o.length>0&&(a.hints=[...a.hints||[],...ht(i,o)]),a}async function $r(e,t){let r=e.replace(/\s/g,"");try{let n=Buffer.from(r,"base64");return n.indexOf(0)!==-1?{error:se.BINARY_FILE.message,type:"unknown",status:415}:{data:n.toString("utf-8"),status:200}}catch{return{error:se.DECODE_FAILED.message,type:"unknown",status:422}}}async function Ur(e,t,r,n,i){try{let s=await e.rest.git.getBlob({owner:t,repo:r,file_sha:n}),{content:a,encoding:o}=s.data;return o==="base64"?$r(a,i):o==="utf-8"?{data:a,status:200}:{error:`Unsupported blob encoding: ${o}`,type:"unknown",status:415}}catch(s){return E(s)}}async function oo(e,t,r,n,i,s){try{let a=n.split("/").slice(0,-1).join("/"),o=n.split("/").pop();if(!o)return{error:`Cannot determine file name from path: ${n}`,type:"unknown",status:400};let c=i||await K(t,r,s).catch(()=>"HEAD"),l=await e.rest.repos.getContent({owner:t,repo:r,path:a||"",ref:c});if(!Array.isArray(l.data))return{error:`Expected directory listing for ${a||"root"}`,type:"unknown",status:500};let m=l.data.find(h=>h.name===o&&h.type==="file");if(!m)return{error:`File ${o} not found in ${a||"root"}`,type:"unknown",status:404};let u=await Ur(e,t,r,m.sha,n);return"error"in u?u:{data:{rawContent:u.data,branch:typeof c=="string"?c:void 0,resolvedRef:typeof c=="string"?c:"HEAD"},status:200}}catch(a){return E(a)}}async function jr(e,t,r={}){try{let n=await M(t),{owner:i,repo:s,path:a,branch:o}=e,c={owner:i,repo:s,path:a,...o&&{ref:o},...r.ifNoneMatch?{headers:{"If-None-Match":r.ifNoneMatch}}:{}},l,m=o;try{l=await n.rest.repos.getContent(c)}catch(f){if(f instanceof ft&&f.status===304)return{data:{rawContent:"",resolvedRef:o||"HEAD"},status:304,etag:r.ifNoneMatch,notModified:!0};if(f instanceof ft&&f.status===404)return o?await no(n,f,i,s,a,o,t):await io(n,f,i,s,a,o);if(f instanceof ft&&f.status===413)return await oo(n,i,s,a,o||m,t);throw f}let u=l.data,h=me(l.headers);if(Array.isArray(u))return{error:se.PATH_IS_DIRECTORY.message(Yt.GITHUB_VIEW_REPO_STRUCTURE),type:"unknown",status:400};if("content"in u&&u.type==="file"){let f=typeof u.content=="string"?u.content:"",d=u.size??0,p;if(f.length>0)p=await $r(f,a);else if(u.size===0&&typeof u.content=="string")p={data:"",status:200};else if(d>0&&"sha"in u&&typeof u.sha=="string"&&u.sha)p=await Ur(n,i,s,u.sha,a);else return{error:se.FILE_EMPTY.message,type:"unknown",status:404};if("error"in p)return p;if(!m&&!o)try{m=await K(i,s,t)}catch{}return{data:{rawContent:p.data,branch:m||void 0,resolvedRef:m||o||"HEAD"},status:200,rawResponseChars:w(u),...h?{etag:h}:{}}}return{error:se.UNSUPPORTED_TYPE.message(u.type),type:"unknown",status:415}}catch(n){return E(n)}}async function qr(e,t,r){let n=await O(t),i=F("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,auth:n},r);return{rawResult:await Be(i,async({ifNoneMatch:a})=>{let o=await jr(e,t,{ifNoneMatch:a}),{etag:c,notModified:l,...m}=o;return{value:m,etag:c,notModified:l}},{shouldCache:a=>"data"in a&&!a.error,forceRefresh:e.forceRefresh===!0}),auth:n}}var gt=3e3,pt=100;async function Qr(e,t){let r=await O(t),{fileBatch:n=1,...i}=e,s=F("gh-commit-detail-page",{...i,fileBatch:n,auth:r});return z(s,async()=>{let o=await(await M(t)).rest.repos.getCommit({...i,per_page:pt,page:n}),c=o.data.files??[],l=/;\s*rel="next"/.test(o.headers?.link??""),m=n*pt>=gt&&(c.length>=pt||l);return{data:o.data,collectionState:{page:n,hasMore:l&&!m},terminalLimit:m,rawResponseChars:w(o.data)}})}import{ContentSanitizer as lo}from"@octocodeai/octocode-engine/contentSanitizer";function Rt(e,t,r){let n=[],i=0;for(let[s,a]of t){let o=e.slice(s,a);if(!o)continue;let c=r.indexOf(o,i);c===-1&&(c=r.indexOf(o),c===-1)||(n.push([c,c+o.length]),i=c+o.length)}return n}async function Wr(e,t,r,n){let i={context:t,positions:Rt(e,r,t)};try{let s=await W.minifyContent(t,n);if(s.failed||s.type==="failed")return{...i,failed:!0};let a=Rt(e,r,s.content);return a.length!==i.positions.length?i:{context:s.content,positions:a,minificationType:s.type}}catch{return{...i,failed:!0}}}function so(e){return`user:${e}`}var ao=/[@/]/,co=/^[A-Za-z0-9_-]+$/;function yt(e){return e.startsWith('"')||co.test(e)?e:`"${e.replace(/"/g,'\\"')}"`}var ie=class{queryParts=[];addOwnerRepo(t){if(t.owner&&t.repo){let r=Array.isArray(t.owner)?t.owner:[t.owner],n=Array.isArray(t.repo)?t.repo:[t.repo];r.forEach(i=>{n.forEach(s=>{this.queryParts.push(`repo:${i}/${s}`)})})}else t.owner&&(Array.isArray(t.owner)?t.owner:[t.owner]).forEach(n=>{this.queryParts.push(so(n))});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(([n,i])=>{let s=t[n];s&&this.queryParts.push(`${i}:${s}`)}),this}addArrayFilter(t,r,n=!1){return t&&t!==null&&(Array.isArray(t)?t:[t]).forEach(s=>{let a=n?`"${s}"`:s;this.queryParts.push(`${r}:${a}`)}),this}addBooleanFilter(t,r,n){return t===!0?this.queryParts.push(r):t===!1&&this.queryParts.push(n),this}addSimpleFilter(t,r){return t!=null&&this.queryParts.push(`${r}:${t}`),this}addQuotedFilter(t,r){if(t!=null){let i=ao.test(t)&&!t.startsWith('"')?`"${t}"`:t;this.queryParts.push(`${r}:${i}`)}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 uo=/(?:^|\/)([^/]+\.[A-Za-z][A-Za-z0-9]{0,9})$/,bt=class extends ie{addQueryTerms(t){if(Array.isArray(t.keywords)&&t.keywords.length>0){let r=t.keywords.filter(n=>n&&n.trim());r.length>0&&this.queryParts.push(...r.map(yt))}return this}addSearchFilters(t){let r=t.path,n=t.filename,i=typeof r=="string"&&!n?r.match(uo):null;return i&&(n=i[1],r=r.slice(0,i.index)||void 0),this.addSimpleFilter(n,"filename"),this.addSimpleFilter(t.extension,"extension"),this.addQuotedFilter(r,"path"),t.language&&this.queryParts.push(`language:${t.language}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(n=>{n==="file"?this.queryParts.push("in:file"):n==="path"&&this.queryParts.push("in:path")}),this}},Pt=class extends ie{addQueryTerms(t){return Array.isArray(t.keywords)&&t.keywords.length>0&&this.queryParts.push(...t.keywords.map(yt)),this}addRepoFilters(t){this.addArrayFilter(t.topicsToSearch,"topic"),this.addSimpleFilter(t.stars,"stars");let r=t;return typeof r.size=="string"&&this.queryParts.push(`size:${r.size}`),typeof r.created=="string"&&this.queryParts.push(`created:${r.created}`),t.updated&&this.queryParts.push(`pushed:${t.updated}`),t.language&&this.queryParts.push(`language:${t.language}`),typeof r.forks=="string"&&this.queryParts.push(`forks:${r.forks}`),typeof r.license=="string"&&this.queryParts.push(`license:${r.license}`),typeof r.goodFirstIssues=="string"&&this.queryParts.push(`good-first-issues:${r.goodFirstIssues}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(n=>{n==="name"?this.queryParts.push("in:name"):n==="description"?this.queryParts.push("in:description"):n==="readme"&&this.queryParts.push("in:readme")}),this}addQualityFilters(t){let r=t,n=r?.archived;this.queryParts.push(n===!0?"archived:true":"is:not-archived");let i=r?.visibility;return i==="public"?this.queryParts.push("is:public"):i==="private"&&this.queryParts.push("is:private"),this}};function Vr(e){return new bt().addQueryTerms(e).addSearchFilters(e).addOwnerRepo(e).addMatchFilters(e).build()}function Kr(e){return new Pt().addQueryTerms(e).addOwnerRepo(e).addRepoFilters(e).addMatchFilters(e).addQualityFilters(e).build()}async function Yr(e,t,r){let n=await O(t),i=F("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:n},r);return await z(i,async()=>await ho(e,t),{shouldCache:a=>"data"in a&&!a.data?.incompleteResults&&!a.error})}async function ho(e,t){try{let r=await M(t);if(e.keywords&&e.keywords.length>0&&e.keywords.filter(R=>R&&R.trim()).length===0)return{error:U.QUERY_EMPTY.message,type:"http",status:400};let n=Vr(e);if(!n.trim())return{error:U.QUERY_EMPTY.message,type:"http",status:400};let i=Math.min(typeof e.limit=="number"?e.limit:30,100),s=e.page||1,a={q:n,per_page:i,page:s,headers:{Accept:"application/vnd.github.v3.text-match+json"}},o=await r.rest.search.code(a),c=await mo(o.data.items,o.data.total_count),l=o.data.incomplete_results===!0,m=c.total_count,u=Math.min(m,1e3),h=Math.ceil(u/i),f=s<h,d=Math.min(u,h*i);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:s,totalPages:h,perPage:i,totalMatches:u,reportedTotalMatches:m,reachableTotalMatches:d,totalMatchesKind:"reported",totalMatchesCapped:m>u,hasMore:f,...f?{nextPage:s+1}:{},uniqueFileCount:c._researchContext?.uniqueFileCount}},status:200,headers:he(o.headers),rawResponseChars:w(o.data)}}catch(r){if(te(r)){let i=Math.min(typeof e.limit=="number"?e.limit:30,100);return{data:{total_count:0,items:[],nonExistentScope:!0,pagination:{currentPage:e.page||1,totalPages:0,perPage:i,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return E(r)}}async function mo(e,t){let r=fo(e),n=new Set,i=!1,s=[],a=new Set,o=0,c=await Promise.allSettled(e.map(async h=>{a.add(`${h.repository.full_name}/${h.path}`);let f=[],d=await Promise.allSettled((h.text_matches||[]).map(async g=>{let x=lo.sanitizeContent(g.fragment||"",h.path);x.hasSecrets&&n.add(`Secrets detected in ${h.path}: ${x.secretsDetected.join(", ")}`),x.warnings.length>0&&x.warnings.forEach(v=>n.add(`${h.path}: ${v}`));let k=g.matches?.flatMap(v=>Array.isArray(v.indices)&&v.indices.length>=2?[[v.indices[0],v.indices[1]]]:[])||[],A=await Wr(g.fragment||"",x.content,k,h.path);return A.failed&&(i=!0),A.minificationType&&(f.push(A.minificationType),s.push(A.minificationType)),{context:A.context,positions:A.positions}})),p=d.filter(g=>g.status==="fulfilled").map(g=>g.value),R=d.filter(g=>g.status==="rejected").length;R>0&&(o+=R);let y=h,P=Array.from(new Set(f));return{path:h.path,matches:p,url:h.html_url,repository:{nameWithOwner:h.repository.full_name,url:h.repository.url,pushedAt:h.repository.pushed_at||void 0},...y.last_modified_at&&{lastModifiedAt:y.last_modified_at},...P.length>0&&{minificationType:P.join(",")}}})),l=c.filter(h=>h.status==="fulfilled").map(h=>h.value),m=c.filter(h=>h.status==="rejected").length,u={items:l,total_count:t!==void 0?t:e.length,_researchContext:{uniqueFileCount:a.size,repositoryContext:r?(()=>{let h=r.full_name.split("/");return h.length===2&&h[0]&&h[1]?{owner:h[0],repo:h[1],branch:r.default_branch||void 0}:void 0})():void 0}};return r&&(u.repository={name:r.full_name,url:r.url,createdAt:r.created_at||void 0,updatedAt:r.updated_at||void 0,pushedAt:r.pushed_at||void 0}),m>0&&n.add(`${m} item(s) dropped due to processing errors`),o>0&&n.add(`${o} match(es) dropped due to processing errors`),n.size>0&&(u.matchLocations=Array.from(n)),u.minified=!i,u.minificationFailed=i,s.length>0&&(u.minificationTypes=Array.from(new Set(s))),u}function fo(e){if(e.length===0)return null;let t=e[0]?.repository;return t&&e.every(n=>n.repository.full_name===t.full_name)?t:null}var Xr=30;function Jr(e){let t={},r=e.license;r?.spdx_id&&r.spdx_id!=="NOASSERTION"&&(t.license=r.spdx_id);let n=e.homepage;return n&&(t.homepage=n),t}async function Zr(e,t,r){let n=await O(t),i=e,s=F("gh-api-repos",{keywords:e.keywords,topicsToSearch:e.topicsToSearch,owner:e.owner,repo:i.repo,stars:e.stars,size:i.size,created:i.created,updated:e.updated,language:i.language,match:e.match,sort:e.sort,limit:e.limit,page:e.page,archived:i.archived,visibility:i.visibility,forks:i.forks,license:i.license,goodFirstIssues:i.goodFirstIssues,auth:n},r);return await z(s,async()=>await go(e,t),{shouldCache:o=>"data"in o&&!o.data?.incompleteResults&&!o.error})}async function po(e,t){let r=Math.min(e.limit||100,100),n=e.page||1,i=e.sort==="updated"?"updated":"full_name",s,a,o;try{let d=await t.rest.repos.listForOrg({org:e.owner,per_page:r,page:n,sort:i});s=d.data,o=d.headers,a=void 0}catch(d){if(d?.status!==404)return E(d);try{let R=await t.rest.repos.listForUser({username:e.owner,per_page:r,page:n,sort:i});s=R.data,o=R.headers,a=void 0}catch(R){return E(R)}}let c=s.map(d=>{let R=d.full_name.split("/"),y=R[0]||"",P=R[1]||"";return{owner:y,repo:P,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},...Jr(d)}}),l=c.length,m=o?/;\s*rel="next"/.test(o.link??""):l===r,u=(n-1)*r+l,h=a??u+(m?1:0),f=a!==void 0||!m?"exact":"lowerBound";return{data:{repositories:c,pagination:{currentPage:n,totalPages:m?n+1:n,perPage:r,totalMatches:h,reachableTotalMatches:u,totalMatchesKind:f,hasMore:m,...m?{nextPage:n+1}:{}}},status:200,rawResponseChars:w(s)}}async function go(e,t){try{let r=await M(t),n=(e.keywords?.length??0)>0||(e.topicsToSearch?.length??0)>0,i=e,s=!!(e.stars||e.updated||e.language||e.match||i.forks||i.goodFirstIssues||i.created||i.size||i.license||i.visibility||i.archived!==void 0||e.sort&&!["best-match","updated"].includes(e.sort)),a=typeof e.owner=="string"?e.owner:Array.isArray(e.owner)?e.owner[0]:void 0;if(!n&&!s&&a)return await po({owner:a,sort:e.sort,limit:e.limit,page:e.page},r);let o=Kr(e);if(!o.trim())return{error:U.QUERY_EMPTY.message,type:"http",status:400};let c=Math.min(e.limit||Xr,100),l=e.page||1,m={q:o,per_page:c,page:l},u=["stars","forks","help-wanted-issues","updated"];e.sort&&u.includes(e.sort)&&(m.sort=e.sort);let h=await r.rest.search.repos(m),f=h.data.items.map(g=>{let k=g.full_name.split("/"),A=k[0]||"",v=k[1]||"";return{owner:A,repo:v,defaultBranch:g.default_branch,stars:g.stargazers_count||0,description:g.description?g.description:"No description",url:g.html_url,createdAt:g.created_at,updatedAt:g.updated_at,pushedAt:g.pushed_at,visibility:g.visibility,...g.topics&&g.topics.length>0&&{topics:g.topics},...g.forks_count&&g.forks_count>0&&{forksCount:g.forks_count},...g.open_issues_count&&g.open_issues_count>0&&{openIssuesCount:g.open_issues_count},...g.language&&{language:g.language},...Jr(g)}}),d=h.data.total_count,p=Math.min(d,1e3),R=Math.ceil(p/c),y=l<R,P=Math.min(p,R*c);return{data:{repositories:f,incompleteResults:h.data.incomplete_results,pagination:{currentPage:l,totalPages:R,perPage:c,totalMatches:p,reportedTotalMatches:d,reachableTotalMatches:P,totalMatchesKind:"reported",totalMatchesCapped:d>p,hasMore:y,...y?{nextPage:l+1}:{}}},status:200,headers:he(h.headers),rawResponseChars:w(h.data)}}catch(r){if(te(r)){let n=Math.min(e.limit||Xr,100);return{data:{repositories:[],nonExistentScope:!0,pagination:{currentPage:e.page||1,totalPages:0,perPage:n,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return E(r)}}function $(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 Ro(e){if(e.rateLimitRemaining===void 0&&e.retryAfter===void 0&&e.rateLimitReset===void 0)return;let t=e.rateLimitReset,r=t&&!isNaN(t)?Math.floor(t/1e3):Math.floor(Date.now()/1e3)+(e.retryAfter??3600);return{remaining:e.rateLimitRemaining??0,reset:r,retryAfter:e.retryAfter}}function Z(e){return{error:e.error,status:e.status||500,provider:"github",hints:e.hints,rateLimit:Ro(e)}}function $e(e){return yo(e)?Z({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 yo(e){if(typeof e!="object"||e===null||!("error"in e))return!1;let r=e.error;return typeof r=="string"||bo(r)}function bo(e){return typeof e=="object"&&e!==null&&typeof e.toString=="function"}function Te(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 Po(e){return{items:e.items.map(r=>({path:r.path,matches:r.matches.map(n=>({context:n.context,positions:n.positions})),url:r.url||"",repository:{id:r.repository.nameWithOwner,name:r.repository.nameWithOwner,url:r.repository.url},lastModifiedAt:r.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,...Te(e.pagination)},repositoryContext:e._researchContext?.repositoryContext,nonExistentScope:e.nonExistentScope,incompleteResults:e.incompleteResults}}function So(e){let t=e.repositories.map(r=>({id:`${r.owner}/${r.repo}`,name:r.repo,fullPath:`${r.owner}/${r.repo}`,description:r.description||null,url:r.url,cloneUrl:`https://github.com/${r.owner}/${r.repo}.git`,defaultBranch:r.defaultBranch||"main",stars:r.stars||0,forks:r.forksCount||0,visibility:r.visibility||"public",topics:r.topics||[],createdAt:r.createdAt,updatedAt:r.updatedAt,lastActivityAt:r.pushedAt||r.updatedAt,openIssuesCount:r.openIssuesCount,language:r.language,license:r.license,homepage:r.homepage}));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,...Te(e.pagination)},nonExistentScope:e.nonExistentScope,incompleteResults:e.incompleteResults}}async function en(e,t,r=$){let{owner:n,repo:i}=r(e.projectId),s=n||e.owner,a={keywords:e.keywords,owner:s,repo:i,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},o=await Yr(a,t);return De(o)?Z(o):o.data?{data:Po(o.data),status:200,provider:"github",rawResponseChars:o.rawResponseChars??w(o.data)}:{error:"No data returned from GitHub API",status:500,provider:"github"}}async function tn(e,t){let r={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},n=await Zr(r,t);return"error"in n?$e(n)??{error:"Unknown GitHub API error",status:500,provider:"github"}:!("data"in n)||!n.data?{error:"No data returned from GitHub API",status:500,provider:"github"}:{data:So(n.data),status:200,provider:"github",rawResponseChars:n.rawResponseChars??w(n.data)}}function Ao(){let e=Pe();return Math.min(e,8e3)}async function rn(e,t,r){let n=e.content??"",i=r??Ao();if(n.length<=i&&t===0)return e;let s=e.path??void 0,{length:a,chunkMode:o}=await er(n,t,i,s),c=Xt(n,t,a,{pageSize:i}),l;if(c.hasMore&&o==="char-limit"&&Jt(c.paginatedContent)){let m=c.charOffset+c.charLength;l=await Zt(n,m,s)}return{...e,content:c.paginatedContent,pagination:{pageCountsKind:"estimated",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:o,...l!==void 0&&{nextBlockChar:l}}}}async function nn(e,t,r,n,i){try{let s=await e.rest.repos.listCommits({owner:t,repo:r,path:n,per_page:1,...i&&{sha:i}});if(s.data.length>0){let a=s.data[0],o=a?.commit?.committer?.date,c=a?.commit?.author?.name||a?.author?.login||"Unknown";return{lastModified:o||"Unknown",lastModifiedBy:c}}return null}catch{return null}}import{ContentSanitizer as St}from"@octocodeai/octocode-engine/contentSanitizer";function fe(e,t){return{sourceChars:e,sourceBytes:t}}async function on(e,t,r,n,i,s,a,o,c=5,l,m,u,h="standard"){let f=e.length,d=Buffer.byteLength(e,"utf-8"),p=()=>({owner:t,repo:r,path:i,branch:n,content:"",totalLines:Se(e),...fe(f,d),errorCode:"contentSecurityLimit",isPartial:!0,terminalLimit:!0,partialReasons:["security-selected-view-size-limit"],warnings:["The selected content view exceeds the secret scanner size limit. Select a smaller source-line range; character windows cannot safely split unscanned content."]}),R=!l&&(h==="standard"||h==="symbols"),y=R?"standard":"none",P;if(h==="symbols"){let b=W.extractSignatures(e,i);if(b===null){let _=rr(e,i);if(_!==null){let B=St.sanitizeContent(_,i);if(B.secretsDetected.includes("content-size-exceeded"))return p();let D=[W.SIGNATURES_ONLY_HINT];return B.hasSecrets&&D.push(`Secrets detected and redacted: ${B.secretsDetected.join(", ")}`),{owner:t,repo:r,path:i,content:B.content,contentView:"symbols",branch:n,totalLines:Se(e),...fe(f,d),isPartial:!1,hints:D}}P=`No smaller outline is available for ${i}; using the standard content view. The outline may be unsupported, oversized, or unavailable for this source.`}if(b!==null){let _=St.sanitizeContent(b,i);if(_.secretsDetected.includes("content-size-exceeded"))return p();let B=W.applyContentViewMinification(_.content,i),D=[W.SIGNATURES_ONLY_HINT];return l&&D.push('matchString was ignored \u2014 minify:"symbols" returns the full skeleton index. Use startLine/endLine from the gutter to read the matching body.'),_.hasSecrets&&D.push(`Secrets detected and redacted: ${_.secretsDetected.join(", ")}`),{owner:t,repo:r,path:i,content:B,contentView:"symbols",branch:n,totalLines:Se(e),...fe(f,d),isPartial:!1,hints:D}}}let g=new Set,x=e,k=x.split(`
10
+ `),A=Se(x),v=e,V,I,C=!1,L,N;if(s)v=e;else if(l){let b=u===!0,_;try{_=tr(k,l,c,m??!1,b)}catch{return{owner:t,repo:r,path:i,content:"",branch:n,totalLines:A,...fe(f,d),matchNotFound:!0,searchedFor:l,hints:["Fix the regex or set matchStringIsRegex:false for a literal."]}}if(_.matchCount===0){let Gn=m?[`No lines matched "${l}" (case-${b?"sensitive":"insensitive"}). Check the pattern or use fullContent:true.`]:[`"${l}" not found in file${b?" (case-sensitive)":""}. Try matchStringIsRegex=true for pattern matching, broaden the search, or use fullContent=true.`];return{owner:t,repo:r,path:i,content:"",branch:n,totalLines:A,...fe(f,d),matchNotFound:!0,searchedFor:l,hints:Gn}}v=_.lines.join(`
11
+ `);let B=_.matchRanges[0],D=_.matchRanges[_.matchRanges.length-1];a=B.start,o=D.end,V=B.start,I=D.end,C=!1,L=_.matchRanges,N=_.matchingLines;let Xe=_.matchingLines.slice(0,5).join(", "),kn=_.matchingLines.length>5?` and ${_.matchingLines.length-5} more`:"";g.add(_.matchCount>1?`Found ${_.matchCount} occurrences of "${l}" on lines ${Xe}${kn} \u2014 all shown as ${_.matchRanges.length} slice${_.matchRanges.length===1?"":"s"}, \xB1${c} lines of context each.`:`Found "${l}" on line ${_.matchingLines[0]}`)}else if(a!==void 0||o!==void 0){let b=a||1,_=o||A;if(b<1||b>A)v=e,g.add(`Requested startLine ${b} is out of range for this ${A}-line file \u2014 returning the full file instead of a range.`);else if(_<b)v=e,g.add(`Requested range startLine=${b}, endLine=${_} is invalid (endLine before startLine) \u2014 returning the full file instead of a range.`);else{let B=Math.max(1,b),D=Math.min(A,_),Xe=k.slice(B-1,D);V=B,I=D,C=D<A,v=Xe.join(`
12
+ `),_>A&&g.add(`Requested endLine ${_} adjusted to ${A} (file end)`)}}let j=St.sanitizeContent(v,i);if(j.secretsDetected.includes("content-size-exceeded"))return p();if(v=R?W.applyContentViewMinification(j.content,i):j.content,j.hasSecrets&&g.add(`Secrets detected and redacted: ${j.secretsDetected.join(", ")}`),j.warnings.length>0&&j.warnings.forEach(b=>g.add(b)),A>2e3&&h!=="symbols"&&!l&&!a&&!o&&!s){let b=Math.max(1,A-200);g.add(`Large file (${A} lines) \u2014 minify:"symbols" for an export index, or startLine=${b} for the tail.`)}let q=Array.from(g);return{owner:t,repo:r,path:i,content:v,contentView:y,branch:n,totalLines:A,...fe(f,d),...C&&{startLine:V,endLine:I,isPartial:C},...L&&{matchRanges:L},...N&&{matchedLines:N},...q.length>0&&{matchLocations:q},...(q.length>0||P)&&{warnings:[...P?[P]:[],...q]}}}async function sn(e,t,r){let{rawResult:n,auth:i}=await qr(e,t,r);if(!("data"in n)||!n.data)return n;let s=n.data.branch||n.data.resolvedRef||e.branch||"",a=await on(n.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"};if(a.terminalLimit)return{data:a,status:200,rawResponseChars:n.rawResponseChars};let o=e.charOffset??0,c=e.charLength,m=e.fullContent===!0&&o===0&&c===void 0?a:await rn(a,o,c),u=(e.charOffset??0)>0;if(!e.noTimestamp&&!u)try{let h=await M(t),f=await z(F("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,ts:!0,auth:i},r),()=>nn(h,e.owner,e.repo,e.path,e.branch),{shouldCache:d=>d!==null,forceRefresh:e.forceRefresh===!0,cacheRole:"helper"});f&&(m.lastModified=f.lastModified,m.lastModifiedBy=f.lastModifiedBy)}catch{}return{data:m,status:200,rawResponseChars:n.rawResponseChars}}function Io(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,errorCode:e.errorCode,terminalLimit:e.terminalLimit,partialReasons:e.partialReasons,startLine:e.startLine,endLine:e.endLine,matchRanges:e.matchRanges,matchedLines:e.matchedLines,warnings:_o(e,t),matchNotFound:e.matchNotFound,searchedFor:e.searchedFor}}function _o(e,t){if(e.matchNotFound===!0){let r=e;if(Array.isArray(r.hints)&&r.hints.length>0){let o=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"";return r.hints.map(c=>c.replace(" in file",` in file${o}`))}let n=e.searchedFor??t.matchString??"",i=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"",a=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 "${n}" in file${i}. ${a}`]}return e.warnings??e.matchLocations}async function an(e,t,r=$){let{owner:n,repo:i}=r(e.projectId);if(!n||!i)return{error:"Project ID is required for file content",status:400,provider:"github"};let s={owner:n,repo:i,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},a=await sn(s,t);if(De(a))return Z(a);if(!a.data)return{error:"No data returned from GitHub API",status:500,provider:"github"};let o=a.data.hints;return{data:Io(a.data,e),status:200,provider:"github",rawResponseChars:a.rawResponseChars??w(a.data),...o?.length?{hints:o}:{}}}var Ct=class extends ie{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 cn(e){return new Ct().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addBranchFilters(e).addDateFilters(e).addEngagementFilters(e).addReviewFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function un(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)}import{ContentSanitizer as dn}from"@octocodeai/octocode-engine/contentSanitizer";var To=2;function ln(e,t,r){if(!e)return"";if(t===void 0&&r===void 0)return e;let n={additions:t,deletions:r};return W.filterPatch(e,n)}function vu(e){return e?W.filterPatch(e,{trimContext:!0,contextLines:To}):""}function wt(e){let t=dn.sanitizeContent(e.title??""),r=e.body?dn.sanitizeContent(e.body):{content:void 0,warnings:[]},n=new Set([...t.warnings,...r.warnings]),s=e.state?.toLowerCase()==="closed"?"closed":"open";return{prData:{number:e.number,title:t.content,body:r.content,state:s,author:e.user?.login??"",labels:e.labels?.map(o=>typeof o=="string"?o:o.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:n}}var vo=Pe(),xo=Math.round(Pe()/4),hn=3;function mn(e,t,r,n){if(typeof e!="string"||!n)return{value:e};let i=e.length,s=Math.min(Math.max(0,t),i),a=Math.max(1,r),o=Math.min(s+a,i),c=o<i;return s===0&&o===i?{value:e}:{value:e.slice(s,o),pagination:{charOffset:s,charLength:o-s,totalChars:i,hasMore:c,...c?{nextCharOffset:o}:{}}}}function pe(e,t={}){let r=t.charOffset??0,n=t.charLength??vo,i=t.charLength??xo,s=mn(e.body,r,n,!t.includeFullBody),a=(e.comments??[]).sort((f,d)=>{let p=f.commentType==="review_inline"?0:1,R=d.commentType==="review_inline"?0:1;return p-R}),o=a.filter(f=>f.commentType==="review_inline").length,c=a.length-o,l=t.includeFullCommentDetails?a:a.slice(0,hn),m=l.map(f=>{let d=mn(f.body,r,i,!t.includeFullCommentDetails);return{...f,body:d.value??"",...d.pagination?{bodyPagination:d.pagination}:{}}}),u=!t.includeFullCommentDetails&&(a.length>l.length||m.some(f=>"bodyPagination"in f)),h=[...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.`]:[],...u?[`PR comments are paginated/summarized to ${hn} comment(s) per search result with ${i} chars each. Use prNumber with content.comments={discussion:true,reviewInline:true} and charOffset to continue specific comment bodies.`]:[]];return{number:e.number,...e.collectionStates?{collectionStates:e.collectionStates}:{},...e.providerLimits?.length?{providerLimits:e.providerLimits}:{},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:o,discussion:c}},commits:e.commits?.length||0,additions:e.additions??e.file_changes?.files.reduce((f,d)=>f+d.additions,0)??0,deletions:e.deletions??e.file_changes?.files.reduce((f,d)=>f+d.deletions,0)??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},...m.length>0&&{commentDetails:m,commentDetailsShown:m.length,commentDetailsTotal:a.length,...u?{commentDetailsPaginated:!0}:{}},...(e._sanitization_warnings||h.length>0)&&{sanitizationWarnings:[...e._sanitization_warnings||[],...h]}}}function ve(e){let t=Array.isArray(e.owner)?e.owner[0]||void 0:e.owner,r=Array.isArray(e.repo)?e.repo[0]||void 0:e.repo;return{owner:t,repo:r}}function At(e,t){let n=t.content?.patches,i=n?.mode??"none",s=new Map(n?.ranges?.map(o=>[o.file,o])||[]),a=new Set([...n?.files??[],...s.keys()]);return i==="none"?e.map(o=>({...o,patch:void 0})):i==="selected"?e.filter(o=>a.has(o.filename)).map(o=>{let c=s.get(o.filename);return{...o,patch:o.patch?ln(o.patch,c?.additions,c?.deletions):void 0}}):e.map(o=>({...o}))}function ge(e){let t=e.content;return!!(t?.changedFiles||t?.patches?.mode&&t.patches.mode!=="none")}function fn(e){return e.content?.comments??null}function Ue(e){let t=fn(e);return t?t.discussion===!0:!1}function je(e){let t=fn(e);return t?t.reviewInline===!0:!1}function qe(e){return!!e.content?.commits}function Qe(e){return!!e.content?.reviews}function pn(e){return e.prNumber!==void 0?!0:ge(e)||Ue(e)||je(e)||qe(e)||Qe(e)}function It(e){return!!e.content?.comments?.includeBots}import{ContentSanitizer as Et}from"@octocodeai/octocode-engine/contentSanitizer";var Mo=new Set(["vercel","pkg-pr-new","coderabbitai","github-actions","codecov","changeset-bot","netlify","sonarcloud","socket-security"]);function _t(e){let t=e.toLowerCase();return t.endsWith("[bot]")||Mo.has(t)}async function oe(e,t,r,n){if(t===0)return{items:[],rawResponseChars:0,collectionState:{page:0,hasMore:!1}};let i=await O(n);return z(F("gh-pr-collection-page",{...e,page:t,auth:i}),async()=>{let s=await r(t);return{items:s.data,rawResponseChars:w(s.data),collectionState:{page:t,hasMore:/;\s*rel="next"/.test(s.headers?.link??"")}}})}async function Tt(e,t,r,n,i=!1,s,a=1){let{items:o,rawResponseChars:c,collectionState:l}=await oe({owner:t,repo:r,prNumber:n,surface:"discussion"},a,d=>e.rest.issues.listComments({owner:t,repo:r,issue_number:n,per_page:100,page:d}),s),m=i?o:o.filter(d=>!_t(d.user?.login??"")),u=o.length-m.length,h=m.map(d=>({id:String(d.id),user:d.user?.login??"unknown",body:Et.sanitizeContent(d.body??"").content,createdAt:d.created_at??"",updatedAt:d.updated_at??"",commentType:"discussion"})),f=[];return u>0&&f.push(`${u} bot comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:G(Object.assign(h,{collectionState:l}),c),note:f.length>0?f.join("; "):void 0}}async function vt(e,t,r,n,i,s=1){let{items:a,rawResponseChars:o,collectionState:c}=await oe({owner:t,repo:r,prNumber:n,surface:"reviews"},s,l=>e.rest.pulls.listReviews({owner:t,repo:r,pull_number:n,per_page:100,page:l}),i);return G(Object.assign(a.map(l=>({id:String(l.id),user:l.user?.login??"unknown",state:l.state??"",body:Et.sanitizeContent(l.body??"").content,submittedAt:l.submitted_at??void 0,commitId:l.commit_id??void 0})),{collectionState:c}),o)}async function xt(e,t,r,n,i=!1,s,a=1){let{items:o,rawResponseChars:c,collectionState:l}=await oe({owner:t,repo:r,prNumber:n,surface:"inline"},a,d=>e.rest.pulls.listReviewComments({owner:t,repo:r,pull_number:n,per_page:100,page:d}),s),m=i?o:o.filter(d=>!_t(d.user?.login??"")),u=o.length-m.length,h=m.map(d=>({id:String(d.id),user:d.user?.login??"unknown",body:Et.sanitizeContent(d.body??"").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}:{}})),f=[];return u>0&&f.push(`${u} bot inline comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:G(Object.assign(h,{collectionState:l}),c),note:f.length>0?f.join("; "):void 0}}var gn=250,Rn=3e3;async function Mt(e,t,r,n,i=1){let s=await M(n),{items:a,rawResponseChars:o,collectionState:c}=await oe({owner:e,repo:t,prNumber:r,surface:"changedFiles"},i,u=>s.rest.pulls.listFiles({owner:e,repo:t,pull_number:r,per_page:100,page:u}),n),l=i*100>=Rn&&(a.length>=100||c.hasMore),m={...c,hasMore:c.hasMore&&!l};return G({collectionState:m,total_count:a.length,files:[...a],...l?{providerLimits:[{reason:"providerResultCap",surface:"changedFiles",maxResults:Rn}]}:{}},o)}async function Lo(e,t,r,n,i=1){let s=await M(n),{items:a,rawResponseChars:o,collectionState:c}=await oe({owner:e,repo:t,prNumber:r,surface:"commits"},i,h=>s.rest.pulls.listCommits({owner:e,repo:t,pull_number:r,per_page:50,page:h}),n),l=i*50>=gn&&(a.length>=50||c.hasMore),m={...c,hasMore:c.hasMore&&!l},u=Object.assign([...a],{collectionState:m});return l&&(u.providerLimits=[{reason:"providerResultCap",surface:"commits",maxResults:gn}]),G(u,o)}async function Oo(e,t,r,n){let i=await Qr({owner:e,repo:t,ref:r},n),s=[...i.data.files||[]];return i.terminalLimit&&(s.providerLimits=[{reason:"providerResultCap",surface:"commitFiles",maxResults:gt,sha:r}]),G(Object.assign(s,{collectionState:i.collectionState}),i.rawResponseChars)}var Ho=5;async function ko(e,t,r){if(e.length===0)return[];let n=new Array(e.length),i=0,s=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let a=i++;if(a>=e.length)break;n[a]=await r(e[a],a)}});return await Promise.all(s),n}async function Ft(e,t,r,n,i){let s=await Lo(e,t,r,i,n.collectionPages?.commits??1);if(!s)return null;let a=T(s)??0,o=n.content?.commits?.includeFiles===!0,c=Math.min(Math.max(1,n.itemsPerPage??20),100),l=Math.max(1,Math.ceil(s.length/c)),u=(Math.min(Math.max(1,n.commitPage??n.page??1),l)-1)*c,h=[...s.providerLimits??[]],f=await ko(s,Ho,async(d,p)=>{let R=o&&p>=u&&p<u+c?await Oo(e,t,d.sha,i):null,y=[];return R&&(h.push(...R.providerLimits??[]),a+=T(R)??0,y=R),{sha:d.sha,message:d.commit.message,author:d.commit.author?.name||"unknown",date:d.commit.author?.date||"",files:y,filesCollectionState:R?.collectionState}});return f.collectionState=s.collectionState,h.length&&(f.providerLimits=h),G(f,a)}async function yn(e,t,r,n){let i={...e,merged_at:e.pull_request?.merged_at??e.merged_at},{prData:s,sanitizationWarnings:a}=wt(i);s.collectionStates={},a.size>0&&(s._sanitization_warnings=Array.from(a));let o=0;if(e.pull_request&&pn(t)){let{owner:m,repo:u}=ve(t);if(m&&u){let h=await r.rest.pulls.get({owner:m,repo:u,pull_number:e.number});if(h.data&&(o+=w(h.data),s.head=h.data.head?.ref,s.head_sha=h.data.head?.sha,s.base=h.data.base?.ref,s.base_sha=h.data.base?.sha,s.draft=h.data.draft??!1,h.data.merged_at&&(s.merged_at=h.data.merged_at),s.additions=h.data.additions??0,s.deletions=h.data.deletions??0,ge(t)||(s.file_changes={total_count:h.data.changed_files??0,files:[]}),ge(t))){let f=await Mt(m,u,e.number,n,t.collectionPages?.changedFiles??1);f&&(o+=T(f)??0,f.files=At(f.files,t),f.total_count=h.data.changed_files??f.total_count,s.file_changes=f,s.collectionStates.changedFiles=f.collectionState,f.providerLimits&&(s.providerLimits=[...s.providerLimits??[],...f.providerLimits]))}}}let c=Ue(t),l=je(t);if(c||l){let{owner:m,repo:u}=ve(t);if(m&&u){let h=It(t),f=()=>Promise.resolve({comments:G([],0)}),[{comments:d,note:p},{comments:R,note:y}]=await Promise.all([c?Tt(r,m,u,e.number,h,n,t.collectionPages?.discussion??1):f(),l?xt(r,m,u,e.number,h,n,t.collectionPages?.inline??1):f()]);s.comments=[...d,...R],s.collectionStates.discussion=d.collectionState,s.collectionStates.inline=R.collectionState,o+=(T(d)??0)+(T(R)??0);let P=[p,y].filter(g=>typeof g=="string");P.length>0&&(s._sanitization_warnings=[...s._sanitization_warnings||[],...P])}}if(Qe(t)){let{owner:m,repo:u}=ve(t);if(m&&u){let h=await vt(r,m,u,e.number,n,t.collectionPages?.reviews??1);o+=T(h)??0,s.reviews=h,s.collectionStates.reviews=h.collectionState}}if(qe(t)){let{owner:m,repo:u}=ve(t);if(m&&u){let h=await Ft(m,u,e.number,t,n);h&&(o+=T(h)??0,s.commits=h,s.collectionStates.commits=h.collectionState,h.providerLimits&&(s.providerLimits=[...s.providerLimits??[],...h.providerLimits]))}}return G(s,o)}async function We(e,t,r,n){let{prData:i,sanitizationWarnings:s}=wt(e);i.collectionStates={},s.size>0&&(i._sanitization_warnings=Array.from(s));let a=0,o=t.owner,c=t.repo;if(i.additions="additions"in e?e.additions??0:0,i.deletions="deletions"in e?e.deletions??0:0,ge(t)||(i.file_changes={total_count:"changed_files"in e?e.changed_files??0:0,files:[]}),ge(t)){let u=await Mt(o,c,e.number,n,t.collectionPages?.changedFiles??1);u&&(a+=T(u)??0,u.files=At(u.files,t),u.total_count="changed_files"in e?e.changed_files??u.total_count:u.total_count,i.file_changes=u,i.collectionStates.changedFiles=u.collectionState,u.providerLimits&&(i.providerLimits=[...i.providerLimits??[],...u.providerLimits]))}let l=Ue(t),m=je(t);if(l||m){let u=It(t),h=()=>Promise.resolve({comments:G([],0)}),[{comments:f,note:d},{comments:p,note:R}]=await Promise.all([l?Tt(r,o,c,e.number,u,n,t.collectionPages?.discussion??1):h(),m?xt(r,o,c,e.number,u,n,t.collectionPages?.inline??1):h()]);i.comments=[...f,...p],i.collectionStates.discussion=f.collectionState,i.collectionStates.inline=p.collectionState,a+=(T(f)??0)+(T(p)??0);let y=[d,R].filter(P=>typeof P=="string");y.length>0&&(i._sanitization_warnings=[...i._sanitization_warnings||[],...y])}if(Qe(t)){let u=await vt(r,o,c,e.number,n,t.collectionPages?.reviews??1);a+=T(u)??0,i.reviews=u,i.collectionStates.reviews=u.collectionState}if(qe(t)){let u=await Ft(o,c,e.number,t,n);u&&(a+=T(u)??0,i.commits=u,i.collectionStates.commits=u.collectionState,u.providerLimits&&(i.providerLimits=[...i.providerLimits??[],...u.providerLimits]))}return G(i,a)}function Go(e,t,r){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:r,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}async function bn(e,t){let{owner:r,repo:n,prNumber:i}=e;if(!r||!n||!i)return{pullRequests:[],totalCount:0,error:U.PR_REQUIRED_PARAMS.message,hints:["Provide owner, repo, and prNumber"]};if(Array.isArray(r)||Array.isArray(n))return{pullRequests:[],totalCount:0,error:U.PR_SINGLE_VALUES.message,hints:["Do not use array for owner or repo when fetching by number"]};try{let s=await M(t),a=await s.rest.pulls.get({owner:r,repo:n,pull_number:i}),o=a.data,c=await We(o,e,s,t);return{pullRequests:[pe(c,{includeFullBody:!0,includeFullCommentDetails:!0})],totalCount:1,rawResponseChars:w(a.data)+(T(c)??0)}}catch(s){let a=E(s);return Go(a,U.PULL_REQUEST_FETCH_FAILED.message(i,a.error),[`Verify that pull request #${i} exists in ${r}/${n}`,"Check if you have access to this repository","Ensure the PR number is correct"])}}function Lt(e,t,r){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:r,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}function Ot(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 Pn(e,t){try{let r=t.owner,n=t.repo,i=Math.min(t.limit||30,100),s=t.page||1,a=await e.rest.pulls.list({owner:r,repo:n,state:(t.state==="merged"?"closed":t.state)||"open",per_page:i,page:s,sort:t.sort==="updated"?"updated":"created",direction:t.order||"desc",...t.head&&{head:t.head},...t.base&&{base:t.base}}),o=await Promise.all(a.data.map(async h=>await We(h,t,e))),c=o.reduce((h,f)=>h+(T(f)??0),0),l=o.map(h=>pe(h,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:t.charOffset,charLength:t.charLength})),m=a.data.length===i,u=(s-1)*i+l.length;return{pullRequests:l,totalCount:l.length,pagination:{currentPage:s,totalPages:m?s+1:s,perPage:i,totalMatches:u+(m?1:0),reachableTotalMatches:u,totalMatchesKind:m?"lowerBound":"exact",hasMore:m,...m?{nextPage:s+1}:{}},rawResponseChars:w(a.data)+c}}catch(r){if(te(r))return Ot(t);let n=E(r);return Lt(n,U.PULL_REQUEST_LIST_FAILED.message(n.error),["Verify repository access and authentication"])}}async function No(e,t){if(!t.owner||!t.repo||Array.isArray(t.owner)||Array.isArray(t.repo))return t;try{let r=await e.rest.repos.get({owner:t.owner,repo:t.repo}),[n,i]=r.data.full_name?.split("/")??[];return!n||!i||n===t.owner&&i===t.repo?t:{...t,owner:n,repo:i}}catch{return t}}function Do(e,t,r="anon"){return F("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,reviewPage:e.reviewPage,collectionPages:e.collectionPages,itemsPerPage:e.itemsPerPage,auth:r},t)}async function Sn(e,t,r){let n=await O(t),i=Do(e,r,n);return await z(i,async()=>await zo(e,t,r),{shouldCache:a=>!a.error&&!a.incompleteResults})}async function zo(e,t,r){try{if(e.prNumber&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await bn(e,t);let n=await M(t);if(!un(e)&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await Pn(n,e);let s=await No(n,e),a=cn(s);if(!a)return{pullRequests:[],totalCount:0,error:U.NO_VALID_PARAMETERS.message,hints:["Provide search query or filters like owner/repo"]};let o=s.sort&&s.sort!=="best-match"?s.sort:void 0,c=Math.min(s.limit||30,100),l=s.page||1,m=a,u=await n.rest.search.issuesAndPullRequests({q:a,sort:o,order:e.order||"desc",per_page:c,page:l}),h=u.data.items?.filter(A=>!!A.pull_request)||[],f=await Promise.all(h.map(async A=>await yn(A,s,n,t))),d=f.reduce((A,v)=>A+(T(v)??0),0),p=f.map(A=>pe(A,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:s.charOffset,charLength:s.charLength})),R=u.data.total_count,y=Math.min(R,1e3),P=Math.ceil(y/c),g=Math.min(l,Math.max(1,P)),x=g<P,k=Math.min(y,P*c);return{pullRequests:p,totalCount:u.data.total_count,effectiveQuery:m,...u.data.incomplete_results&&{incompleteResults:!0},pagination:{currentPage:g,totalPages:P,perPage:c,totalMatches:y,reportedTotalMatches:R,reachableTotalMatches:k,totalMatchesKind:"reported",totalMatchesCapped:R>y,hasMore:x,...x?{nextPage:g+1}:{}},rawResponseChars:w(u.data)+d}}catch(n){if(te(n))return Ot(e);let i=E(n);return Lt(i,U.PULL_REQUEST_SEARCH_FAILED.message(i.error),["Verify authentication and search parameters"])}}function Bo(e,t,r=$){let n=(e.pullRequests||[]).map(o=>({number:o.number,...o.collectionStates?{collectionStates:o.collectionStates}:{},...o.providerLimits?.length?{providerLimits:o.providerLimits}:{},title:o.title,body:o.body||null,...o.bodyPagination&&{bodyPagination:o.bodyPagination},state:o.merged?"merged":o.state,draft:o.draft||!1,author:o.author,assignees:o.assignees?.map(c=>typeof c=="string"?c:String(c.login??""))||[],labels:o.labels?.map(c=>typeof c=="string"?c:c.name??"")||[],sourceBranch:o.headRef||"",targetBranch:o.baseRef||"",sourceSha:o.headSha,targetSha:o.baseSha,createdAt:o.createdAt,updatedAt:o.updatedAt,closedAt:o.closedAt,mergedAt:o.mergedAt,commentsCount:o.comments,changedFilesCount:o.changedFiles,additions:o.additions,deletions:o.deletions,comments:o.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:o.reviews?.map(c=>({id:c.id,user:c.user,state:c.state,body:c.body,submittedAt:c.submittedAt,commitId:c.commitId})),commits:o.commitDetails?.map(c=>({sha:c.sha,filesCollectionState:c.filesCollectionState,message:c.message,author:c.author,date:c.date,...c.files?{files:c.files}:{}})),fileChanges:o.fileChanges?.map(c=>({path:c.filename,status:c.status,additions:c.additions,deletions:c.deletions,patch:c.patch})),...Array.isArray(o.sanitizationWarnings)&&o.sanitizationWarnings.length>0?{sanitizationWarnings:o.sanitizationWarnings}:{}})),{owner:i,repo:s}=t.projectId?r(t.projectId):{owner:void 0,repo:void 0},a=i||t.owner;return{items:n,totalCount:e.totalCount||n.length,...e.incompleteResults?{incompleteResults:!0}:{},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,...Te(e.pagination)},...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},repositoryContext:a&&s?{owner:a,repo:s}:void 0}}function $o(e,t,r){return{owner:t,repo:r,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,reviewPage:e.reviewPage,collectionPages:e.collectionPages,itemsPerPage:e.itemsPerPage,sort:e.sort,order:e.order,limit:e.limit,page:e.page,charOffset:e.charOffset,charLength:e.charLength}}async function Cn(e,t,r=$){let{owner:n,repo:i}=e.projectId?r(e.projectId):{owner:void 0,repo:void 0},s=n||e.owner,a=$o(e,s,i),o=await Sn(a,t);return o.error?Z({error:typeof o.error=="string"?o.error:String(o.error),status:o.status||500,hints:o.hints,rateLimitRemaining:o.rateLimitRemaining,rateLimitReset:o.rateLimitReset,retryAfter:o.retryAfter}):{data:Bo(o,e,r),status:200,provider:"github",rawResponseChars:o.rawResponseChars??w(o)}}var Re={ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200};function Ve(e,t){return e.hasMore?[`Page ${e.currentPage}/${e.totalPages}. Next: page=${e.currentPage+1}`]:[]}function wn(e,t){let r=e._cachedItems;if(!r||r.length===0){let{_cachedItems:I,...C}=e;return C}let n=t.itemsPerPage??Re.ENTRIES_PER_PAGE,i=t.page??1,s=r.length,a=Math.max(1,Math.ceil(s/n)),o=(i-1)*n,c=Math.min(o+n,s),l=r.slice(o,c),m=Object.create(null),u=e.path==="/"?"":e.path,h=I=>{let C=I;u&&I.startsWith(u)&&(C=I.slice(u.length),C.startsWith("/")&&(C=C.slice(1)));let L=C.lastIndexOf("/");return L===-1?".":C.slice(0,L)},f=I=>{let C=I.lastIndexOf("/");return C===-1?I:I.slice(C+1)};for(let I of l){let C=h(I.path);m[C]||(m[C]={files:[],folders:[]});let L=f(I.path);I.type==="file"?m[C].files.push(L):m[C].folders.push(L)}for(let I of Object.keys(m)){let C=m[I];C&&(C.files.sort(),C.folders.sort())}let d=Object.create(null),p=Object.keys(m).sort((I,C)=>I==="."?-1:C==="."?1:I.localeCompare(C));for(let I of p){let C=m[I];C&&(d[I]=C)}let R=l.filter(I=>I.type==="file").length,y=l.filter(I=>I.type==="dir").length,P=r.filter(I=>I.type==="file").length,g=r.filter(I=>I.type==="dir").length,x=i<a,k={currentPage:i,totalPages:a,hasMore:x,...x?{nextPage:i+1}:{},entriesPerPage:n,totalEntries:s},A=Ve(k,{owner:e.owner,repo:e.repo,branch:e.branch,path:u,depth:t.maxDepth??1,pageFiles:R,pageFolders:y,allFiles:P,allFolders:g}),v,V=e._cachedFileSizeMap;if(V){let I=new Set(l.filter(N=>N.type==="file").map(N=>N.path)),C=e.path==="/"?"":e.path,L=Object.create(null);for(let[N,j]of Object.entries(V))for(let[q,b]of Object.entries(j)){let _=N==="."?C?`${C}/${q}`:q:C?`${C}/${N}/${q}`:`${N}/${q}`;I.has(_)&&(L[N]||(L[N]=Object.create(null)),L[N][q]=b)}Object.keys(L).length>0&&(v=L)}return{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,...e.defaultBranch!==void 0&&{defaultBranch:e.defaultBranch},...e.isPartial!==void 0&&{isPartial:e.isPartial},...e.terminalLimit!==void 0&&{terminalLimit:e.terminalLimit},...e.partialReasons!==void 0&&{partialReasons:e.partialReasons},apiSource:e.apiSource,summary:{totalFiles:P,totalFolders:g,truncated:x,filtered:!0,originalCount:s,...e.summary.incompleteTree!==void 0&&{incompleteTree:e.summary.incompleteTree}},structure:d,...v!==void 0&&{fileSizeMap:v},...V!==void 0&&{_cachedFileSizeMap:V},pagination:k,hints:A,rawResponseChars:e.rawResponseChars}}import{RequestError as jo}from"octokit";var In=Symbol.for("octocode.recursiveFetchFailures"),qo=new Set([401,403,429]);function An(e){return e instanceof jo&&qo.has(e.status)}function Ht(e,t){try{Object.defineProperty(e,In,{value:t,enumerable:!1,configurable:!0})}catch{}return e}function xe(e){if(typeof e!="object"||e===null)return 0;let t=e[In];return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}async function Me(e,t,r,n,i,s,a,o=new Set){if(s>a||o.has(i))return Ht(G([],0),0);o.add(i);let c;try{c=await e.rest.repos.getContent({owner:t,repo:r,path:i||"",ref:n})}catch(d){if(An(d))throw d;return Ht(G([],0),1)}let l=w(c.data),u=(Array.isArray(c.data)?c.data:[c.data]).filter(d=>d.type==="file"||d.type==="dir").map(d=>({name:d.name,path:d.path,type:d.type,size:"size"in d?d.size:void 0,download_url:"download_url"in d?d.download_url:void 0,url:d.url,html_url:d.html_url,git_url:d.git_url,sha:d.sha})),h=[...u],f=0;if(s<a){let d=u.filter(R=>R.type==="dir"),p=3;for(let R=0;R<d.length;R+=p){let y=d.slice(R,R+p),P=await Promise.allSettled(y.map(g=>Me(e,t,r,n,g.path,s+1,a,o)));for(let g of P)if(g.status==="fulfilled"){let x=g.value;l+=T(x)??0,f+=xe(x),h.push(...x)}else{if(An(g.reason))throw g.reason;f+=1}}}return Ht(G(h,l),f)}import{RequestError as Qo}from"octokit";function Wo(e,t){let r=(t.pathPrefix??"").replace(/^\/+|\/+$/g,""),n=r?`${r}/`:"",i=Math.max(1,t.maxDepth),s=[];for(let a of e){if(!a.path||a.type!=="blob"&&a.type!=="tree")continue;let o=a.path;if(r){if(a.path===r||!a.path.startsWith(n))continue;o=a.path.slice(n.length)}let c=o.split("/").filter(Boolean).length;if(c===0||c>i)continue;let l=o.lastIndexOf("/"),m=l===-1?o:o.slice(l+1);s.push({name:m,path:a.path,type:a.type==="tree"?"dir":"file",size:a.type==="blob"?a.size:void 0,sha:a.sha,url:a.url,html_url:void 0,git_url:void 0,download_url:void 0})}return s}function _n(e=process.env){return e.OCTOCODE_GH_STRUCTURE_TREES!=="0"}async function En(e,t){let r=(t.pathPrefix??"").replace(/^\/+|\/+$/g,""),n,i;if(r&&r!=="."){let u=r.includes("/")?r.slice(0,r.lastIndexOf("/")):"",{data:h}=await e.rest.repos.getContent({owner:t.owner,repo:t.repo,path:u,ref:t.workingBranch});i=w(h),n=Array.isArray(h)?h.find(f=>f.path===r&&f.type==="dir")?.sha:void 0}else{let{data:u}=await e.rest.repos.getBranch({owner:t.owner,repo:t.repo,branch:t.workingBranch});i=w(u),n=u.commit.commit.tree.sha}if(!n)throw new Error(`Could not resolve tree SHA for ${t.owner}/${t.repo}@${t.workingBranch}`);let s;try{s=await e.rest.git.getTree({owner:t.owner,repo:t.repo,tree_sha:n,recursive:"true",...t.ifNoneMatch?{headers:{"If-None-Match":t.ifNoneMatch}}:{}})}catch(u){if(u instanceof Qo&&u.status===304)return{items:[],truncated:!1,rawResponseChars:0,etag:t.ifNoneMatch,notModified:!0};throw u}let a=s.data,o=me(s.headers),c=r==="."?"":r,l=c?a.tree.map(u=>({...u,path:u.path?`${c}/${u.path}`:void 0})):a.tree;return{items:Wo(l,{pathPrefix:c,maxDepth:t.maxDepth}),truncated:!!a.truncated,rawResponseChars:i+w(a),...o?{etag:o}:{}}}import{RequestError as Tn}from"octokit";async function kt(e,t,r,n,i,s,a){let o,c;try{i?o=i:(c=await K(t,r,s),o=c)}catch(l){let m=E(l);return{error:re.NOT_FOUND.message(t,r,m.error),status:m.status}}try{let l=await e.rest.repos.getContent({owner:t,repo:r,path:n||"",ref:o,...a?{headers:{"If-None-Match":a}}:{}}),m=me(l.headers);return{data:l.data,workingBranch:o,...c!==void 0?{repoDefaultBranch:c}:{},...m?{etag:m}:{}}}catch(l){if(l instanceof Tn&&l.status===304)return{data:null,workingBranch:o,...c!==void 0?{repoDefaultBranch:c}:{},etag:a,notModified:!0};if(!(l instanceof Tn&&l.status===404)){let u=E(l);return{error:re.ACCESS_FAILED.message(t,r,u.error),status:u.status,rateLimitRemaining:u.rateLimitRemaining,rateLimitReset:u.rateLimitReset,retryAfter:u.retryAfter}}let m=E(l);return{error:re.PATH_NOT_FOUND.message(n,t,r,o),status:m.status}}}function vn(e){return e.map(t=>{let r=t;return{name:r.name,path:r.path,type:r.type,size:"size"in r?r.size:void 0,download_url:"download_url"in r?r.download_url:void 0,url:r.url,html_url:r.html_url,git_url:r.git_url,sha:r.sha}})}import{shouldIgnoreDiscoveryDir as Vo,shouldIgnoreDiscoveryFile as Ko}from"@octocodeai/octocode-engine/security";function Yo(e,t){let r=Object.create(null),n=o=>{let c=o;t&&o.startsWith(t)&&(c=o.slice(t.length),c.startsWith("/")&&(c=c.slice(1)));let l=c.lastIndexOf("/");return l===-1?".":c.slice(0,l)},i=o=>{let c=o.lastIndexOf("/");return c===-1?o:o.slice(c+1)};for(let o of e){let c=n(o.path);r[c]||(r[c]={files:[],folders:[]});let l=i(o.path);o.type==="file"?r[c].files.push(l):r[c].folders.push(l)}for(let o of Object.values(r))o&&(o.files.sort(),o.folders.sort());let s=Object.keys(r).sort((o,c)=>o==="."?-1:c==="."?1:o.localeCompare(c)),a=Object.create(null);for(let o of s){let c=r[o];c&&(a[o]=c)}return a}function xn(e,t){let r=Object.create(null);for(let n of e){if(n.type!=="file"||n.size===void 0)continue;let i=n.path;t&&n.path.startsWith(t)&&(i=n.path.slice(t.length).replace(/^\//,""));let s=i.lastIndexOf("/"),a=s===-1?".":i.slice(0,s),o=s===-1?i:i.slice(s+1);r[a]||(r[a]=Object.create(null)),r[a][o]=n.size}return r}function Ke(e){let{owner:t,repo:r,workingBranch:n,repoDefaultBranch:i,cleanPath:s,depth:a,partialTreeFailures:o,incompleteTree:c,rawResponseChars:l,includeSizes:m,extraHints:u=[]}=e,h=e.allItems.filter(b=>b.type==="dir"?!Vo(b.name):!Ko(b.path));h.sort((b,_)=>{if(b.type!==_.type)return b.type==="dir"?-1:1;let B=b.path.split("/").length,D=_.path.split("/").length;return B!==D?B-D:b.path.localeCompare(_.path)});let f=e.itemsPerPage??Re.ENTRIES_PER_PAGE,d=e.page??1,p=h.length,R=Math.max(1,Math.ceil(p/f)),y=(d-1)*f,P=Math.min(y+f,p),g=h.slice(y,P),x=Yo(g,s),k=m?xn(h,s):void 0,A=k!==void 0?xn(g,s):void 0,v=g.filter(b=>b.type==="file").length,V=g.filter(b=>b.type==="dir").length,I=h.filter(b=>b.type==="file").length,C=h.filter(b=>b.type==="dir").length,L=d<R,N={currentPage:d,totalPages:R,hasMore:L,...L?{nextPage:d+1}:{},entriesPerPage:f,totalEntries:p},j=Ve(N,{owner:t,repo:r,branch:n,path:s,depth:a,pageFiles:v,pageFolders:V,allFiles:I,allFolders:C});o>0&&j.unshift(`Partial tree: ${o} 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 b of u)j.unshift(b);let q=[...c?["providerTreeTruncated"]:[],...o>0?["partialTreeFailures"]:[]];return{owner:t,repo:r,branch:n,...i!==void 0&&{defaultBranch:i},path:s||"/",apiSource:!0,summary:{totalFiles:I,totalFolders:C,truncated:L,filtered:!0,originalCount:h.length,...c?{incompleteTree:!0}:{}},structure:x,...A!==void 0&&{fileSizeMap:A},...k!==void 0&&{_cachedFileSizeMap:k},pagination:N,...q.length>0?{isPartial:!0,partialReasons:q}:{},...c?{terminalLimit:!0}:{},hints:j,rawResponseChars:l,_cachedItems:h.map(b=>({path:b.path,type:b.type}))}}async function Mn(e,t,r){let n=await O(t),i=F("gh-repo-structure-api",{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,depth:e.maxDepth,includeSizes:e.includeSizes===!0,auth:n},r),s=await Be(i,async({ifNoneMatch:a})=>{let o=await Xo({...e,itemsPerPage:e.itemsPerPage??Re.ENTRIES_PER_PAGE,page:e.page??1},t,a);return{value:o.result,etag:o.etag,notModified:o.notModified}},{shouldCache:a=>!("error"in a)&&a.isPartial!==!0});return!("error"in s)&&s.structure?wn(s,e):s}async function Xo(e,t,r){try{let n=await M(t),{owner:i,repo:s,branch:a,path:o="",maxDepth:c=1}=e,l=o.replace(/^\/+|\/+$/g,"");if(c>1&&_n())return await Jo(n,e,l,c,t,r);let m=await kt(n,i,s,l,a,t,c===1?r:void 0);if("error"in m)return{result:m};if(m.notModified)return{result:{error:"not-modified",status:304},etag:m.etag??r,notModified:!0};let{data:u,workingBranch:h,repoDefaultBranch:f,etag:d}=m,p=w(u),R=Array.isArray(u)?u:[u],y=vn(R),P=0;if(c>1){let g=await Me(n,i,s,h,l,1,c);P=xe(g),p=T(g)??0,y=g}return{result:Ke({owner:i,repo:s,workingBranch:h,repoDefaultBranch:f,cleanPath:l,depth:c,allItems:y,partialTreeFailures:P,incompleteTree:!1,rawResponseChars:p,includeSizes:e.includeSizes===!0,itemsPerPage:e.itemsPerPage,page:e.page}),...c===1&&d?{etag:d}:{}}}catch(n){let i=E(n);return{result:{error:re.STRUCTURE_EXPLORATION_FAILED.message,status:i.status,rateLimitRemaining:i.rateLimitRemaining,rateLimitReset:i.rateLimitReset,retryAfter:i.retryAfter}}}}async function Jo(e,t,r,n,i,s){let{owner:a,repo:o,branch:c}=t,l,m;try{c?l=c:(m=await K(a,o,i),l=m)}catch(y){let P=E(y);return{result:{error:re.NOT_FOUND.message(a,o,P.error),status:P.status}}}let u;try{u=await En(e,{owner:a,repo:o,workingBranch:l,pathPrefix:r,maxDepth:n,ifNoneMatch:s})}catch(y){let P=await kt(e,a,o,r,l,i);if("error"in P)return{result:P};let g=await Me(e,a,o,P.workingBranch,r,1,n);return{result:Ke({owner:a,repo:o,workingBranch:P.workingBranch,repoDefaultBranch:m,cleanPath:r,depth:n,allItems:g,partialTreeFailures:xe(g),incompleteTree:!1,rawResponseChars:T(g)??0,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:[`Git Trees fetch failed (${y instanceof Error?y.message:String(y)}); used Contents recursion instead.`]})}}if(u.notModified)return{result:{error:"not-modified",status:304},etag:u.etag??s,notModified:!0};let h=u.items,f=0,d=u.rawResponseChars,p=u.truncated,R=[];if(p){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 y=await Me(e,a,o,l,r,1,n);f=xe(y),d+=T(y)??0,h=[...h,...y].filter((g,x,k)=>k.findIndex(A=>A.path===g.path)===x)}catch{}}return{result:Ke({owner:a,repo:o,workingBranch:l,repoDefaultBranch:m,cleanPath:r,depth:n,allItems:h,partialTreeFailures:f,incompleteTree:p,rawResponseChars:d,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:R}),...u.etag&&!p?{etag:u.etag}:{}}}async function Zo(e,t,r){try{let n=await O(r),i=F("gh-repo-metadata",{owner:e,repo:t,kind:"languages",auth:n});return await z(i,async()=>{let a=await(await M(r)).rest.repos.listLanguages({owner:e,repo:t}),o=Object.entries(a.data).sort((c,l)=>l[1]-c[1]);return{languages:Object.fromEntries(o),dominantLanguage:o[0]?.[0],rawResponseChars:w(a.data)}},{cacheRole:"helper"})}catch{return{rawResponseChars:0,metadataPagination:{languages:{currentPage:1,perPage:1,returned:0,hasMore:!1,failed:!0}}}}}async function Gt(e,t,r,n,i){let s={contributors:30,branches:100,tags:50}[e];try{let a=await O(i),o=F("gh-repo-metadata",{owner:t,repo:r,kind:e,page:n,perPage:s,auth:a});return await z(o,async()=>{let c=await M(i),l={owner:t,repo:r,page:n,per_page:s},m=await(e==="contributors"?c.rest.repos.listContributors(l):e==="branches"?c.rest.repos.listBranches(l):c.rest.repos.listTags(l)),u=Object.entries(m.headers??{}).find(([p])=>p.toLowerCase()==="link")?.[1],h=typeof u=="string"&&/rel=["']next["']/.test(u),f=m.data,d=e==="contributors"?{contributors:f.filter(p=>typeof p.login=="string").map(p=>({login:p.login,contributions:p.contributions??0}))}:e==="branches"?{branches:f.map(p=>p.name)}:{tags:f.map(p=>({name:p.name,sha:p.commit.sha}))};return{...d,rawResponseChars:w(f),metadataPagination:{[e]:{currentPage:n,perPage:s,returned:Object.values(d)[0].length,hasMore:h,...h&&n>=Nt?{terminalLimit:!0}:{}}}}},{cacheRole:"helper"})}catch{return{rawResponseChars:0,metadataPagination:{[e]:{currentPage:n,perPage:s,returned:0,hasMore:!1,failed:!0}}}}}function es(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,...e.summary?.incompleteTree!==void 0&&{incompleteTree:e.summary.incompleteTree}},...e.isPartial!==void 0&&{isPartial:e.isPartial},...e.partialReasons!==void 0&&{partialReasons:e.partialReasons},...e.terminalLimit!==void 0&&{terminalLimit:e.terminalLimit},pagination:e.pagination,hints:e.hints}}async function Fn(e,t,r=$){let{owner:n,repo:i}=r(e.projectId);if(!n||!i)return{error:"Project ID is required for repository structure",status:400,provider:"github"};let s={owner:n,repo:i,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},[a,o,c,l,m]=await Promise.all([Mn(s,t),e.includeLanguages?Zo(n,i,t):Promise.resolve(void 0),e.includeContributors?Gt("contributors",n,i,e.metadataPage??1,t):Promise.resolve(void 0),e.includeBranches?Gt("branches",n,i,e.metadataPage??1,t):Promise.resolve(void 0),e.includeTags?Gt("tags",n,i,e.metadataPage??1,t):Promise.resolve(void 0)]);if("error"in a)return $e(a)??{error:"Unknown GitHub API error",status:500,provider:"github"};let u=es(a),h={...c?.metadataPagination,...l?.metadataPagination,...m?.metadataPagination,...o?.metadataPagination},f=Object.values(h),d=new Set(u.partialReasons);for(let p of f)p?.failed?d.add("metadataFetchFailed"):p?.terminalLimit?d.add("metadataPageLimit"):p?.hasMore&&d.add("metadataPagination");return{data:{...u,...o?.languages?{languages:o.languages,dominantLanguage:o.dominantLanguage}:{},...c?.contributors?{contributors:c.contributors}:{},...l?.branches?{branches:l.branches}:{},...m?.tags?{tags:m.tags}:{},...f.length>0?{metadataPagination:h}:{},...d.size>0?{isPartial:!0,partialReasons:[...d]}:{},...f.some(p=>p?.terminalLimit)?{terminalLimit:!0}:{}},status:200,provider:"github",rawResponseChars:(a.rawResponseChars??w(a))+(c?.rawResponseChars??0)+(l?.rawResponseChars??0)+(m?.rawResponseChars??0)+(o?.rawResponseChars??0)}}var Ln={github:{cloneRepo:!0,fetchDirectoryToDisk:!0,requiresScopedCodeSearch:!1,supportsMergedState:!1,supportsMultiTopicSearch:!0}};var Ye=class{type="github";capabilities=Ln.github;authInfo;constructor(t){t?.authInfo?this.authInfo=t.authInfo:t?.token&&(this.authInfo={token:t.token})}async searchCode(t){try{return await en(t,this.authInfo,$)}catch(r){return this.handleError(r)}}async getFileContent(t){try{return await an(t,this.authInfo,$)}catch(r){return this.handleError(r)}}async searchRepos(t){try{return await tn(t,this.authInfo)}catch(r){return this.handleError(r)}}async searchPullRequests(t){try{return await Cn(t,this.authInfo,$)}catch(r){return this.handleError(r)}}async getRepoStructure(t){try{return await Fn(t,this.authInfo,$)}catch(r){return this.handleError(r)}}async resolveDefaultBranch(t){let{owner:r,repo:n}=$(t);if(!r||!n)throw new Error(`Cannot resolve default branch: invalid projectId '${t}'.`);return K(r,n,this.authInfo)}handleError(t){let r=E(t);return Z(r)}};import{createHash as rs}from"crypto";var ns=3600*1e3,On=20,Y=new Map;function Hn(e){return Date.now()-e.createdAt<ns}function is(e=0){for(let[r,n]of Y.entries())Hn(n)||Y.delete(r);let t=Math.max(0,On-e);if(Y.size>t){let r=[...Y.entries()].sort((i,s)=>i[1].lastAccessedAt-s[1].lastAccessedAt),n=Y.size-t;for(let i=0;i<n&&i<r.length;i++){let s=r[i];s&&Y.delete(s[0])}}}function os(e){return e?rs("sha256").update(e).digest("hex").slice(0,16):"default"}function ss(e){if(e==="default")return e;try{let t=new URL(e),r=`${t.protocol}//${t.hostname.toLowerCase()}`;return t.port&&(r+=`:${t.port}`),r+=t.pathname.replace(/\/+$/,"")||"",r}catch{return e.replace(/\/+$/,"")}}function as(e,t){let r=ss(t?.baseUrl||"default"),n=os(t?.token||t?.authInfo?.token);return`${e}:${r}:${n}`}function cs(e="github",t){if(e!=="github")throw new Error(`Unknown provider type: '${e}'. Only 'github' is supported.`);let r=as(e,t),n=Y.get(r);if(n&&Hn(n))return n.lastAccessedAt=Date.now(),n.provider;n&&Y.delete(r),Y.size>=On&&is(1);let i=new Ye({...t,type:e}),s=Date.now();return Y.set(r,{provider:i,createdAt:s,lastAccessedAt:s}),i}async function Hd(){try{return cs("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}
13
+ `),[{provider:"github",ok:!1,error:t}]}}export{nr as a,ir as b,or as c,Qs as d,Ws as e,Jn as f,ti as g,it as h,na as i,ia as j,oa as k,sa as l,aa as m,yr as n,br as o,Er as p,Aa as q,Ne as r,Ia as s,_a as t,Ea as u,O as v,M as w,K as x,te as y,E as z,ie as A,Ya as B,De as C,qr as D,vu as E,_t as F,gt as G,Qr as H,Re as I,cs as J,Hd as K};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __dirname_fn } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __dirname_fn(__filename);
8
+ var a=["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"],p=new Set(a),g=["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"],f=new Set(g),u=[/\.lock$/],d=[/^\.eslintrc(\..+)?$/,/^\.prettierrc(\..+)?$/,/^\.babelrc(\..+)?$/,/^eslint\.config\.(c|m)?js$/,/^\.env(\..+)?$/,/^tsconfig\..+\.json$/,/^\.stylelintrc(\..+)?$/,/^\.renovaterc(\..+)?$/,/\.csproj$/,/\.fsproj$/,/\.vbproj$/,/\.sln$/,/\.gemspec$/,/\.tf(vars)?$/],m=[".toml",".ini",".cfg",".conf",".properties"],i=new Set(m),k=new Set(".md .mdx .markdown .rst .adoc .asciidoc .txt .text .rtf .org .textile .rdoc .pod .creole .wiki".split(" ")),c=new Set(["readme","license","licence","copying","notice","changelog","changes","history","authors","contributors","contributing","code_of_conduct","codeowners","install","citation"]),l=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 .hs .pl .pm .r .jl".split(" "));function s(o){let e=o.replace(/\\/g,"/"),t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function r(o){let e=o.lastIndexOf(".");return e>0?o.slice(e).toLowerCase():""}function j(o){if(!o)return!1;let e=s(o);if(!e)return!1;if(p.has(e))return!0;for(let n of d)if(n.test(e))return!0;let t=r(e);return!!(t&&i.has(t))}function y(o){if(!o)return!1;let e=s(o);if(!e)return!1;if(f.has(e))return!0;for(let t of u)if(t.test(e))return!0;return!1}function x(o){let e=r(o);if(e&&k.has(e))return!0;if(e&&(l.has(e)||i.has(e)))return!1;let t=(e?o.slice(0,o.length-e.length):o).toLowerCase().replace(/\..*$/,""),n=t.split(/[-_.]/)[0]??t;return c.has(t)||c.has(n)}function b(o){let e=r(o);return e!==""&&l.has(e)}function E(o){if(!o)return;let e=s(o);if(e){if(y(e))return"lock";if(j(e))return"config";if(x(e))return"doc";if(b(e))return"code"}}export{E as a};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __dirname_fn } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __dirname_fn(__filename);
8
+ import{z as n}from"zod";function o(e,t){return n.preprocess(r=>typeof r=="number"&&Number.isFinite(r)?Math.min(Math.max(r,e),t):r,n.number().int().min(e).max(t))}var u=o(1,1e3).optional().default(1),l=o(0,100).optional(),d=o(1,1e9).optional(),a=n.preprocess(e=>typeof e=="number"&&Number.isFinite(e)?Math.max(e,0):e,n.number().nonnegative().refine(Number.isSafeInteger,"Expected a safe non-negative integer")),p={responseCharOffset:a.optional().describe("Full-response char offset; re-call with returned value when hasMore."),responseCharLength:o(1,5e4).optional().describe("Full-response char window.")};function b(e,t={}){let{maxQueries:r=5}=t;return n.object({queries:n.array(e).min(1).max(r).describe("Parallel queries; response rows use matching zero-based indexes."),...p}).strict()}export{o as a,u as b,l as c,d,a as e,b as f};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __dirname_fn } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __dirname_fn(__filename);
8
+ import{j as e}from"./chunk-ZSXRT7JL.js";async function a({toolName:r,query:t,execute:u,contextMessage:o}){try{return await u()}catch(s){return e(s,t,o,r)}}export{a};
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __dirname_fn } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __dirname_fn(__filename);
8
+ function p(n){if(n.length===0)return[];let e=n.split(/\r?\n/);return e.length>0&&e[e.length-1]===""&&e.pop(),e}function H(n){return p(n).length}var f=/\.(?:md|markdown|mdx)$/i;function m(n){return f.test(n.split(/[?#]/,1)[0]??n)}function d(n,e){return m(e)?w(k(n)):null}function M(n,e){let t=d(n,e);if(t===null||t.length===0)return null;let r=[];return u(t,r),r.join(`
9
+ `)}function $(n,e){let t=d(n,e);return t===null?null:t.map(g)}function k(n){let e=[],t=n.split(/\r?\n/),r;return t.forEach((i,h)=>{let l=i.match(/^[ \t]{0,3}(`{3,}|~{3,})/);if(l?.[1]){let s=l[1][0],c=l[1].length;r?r.marker===s&&c>=r.length&&(r=void 0):r={marker:s,length:c};return}if(r)return;let o=i.match(/^[ \t]{0,3}(#{1,6})(?:[ \t]+|$)(.*)$/);if(!o?.[1])return;let a=(o[2]??"").replace(/[ \t]+#+[ \t]*$/,"").trim();e.push({line:h+1,level:o[1].length,text:a.length>0?a:"(untitled heading)",children:[]})}),e}function w(n){let e=[],t=[];for(let r of n){for(;t.length>0&&t[t.length-1].level>=r.level;)t.pop();let i=t[t.length-1];i?i.children.push(r):e.push(r),t.push(r)}return e}function u(n,e){for(let t of n){let r=String(t.line).padStart(4," "),i=" ".repeat(Math.max(0,t.level-1));e.push(`${r}| ${i}${"#".repeat(t.level)} ${t.text}`),u(t.children,e)}}function g(n){let e=`${"#".repeat(n.level)} ${n.text}`;return{name:e,kind:"markdownHeading",range:{start:{line:n.line-1,character:0},end:{line:n.line-1,character:e.length}},selectionRange:{start:{line:n.line-1,character:0},end:{line:n.line-1,character:e.length}},children:n.children.map(g)}}export{p as a,H as b,M as c,$ as d};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __dirname_fn } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __dirname_fn(__filename);
8
+ var S=["PATH","TMPDIR","TMP","TEMP","SYSTEMROOT","WINDIR","COMSPEC","PATHEXT"],k=[...S,"HOME","USERPROFILE","APPDATA","LOCALAPPDATA"],A=["HTTP_PROXY","HTTPS_PROXY","NO_PROXY","http_proxy","https_proxy","no_proxy"];function E(l={},d=S){let o={};for(let n of d){let i=process.env[n];i!==void 0&&(o[n]=i)}let c=new Set(d);for(let[n,i]of Object.entries(l))c.has(n)&&(i===void 0?delete o[n]:o[n]=i);return o}import{spawn as C}from"child_process";var P=10*1024*1024,L=5e3;function N(l,d,o={}){let{timeout:c=3e4,cwd:n,env:i={},allowEnvVars:O=S,maxOutputSize:g=P}=o;return new Promise(s=>{let t={killed:!1,stdoutChunks:[],stderrChunks:[],totalOutputSize:0},a=()=>t.stdoutChunks.join(""),f=()=>t.stderrChunks.join(""),h={cwd:n,env:E(i,O),stdio:["ignore","pipe","pipe"]},r;try{r=C(l,d,h)}catch(e){s({stdout:"",stderr:"",exitCode:null,success:!1,error:e instanceof Error?e:new Error(`Failed to spawn command '${l}'`)});return}let p,_=setTimeout(()=>{if(!t.killed){t.killed=!0;try{r.kill("SIGTERM")}catch{}p=setTimeout(()=>{try{r.kill("SIGKILL")}catch{}},L),s({stdout:a(),stderr:f(),exitCode:null,success:!1,error:new Error(`Command timeout after ${c}ms`),timedOut:!0})}},c),T=()=>{clearTimeout(_),p!==void 0&&(clearTimeout(p),p=void 0)},m=()=>{if(t.totalOutputSize>g){if(!t.killed){t.killed=!0;try{r.kill("SIGKILL")}catch{}T(),s({stdout:a(),stderr:f(),exitCode:null,success:!1,error:new Error("Output size limit exceeded"),outputLimitExceeded:!0})}return!0}return!1};r.stdout?.on("data",e=>{if(t.killed)return;let u=e.toString();t.totalOutputSize+=Buffer.byteLength(u),!m()&&t.stdoutChunks.push(u)}),r.stderr?.on("data",e=>{if(t.killed)return;let u=e.toString();t.totalOutputSize+=Buffer.byteLength(u),!m()&&t.stderrChunks.push(u)}),r.on("close",e=>{t.killed||(T(),s({stdout:a(),stderr:f(),exitCode:e,success:e===0}))}),r.on("error",e=>{t.killed||(t.killed=!0,T(),s({stdout:a(),stderr:f(),exitCode:null,success:!1,error:e}))})})}var b=1*1024*1024;export{k as a,A as b,N as c};
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __dirname_fn } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __dirname_fn(__filename);
8
+ import{S as b,W as A,_ as F,ba as B,ea as P,fa as O,ga as D,ia as Q,ka as j,la as q}from"./chunk-BMM5H6QF.js";import V from"node:path";import{fileURLToPath as ae}from"node:url";function ie(e){if(e.length===0)return"";let t=e[0]??"";for(let r=1;r<e.length;r++){let o=e[r]??"",s=0,a=Math.min(t.length,o.length);for(;s<a&&t[s]===o[s];)s++;if(t=t.slice(0,s),t==="")break}let n=t.lastIndexOf("/");return n>0?t.slice(0,n):""}var H=["path","uri","absolutePath"],G=new Set(["next","location"]);function L(e,t,n){if(n>8||!e||typeof e!="object")return;if(Array.isArray(e)){for(let s of e)L(s,t,n+1);return}let r=e,o=ue(r);o&&t.push({obj:r,abs:o});for(let[s,a]of Object.entries(r))G.has(s)||a&&typeof a=="object"&&L(a,t,n+1)}function ue(e){let t=e.absolutePath;if(typeof t=="string"&&V.isAbsolute(t))return t;let n=e.uri;if(typeof n=="string"&&n.startsWith("file://"))try{return ae(n)}catch{return}let r=e.path;if(typeof r=="string"&&V.isAbsolute(r))return r}function Y(e){let t=[];for(let s of e)L(s?.data,t,0);if(t.length===0)return;let n=ie(t.map(s=>s.abs));if(n.length<=1)return;let r=n+"/",o=r.length;for(let{obj:s,abs:a}of t)a.startsWith(r)&&(s.path=a.slice(o),delete s.absolutePath,delete s.uri);return ce(e,r),n}function ce(e,t){function n(r,o){if(o>8||!r||typeof r!="object")return;if(Array.isArray(r)){for(let a=0;a<r.length;a++){let i=r[a];if(typeof i=="string"){let u="file://"+t;i.includes(u)?r[a]=i.replaceAll(u,""):i.includes(t)&&(r[a]=i.replaceAll(t,""))}else n(i,o+1)}return}let s=r;for(let a of Object.keys(s)){if(G.has(a))continue;let i=s[a];typeof i=="string"?!H.includes(a)&&i.includes(t)&&(s[a]=i.replaceAll(t,"")):n(i,o+1)}}for(let r of e)n(r?.data,0)}function le(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 s of o)s&&typeof s=="object"&&!Array.isArray(s)&&t.push(s)}}return t}function de(e){return typeof e=="string"&&e!==""||typeof e=="number"||typeof e=="boolean"}var fe=new Set([...H,"owner","repo","name","id","type","kind","reason","isPartial"]);function K(e){let t=le(e);if(t.length<2)return;let n=t[0],r;for(let s of Object.keys(n)){if(fe.has(s))continue;let a=n[s];de(a)&&t.every(i=>i[s]===a)&&((r??={})[s]=a)}if(!r)return;let o=Object.keys(r);for(let s of t)for(let a of o)delete s[a];return r}function _(e,t){let n=e,r=t,o=e.results;if(Array.isArray(o)){let s=o,a=Y(s);a&&(n.base=a);let i=K(s);i&&(n.shared=i),(a||i)&&(r=[...a?["base"]:[],...i?["shared"]:[],...t])}return{text:j(n,[...r]),structuredContent:Q(q(n)??{})}}function w(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)),s=[e.lastIndexOf(`
9
+ `,r-1)+1,e.lastIndexOf("\\n",r-1)+2].filter(i=>i>t&&i<=r),a=Math.max(...s,-1);return a-t>=o?a:r}function ye(e,t,n){let r=1,o=0;for(;o<t&&o<e.length;){let s=w(e,o,n);if(s<=o)break;o=s,r+=1}return o===t?r:Math.floor(t/n)+1}function pe(e,t){if(e.length===0)return 1;let n=0,r=0;for(;r<e.length;){let o=w(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 k(e,t){let n=t?.responseCharLength,r=t?.responseCharOffset??0;if(n===void 0)return{text:e};let o=e.length,s=Math.max(1,n),a=Math.min(Math.max(0,r),o),i=w(e,a,s),u=i<o,c=ye(e,a,s),f=pe(e,s),y=e.slice(a,i);return{text:`${u?`# Response page ${c}/${f}. Next: responseCharOffset=${i}
10
+ `:`# Response page ${c}/${f}.
11
+ `}${y}`,pagination:{scope:"content.text",currentPage:c,totalPages:f,hasMore:u,charOffset:a,charLength:i-a,totalChars:o,...u?{nextCharOffset:i}:{}}}}function S(e,t,n){return t?{...e,responsePagination:{...t,...t.hasMore&&n?{next:n}:{}}}:e}function N(e,t,n,r){if(!r?.hasMore||r.nextCharOffset===void 0)return;let o=t.map(s=>{let{goal:a,reasoning:i,...u}=s;return u});return{tool:e,query:{queries:o,responseCharLength:n?.responseCharLength,responseCharOffset:r.nextCharOffset}}}function g(e,t){if(e===null||typeof e!="object")return!1;if(Array.isArray(e))return e.some(r=>g(r,t));let n=e;return t(n)||Object.values(n).some(r=>g(r,t))}function x(e,t){return e===null||typeof e!="object"?!1:Array.isArray(e)?e.some(n=>x(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 x(r,t)})}function z(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 I(e){return g(e,t=>t.isPartial===!0||t.hasMore===!0||z(t))}function v(e){if(!I(e))return[];if(g(e,i=>i.terminalLimit===!0))return["terminalLimitReached"];let t=g(e,i=>i.hasMore===!0),n=g(e,z),r=g(e,i=>i.isPartial===!0),o=x(e,i=>i.startsWith("next")||i.startsWith("continue")),s=x(e,i=>i.startsWith("expand")||i.startsWith("retry")||i.startsWith("narrow")||i.startsWith("fallback")||i.startsWith("escalate")||i.startsWith("read")||i.includes("search")||i.includes("completeness"));return t&&!o||n&&!s||r&&!o&&!s?["continuationMissing"]:[]}async function W(e,t={}){if(!Array.isArray(e))throw new Error(b.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(b.TIMEOUT_NOT_POSITIVE.message);if(r<=0)throw new Error(b.CONCURRENCY_NOT_POSITIVE.message);let s=e.map((u,c)=>typeof u=="function"?u:()=>Promise.reject(new Error(A.NOT_A_FUNCTION.message(c))));if(r<s.length)return me(s,r,n,o);let a=s.map((u,c)=>X(u,c,n,o));return(await Promise.allSettled(a)).map((u,c)=>u.status==="fulfilled"?u.value:{success:!1,error:u.reason instanceof Error?u.reason:new Error(String(u.reason)),index:c})}async function X(e,t,n,r){let o,s=()=>{o!==void 0&&(clearTimeout(o),o=void 0)};try{let a=new Promise((u,c)=>{o=setTimeout(()=>{c(new Error(A.TIMEOUT.message(t,n)))},n)}),i=await Promise.race([e(),a]);return s(),{success:!0,data:i,index:t}}catch(a){s();let i=a instanceof Error?a:new Error(String(a));if(r)try{r(i,t)}catch(u){}return{success:!1,error:i,index:t}}}async function me(e,t,n,r){let o=new Array(e.length),s=0,a=async()=>{for(;s<e.length;){let u=s++,c=e[u];if(!c){o[u]={success:!1,error:new Error(A.FUNCTION_UNDEFINED.message),index:u};continue}try{let f=await X(c,u,n,r);o[u]=f}catch(f){o[u]={success:!1,error:f instanceof Error?f:new Error(String(f)),index:u}}}},i=[];for(let u=0;u<Math.min(t,e.length);u++)i.push(a());return await Promise.all(i),o}var M=parseInt(process.env.OCTOCODE_BULK_QUERY_TIMEOUT_MS||"60000",10)||6e4,ge=parseInt(process.env.OCTOCODE_TOOL_TIMEOUT_MS||"60000",10)||6e4,Ee=5e3;function he(e,t,n){if(e<=1)return n?Math.max(M,n):M;let r=Math.min(Math.max(t,1),e),o=Math.ceil(e/r),s=Math.floor(ge/o),a=Math.max(Ee,Math.min(s,M));return n?Math.max(a,n):a}async function $(e,t,n,r){let o=[],s=[];if(!e||e.length===0)return{results:o,errors:s};let a=e.map((u,c)=>async()=>{let{value:f,cacheHit:y}=await B(()=>t(u,c));return{result:y&&f.status!=="error"?{...f,cache:1}:f,queryIndex:c,originalQuery:u}});return(await W(a,{timeout:he(e.length,n,r),continueOnError:!0,concurrency:n,onError:(u,c)=>{s.push({queryIndex:c,error:u.message})}})).forEach(u=>{if(u.success&&u.data){let c=u.data.result,f=c&&Object.keys(c).some(p=>p!=="status"&&p!=="error"&&p!=="data");if(c&&c.error===void 0&&(c.data===null||c.data===void 0)&&!f&&c.status!=="error"){s.push({queryIndex:u.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:u.data.result,queryIndex:u.data.queryIndex,originalQuery:u.data.originalQuery})}else u.success&&s.push({queryIndex:u.index,error:"Query produced no result"})}),{results:o,errors:s}}var Te=3;async function Ke(e,t,n,r){let o=n.concurrency??Te,{results:s,errors:a}=await $(e,t,o,n.minQueryTimeoutMs);return Re(n,s,a,e,r)}function Re(e,t,n,r,o){let s=["results","base","shared"],a=["index","status","cache","meta","evidence","diagnostics","data"],i=[...new Set([...s,...a,...e.keysPriority||[]])],u=new Array(r.length);t.forEach(d=>{let m=d.result.status,E=xe(d.result);u[d.queryIndex]={index:d.queryIndex,...m!==void 0?{status:m}:{},...d.result.cache===1?{cache:1}:{},meta:J(e.toolName,d.originalQuery,E,m),data:E}}),n.forEach(d=>{let m=r[d.queryIndex];m&&(u[d.queryIndex]={index:d.queryIndex,status:"error",meta:J(e.toolName,m,{error:d.error},"error"),data:{error:d.error}})});let c=u.filter(d=>d!==void 0);if(e.finalize){let d=e.finalize({queries:r,results:c,config:e}),m=be(d.structuredContent,c),E=_(m,d.keysPriority??i),ne=d.renderText?d.renderText(E.structuredContent):E.text,R=k(ne,o),oe=S(E.structuredContent,R.pagination,N(e.toolName,r,o,R.pagination));return Z(e.toolName,t,n,R.text.length),{content:[{type:"text",text:R.text}],structuredContent:oe,isError:d.isError??(c.length>0&&c.every(se=>se.status==="error"))}}let y=_({results:c},i),p=y.text,T=k(p,o),te=S(y.structuredContent,T.pagination,N(e.toolName,r,o,T.pagination));return Z(e.toolName,t,n,T.text.length),{content:[{type:"text",text:T.text}],structuredContent:te,isError:c.length>0&&c.every(d=>d.status==="error")}}function be(e,t){if(!Array.isArray(e.results))return e;let n=new Map(t.map(s=>[s.index,s])),r=e.shared!==null&&typeof e.shared=="object"&&!Array.isArray(e.shared)?e.shared:void 0,o=e.results.map((s,a)=>{if(s===null||typeof s!="object"||Array.isArray(s))return s;let i=s,u=(typeof i.index=="number"?n.get(i.index):void 0)??t[a];if(!u)return i;let{cache:c,...f}=i,y=i.data!==null&&typeof i.data=="object"&&!Array.isArray(i.data)?i.data:u.data,p=Ae(i.meta??u.meta,r?{...r,...y}:y);return{...f,...u.cache===1?{cache:1}:{},meta:p}});return{...e,results:o}}function J(e,t,n,r){let o=Oe(e,t,n),s=n.confidence,a=r==="error"||s==="low"?"low":s==="high"||s==="medium"?s:o==="provider"||o==="lexical"||o==="syntactic"?"medium":"high",i=I(n),u=[...typeof n.errorCode=="string"?[n.errorCode]:[],...v(n)],c=u.length>0||i;return{evidence:{kind:o,confidence:a},...c?{diagnostics:{...u.length>0?{codes:u}:{},...i?{partial:!0}:{}}}:{}}}function Ae(e,t){let{diagnostics:n,...r}=e,o=[...(n?.codes??[]).filter(i=>i!=="continuationMissing"&&i!=="terminalLimitReached"),...v(t)],s=I(t),a=o.length>0||s||(n?.hints?.length??0)>0;return{...r,...a?{diagnostics:{...o.length>0?{codes:o}:{},...n?.hints?.length?{hints:n.hints}:{},...s?{partial:!0}:{}}}:{}}}function Oe(e,t,n){if(e==="localAnalyzeGraph")return"syntactic";if(e==="lspGetSemantics"){let r=n.lsp?.source;return r&&["native","native-graph-facts","markdown"].includes(r)?"syntactic":"semantic"}if(e==="local.text")return t.mode==="structural"?"structural":"lexical";if(e==="localSearch"){let r=t.operation;return r==="structural"?"structural":r==="text"?"lexical":"exact"}return e.startsWith("gh")||e.startsWith("github.")||e==="npmSearch"?"provider":"exact"}function Z(e,t,n,r){let o=t.reduce((s,a)=>s+(D(a.result)??P(a.result)),0)+n.reduce((s,a)=>s+P(a),0);try{F(e,o,r)}catch{}}function xe(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}var l={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"};var ee={[l.PATH_VALIDATION_FAILED]:{code:l.PATH_VALIDATION_FAILED,category:"VALIDATION",description:"Path validation failed - invalid or unsafe path",recoverability:"user-action-required"},[l.FILE_ACCESS_FAILED]:{code:l.FILE_ACCESS_FAILED,category:"FILE_SYSTEM",description:"Cannot access file - may not exist or lack permissions",recoverability:"unrecoverable"},[l.FILE_READ_FAILED]:{code:l.FILE_READ_FAILED,category:"FILE_SYSTEM",description:"Failed to read file contents",recoverability:"unrecoverable"},[l.FILE_TOO_LARGE]:{code:l.FILE_TOO_LARGE,category:"FILE_SYSTEM",description:"File exceeds size limits for operation",recoverability:"user-action-required"},[l.BINARY_FILE_UNSUPPORTED]:{code:l.BINARY_FILE_UNSUPPORTED,category:"FILE_SYSTEM",description:"Binary file is not supported by text content reader",recoverability:"user-action-required"},[l.NO_MATCHES]:{code:l.NO_MATCHES,category:"SEARCH",description:"Search pattern found no matches",recoverability:"user-action-required"},[l.OUTPUT_TOO_LARGE]:{code:l.OUTPUT_TOO_LARGE,category:"PAGINATION",description:"Output exceeds size limits",recoverability:"user-action-required"},[l.COMMAND_NOT_AVAILABLE]:{code:l.COMMAND_NOT_AVAILABLE,category:"EXECUTION",description:"Required CLI command is not installed or not in PATH",recoverability:"user-action-required"},[l.COMMAND_EXECUTION_FAILED]:{code:l.COMMAND_EXECUTION_FAILED,category:"EXECUTION",description:"System command execution failed",recoverability:"unrecoverable"},[l.COMMAND_TIMEOUT]:{code:l.COMMAND_TIMEOUT,category:"EXECUTION",description:"Command execution timed out",recoverability:"user-action-required"},[l.TOOL_EXECUTION_FAILED]:{code:l.TOOL_EXECUTION_FAILED,category:"EXECUTION",description:"Generic tool execution failure",recoverability:"unrecoverable"},[l.LSP_SERVER_UNAVAILABLE]:{code:l.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 h=class e extends Error{errorCode;category;recoverability;context;constructor(t,n,r,o){let s=ee[t],a=n||s.description;super(a,o?{cause:o}:void 0),this.name="ToolError",this.errorCode=t,this.category=s.category,this.recoverability=s.recoverability,this.context=r,o&&o.stack&&(this.stack=`${this.stack}
12
+ 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 U(e){return e instanceof h}function re(e,t=l.TOOL_EXECUTION_FAILED,n){if(U(e))return e;if(e instanceof Error)return new h(t,e.message,n,e);let r=String(e);return new h(t,r,n)}function Ie(e){return typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&("type"in e||"status"in e||"scopesSuggestion"in e)}function C(e,t,n={}){let{extra:r}=n,o={status:"error"};if(Ie(e))o.error=e;else if(U(e))o.error=e.message,o.errorCode=e.errorCode;else if(typeof e=="string")o.error=e;else if(e instanceof Error){let s=re(e);o.error=s.message,o.errorCode=s.errorCode}else o.error="Unknown error occurred";if(r){let{hints:s,...a}=r;Object.assign(o,a)}return n.rawResponse===void 0?o:O(o,n.rawResponse)}function Ce(e,t,n={}){let r=e.safeParse(t);if(r.success)return{ok:!0,data:r.data};let o=r.error.issues.map(a=>a.message).join("; "),s=n.prefix===!0?`Validation error: ${o}`:o;return{ok:!1,error:C(s,t,{toolName:n.toolName})}}function or(e,t,n,r,o){let s=n?void 0:"empty",a={...s!==void 0?{status:s}:{},...t};return o?.rawResponse===void 0?a:O(a,o.rawResponse)}function sr(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 C(n,t,{rawResponse:e.rawResponseChars??e.data??(e.error?e:void 0)})}function ar(e,t,n,r){let o=C(e,t,{toolName:r});return n&&typeof o.error=="string"&&(o.error=`${n}: ${o.error}`),o}export{Y as a,K as b,Ke as c,l as d,h as e,C as f,Ce as g,or as h,sr as i,ar as j};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __createRequire } from 'module';
3
+ import { fileURLToPath as __fileURLToPath } from 'url';
4
+ import { dirname as __dirname_fn } from 'path';
5
+ const require = __createRequire(import.meta.url);
6
+ const __filename = __fileURLToPath(import.meta.url);
7
+ const __dirname = __dirname_fn(__filename);
8
+ import{a as d,b as p}from"./chunk-OA6NU4KO.js";import{a as F,b as z}from"./chunk-DKGYPFGX.js";import{a as m,b as q,e as R,f as b}from"./chunk-USZL65FN.js";import{D as u,E as ee,F as te,G as c,J as h,K as I,L as P,M as r,l as w,r as E,s as H}from"./chunk-BMM5H6QF.js";import{z as B}from"zod";import{z as i}from"zod";var fe={pageSize:"Commits returned per page (walk with page).",owner:"Repository owner.",repo:"Repository name.",keywords:"Commit-message words or phrases on the default branch; cannot combine with path, branch, compare, or diffs.",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."},Z=r(fe,{...P,owner:i.string(),repo:i.string(),keywords:i.array(i.string().trim().min(1)).min(1).optional(),path:i.string().optional(),since:i.string().optional(),until:i.string().optional(),branch:i.string().optional(),author:i.string().optional(),committer:i.string().optional(),base:i.string().optional(),head:i.string().optional(),pageSize:u(1,100).optional().default(30),includeDiff:i.boolean().optional().default(!1),page:te(),filePage:c(),charOffset:h(),charLength:I()}).superRefine((e,t)=>{v(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."})});function v(e,t){if(e.keywords?.length)for(let l of["path","branch","base","head","includeDiff"])e[l]!==void 0&&e[l]!==!1&&t.addIssue({code:"custom",path:[l],message:`Commit-message keywords cannot be combined with ${l}; search covers the default branch. Use history without keywords for path/ref filters and ghGetHistoryItem for diffs.`})}import{z as a}from"zod";import{z as o}from"zod";var C={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 within the current provider batch.",reviewPage:"Reviews page within the current provider batch; copy next.nextReviewsPage.",collectionPages:"Provider batch positions from next.*; copy unchanged. Zero marks an exhausted source. Each call fetches at most one page per requested source.",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":"Select discussion and/or reviewInline explicitly; omitted surfaces are not fetched.","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" compacts PR body/comments/reviews and trims diff context; "none" preserves selected text after redaction. Match reads retain source text. No symbols mode.',pageSize:"PRs or detail-list items returned per page."},x=r(C,{...P,keywords:o.array(o.string()).optional(),prNumber:u(1,w).optional(),owner:o.string().optional(),repo:o.string().optional(),concise:o.boolean().optional(),state:o.enum(["open","closed","merged"]).optional(),assignee:o.string().optional(),author:o.string().optional(),commenter:o.string().optional(),mentions:o.string().optional(),"review-requested":o.string().optional(),"reviewed-by":o.string().optional(),label:o.array(o.string()).optional(),checks:o.enum(["success","failure","pending"]).optional(),review:o.enum(["approved","changes_requested","required","none"]).optional(),head:o.string().optional(),base:o.string().optional(),created:o.string().optional(),updated:o.string().optional(),closed:o.string().optional(),"merged-at":o.string().optional(),comments:o.string().optional(),reactions:o.string().optional(),draft:o.boolean().optional(),match:o.array(o.enum(["title","body","comments"])).optional(),sort:o.enum(["created","updated","best-match","comments","reactions"]).optional(),order:o.enum(["asc","desc"]).optional(),pageSize:u(1,E).default(H),page:c(),archived:o.boolean().optional(),filePage:c(),commentPage:c(),commitPage:c(),reviewPage:c(),collectionPages:o.object({changedFiles:o.number().int().min(0).max(30).optional(),discussion:o.number().int().min(0).max(Number.MAX_SAFE_INTEGER).optional(),inline:o.number().int().min(0).max(Number.MAX_SAFE_INTEGER).optional(),reviews:o.number().int().min(0).max(Number.MAX_SAFE_INTEGER).optional(),commits:o.number().int().min(0).max(5).optional()}).strict().optional(),content:r(C,{body:o.literal(!0).optional(),changedFiles:o.literal(!0).optional(),patches:r(C,{mode:o.enum(["selected","all"]),files:ee,ranges:o.array(r(C,{file:o.string(),additions:o.array(u(1,w)).optional(),deletions:o.array(u(1,w)).optional()},"content.patches.ranges")).optional()},"content.patches").optional(),comments:r(C,{discussion:o.literal(!0).optional(),reviewInline:o.literal(!0).optional(),includeBots:o.literal(!0).optional(),file:o.string().optional()},"content.comments").refine(e=>e.discussion===!0||e.reviewInline===!0,{message:"content.comments needs discussion:true and/or reviewInline:true."}).optional(),reviews:o.literal(!0).optional(),commits:r(C,{includeFiles:o.literal(!0).optional()},"content.commits").optional()},"content").optional(),matchString:o.string().optional(),commentBodyOffset:h(),charOffset:h(),charLength:I(),minify:o.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let l=["content","filePage","commentPage","commitPage","reviewPage","collectionPages","matchString","commentBodyOffset","charOffset","charLength"],S=["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 g of l)e[g]!==void 0&&t.addIssue({code:"custom",message:`${g} requires prNumber detail mode.`,path:[g]});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 g of S)e[g]!==void 0&&t.addIssue({code:"custom",message:`${g} is only available in list mode.`,path:[g]})}e.content&&Object.keys(e.content).length===0&&t.addIssue({code:"custom",message:"content needs at least one selector.",path:["content"]});let s=e.content?.patches;if(!s)return;let pe=(s.files?.length??0)>0,he=(s.ranges?.length??0)>0,Y=pe||he;s.mode==="selected"&&!Y&&t.addIssue({code:"custom",message:'content.patches.mode="selected" requires non-empty files or ranges.',path:["content","patches","files"]}),s.mode!=="selected"&&Y&&t.addIssue({code:"custom",message:'content.patches.files and content.patches.ranges require mode="selected".',path:["content","patches","mode"]})});import{z as n}from"zod";var U={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:"Character offset in the selected issue body or comment bodies; follow next calls.",charLength:"Characters per selected body window (default 12000); commentPage selects comment items independently.",commentBodyOffset:"Comment-body continuation offset from nextQuery.",minify:"Search results contain metadata only; this setting does not alter metadata. Exact issue reads do not accept minify.",pageSize:"Issues or detail comments returned per page."},O=r(U,{...P,owner:n.string(),repo:n.string(),keywords:n.array(n.string()).optional(),issueNumber:u(1,w).optional(),concise:n.boolean().optional(),state:n.enum(["open","closed"]).optional(),assignee:n.string().optional(),author:n.string().optional(),commenter:n.string().optional(),mentions:n.string().optional(),label:n.array(n.string()).optional(),created:n.string().optional(),updated:n.string().optional(),closed:n.string().optional(),comments:n.string().optional(),reactions:n.string().optional(),match:n.array(n.enum(["title","body","comments"])).optional(),sort:n.enum(["created","updated","best-match","comments","reactions"]).optional(),order:n.enum(["asc","desc"]).optional(),pageSize:u(1,E).default(H),page:c(),archived:n.boolean().optional(),commentPage:c(),content:r(U,{body:n.literal(!0).optional(),comments:r(U,{discussion:n.literal(!0).optional(),includeBots:n.literal(!0).optional()},"content.comments").optional()},"content").optional(),matchString:n.string().optional(),commentBodyOffset:h(),charOffset:h(),charLength:I(),minify:n.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let l=["content","commentPage","matchString","commentBodyOffset","charOffset","charLength"],S=["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 s of l)e[s]!==void 0&&t.addIssue({code:"custom",message:`${s} requires issueNumber detail mode.`,path:[s]});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 s of S)e[s]!==void 0&&t.addIssue({code:"custom",message:`${s} is only available in list mode.`,path:[s]})}e.content&&Object.keys(e.content).length===0&&t.addIssue({code:"custom",message:"content needs at least one selector.",path:["content"]})});function N(e,t,l){let S=e.safeParse(t);if(!S.success)for(let s of S.error.issues)l.addIssue({code:"custom",message:s.message,path:s.path})}function ne(e){let t=e;for(;t instanceof a.ZodOptional||t instanceof a.ZodDefault;)t=t.unwrap();if(!(t instanceof a.ZodObject))throw new TypeError("Expected an object schema");return t}function se(e){let t=e;for(;t instanceof a.ZodOptional||t instanceof a.ZodDefault;)t=t.unwrap();if(!(t instanceof a.ZodArray))throw new TypeError("Expected an array schema");return t}function _(e,t){return e.description?t.describe(e.description):t}var ae={pageSize:m(1,100).optional().default(30),page:m(1,1e3).optional()},re={...ae,filePage:m(1,1e3).optional(),commentPage:m(1,1e3).optional(),commitPage:m(1,1e3).optional(),charOffset:R.optional(),commentBodyOffset:R.optional(),charLength:m(1,1e5).optional()},st=F(x,re).superRefine((e,t)=>N(x,e,t)),L=z(x,re),ie=d(L.shape,"content"),ce=ne(ie),me=d(ce.shape,"patches"),f=ne(me),de=_(d(f.shape,"mode"),a.literal("selected")),ye=_(d(f.shape,"mode"),a.literal("all")),Se=_(d(f.shape,"files"),se(d(f.shape,"files")).min(1)),we=_(d(f.shape,"ranges"),se(d(f.shape,"ranges")).min(1)),Ie=a.object({mode:de,files:Se,ranges:d(f.shape,"ranges")}).strict(),Pe=a.object({mode:de,files:d(f.shape,"files"),ranges:we}).strict(),Re=a.object({mode:ye}).strict(),ve=ce.extend({patches:_(me,a.union([Ie,Pe,Re]).optional())}),X=L.omit({minify:!0,prNumber:!0,filePage:!0,commentPage:!0,commitPage:!0,reviewPage:!0,collectionPages:!0,content:!0,matchString:!0,commentBodyOffset:!0,charOffset:!0,charLength:!0}),Ce=X.superRefine((e,t)=>N(x,e,t)),D=L.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:p(L.shape,"owner"),repo:p(L.shape,"repo"),prNumber:p(L.shape,"prNumber"),content:_(ie,ve.optional())}),xe=D.superRefine((e,t)=>N(x,e,t)),at=b(a.union([Ce,xe])),le={...ae,commentPage:m(1,1e3).optional(),charOffset:R.optional(),commentBodyOffset:R.optional(),charLength:m(1,1e5).optional()},rt=F(O,le).superRefine((e,t)=>N(O,e,t)),j=z(O,le),Q=j.omit({minify:!0,issueNumber:!0,commentPage:!0,content:!0,matchString:!0,commentBodyOffset:!0,charOffset:!0,charLength:!0}),Oe=Q.superRefine((e,t)=>N(O,e,t)),G=j.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:p(j.shape,"issueNumber")}),Le=G.superRefine((e,t)=>N(O,e,t)),it=b(a.union([Oe,Le])),ue={page:q.default(1),pageSize:m(1,100).optional().default(30),filePage:q.optional(),charOffset:R.optional(),charLength:m(1,1e5).optional()};function Ne(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 ct=F(Z,ue).superRefine(Ne).superRefine(v),M=z(Z,ue),$=M.omit({base:!0,head:!0}),_e=$.superRefine(v),A=M.omit({keywords:!0,branch:!0,since:!0,until:!0,author:!0,committer:!0}).extend({base:p(M.shape,"base"),head:p(M.shape,"head")}),Ae=A,mt=b(a.union([_e,Ae]));var y=e=>B.literal(e).describe("Required operation selector."),T=e=>p(e,"owner"),k=e=>p(e,"repo"),Te=X.extend({operation:y("pullRequests")}).strict(),ke=Q.extend({operation:y("issues"),owner:T(Q.shape),repo:k(Q.shape)}).strict(),K=$.omit({includeDiff:!0,filePage:!0,charOffset:!0,charLength:!0}),Qe=K.extend({operation:y("commits"),owner:T(K.shape),repo:k(K.shape)}).strict().superRefine(v),Be=B.discriminatedUnion("operation",[Te,ke,Qe]).describe("Search or list GitHub pull requests, issues, or commits using one strict operation branch."),gt=b(Be),W=D.omit({prNumber:!0}),Ee=W.extend({operation:y("pullRequest"),owner:T(W.shape),repo:k(W.shape),number:D.shape.prNumber}).strict(),J=G.omit({issueNumber:!0,matchString:!0,commentBodyOffset:!0,minify:!0}),He=J.extend({operation:y("issue"),owner:T(J.shape),repo:k(J.shape),number:G.shape.issueNumber}).strict(),V=A.omit({base:!0,head:!0,page:!0}),Fe=V.extend({operation:y("commit"),owner:T(V.shape),repo:k(V.shape),ref:B.string().min(1).describe("Commit SHA or ref to retrieve exactly."),fileBatch:B.number().int().min(1).max(30).optional().describe("Provider file batch from next.nextFilePage; copy unchanged.")}).strict(),ze=A.extend({operation:y("compare"),owner:T(A.shape),repo:k(A.shape)}).strict(),Me=B.discriminatedUnion("operation",[Ee,He,Fe,ze]).describe("Retrieve one GitHub pull request, issue, commit, or ref comparison using one strict operation branch."),bt=b(Me);export{x as a,Be as b,gt as c,Me as d,bt as e};