@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,14 @@
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 Ie,b as et,d as re}from"./chunk-ZUNPQVMO.js";import{a as gt,c as ft,d as ht}from"./chunk-AWZG43MA.js";import{a as pt}from"./chunk-7DYE654A.js";import"./chunk-OA6NU4KO.js";import{a as mt,c as dt}from"./chunk-EOLHXX5I.js";import{A as ot,B as rt,C as z,E as st,F as fe,G as at,H as ct,v as H,w as B,y as nt,z as M}from"./chunk-RRSY2ZPX.js";import"./chunk-CBIKUVP6.js";import"./chunk-Y5OCKUQX.js";import{d as O,l as _}from"./chunk-CBCZVCTZ.js";import{a as Je,b as Ze}from"./chunk-DKGYPFGX.js";import{a as E,b as Ye,e as ke,f as Ve}from"./chunk-USZL65FN.js";import{c as ut,f as F,g as he,h as T,j as lt}from"./chunk-ZSXRT7JL.js";import{D as K,E as We,F as qe,G as ge,J as Ae,K as Ke,L as Xe,M as $,X as tt,ea as it,f as k,g as v,l as ie,r as Ue,s as $e}from"./chunk-BMM5H6QF.js";function ve(e){return typeof e=="string"?{}:{isPartial:!0,terminalLimit:!0,patchUnavailable:{reason:"providerOmittedPatch"}}}function Fe(e,n,o){if(e===void 0)return;if(!o&&!n)return{patch:e};let i=e.length,t=Math.min(Math.max(0,n??0),i),r=Math.max(1,o??i),s=Math.min(t+r,i),a=s<i;return{patch:e.slice(t,s),patchPagination:{charOffset:t,charLength:s-t,totalChars:i,hasMore:a,...a?{nextCharOffset:s}:{}}}}function Q(e,n){let o=e.map(m=>{let f=m.patch!==void 0?Fe(m.patch,n.charOffset,n.charLength):void 0;return{filename:m.filename,...ve(m.patch),status:m.status,additions:m.additions,deletions:m.deletions,...f!==void 0?{patch:f.patch,...f.patchPagination?{patchPagination:f.patchPagination}:{}}:{},...m.previous_filename?{previousFilename:m.previous_filename}:{}}}),i=Math.max(1,n.filePage??1),t=Math.max(1,n.itemsPerPage??20),r=o.length,s=Math.max(1,Math.ceil(r/t)),a=Math.min(i,s),c=(a-1)*t;return{files:o.slice(c,c+t),filesPagination:{currentPage:a,totalPages:s,itemsPerPage:t,totalFiles:r,hasMore:a<s,...a<s&&a<1e3?{nextFilePage:a+1}:{},...a<s&&a>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}}async function Pt(e,n){try{let o=await ct({owner:e.owner,repo:e.repo,ref:e.ref,fileBatch:e.fileBatch},n),i=o.data,t=i.files??[],r=e.path,s=r?t.filter(P=>P.filename===r||P.previous_filename===r||P.filename.startsWith(r.endsWith("/")?r:`${r}/`)):t,a=i.commit.author,c=i.commit.committer,u=i.author?.login,m=i.committer?.login,f=i.commit.message,l={type:"commit",owner:e.owner,repo:e.repo,ref:e.ref,sha:i.sha,message:f,messageHeadline:f.split(`
9
+ `)[0]??f,author:{name:a?.name??"unknown",email:a?.email??"",...u?{login:u}:{},...a?.date?{date:a.date}:{}},...c?{committer:{name:c.name??"unknown",email:c.email??"",...m?{login:m}:{},...c.date?{date:c.date}:{}}}:{},parents:i.parents.map(P=>P.sha),...i.stats?.additions===void 0?{}:{additions:i.stats.additions},...i.stats?.deletions===void 0?{}:{deletions:i.stats.deletions},changedFiles:s.length,changedFilesCountScope:"providerBatch",...o.collectionState.hasMore?{isPartial:!0,partialReasons:["providerBatch"]}:{},...o.terminalLimit?{isPartial:!0,terminalLimit:!0,partialReasons:["providerFileLimit"],providerLimit:{reason:"providerFileLimit",maxFiles:at}}:{}};if(!e.includeDiff)return{data:{...l,...o.collectionState.hasMore?{filesPagination:{currentPage:1,totalPages:1,itemsPerPage:100,totalFiles:s.length,hasMore:!0,nextFilePage:1}}:{}},status:200};let d=Q(s,{filePage:e.filePage,itemsPerPage:e.itemsPerPage,charOffset:e.charOffset,charLength:e.charLength??12e3}),y={...d.filesPagination,countScope:"providerBatch",fileBatch:o.collectionState.page,...!d.filesPagination.hasMore&&o.collectionState.hasMore?{hasMore:!0,nextFilePage:1,nextFileBatch:o.collectionState.page+1}:{}};return{data:{...l,...d,filesPagination:y},status:200}}catch(o){return M(o)}}var Vt=/^(\d+)\s*([hdwmy])$/i;function X(e){let n=e.trim(),o=Vt.exec(n);if(o){let i=Number(o[1]),t=o[2].toLowerCase(),r=new Date;switch(t){case"h":r.setUTCHours(r.getUTCHours()-i);break;case"d":r.setUTCDate(r.getUTCDate()-i);break;case"w":r.setUTCDate(r.getUTCDate()-i*7);break;case"m":r.setUTCMonth(r.getUTCMonth()-i);break;case"y":r.setUTCFullYear(r.getUTCFullYear()-i);break}return{value:r.toISOString()}}return Number.isNaN(Date.parse(n))?{warning:`"${e}" is not a valid date or relative window \u2014 use e.g. "30d", "2w", "6m", "1y", or an ISO date like "2026-01-01". Filter skipped.`}:{value:n}}var Jt=5;function pe(e){return e?e.includes('rel="next"'):!1}async function Zt(e,n,o){if(e.length===0)return[];let i=new Array(e.length),t=0,r=Array.from({length:Math.min(n,e.length)},async()=>{for(;;){let s=t++;if(s>=e.length)return;i[s]=await o(e[s],s)}});return await Promise.all(r),i}async function yt(e,n,o){let i=await H(n),t=O("gh-api-history",{type:e.type,owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,since:e.since,until:e.until,author:e.author,committer:e.committer,page:e.page,perPage:e.perPage,filePage:e.filePage,itemsPerPage:e.itemsPerPage,includeDiff:e.includeDiff,charOffset:e.charOffset,charLength:e.charLength,auth:i},o);return _(t,()=>en(e,n),{shouldCache:r=>"data"in r&&!("error"in r)})}async function en(e,n){try{let o=await B(n),i=[],t=e.since?X(e.since):void 0,r=e.until?X(e.until):void 0;t?.warning&&i.push(`since ${t.warning}`),r?.warning&&i.push(`until ${r.warning}`);let s={owner:e.owner,repo:e.repo,per_page:e.perPage,page:e.page,...e.path?{path:e.path}:{},...e.branch?{sha:e.branch}:{},...t?.value?{since:t.value}:{},...r?.value?{until:r.value}:{},...e.author?{author:e.author}:{},...e.committer?{committer:e.committer}:{}},a=await o.rest.repos.listCommits(s),c=a.headers.link,u=pe(c),m=a.data.map(p=>{let h=p.commit.author,w=p.commit.committer,x=w?.date??h?.date??"",R=p.commit.message,C=R.split(`
10
+ `)[0]??R,I=R.slice(C.length).trim(),G=I.length>500,A=I.length===0?C:`${C}
11
+ ${G?`${I.slice(0,500)}\u2026`:I}`,Yt=w?.name===h?.name&&w?.email===h?.email||p.committer?.login==="web-flow";return{sha:p.sha,date:x,...A===C?{}:{message:A},...G?{messageTruncated:!0}:{},messageHeadline:C,author:{name:h?.name??"unknown",email:h?.email??"",...p.author?.login?{login:p.author.login}:{}},...w&&!Yt?{committer:{name:w.name??"unknown",email:w.email??"",...p.committer?.login?{login:p.committer.login}:{}}}:{}}});m.length===0&&(t?.value!==void 0||r?.value!==void 0)&&i.push("no commits matched the since/until window \u2014 GitHub filters by committer date (not author date; rebases and squash-merges reset it), and a path-scoped walk does not follow renames. Widen or drop since/until and inspect commit dates directly.");let f={currentPage:e.page,perPage:e.perPage,hasMore:u,...u?{nextPage:e.page+1}:{}};if(!e.includeDiff)return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:m,pagination:f,...i.length?{warnings:i}:{}},status:200};let l=!1,d=!1,y=await Zt(m,Jt,async(p,h)=>{try{let w=a.data[h]?.sha??p.sha,x=await o.rest.repos.getCommit({owner:e.owner,repo:e.repo,ref:w});if(e.type==="file"&&e.path){let R=e.path,C=x.data.files?.find(A=>A.filename===R||A.previous_filename===R);if(C){let A=C.patch!==void 0?Fe(C.patch,e.charOffset,e.charLength):void 0;return{...p,additions:C.additions,deletions:C.deletions,status:C.status,...A!==void 0?{patch:A.patch,...A.patchPagination?{patchPagination:A.patchPagination}:{}}:{},...C.previous_filename?{previousFilename:C.previous_filename}:{}}}let I=R.endsWith("/")?R:`${R}/`,G=(x.data.files??[]).filter(A=>A.filename.startsWith(I));return G.length>0?(l=!0,{...p,...Q(G,e)}):(d=!0,p)}else{let R=e.path,C=(x.data.files??[]).filter(I=>!R||I.filename.startsWith(R));return{...p,...Q(C,e)}}}catch{}return p}),P=[];l&&P.push(`path '${e.path}' matched no single file in these commits but matches files under it \u2014 treated as a directory filter and returned per-commit changed files (append '/' to select directory mode explicitly).`),d&&P.push(`includeDiff: some commits contain no file matching '${e.path}' (rename or shallow diff?) \u2014 those commits are listed without a diff.`);let b=[...i,...P];return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:y,pagination:f,...b.length?{warnings:b}:{}},status:200}}catch(o){return M(o)}}async function bt(e,n){try{let{owner:o,repo:i,page:t,perPage:r}=e;if(!/^[\w.-]+$/.test(o)||!/^[\w.-]+$/.test(i))return{error:"Commit search requires one repository owner and name.",type:"http",status:400};if((t-1)*r>=1e3)return{error:"GitHub commit search exposes at most 1000 matches. Narrow keywords or date bounds before requesting this page.",type:"http",status:400};let s=e.since?X(e.since):void 0,a=e.until?X(e.until):void 0;if(s?.warning||a?.warning)return{error:`Invalid ${s?.warning?"since":"until"} date for commit search. Use an ISO date or relative window such as "30d".`,type:"http",status:400};let c=[...e.keywords.map(h=>JSON.stringify(h)),`repo:${o}/${i}`];for(let h of["author","committer"]){let w=e[h];w&&c.push(`${h}${w.includes("@")?"-email":""}:${JSON.stringify(w)}`)}if(s?.value||a?.value){let h=s?.value&&a?.value?`${s.value}..${a.value}`:s?.value?`>=${s.value}`:`<=${a.value}`;c.push(`committer-date:${h}`)}let u=await B(n),m={q:c.join(" "),page:t,per_page:r,sort:"committer-date",order:"desc"},f=await H(n),l=await _(O("gh-commit-search",{...m,auth:f}),()=>u.rest.search.commits(m),{shouldCache:h=>!h.data.incomplete_results}),{items:d,total_count:y,incomplete_results:P}=l.data,b=d.map(h=>{let w=h.commit.message.split(`
12
+ `)[0]??"",x=h.commit.message.slice(w.length).trim();return{sha:h.sha,url:h.html_url,messageHeadline:w,...x?{message:`${w}
13
+ ${x.slice(0,500)}`}:{},...x.length>500?{messageTruncated:!0}:{},date:h.commit.committer?.date??h.commit.author?.date??"",author:{name:h.commit.author?.name??"unknown",email:h.commit.author?.email??"",...h.author?.login?{login:h.author.login}:{}}}}),p=t*r<Math.min(y,1e3);return{status:200,rawResponseChars:it(l.data),data:{type:"commits",owner:o,repo:i,scope:"defaultBranch",commits:b,totalCount:y,incompleteResults:P,pagination:{page:t,perPage:r,hasMore:p,...p?{nextPage:t+1}:{},totalMatchesCapped:y>1e3}}}}catch(o){return M(o)}}async function tn(e,n,o){let i=null;if(e.permalink_url)try{i=decodeURIComponent(new URL(e.permalink_url).pathname.match(/\/compare\/([^/]+)$/)?.[1]??"").match(/^((?:[\w.-]+:)?[a-f\d]{7,40})\.\.\.((?:[\w.-]+:)?[a-f\d]{7,40})$/i)}catch{}if(!i)return{base:n.base,head:n.head};let t=[...new Set([e.base_commit?.sha,...(e.commits??[]).map(c=>c.sha),n.base.split(":").at(-1),n.head.split(":").at(-1)].filter(c=>typeof c=="string"&&/^[a-f\d]{40}$/i.test(c)).map(c=>c.toLowerCase()))],r=async c=>{let u=c.split(":").at(-1).toLowerCase(),m=c.slice(0,-u.length);if(u.length===40)return m+u;let f=t.filter(d=>d.startsWith(u)),l=f.length===1?f[0]:(await pt(n.owner,n.repo,u,o)).commitSha;return m+l},[s,a]=await Promise.all([r(i[1]),r(i[2])]);return{base:s,head:a}}async function wt(e,n){try{let o=await B(n),i=e.page??1,t=Math.min(100,Math.max(1,e.itemsPerPage??30)),r={owner:e.owner,repo:e.repo,basehead:`${e.base}...${e.head}`,per_page:t,page:i},s=await H(n),a=O("gh-compare-page",{...r,auth:s}),c=await _(a,()=>o.rest.repos.compareCommitsWithBasehead(r)),u=c.data,m=await tn(u,e,n),f=(u.commits??[]).map(h=>({sha:h.sha,messageHeadline:(h.commit.message??"").split(`
14
+ `)[0]??"",author:h.commit.author?.name??h.author?.login??"unknown",date:h.commit.author?.date??""})),l=u.files??[],d=c.headers?.link?.includes('rel="next"')===!0||i*t<u.total_commits,y=l.length>=300,P=d&&i>=1e3,b=e.path?l.filter(h=>h.filename===e.path):l,p;if(e.includeDiff&&i===1){let h=Q(b,{filePage:e.filePage,itemsPerPage:e.itemsPerPage,charOffset:e.charOffset,charLength:e.charLength});p={files:h.files,filesPagination:h.filesPagination}}else p=i===1?{changedFiles:b.length}:{};return{data:{type:"compare",owner:e.owner,repo:e.repo,...m,status:u.status,aheadBy:u.ahead_by,behindBy:u.behind_by,totalCommits:u.total_commits,commits:f,pagination:{currentPage:i,perPage:t,hasMore:d,...d&&!P?{nextPage:i+1}:{}},...d||y?{isPartial:!0}:{},...y||P?{terminalLimit:!0,partialReasons:[...y?["providerFileLimit"]:[],...P?["schemaPageLimit"]:[]],providerLimit:{reason:y?"providerFileLimit":"schemaPageLimit",...y?{maxFiles:300}:{},...P?{maxPage:1e3}:{}}}:{},...p},status:200}}catch(o){return M(o)}}function D(e){return Object.fromEntries(Object.entries(e).filter(([,n])=>n!==void 0))}function Le(e,n){return D(Object.fromEntries(n.map(o=>[o,e[o]])))}function se(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function W(e){return e===!0?!0:void 0}function nn(e){if(!Array.isArray(e))return;let n=e.flatMap(o=>{if(!se(o)||typeof o.file!="string")return[];let i=Array.isArray(o.additions)?o.additions.filter(r=>typeof r=="number"):void 0,t=Array.isArray(o.deletions)?o.deletions.filter(r=>typeof r=="number"):void 0;return[D({file:o.file,...i?.length?{additions:i}:{},...t?.length?{deletions:t}:{}})]});return n.length>0?n:void 0}function Y(e){if(!se(e))return;let n=se(e.comments)?D({discussion:W(e.comments.discussion),reviewInline:W(e.comments.reviewInline),includeBots:W(e.comments.includeBots),file:typeof e.comments.file=="string"?e.comments.file:void 0}):void 0,o=se(e.commits)?D({includeFiles:W(e.commits.includeFiles)}):void 0,i=se(e.patches)?D({mode:e.patches.mode==="all"||e.patches.mode==="selected"?e.patches.mode:void 0,files:Array.isArray(e.patches.files)?e.patches.files.filter(r=>typeof r=="string"):void 0,ranges:nn(e.patches.ranges)}):void 0,t=D({body:W(e.body),changedFiles:W(e.changedFiles),...i&&Object.keys(i).length>0?{patches:i}:{},...n&&Object.keys(n).length>0?{comments:n}:{},reviews:W(e.reviews),...o?{commits:o}:{}});return Object.keys(t).length>0?t:void 0}function Rt(e,n,o={}){let i={...e,...o},t=Y(e.content),r=Y(o.content),s=t||r?{...r??{},...t??{}}:void 0;return D({operation:"pullRequest",owner:e.owner,repo:e.repo,number:n,...Le(i,["pageSize","filePage","commentPage","commitPage","reviewPage","collectionPages","charOffset","commentBodyOffset","charLength","matchString","minify"]),...s?{content:s}:{}})}function Ct(e,n={}){let o={...e,...n};return D({operation:"commit",...Le(o,["owner","repo","ref","includeDiff","fileBatch","path","filePage","pageSize","charOffset","charLength"])})}var on={pullRequests:["keywords","owner","repo","concise","state","assignee","author","commenter","mentions","review-requested","reviewed-by","label","checks","review","head","base","created","updated","closed","merged-at","comments","reactions","draft","match","sort","order","archived","minify","pageSize"],issues:["owner","repo","keywords","concise","state","author","assignee","commenter","mentions","label","created","updated","closed","comments","reactions","match","sort","order","archived","minify","pageSize"],commits:["keywords","owner","repo","path","since","until","branch","author","committer","pageSize"]};function Oe(e,n,o){return{operation:n,...Le(e,on[n]),page:o}}function V(e,n){let o=e.filesPagination,i=e.pagination,r=(Array.isArray(e.files)?e.files:[]).find(u=>typeof u?.patchPagination?.nextCharOffset=="number"),s={},a=n.operation==="commit"?Ct(n,typeof e.sha=="string"?{ref:e.sha}:{}):n.operation==="compare"&&typeof e.base=="string"&&typeof e.head=="string"?{...n,base:e.base,head:e.head}:n,c=(u,m)=>({tool:v,query:Object.fromEntries(Object.entries({...a,...u}).filter(([,f])=>f!==void 0)),why:m,confidence:"exact"});return typeof i?.nextPage=="number"&&(s.nextPage=c({page:i.nextPage},"Continue the comparison commit list. Changed files are returned on page 1.")),typeof o?.nextFilePage=="number"&&(s.nextFilePage=c({filePage:o.nextFilePage,...o.nextFileBatch?{fileBatch:o.nextFileBatch}:{},...n.operation==="commit"?{includeDiff:!0}:{},charOffset:void 0},"Continue the changed-file list from the beginning of each new patch.")),typeof r?.patchPagination?.nextCharOffset=="number"&&(s.continuePatch=c({charOffset:r.patchPagination.nextCharOffset},"Continue the current patch window.")),Object.keys(s).length>0?{...e,next:s}:e}async function _e(e,n,o,i=k){let t=n;if(!t.owner||!t.repo)return F("owner and repo are required for commits mode.",e);if(t.keywords?.length){if(t.path!==void 0||t.branch!==void 0||t.base||t.head||t.includeDiff)return F("Commit-message keywords cannot be combined with path, branch, compare, or diffs; search covers the default branch.",e);let d=await bt({owner:t.owner,repo:t.repo,keywords:t.keywords,author:t.author,committer:t.committer,since:t.since,until:t.until,page:t.page??1,perPage:t.pageSize??30},o);return z(d)?F(d,e,{toolName:i}):T(e,d.data,d.data.commits.length>0,i,{rawResponse:d.rawResponseChars})}if(t.base&&t.head){let d=await wt({owner:t.owner,repo:t.repo,base:t.base,head:t.head,page:t.page,includeDiff:!!t.includeDiff,path:t.path,filePage:typeof t.filePage=="number"?t.filePage:void 0,itemsPerPage:t.pageSize,charOffset:typeof t.charOffset=="number"?t.charOffset:void 0,charLength:typeof t.charLength=="number"?t.charLength:void 0},o);if(z(d))return F(d,e,{toolName:i});let y=d.data,P={operation:"compare",owner:t.owner,repo:t.repo,base:t.base,head:t.head,...t.page===void 0?{}:{page:t.page},...t.includeDiff?{includeDiff:!0}:{},...t.path?{path:t.path}:{},...t.filePage===void 0?{}:{filePage:t.filePage},...t.pageSize===void 0?{}:{pageSize:t.pageSize},...t.charOffset===void 0?{}:{charOffset:t.charOffset},...t.charLength===void 0?{}:{charLength:t.charLength}};return T(e,V(y,P),d.data.totalCommits>0||d.data.status!=="identical",i)}let r=t.path,s=r&&!r.endsWith("/")?"file":"repo";if(s==="file"&&!r)return F("path is required when querying a specific file in commits mode.",e);let a=await yt({type:s,owner:t.owner,repo:t.repo,path:r,branch:t.branch,since:t.since,until:t.until,author:t.author,committer:t.committer,page:Number(t.page)||1,perPage:Number(t.pageSize)||30,filePage:typeof t.filePage=="number"?t.filePage:void 0,itemsPerPage:typeof t.pageSize=="number"?t.pageSize:void 0,includeDiff:!!t.includeDiff,charOffset:typeof t.charOffset=="number"?t.charOffset:void 0,charLength:typeof t.charLength=="number"?t.charLength:void 0},o);if(z(a))return F(a,e,{toolName:i});let{commits:c}=a.data,u=c.length>0,m=c.map(d=>d.messageHeadline?.match(/\(#(\d+)\)/)?.[1]).find(Boolean),f=!u&&a.data.warnings?.length?{hints:a.data.warnings}:{},l={...a.data,...f,...m?{next:{prDetail:{tool:"ghGetHistoryItem",query:{operation:"pullRequest",owner:t.owner,repo:t.repo,number:Number(m)},why:`Open PR #${m} referenced by the first commit for review context`,confidence:"low"}}}:{}};return T(e,l,u,i,{rawResponse:a.rawResponseChars})}var He=class extends ot{addBasicFilters(n){return n.query&&n.query.trim()&&(this.queryParts.push(n.query.trim()),n.match&&n.match.length>0&&this.queryParts.push(`in:${n.match.join(",")}`)),this.queryParts.push("is:issue"),this}addStateFilters(n){return(n.state==="open"||n.state==="closed")&&this.addSimpleFilter(n.state,"is"),this}addUserFilters(n){return this.addSimpleFilter(n.author,"author"),this.addSimpleFilter(n.assignee,"assignee"),this.addSimpleFilter(n.mentions,"mentions"),this.addSimpleFilter(n.commenter,"commenter"),this}addNegativeFilters(n){return n.locked===!0?this.queryParts.push("is:locked"):n.locked===!1&&this.queryParts.push("is:unlocked"),n.visibility==="public"?this.queryParts.push("is:public"):n.visibility==="private"&&this.queryParts.push("is:private"),this}addMiscFilters(n){return this.queryParts.push(n.archived===!0?"archived:true":"archived:false"),this}};function xt(e){return new He().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addDateFilters(e).addEngagementFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function St(e){return typeof e.query=="string"&&e.query.trim().length>0||e.author!==void 0||e.assignee!==void 0||e.label!==void 0&&(Array.isArray(e.label),e.label.length>0)||e.mentions!==void 0||e.commenter!==void 0||e.reactions!==void 0||e.comments!==void 0||e.milestone!==void 0||e.locked!==void 0||e.visibility!==void 0||e.created!==void 0||e.updated!==void 0||e.closed!==void 0||e.match!==void 0&&e.match.length>0||e.sort==="comments"||e.sort==="reactions"||Array.isArray(e.owner)||Array.isArray(e.repo)}function Pe(e){return e.startsWith('"')?e:/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}function L(e){if(typeof e=="string")return e;if(Array.isArray(e)&&typeof e[0]=="string")return e[0]}function Be(e){let n=(e.keywordsToSearch??[]).filter(t=>t.trim()).map(Pe),o=e.query?.trim()??"";return[...n,...o?[o]:[]].join(" ")||void 0}function Me(e,n,o){let i=o??12e3;if(o===void 0&&!n&&e.length<=i)return{text:e};let t=e.length,r=Math.min(Math.max(0,n??0),t),s=Math.max(1,i),a=Math.min(r+s,t),c=a<t;return{text:e.slice(r,a),pagination:{charOffset:r,charLength:a-r,totalChars:t,hasMore:c,...c?{nextCharOffset:a}:{}}}}function ye(e){return e.pull_request!=null}function rn(e){return e?e.map(n=>typeof n=="string"?n:n.name??"").filter(Boolean):[]}function be(e){return{number:e.number,title:e.title??"",state:e.state??"open",author:e.user?.login??"unknown",labels:rn(e.labels),createdAt:e.created_at??"",updatedAt:e.updated_at??"",...e.closed_at?{closedAt:e.closed_at}:{}}}function J(e,n=[]){return{error:e,type:"http",...n.length>0?{hints:n}:{}}}function At(e,n,o="anon"){return O("gh-api-issues",{owner:e.owner,repo:e.repo,issueNumber:e.issueNumber,query:Be(e),state:e.state,author:e.author,assignee:e.assignee,mentions:e.mentions,commenter:e.commenter,label:e.label,milestone:e.milestone,created:e.created,updated:e.updated,closed:e.closed,comments:e.comments,reactions:e.reactions,locked:e.locked,visibility:e.visibility,archived:e.archived,match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,charOffset:e.charOffset,charLength:e.charLength,commentPage:e.commentPage,itemsPerPage:e.itemsPerPage,concise:e.concise,auth:o},n)}import{ContentSanitizer as kt}from"@octocodeai/octocode-engine/contentSanitizer";async function It(e,n){let o=L(e.owner),i=L(e.repo),t=e.issueNumber;if(!o||!i||t==null)return J("owner, repo, and issueNumber are required for issue detail mode.");let r=await B(n),s=await H(n),a={owner:o,repo:i,issue_number:t},c=await _(O("gh-issue-detail",{...a,auth:s}),()=>r.rest.issues.get(a),{cacheRole:"helper"});if(ye(c.data))return J(`Issue #${t} is a pull request; use ghGetHistoryItem operation:"pullRequest" with number:${t}.`,[`Retry with ghGetHistoryItem { operation: "pullRequest", owner: "${o}", repo: "${i}", number: ${t} }.`]);let u=e.content?e.content.body===!0:!0,m=e.content?.comments?.discussion===!0,f=e.content?.comments?.includeBots===!0,l=be(c.data),d={};if(u){let y=kt.sanitizeContent(c.data.body??"").content,P=Me(y,e.charOffset,e.charLength);l.body=P.text,P.pagination&&(d.body=P.pagination)}if(m){let y=Math.max(1,e.commentPage??1),P=Math.max(1,e.itemsPerPage??30),b={...a,per_page:P,page:y},p=await _(O("gh-issue-comments-page",{...b,auth:s}),()=>r.rest.issues.listComments(b),{cacheRole:"helper"}),h=f?p.data:p.data.filter(R=>!fe(R.user?.login??""));l.comments=h.map(R=>{let C=Me(kt.sanitizeContent(R.body??"").content,e.charOffset,e.charLength);return{id:String(R.id),user:R.user?.login??"unknown",body:C.text,...C.pagination?{bodyPagination:C.pagination}:{},createdAt:R.created_at??"",updatedAt:R.updated_at??"",commentType:"discussion"}});let w=l.comments.find(R=>R.bodyPagination?.hasMore)?.bodyPagination;w&&(d.commentBody={...w});let x=pe(p.headers.link);d.comments={currentPage:y,itemsPerPage:P,totalComments:l.comments.length,hasMore:x,...x&&y<1e3?{nextCommentPage:y+1}:{},...x&&y>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}return Object.keys(d).length>0&&(l.contentPagination=d),{data:{type:"issues",owner:o,repo:i,issues:[l],totalCount:1},status:200}}async function vt(e,n,o){let i=L(n.owner)??"",t=L(n.repo)??"",r=await B(o),s=[],a=e;if(i&&t){let p=await ht(r,i,t,o);p.renamed&&(s.push(`Repository ${i}/${t} was renamed to ${p.owner}/${p.repo} \u2014 GitHub search does not follow renames, so the canonical name was searched instead.`),a={...e,owner:p.owner,repo:p.repo})}let c=xt(a),u=Math.min(n.limit??30,100),m=n.page??1,f=n.sort&&n.sort!=="best-match"?n.sort:void 0,l=await r.rest.search.issuesAndPullRequests({q:c,sort:f,order:n.order||"desc",per_page:u,page:m}),d=rt(l.headers);d&&s.push(d);let y=(l.data.items??[]).filter(p=>!ye(p)).map(p=>be(p)),P=l.data.total_count??y.length,b=m*u<Math.min(P,1e3);return{data:{type:"issues",owner:i,repo:t,issues:n.concise?y.map(p=>`#${p.number} ${p.title}`):y,totalCount:P,effectiveQuery:c,...s.length?{warnings:s}:{},...l.data.incomplete_results?{incompleteResults:!0}:{},pagination:{currentPage:m,perPage:u,hasMore:b,...b?{nextPage:m+1}:{},...P>1e3?{totalMatchesCapped:!0}:{}}},status:200}}async function Ft(e,n){let o=L(e.owner),i=L(e.repo);if(!o||!i)return J("owner and repo are required for issues mode.");let t=await B(n),r=Math.min(e.limit??30,100),s=e.page??1,a=e.state==="open"||e.state==="closed"?e.state:"all",c=await t.rest.issues.listForRepo({owner:o,repo:i,state:a,per_page:r,page:s,...e.assignee?{assignee:e.assignee}:{},...e.author?{creator:e.author}:{},...e.mentions?{mentioned:e.mentions}:{},...e.milestone?{milestone:e.milestone}:{},...e.sort==="created"||e.sort==="updated"||e.sort==="comments"?{sort:e.sort}:{},...e.order?{direction:e.order}:{},...typeof e.label=="string"?{labels:e.label}:Array.isArray(e.label)?{labels:e.label.join(",")}:{}}),u=c.data.filter(d=>!ye(d)).map(d=>be(d)),m=pe(c.headers.link),f=!m&&s===1,l=[];return u.length===0&&m&&l.push("This page contained only pull requests (the GitHub issues endpoint returns both; PRs are filtered out) \u2014 follow pagination.nextPage, later pages may contain issues."),{data:{type:"issues",owner:o,repo:i,issues:e.concise?u.map(d=>`#${d.number} ${d.title}`):u,...f?{totalCount:u.length}:{},...l.length?{warnings:l}:{},pagination:{currentPage:s,perPage:r,hasMore:m,...m?{nextPage:s+1}:{}}},status:200}}async function Lt(e,n,o){let i=await H(n),t=At(e,o,i);return _(t,()=>sn(e,n),{shouldCache:r=>"data"in r&&!("error"in r)&&!r.data?.incompleteResults})}async function sn(e,n){try{if(e.state==="merged"){let i={owner:L(e.owner)??"",repo:L(e.repo)??"",state:"merged"};return J('state:"merged" is not valid for issues \u2014 use "open" or "closed".',[`Use ghSearchHistory with ${JSON.stringify({operation:"pullRequests",...i})}.`])}if(e.issueNumber!=null)return await It(e,n);let o={...e,query:Be(e)};return St(o)?await vt(o,e,n):await Ft(e,n)}catch(o){return nt(o)?{data:{type:"issues",owner:L(e.owner)??"",repo:L(e.repo)??"",issues:[],totalCount:0,pagination:{currentPage:e.page??1,perPage:Math.min(e.limit??30,100),hasMore:!1}},status:200}:M(o)}}async function Te(e,n,o,i=k){let t=n;if(!t.owner||!t.repo)return F("owner and repo are required for issues mode.",e);let r=t.issueNumber??t.prNumber,s=await Lt({owner:t.owner,repo:t.repo,...r!=null?{issueNumber:r}:{},keywordsToSearch:t.keywords,query:t.query,state:t.state,author:t.author,assignee:t.assignee,mentions:t.mentions,commenter:t.commenter,label:t.label,milestone:t.milestone,created:t.created,updated:t.updated,closed:t.closed,comments:t.comments,reactions:t.reactions,locked:t.locked,visibility:t.visibility,match:t.match,archived:t.archived,sort:t.sort,order:t.order,limit:t.pageSize,page:Number(t.page)||1,concise:t.concise,content:t.content,charOffset:t.charOffset,charLength:t.charLength,commentPage:t.commentPage,itemsPerPage:t.pageSize},o);if(z(s))return F(s,e,{toolName:i});if(r!=null&&Array.isArray(s.data.issues)){let l=s.data.issues[0];if(l&&typeof l=="object"&&l.contentPagination){let d=l.contentPagination,y={operation:"issue",owner:t.owner,repo:t.repo,number:r,content:Y(t.content),...t.pageSize===void 0?{}:{pageSize:t.pageSize},...t.charOffset===void 0?{}:{charOffset:t.charOffset},...t.commentPage===void 0?{}:{commentPage:t.commentPage},...t.charLength===void 0?{}:{charLength:t.charLength}},P=d.body;typeof P?.nextCharOffset=="number"&&(P.nextQuery={...y,content:{body:!0},charOffset:P.nextCharOffset});let b=d.commentBody;typeof b?.nextCharOffset=="number"&&(b.nextQuery={...y,content:Y({comments:t.content?.comments}),charOffset:b.nextCharOffset});let p=d.comments;typeof p?.nextCommentPage=="number"&&(p.nextQuery={...y,content:Y({comments:t.content?.comments}),commentPage:p.nextCommentPage,charOffset:0})}}let a=Array.isArray(s.data.issues)?s.data.issues.length>0:!1,c=!a&&s.data.warnings?.length?{hints:s.data.warnings}:{},u=s.data.issues,m=(()=>{if(!Array.isArray(u)||u.length===0)return;let l=u[0];if(typeof l=="number")return l;if(typeof l=="string"){let d=l.match(/^#(\d+)\b/);return d?Number(d[1]):void 0}if(l&&typeof l=="object"&&typeof l.number=="number")return l.number})(),f={};return r==null&&m!=null&&(f.readIssue={tool:"ghGetHistoryItem",query:{operation:"issue",owner:t.owner,repo:t.repo,number:m,content:{body:!0}},why:`Read issue #${m} body/discussion from this list`,confidence:"low"}),f.searchRepositoryCode={tool:"ghSearch",query:{operation:"code",owner:t.owner,repo:t.repo},why:"Search code in this repository for symbols mentioned in the issue(s)",confidence:"low"},T(e,{...s.data,...c,next:f},a,i,{rawResponse:s.rawResponseChars})}function Ot(e){let n=(e.keywords??[]).filter(t=>t.trim()).map(Pe),o=e.query?.trim()??"",i=[...n,...o?[o]:[]].join(" ")||void 0;return{projectId:gt(e.owner,e.repo),owner:e.owner,query:i,number:e.prNumber,state:e.state,author:e.author,assignee:e.assignee,commenter:e.commenter,mentions:e.mentions,reviewRequested:e["review-requested"],reviewedBy:e["reviewed-by"],labels:(()=>{let t=e.label;if(t)return Array.isArray(t)?t:[t]})(),baseBranch:e.base,headBranch:e.head,created:e.created,updated:e.updated,closed:e.closed,mergedAt:e["merged-at"],comments:e.comments,reactions:e.reactions,draft:e.draft,match:e.match,checks:e.checks,review:e.review,archived:e.archived,content:e.content,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,reviewPage:e.reviewPage,collectionPages:e.collectionPages,itemsPerPage:e.pageSize,sort:e.sort,order:e.order,limit:e.pageSize??30,page:e.page,charOffset:e.charOffset,charLength:e.charLength,goal:e.goal,reasoning:e.reasoning}}function an(e,n){let o=[];n.some(t=>t.state==="APPROVED")&&o.push("approval"),n.some(t=>t.state==="CHANGES_REQUESTED")&&o.push("changes-requested");let i=e.filter(t=>!fe(t.author??"")).map(t=>t.body.toLowerCase());return o.length===0&&i.some(t=>/\b(lgtm|looks good|approved|ship it)\b/.test(t))&&o.push("approval"),!o.includes("changes-requested")&&i.some(t=>/\b(change|fix|concern|blocker|blocking|request changes?)\b/.test(t))&&o.push("changes-requested"),i.some(t=>t.includes("?"))&&o.push("question"),o.length>0?o:["discussion"]}function cn(e,n){if(!e||e.length===0)return;let o=Array.from(new Set(e.map(r=>r.author))),i=e.map(r=>r.updatedAt||r.createdAt).filter(Boolean).sort().at(-1),t=e.filter(r=>r.commentType==="review_inline").length;return{totalComments:e.length,inlineComments:t,discussionComments:e.length-t,commenters:o.slice(0,8),commenterCount:o.length,...o.length>8?{commentersTruncated:!0}:{},...i?{latestCommentAt:i}:{},themes:an(e,n??[])}}function _t(e,n={}){let{includeFileChanges:o=!0}=n,i=e.items.map(r=>{let s=r.fileChanges,a=s?.length??0,c=Array.isArray(r.comments)?r.comments:void 0,u=cn(c,r.reviews);return{number:r.number,...r.collectionStates?{collectionStates:r.collectionStates}:{},...r.providerLimits?.length?{providerLimits:r.providerLimits}:{},title:r.title,body:r.body??void 0,...r.bodyPagination&&{bodyPagination:r.bodyPagination},state:r.state,draft:r.draft,author:r.author,assignees:r.assignees,labels:r.labels,sourceBranch:r.sourceBranch,targetBranch:r.targetBranch,sourceSha:r.sourceSha,targetSha:r.targetSha,createdAt:r.createdAt,updatedAt:r.updatedAt,closedAt:r.closedAt,mergedAt:r.mergedAt,commentsCount:r.commentsCount,changedFilesCount:r.changedFilesCount??a,additions:r.additions,deletions:r.deletions,...Array.isArray(r.comments)&&r.comments.length>0&&{comments:r.comments.map(m=>({...m,...m.bodyPagination&&{bodyPagination:m.bodyPagination}}))},...r.reviews&&{reviews:r.reviews},...r.commits&&{commits:r.commits},...u&&{reviewSummary:{...u,...r.collectionStates?{countScope:"providerBatch"}:{}}},...s&&o?{fileChanges:s}:{},...Array.isArray(r.sanitizationWarnings)&&r.sanitizationWarnings.length>0?{sanitizationWarnings:r.sanitizationWarnings}:{}}}),t=e.pagination?{currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,...typeof e.pagination.totalMatches=="number"?{totalMatches:e.pagination.totalMatches}:{},...ft(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}:void 0;return{pullRequests:i,resultData:{pullRequests:i,...e.incompleteResults?{incompleteResults:!0}:{},...e.items.some(r=>r.providerLimits?.length)?{isPartial:!0,terminalLimit:!0,partialReasons:["providerResultCap"]}:{},...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},...t?{pagination:t}:{totalCount:e.totalCount||i.length}},pagination:t}}function un(e){let n=e?.patches;return n?.mode?{mode:n.mode,...n.files?{files:n.files}:{},...n.ranges?{ranges:n.ranges}:{}}:{mode:"none"}}function ln(e){let n=e?.comments;return n?{discussion:n.discussion===!0,reviewInline:n.reviewInline===!0,includeBots:n.includeBots??!1,...n.file?{file:n.file}:{}}:!1}function mn(e){let n=e?.commits;return n?{list:!0,includeFiles:n.includeFiles??!1}:!1}function Ht(e){let{content:n}=e,o=un(n),i=ln(n),t=mn(n);return{body:n?.body??!1,changedFiles:(n?.changedFiles??!1)||o.mode!=="none",patches:o,comments:i,reviews:n?.reviews??!1,commits:t}}function ae(e,n){return n.minify!=="standard"||n.matchString?e:tt.minifyMarkdownCore(e)}function Bt(e,n){return n.minify!=="standard"||n.matchString?e:st(e)}function ce(e){let n=e.matchString;if(typeof n!="string")return;let o=n.trim().toLowerCase();return o.length>0?o:void 0}function ee(e,n){return typeof e=="string"&&e.toLowerCase().includes(n)}function gn(e,n=1,o=20){let i=Math.min(Math.max(1,o),100),t=e.length,r=Math.max(1,Math.ceil(t/i)),s=Math.min(Math.max(1,n),r),a=(s-1)*i,c=Math.min(a+i,t);return{items:e.slice(a,c),pagination:{currentPage:s,totalPages:r,itemsPerPage:i,totalItems:t,hasMore:s<r,...s<r&&s<1e3?{nextPage:s+1}:{},...s<r&&s>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}}function te(e,n,o,i,t=1){let r=gn(e,t,n.pageSize),s=o.collectionStates;if(!s)return r;let a=i==="comments"?["discussion","inline"]:[i];if(r.pagination.countScope="providerBatch",r.pagination.collectionPages=n.collectionPages,!r.pagination.hasMore&&a.some(c=>s[c]?.hasMore)){r.pagination.hasMore=!0,r.pagination.nextPage=1,r.pagination.nextCollectionPages={...n.collectionPages};for(let c of a){let u=s[c];r.pagination.nextCollectionPages[c]=u?.hasMore?u.page+1:0}}return r}function q(e,n=0,o=12e3){if(typeof e!="string")return;let i=e.length,t=Math.min(Math.max(0,n),i),r=Math.min(Math.max(1,o),5e4),s=Math.min(t+r,i),a=s<i;return{content:e.slice(t,s),pagination:{charOffset:t,charLength:s-t,totalChars:i,hasMore:a,...a?{nextCharOffset:s}:{}}}}function we(e,n=500){if(!(typeof e!="string"||e.length===0))return e.length<=n?e:`${e.slice(0,n-3)}...`}function Mt(e,n){return{operation:"pullRequest",owner:e.owner,repo:e.repo,number:n}}function ue(e,n,o){return Rt(e,n,o)}function Re(e,n,o,i,t={}){if(!(!i.hasMore||i.nextCharOffset===void 0))return ue(e,n,{content:o,...t,charOffset:i.nextCharOffset,charLength:e.charLength})}function le(e,n,o,i,t){if(!(!t.hasMore||t.nextPage===void 0))return ue(e,n,{content:o,[i]:t.nextPage,...t.nextCollectionPages?{collectionPages:t.nextCollectionPages}:{},...i==="commentPage"?{commentBodyOffset:void 0}:{},...i==="filePage"||i==="reviewPage"?{charOffset:void 0}:{},pageSize:e.pageSize})}function ne(e){return typeof e=="object"&&e!==null}function me(e){if(ne(e)&&!(typeof e.currentPage!="number"||typeof e.totalPages!="number"||typeof e.itemsPerPage!="number"||typeof e.totalItems!="number"||typeof e.hasMore!="boolean"))return e}function Ce(e){if(ne(e)&&!(typeof e.charOffset!="number"||typeof e.charLength!="number"||typeof e.totalChars!="number"||typeof e.hasMore!="boolean"))return e}function fn(e,n){return e.filter(o=>{let i=o.commentType;return n.file&&o.path!==n.file?!1:i==="review_inline"?n.reviewInline:n.discussion})}function Tt(e,n,o){if(!o.comments)return{};let i=Array.isArray(e.comments)?e.comments:[],t=fn(i,o.comments),r=ce(n),s=r?t.filter(u=>ee(u.body,r)):t,{items:a,pagination:c}=te(s,n,e,"comments",n.commentPage??n.page??1);return{comments:a.map(u=>{let m=q(ae(typeof u.body=="string"?u.body:"",n),n.commentBodyOffset??0,n.charLength??12e3);return{id:u.id,author:u.author,commentType:u.commentType??"discussion",path:u.path,line:u.line,...u.in_reply_to_id!=null?{in_reply_to_id:u.in_reply_to_id}:{},...m?{body:m.content,bodyPagination:m.pagination}:{bodyPreview:we(typeof u.body=="string"?u.body:"")},createdAt:u.createdAt,updatedAt:u.updatedAt}}),contentPagination:{comments:c}}}function Qt(e,n,o){if(!o.reviews)return{};let i=Array.isArray(e.reviews)?e.reviews:[],t=ce(n),r=t?i.filter(c=>ee(c.body,t)):i,{items:s,pagination:a}=te(r,n,e,"reviews",n.reviewPage??1);return{contentPagination:{reviews:a},reviews:s.map(c=>{let u=typeof c.body=="string"?c.body:"",m=q(u?ae(u,n):void 0,n.charOffset??0,n.charLength??12e3);return{id:c.id,user:c.user,state:c.state,...m?{body:m.content,bodyPagination:m.pagination}:{},submittedAt:c.submittedAt??c.submitted_at,commitId:c.commitId??c.commit_id}})}}function Nt(e,n,o){if(!o.commits)return{};let i=Array.isArray(e.commits)?e.commits:[],{items:t,pagination:r}=te(i,n,e,"commits",n.commitPage??n.page??1);return{commits:t.map(s=>({sha:s.sha,message:s.message,author:s.author,date:s.date,...o.commits&&o.commits.includeFiles&&Array.isArray(s.files)?hn(s,n):{}})),contentPagination:{commits:r}}}function hn(e,n){let o=Q(e.files,{itemsPerPage:n.pageSize,charLength:n.charLength??12e3}),i=e.filesCollectionState,t={...o.filesPagination,countScope:"providerBatch",...!o.filesPagination.hasMore&&i?.hasMore?{hasMore:!0,nextFilePage:1,nextFileBatch:i.page+1}:{}};return V({files:o.files,filesPagination:t},{operation:"commit",owner:n.owner,repo:n.repo,ref:e.sha,includeDiff:!0,pageSize:n.pageSize,charLength:n.charLength})}function xe(e){return String(e.path??e.filename??"")}function pn(e,n){return{path:xe(e),status:String(e.status??""),additions:Number(e.additions??0),deletions:Number(e.deletions??0),...n?ve(e.patch):{},...n&&typeof e.patch=="string"?{patch:e.patch}:{}}}function Gt(e,n,o){let i=Array.isArray(e.fileChanges)?e.fileChanges:[],t=o.patches.files,r=t&&t.length>0?i.filter(l=>t.includes(xe(l))):i,s=ce(n),a=s?r.filter(l=>ee(xe(l),s)||ee(l.patch,s)):r,{items:c,pagination:u}=te(a,n,e,"changedFiles",n.filePage??n.page??1),m=o.patches.mode!=="none",f=c.map(l=>{let d=pn(l,m);if(!m||typeof l.patch!="string")return d;let y=q(Bt(l.patch,n),n.charOffset??0,n.charLength??12e3);return{...d,patch:y?.content??"",...y?{patchPagination:y.pagination}:{}}});return o.changedFiles||o.patches.mode!=="none"?{changedFiles:f,contentPagination:{changedFiles:u}}:i.length===0?{}:{filePathsPreview:i.slice(0,20).map(xe).filter(Boolean),contentPagination:{filePaths:{totalFiles:i.length,filesPerPage:20,hasMore:i.length>20,...i.length>20?{nextFilePage:2}:{}}}}}function U(e,n){return{tool:"ghGetHistoryItem",query:{...e,content:n},confidence:"exact"}}function Et(e,n,o,i){let t=Mt(e,n);return{...o.body?{}:{getBody:U(t,{body:!0})},...o.changedFiles?{}:{getChangedFiles:U(t,{changedFiles:!0})},...o.patches.mode!=="none"?{}:{...i?{getSelectedPatches:U(t,{patches:{mode:"selected",files:[i]}})}:{},getAllPatches:U(t,{patches:{mode:"all"}})},...o.comments?{}:{getComments:U(t,{comments:{discussion:!0,reviewInline:!0}})},...o.reviews?{}:{getReviews:U(t,{reviews:!0})},...o.commits?{}:{getCommits:U(t,{commits:{}})},fullReview:U(t,{body:!0,changedFiles:!0,patches:{mode:"all"},comments:{discussion:!0,reviewInline:!0},reviews:!0,commits:{}})}}function Pn(e){return{...e.changedFiles?{changedFiles:!0}:{},...e.patches.mode!=="none"?{patches:e.patches}:{}}}function yn(e){let n=e.changedFiles;if(Array.isArray(n))for(let o of n){if(!ne(o))continue;let i=Ce(o.patchPagination);if(i?.hasMore)return i}}function zt(e,n="comments"){let o=e[n];if(Array.isArray(o))for(let i of o){if(!ne(i))continue;let t=Ce(i.bodyPagination);if(t?.hasMore)return t}}function bn(e,n,o,i,t){let r={},s=Ce(n.body),a=me(n.changedFiles),c=me(n.comments),u=me(n.reviews),m=me(n.commits),f=yn(e),l=zt(e),d=zt(e,"reviews"),y=Pn(i);if(d&&i.reviews&&(r.reviewBody={...d,nextQuery:Re(o,t,{reviews:!0},d)}),u&&i.reviews&&(r.reviews={...u,nextQuery:le(o,t,{reviews:!0},"reviewPage",u)}),s&&(r.body={...s,nextQuery:Re(o,t,{body:!0},s)}),a){let b=le(o,t,y,"filePage",a);r.changedFiles={...a,...b?{nextQuery:b}:{}}}if(c&&i.comments){let b=le(o,t,{comments:i.comments},"commentPage",c);r.comments={...c,...b?{nextQuery:b}:{}}}if(l?.hasMore&&l.nextCharOffset!==void 0&&i.comments&&(r.commentBody={...l,nextQuery:ue(o,t,{content:{comments:i.comments},...o.commentPage!==void 0?{commentPage:o.commentPage}:{},commentBodyOffset:l.nextCharOffset,charLength:o.charLength})}),m&&i.commits){let b=le(o,t,{commits:i.commits},"commitPage",m);r.commits={...m,...b?{nextQuery:b}:{}}}f&&i.patches.mode!=="none"&&(r.patches={...f,nextQuery:Re(o,t,{patches:i.patches},f,{filePage:o.filePage??o.page})});let P=n.filePaths;return ne(P)&&(r.filePaths={...P,hasMore:P.hasMore===!0,nextQuery:P.hasMore===!0?ue(o,t,{content:{changedFiles:!0},filePage:P.nextFilePage}):void 0}),Object.keys(r).length>0?r:void 0}function Dt(e,n,o,i,t){let r=Number(e.number),s=typeof e.body=="string"?e.body:void 0,a=s&&i?ae(s,n):s,c=o.body?q(a,n.charOffset??0,n.charLength??12e3):void 0,u=o.body||o.changedFiles||o.patches.mode!=="none"||!!o.comments||o.reviews||!!o.commits,m=t!==void 0?t:u,l=n.prNumber!==void 0||n.verbose===!0,{contentPagination:d={},...y}=Gt(e,n,o),{contentPagination:P={},...b}=Tt(e,n,o),{contentPagination:p={},...h}=Qt(e,n,o),{contentPagination:w={},...x}=Nt(e,n,o),R=Array.isArray(y.changedFiles)?y.changedFiles.find(A=>A.path)?.path:void 0,I={...{number:e.number,title:e.title,state:e.state,...e.draft?{draft:e.draft}:{},author:e.author,...Array.isArray(e.assignees)&&e.assignees.length?{assignees:e.assignees}:{},...Array.isArray(e.labels)&&e.labels.length?{labels:e.labels}:{},...e.targetBranch?{targetBranch:e.targetBranch}:{},...l?{...e.sourceBranch?{sourceBranch:e.sourceBranch}:{},...e.sourceSha?{sourceSha:e.sourceSha}:{}}:{},createdAt:e.createdAt,...l?{updatedAt:e.updatedAt}:{},...l||!e.mergedAt?{closedAt:e.closedAt}:{},mergedAt:e.mergedAt,...e.commentsCount?{commentsCount:e.commentsCount}:{},...e.changedFilesCount?{changedFilesCount:e.changedFilesCount}:{},...e.additions?{additions:e.additions}:{},...e.deletions?{deletions:e.deletions}:{},...l&&!c?{bodyPreview:we(typeof e.body=="string"?e.body:void 0)}:{},...m?{next:Et(n,r,o,R)}:{}},...Array.isArray(e.providerLimits)&&e.providerLimits.length?{providerLimits:e.providerLimits}:{},...o.body?c?{body:c.content}:{bodyEmpty:!0}:{},...y,...b,...h,...x,...e.reviewSummary?{reviewSummary:e.reviewSummary}:{},...Array.isArray(e.sanitizationWarnings)&&e.sanitizationWarnings.length>0?{sanitizationWarnings:e.sanitizationWarnings}:{}},G=bn(I,{...c?{body:c.pagination}:{},...d,...P,...w,...p},n,o,r);return G&&(I.contentPagination=G),I}async function Qe(e,n,o,i=k){let t=o(),r={...n},s=Ht(r),a=r.prNumber!==void 0;a||(r.content=void 0);let c=await dt(r,()=>t.provider.searchPullRequests(Ot(r)));if(c.ok===!1)return c.result;let u=a?s.changedFiles||s.patches.mode!=="none":!1,{pullRequests:m,resultData:f}=_t(c.response.data,{includeFileChanges:u});r.prNumber!==void 0&&delete f.pagination;let l=!a&&!!e.content,d={...s,body:!1,changedFiles:!1,patches:{mode:"none"},comments:!1,commits:!1},y=r.minify==="standard",P=a,b=m.map(h=>Dt(h,r,l?d:s,y,P));f.pullRequests=b,!a&&r.concise===!0&&(f.pullRequests=b.map(h=>{let w=h;return`#${w.number} ${w.title}`}));let p=b.length>0;if(!a&&p){let h=b[0].number,w=r.owner,x=r.repo;h!=null&&w&&x&&(f.next={readPr:{tool:"ghGetHistoryItem",query:{operation:"pullRequest",owner:w,repo:x,number:h,content:{body:!0,changedFiles:!0,comments:{discussion:!0}}},why:"Read any PR from this list \u2014 swap number for the # you want.",confidence:"low"}})}return T(r,f,p,i,{rawResponse:c.response.rawResponseChars})}import{z as Ge}from"zod";import{z as g}from"zod";var oe={type:'"prs" for pull requests; "commits" for commit history.',keywords:"PR search terms; ignored in commits mode.",match:'PR text fields searched by keywords; ghSearch operation:"code" instead uses match to select file content or paths.',prNumber:"Switches to PR detail mode; needs owner+repo.",issueNumber:"Switches to issue detail mode; needs owner+repo.",concise:"PR list triage; ignored with prNumber.",path:"Commit-mode file/dir prefix; trailing / scopes subtree.",includeDiff:"Commit-mode diffs; costly.",order:"asc+created helps archaeology.",comments:'Comment-count range filter (">5"); not comment content.',reactions:'Reaction-count range filter (">10").',interactions:'Combined comment+reaction count range (">20").',project:'Project board: "owner/number".',"team-mentions":'Team mention: "org/team-slug".',filePage:"Changed-files page from contentPagination.",commentPage:"Comments page from contentPagination.",commitPage:"PR commits page from contentPagination.",reviewMode:'"full" fetches all PR detail surfaces.',content:"Detail selector for prNumber.","content.body":"Full PR description; windowed by charOffset.","content.changedFiles":"File list with status and +/- counts.","content.patches.mode":'"none", "selected" (cheapest; needs files or ranges), or "all".',"content.patches.ranges":"Line ranges for selected patch hunks.","content.comments.reviewInline":"Inline review comments; in_reply_to_id marks threads.","content.comments.includeBots":"Include bot/CI comments.","content.reviews":"Review verdicts per reviewer.","content.commits":"PR-bound commits selector.",matchString:"Substring filter for body/patch/comment windows.",charOffset:"Body/patch continuation offset from nextQuery.",commentBodyOffset:"Comment-body continuation offset from nextQuery.",minify:'"standard" compacts PR body/comments/reviews and trims diff context; "none" preserves selected text after redaction. Match reads retain source text. No symbols mode.'},Ne=$(oe,{...Xe,type:g.enum(["prs","commits"]).default("prs"),since:g.string().optional(),until:g.string().optional(),path:g.string().optional(),branch:g.string().optional(),includeDiff:g.boolean().optional().default(!1),includeAssets:g.boolean().optional(),keywords:g.array(g.string()).optional(),prNumber:K(1,ie).optional(),issueNumber:K(1,ie).optional(),owner:g.string().optional(),repo:g.string().optional(),concise:g.boolean().optional(),state:g.enum(["open","closed","merged"]).optional(),assignee:g.string().optional(),author:g.string().optional(),committer:g.string().optional(),commenter:g.string().optional(),mentions:g.string().optional(),"review-requested":g.string().optional(),"reviewed-by":g.string().optional(),label:g.union([g.string(),g.array(g.string())]).optional(),checks:g.enum(["success","failure","pending"]).optional(),review:g.enum(["approved","changes_requested","required","none"]).optional(),head:g.string().optional(),base:g.string().optional(),created:g.string().optional(),updated:g.string().optional(),closed:g.string().optional(),"merged-at":g.string().optional(),comments:g.string().optional(),reactions:g.string().optional(),draft:g.boolean().optional(),match:g.array(g.enum(["title","body","comments"])).optional(),sort:g.enum(["created","updated","best-match","comments","reactions"]).optional(),order:g.enum(["asc","desc"]).optional(),limit:K(1,Ue).default($e),page:qe(),archived:g.boolean().optional(),filePage:ge(),commentPage:ge(),commitPage:ge(),reviewPage:Ie.shape.reviewPage,collectionPages:Ie.shape.collectionPages,reviewMode:g.literal("full").optional(),content:$(oe,{metadata:g.boolean().optional(),body:g.boolean().optional(),changedFiles:g.boolean().optional(),patches:$(oe,{mode:g.enum(["none","selected","all"]).default("none"),files:We,ranges:g.array($(oe,{file:g.string(),additions:g.array(K(1,ie)).optional(),deletions:g.array(K(1,ie)).optional()},"content.patches.ranges")).optional()},"content.patches").optional(),comments:$(oe,{discussion:g.boolean().optional(),reviewInline:g.boolean().optional(),includeBots:g.boolean().default(!1),file:g.string().optional()},"content.comments").optional(),reviews:g.boolean().optional(),commits:$(oe,{list:g.boolean().optional(),includeFiles:g.boolean().optional()},"content.commits").optional()},"content").optional(),matchString:g.string().optional(),commentBodyOffset:Ae(),charOffset:Ae(),charLength:Ke(),minify:g.enum(["none","standard"]).default("standard")}).superRefine((e,n)=>{let o=e.content?.patches;if(!o)return;let i=(o.files?.length??0)>0,t=(o.ranges?.length??0)>0,r=i||t;o.mode==="selected"&&!r&&n.addIssue({code:"custom",message:'content.patches.mode="selected" requires non-empty files or ranges.',path:["content","patches","files"]}),o.mode!=="selected"&&r&&n.addIssue({code:"custom",message:'content.patches.files and content.patches.ranges require mode="selected".',path:["content","patches","mode"]})});var jt={type:Ge.enum(["prs","commits","issues"]).optional(),prNumber:E(1,1e9).optional(),issueNumber:E(1,1e9).optional(),pageSize:E(1,100).optional().default(30),match:Ge.array(Ge.enum(["title","body","comments"])).optional(),page:Ye.default(1),filePage:E(1,1e3).optional(),commentPage:E(1,1e3).optional(),commitPage:E(1,1e3).optional(),charOffset:ke.optional(),commentBodyOffset:ke.optional(),charLength:E(1,5e4).optional()},Rn=Ze(Ne,jt),Ut=Je(Ne,jt),Ei=Ve(Rn);var $t={body:"continueBody",changedFiles:"nextChangedFilesPage",comments:"nextCommentsPage",commentBody:"continueCommentBody",reviews:"nextReviewsPage",reviewBody:"continueReviewBody",commits:"nextCommitsPage",patches:"continuePatch",filePaths:"nextFilePathsPage"},Cn={body:"charOffset",changedFiles:"filePage",comments:"commentPage",commentBody:"commentBodyOffset",reviews:"reviewPage",reviewBody:"charOffset",commits:"commitPage",patches:"charOffset",filePaths:"filePage"};function N(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function de(e,n){let o=Array.isArray(e)?e.filter(i=>typeof i=="string"):[];return[...new Set([...o,n])]}function xn(e){return{body:"Continue the pull-request or issue body.",changedFiles:"Continue the pull-request changed-file list.",comments:"Continue the discussion comment list.",commentBody:"Continue the current comment body.",reviews:"Continue the review list.",reviewBody:"Continue the current review body windows.",commits:"Continue the pull-request commit list.",patches:"Continue the current patch window.",filePaths:"Continue the pull-request file-path list."}[e]}function Sn(e,n){return["filePage","commentPage","commitPage","reviewPage","collectionPages","charOffset","commentBodyOffset"].every(o=>e[o]===void 0||JSON.stringify(e[o])===JSON.stringify(n[o]))}function Ee(e,n){let o=n==="pullRequest"?"pullRequests":"issues",i=e[o];if(!Array.isArray(i)||i.length===0||!N(i[0]))return e;let t=i[0].contentPagination;if(!N(t))return e;let s={...N(e.next)?e.next:{}},a={},c=!1,u=!1;for(let[f,l]of Object.entries(t)){if(!N(l)){a[f]=l;continue}let{nextQuery:d,...y}=l,P=f;if(y.hasMore===!0&&P in $t){c=!0;let b=N(d)?re.safeParse(d):void 0,p=n==="issue"&&P==="commentBody"?"charOffset":Cn[P],h=N(d)&&typeof d[p]=="number";b?.success&&h&&Sn(d,b.data)?s[$t[P]]={tool:v,query:b.data,why:xn(P),confidence:"exact"}:(u=!0,y.continuationUnavailable={reason:h?"schemaLimit":"missingCursor"})}a[f]=y}if(!c)return e;let m=[...i];return m[0]={...i[0],contentPagination:a},{...e,[o]:m,isPartial:!0,partialReasons:de(e.partialReasons,"contentPagination"),...u?{terminalLimit:!0}:{},...Object.keys(s).length>0?{next:s}:{}}}function Wt(e,n){let i=(Array.isArray(e.commits)?e.commits:[]).find(a=>N(a)&&a.messageTruncated===!0);if(!N(i)||typeof i.sha!="string")return e;let t={operation:"commit",owner:n.owner,repo:n.repo,ref:i.sha},r=re.safeParse(t);if(!r.success)return e;let s=N(e.next)?e.next:{};return{...e,isPartial:!0,partialReasons:de(e.partialReasons,"commitMessageTruncated"),next:{...s,readCommit:{tool:v,query:r.data,why:`Read the complete message for commit ${i.sha}.`,confidence:"exact"}}}}var De=1e3;function Se(e,n,o){let i=o==="commits"?Wt(e,n):e,t=i.incompleteResults===!0,r=je(i.next),s=typeof n.page=="number"&&Number.isInteger(n.page)?n.page:1,a=t?{...i,isPartial:!0,partialReasons:de(i.partialReasons,"providerIncompleteResults"),next:{...r,retry:{tool:k,query:Oe(n,o,s),why:`Retry the same ${o} provider page because the provider reported incomplete results.`,confidence:"exact"}}}:i,c=a.pagination;if(!c||typeof c!="object")return a;let u=c,m=u.totalMatchesCapped===!0,f=m?An(a):a;if(u.hasMore!==!0)return f;let l=u.nextPage;if(typeof l!="number"||!Number.isInteger(l))return ze(f,u,{reason:"missingProviderCursor"});if(l>1e3)return ze(f,u,{reason:"schemaPageLimit",maxPage:1e3});let d=typeof u.perPage=="number"&&u.perPage>0?u.perPage:typeof n.pageSize=="number"&&n.pageSize>0?n.pageSize:void 0;return m&&d!==void 0&&(l-1)*d>=De?ze(f,u,{reason:"providerResultCap",maxResults:De}):{...f,next:{...je(f.next),nextPage:{tool:k,query:Oe(n,o,l),why:`Continue ${o} search/list results on page ${l}.`,confidence:"exact"}}}}function An(e){return{...e,isPartial:!0,terminalLimit:!0,partialReasons:de(e.partialReasons,"providerResultCap"),providerLimit:{reason:"providerResultCap",maxResults:De}}}function ze(e,n,o){let{nextPage:i,...t}=n,{nextPage:r,...s}=je(e.next);return{...e,terminalLimit:!0,pagination:{...t,continuationUnavailable:o},...Object.keys(s).length>0?{next:s}:{}}}function je(e){return e&&typeof e=="object"?e:{}}function qt(e){return he(Ut,e)}function Kt(e){let{operation:n,...o}=e;return o}async function kn(e,n,o){let i=he(et,e);if(i.ok===!1)return i.error;let t=i.data,r=t.operation,s={...Kt(t),type:r==="pullRequests"?"prs":r==="issues"?"issues":"commits"},a=qt(s);return a.ok===!1?a.error:r==="pullRequests"?Se(await Qe(s,a.data,o,k),e,r):r==="issues"?Se(await Te(s,a.data,n.authInfo,k),e,r):Se(await _e(s,a.data,n.authInfo,k),e,r)}async function In(e,n,o){let i=he(re,e);if(i.ok===!1)return i.error;let t=i.data;if(t.operation==="commit"){let c=await Pt({owner:String(t.owner),repo:String(t.repo),ref:String(t.ref),...typeof t.fileBatch=="number"?{fileBatch:t.fileBatch}:{},...typeof t.includeDiff!="boolean"?{}:{includeDiff:t.includeDiff},...typeof t.path!="string"?{}:{path:t.path},...typeof t.filePage!="number"?{}:{filePage:t.filePage},...typeof t.pageSize!="number"?{}:{itemsPerPage:t.pageSize},...typeof t.charOffset!="number"?{}:{charOffset:t.charOffset},...typeof t.charLength!="number"?{}:{charLength:t.charLength}},n.authInfo);return z(c)?F(c,e,{toolName:v}):T(e,V(c.data,e),!0,v)}let s={...Kt(t),...t.operation==="pullRequest"?{type:"prs",prNumber:t.number,number:void 0}:t.operation==="issue"?{type:"issues",issueNumber:t.number,number:void 0}:{type:"commits"}};delete s.number;let a=qt(s);return a.ok===!1?a.error:t.operation==="pullRequest"?Ee(await Qe(s,a.data,o,v),t.operation):t.operation==="issue"?Ee(await Te(s,a.data,n.authInfo,v),t.operation):_e(s,a.data,n.authInfo,v)}function Xt(e,n,o){let i=mt(e.authInfo);return ut(e.queries,async t=>{try{return await o(t,e,i)}catch(r){return lt(r,t,void 0,n)}},{toolName:n},e)}function lr(e){return Xt(e,k,kn)}function mr(e){return Xt(e,v,In)}export{mr as getMultipleGitHubHistoryItems,lr as searchMultipleGitHubHistory};
package/dist/direct.d.ts CHANGED
@@ -1,3 +1,8 @@
1
- export { buildDirectToolExampleQuery, DIRECT_TOOL_CATEGORIES, DIRECT_TOOL_DEFINITIONS, DirectToolInputError, executeDirectTool, findDirectToolDefinition, formatDirectToolMetadataSchemaText, formatDirectToolSchemaText, getDirectToolAutoFilledFields, getDirectToolCategory, getDirectToolDescription, getDirectToolDisplayFields, prepareDirectToolInput, prepareDirectToolInputFromJsonText, sortDirectToolNames, type DirectToolCategory, type DirectToolDefinition, type DirectToolDisplayField, type DirectToolInput, type DirectToolMetadata, type PrepareDirectToolInputOptions, } from './tools/directToolCatalog.js';
1
+ export { buildDirectToolExampleQuery } from './tools/directToolCatalog/toolCommandPatterns.js';
2
+ export { DIRECT_TOOL_CATEGORIES, DIRECT_TOOL_DEFINITIONS, DirectToolInputError, findDirectToolDefinition, getDirectToolCategory, sortDirectToolNames, type DirectToolCategory, type DirectToolDefinition, type DirectToolDisplayField, type DirectToolInput, type DirectToolMetadata, type PrepareDirectToolInputOptions, } from './tools/directToolCatalog/toolCatalogDefinitions.js';
3
+ export { executeDirectTool } from './tools/directToolCatalog.exec.js';
4
+ export { formatDirectToolMetadataSchemaText, formatDirectToolSchemaText, getDirectToolAutoFilledFields, getDirectToolDescription, } from './tools/directToolCatalog/toolCatalogFormatters.js';
5
+ export { getDirectToolDisplayFields } from './tools/directToolCatalog/toolSchemaIntrospection.js';
6
+ export { prepareDirectToolInput, prepareDirectToolInputFromJsonText, } from './tools/directToolCatalog/toolInputPreparation.js';
2
7
  export { loadToolContent } from './tools/toolMetadata/state.js';
3
8
  export { formatCallToolResultForOutput, type CallToolResultOutputMode, } from './responses.js';