@octocodeai/octocode-tools-core 18.2.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.
- package/README.md +19 -19
- package/dist/chunks/direct/chunk-3AA4F3QO.js +10 -0
- package/dist/chunks/direct/chunk-43RVQWTG.js +8 -0
- package/dist/chunks/direct/chunk-7DYE654A.js +8 -0
- package/dist/chunks/direct/chunk-A4WMBDEC.js +8 -0
- package/dist/chunks/direct/chunk-AWZG43MA.js +8 -0
- package/dist/chunks/direct/chunk-BICVXQ5F.js +8 -0
- package/dist/chunks/direct/chunk-BMM5H6QF.js +11 -0
- package/dist/chunks/direct/chunk-C6HFNIDL.js +8 -0
- package/dist/chunks/direct/chunk-CBCZVCTZ.js +8 -0
- package/dist/chunks/direct/chunk-CBIKUVP6.js +11 -0
- package/dist/chunks/direct/chunk-CKB2ME2J.js +8 -0
- package/dist/chunks/direct/chunk-DBI23PBG.js +9 -0
- package/dist/chunks/direct/chunk-DBSQWRFS.js +9 -0
- package/dist/chunks/direct/chunk-DKGYPFGX.js +8 -0
- package/dist/chunks/direct/chunk-EOLHXX5I.js +8 -0
- package/dist/chunks/direct/chunk-IFPXDKUV.js +8 -0
- package/dist/chunks/direct/chunk-J3WYA3IJ.js +8 -0
- package/dist/chunks/direct/chunk-MCMOWPYL.js +8 -0
- package/dist/chunks/direct/chunk-MPTAIBY7.js +8 -0
- package/dist/chunks/direct/chunk-NQRDACK3.js +8 -0
- package/dist/chunks/direct/chunk-O5ETB2W5.js +8 -0
- package/dist/chunks/direct/chunk-OA6NU4KO.js +8 -0
- package/dist/chunks/direct/chunk-QKDE2HIF.js +10 -0
- package/dist/chunks/direct/chunk-RRSY2ZPX.js +13 -0
- package/dist/chunks/direct/chunk-UKQLRZEW.js +8 -0
- package/dist/chunks/direct/chunk-USZL65FN.js +8 -0
- package/dist/chunks/direct/chunk-WH6GL3J2.js +8 -0
- package/dist/chunks/direct/chunk-Y5OCKUQX.js +9 -0
- package/dist/chunks/direct/chunk-ZO44CZN5.js +8 -0
- package/dist/chunks/direct/chunk-ZSXRT7JL.js +12 -0
- package/dist/chunks/direct/chunk-ZUNPQVMO.js +8 -0
- package/dist/chunks/direct/execution-3T4B776P.js +9 -0
- package/dist/chunks/direct/execution-5BJNS7D7.js +8 -0
- package/dist/chunks/direct/execution-5O6QHKBR.js +8 -0
- package/dist/chunks/direct/execution-A4NK3BQO.js +8 -0
- package/dist/chunks/direct/execution-K4UOPXRQ.js +9 -0
- package/dist/chunks/direct/execution-SWWZOOA7.js +13 -0
- package/dist/chunks/direct/execution-X4MUJL4L.js +8 -0
- package/dist/chunks/direct/execution-XA6PXPRB.js +8 -0
- package/dist/chunks/direct/historyExecutions-6F3AA5PY.js +14 -0
- package/dist/direct.d.ts +6 -1
- package/dist/direct.js +2 -46
- package/dist/github/canonicalRepo.d.ts +2 -1
- package/dist/github/client.d.ts +3 -8
- package/dist/github/codeSearch/compactFragment.d.ts +7 -0
- package/dist/github/codeSearch.d.ts +2 -3
- package/dist/github/commit.d.ts +8 -0
- package/dist/github/commitDetail.d.ts +20 -0
- package/dist/github/commitSearch.d.ts +17 -0
- package/dist/github/compare.d.ts +15 -0
- package/dist/github/directoryFetch/cacheMetadata.d.ts +25 -0
- package/dist/github/directoryFetch/helpers.d.ts +1 -3
- package/dist/github/directoryFetch/snapshot.d.ts +10 -0
- package/dist/github/fileContentProcess.d.ts +0 -1
- package/dist/github/fileContentRaw/cache.d.ts +9 -0
- package/dist/github/fileContentRaw/fetch.d.ts +1 -1
- package/dist/github/githubAPI.d.ts +19 -2
- package/dist/github/history/commitFiles.d.ts +12 -0
- package/dist/github/issues/fetchers.d.ts +1 -1
- package/dist/github/issues/types.d.ts +3 -1
- package/dist/github/prContentFetcher/collectionPaging.d.ts +27 -0
- package/dist/github/prContentFetcher/comments.d.ts +7 -5
- package/dist/github/prContentFetcher/commits.d.ts +13 -14
- package/dist/github/prContentFetcher/flags.d.ts +0 -1
- package/dist/github/prContentFetcher/transform.d.ts +1 -1
- package/dist/github/prTransformation.d.ts +3 -1
- package/dist/github/queryBuilders/codeAndRepo.d.ts +2 -1
- package/dist/github/repoSearch.d.ts +2 -1
- package/dist/github/repoStructure/fetchOrchestration.d.ts +1 -1
- package/dist/github/repoStructurePagination.d.ts +1 -1
- package/dist/github/repoStructureTree.d.ts +4 -2
- package/dist/graph/advancedOperations.d.ts +2 -2
- package/dist/graph/buildFileGraph.d.ts +8 -13
- package/dist/graph/coverage.d.ts +6 -0
- package/dist/graph/diagnosticSnapshot.d.ts +10 -0
- package/dist/graph/fileImportLinker.d.ts +28 -0
- package/dist/graph/importResolver.d.ts +1 -1
- package/dist/graph/languageImportResolver.d.ts +5 -0
- package/dist/graph/metadataImports.d.ts +7 -0
- package/dist/graph/packageExportTargets.d.ts +11 -0
- package/dist/graph/rustCargoMetadata.d.ts +31 -0
- package/dist/graph/rustCargoProcess.d.ts +16 -0
- package/dist/graph/rustModules.d.ts +7 -0
- package/dist/graph/rustWorkspace.d.ts +5 -0
- package/dist/graph/types.d.ts +94 -3
- package/dist/graph/workspacePackageResolver.d.ts +7 -2
- package/dist/index.d.ts +46 -19
- package/dist/index.js +36 -45
- package/dist/providers/github/GitHubProvider.d.ts +3 -1
- package/dist/providers/github/githubContent.d.ts +3 -2
- package/dist/providers/github/githubPullRequests.d.ts +3 -2
- package/dist/providers/github/githubSearch.d.ts +6 -3
- package/dist/providers/github/githubStructure.d.ts +3 -2
- package/dist/providers/providerQueries.d.ts +4 -0
- package/dist/providers/providerResults.d.ts +29 -1
- package/dist/providers/types.d.ts +0 -2
- package/dist/schema.d.ts +9 -3
- package/dist/schema.js +4 -12
- package/dist/scheme/fields.d.ts +8 -8
- package/dist/scheme/pagination.d.ts +1 -0
- package/dist/serverConfig.d.ts +1 -1
- package/dist/shared/session/index.d.ts +1 -1
- package/dist/shared/session/index.js +1 -1
- package/dist/shared/session/storage.d.ts +0 -1
- package/dist/toolContract/descriptions.d.ts +6 -6
- package/dist/toolContract/input/resources/tools/ghSearch.d.ts +21 -20
- package/dist/toolContract/input/resources/tools/githubHistorySchema.d.ts +14 -6
- package/dist/toolContract/input/resources/tools/githubRepositoriesOperation.d.ts +3 -3
- package/dist/toolContract/input/resources/tools/githubTreeOperation.d.ts +4 -2
- package/dist/toolContract/input/resources/tools/historyCommitInput.d.ts +9 -0
- package/dist/toolContract/input/resources/tools/historyIssueInput.d.ts +4 -4
- package/dist/toolContract/input/resources/tools/historyPullRequestInput.d.ts +13 -5
- package/dist/toolContract/input/resources/tools/localAnalyzeGraph.d.ts +74 -32
- package/dist/toolContract/input/resources/tools/localFilesOperation.d.ts +2 -2
- package/dist/toolContract/input/resources/tools/localSearch.d.ts +44 -44
- package/dist/toolContract/input/resources/tools/localTextOperation.d.ts +1 -1
- package/dist/toolContract/input/resources/tools/localTreeOperation.d.ts +2 -2
- package/dist/toolContract/input/resources/tools/lspGetSemantics.d.ts +11 -2
- package/dist/toolContract/input/resources/tools/npmSearch.d.ts +2 -1
- package/dist/toolContract/metadata.d.ts +1 -1
- package/dist/toolContract/runtime.d.ts +1 -1
- package/dist/toolContract/types.d.ts +0 -1
- package/dist/tools/directToolCatalog/toolCatalogDefinitions.d.ts +2 -4
- package/dist/tools/directToolCatalog/toolInputPreparation.d.ts +2 -5
- package/dist/tools/directToolCatalog.exec.d.ts +10 -7
- package/dist/tools/github_clone_repo/cache.d.ts +0 -2
- package/dist/tools/github_clone_repo/cacheArtifacts.d.ts +3 -1
- package/dist/tools/github_clone_repo/cachePaths.d.ts +3 -2
- package/dist/tools/github_clone_repo/gitCheckout.d.ts +5 -0
- package/dist/tools/github_clone_repo/scheme.d.ts +3 -3
- package/dist/tools/github_clone_repo/types.d.ts +6 -1
- package/dist/tools/github_fetch_content/finalizer/types.d.ts +10 -2
- package/dist/tools/github_fetch_content/scheme.d.ts +3 -4
- package/dist/tools/github_fetch_content/types.d.ts +4 -3
- package/dist/tools/github_search/scheme.d.ts +24 -23
- package/dist/tools/github_search_code/execution.d.ts +1 -1
- package/dist/tools/github_search_code/finalizer/groups.d.ts +1 -1
- package/dist/tools/github_search_code/finalizer/ranking.d.ts +1 -1
- package/dist/tools/github_search_code/scheme.d.ts +3 -3
- package/dist/tools/github_search_pull_requests/contentResponse/commentsShaping.d.ts +4 -1
- package/dist/tools/github_search_pull_requests/contentResponse/contentView.d.ts +3 -0
- package/dist/tools/github_search_pull_requests/contentResponse/fileSurfaces.d.ts +30 -2
- package/dist/tools/github_search_pull_requests/contentResponse/nextCalls.d.ts +1 -7
- package/dist/tools/github_search_pull_requests/contentResponse/pagination.d.ts +14 -2
- package/dist/tools/github_search_pull_requests/historyContinuations.d.ts +1 -1
- package/dist/tools/github_search_pull_requests/historyDiffContinuations.d.ts +2 -0
- package/dist/tools/github_search_pull_requests/historySchemes.d.ts +23 -22
- package/dist/tools/github_search_pull_requests/scheme.d.ts +17 -9
- package/dist/tools/github_search_pull_requests/splitSchemes.d.ts +35 -26
- package/dist/tools/github_search_pull_requests/types.d.ts +5 -0
- package/dist/tools/github_search_repos/execution/pagination.d.ts +0 -17
- package/dist/tools/github_search_repos/execution/queryVariants.d.ts +1 -23
- package/dist/tools/github_search_repos/execution.d.ts +0 -1
- package/dist/tools/github_search_repos/scheme.d.ts +6 -6
- package/dist/tools/github_view_repo_structure/execution.d.ts +1 -1
- package/dist/tools/github_view_repo_structure/scheme.d.ts +6 -5
- package/dist/tools/local_analyze_graph/analysisTypes.d.ts +16 -3
- package/dist/tools/local_analyze_graph/analyzeGraph.d.ts +1 -1
- package/dist/tools/local_analyze_graph/completeness.d.ts +3 -0
- package/dist/tools/local_analyze_graph/deadCodeScan.d.ts +9 -5
- package/dist/tools/local_analyze_graph/rootInference.d.ts +2 -0
- package/dist/tools/local_analyze_graph/scheme.d.ts +13 -25
- package/dist/tools/local_fetch_content/fetchContent/pagination.d.ts +7 -0
- package/dist/tools/local_fetch_content/scheme.d.ts +3 -3
- package/dist/tools/local_find_files/findFiles.d.ts +1 -1
- package/dist/tools/local_find_files/scheme.d.ts +4 -4
- package/dist/tools/local_ripgrep/execution.d.ts +0 -1
- package/dist/tools/local_ripgrep/rankingProfile/rankingProfiles.d.ts +1 -2
- package/dist/tools/local_ripgrep/rankingProfile/rankingResults.d.ts +2 -2
- package/dist/tools/local_ripgrep/rankingProfile/rankingScoring.d.ts +1 -3
- package/dist/tools/local_ripgrep/ripgrepResultBuilder/buildResult.d.ts +0 -4
- package/dist/tools/local_ripgrep/ripgrepResultBuilder/searchNext.d.ts +1 -0
- package/dist/tools/local_ripgrep/scheme.d.ts +13 -5
- package/dist/tools/local_ripgrep/structuralCompleteness.d.ts +9 -0
- package/dist/tools/local_search/execution.d.ts +0 -1
- package/dist/tools/local_search/scheme.d.ts +47 -47
- package/dist/tools/local_view_structure/scheme.d.ts +5 -5
- package/dist/tools/lsp/semantic_content/scheme.d.ts +29 -7
- package/dist/tools/lsp/semantic_content/semanticAnchored.d.ts +2 -9
- package/dist/tools/lsp/semantic_content/semanticEnvelopes/callEnvelopes.d.ts +2 -2
- package/dist/tools/lsp/semantic_content/semanticEnvelopes/envelopeHelpers.d.ts +2 -1
- package/dist/tools/lsp/semantic_content/semanticEnvelopes/locationEnvelopes.d.ts +2 -3
- package/dist/tools/lsp/semantic_content/semanticFileOps/anchor.d.ts +0 -1
- package/dist/tools/lsp/semantic_content/semanticPresentation.d.ts +1 -0
- package/dist/tools/lsp/semantic_content/semanticSnapshot.d.ts +16 -0
- package/dist/tools/lsp/shared/callHierarchyTraversal.d.ts +2 -1
- package/dist/tools/lsp/shared/semanticTypes.d.ts +19 -10
- package/dist/tools/package_search/execution.d.ts +3 -4
- package/dist/tools/package_search/pagination.d.ts +1 -0
- package/dist/tools/package_search/scheme.d.ts +5 -4
- package/dist/tools/providerMappers/codeSearch.d.ts +2 -9
- package/dist/tools/providerMappers/fileContent.d.ts +1 -1
- package/dist/tools/providerMappers/pullRequests.d.ts +24 -4
- package/dist/tools/providerMappers/repoSearch.d.ts +4 -4
- package/dist/tools/providerMappers/repoStructure.d.ts +4 -3
- package/dist/tools/toolAvailability.d.ts +19 -0
- package/dist/tools/toolConfig.d.ts +1 -3
- package/dist/types/toolResults.d.ts +1 -0
- package/dist/utils/contextUtils.d.ts +1 -1
- package/dist/utils/core/types.d.ts +0 -2
- package/dist/utils/exec/npm.d.ts +2 -0
- package/dist/utils/file/byteOffset.d.ts +1 -1
- package/dist/utils/package/common.d.ts +0 -3
- package/dist/utils/package/npm/npmDeprecation.d.ts +1 -2
- package/dist/utils/package/npm/npmDetailsFetchers.d.ts +3 -15
- package/dist/utils/package/npm/npmMappers.d.ts +0 -4
- package/dist/utils/package/npm/npmRegistry.d.ts +9 -1
- package/dist/utils/package/npm/npmSearchStrategies.d.ts +2 -5
- package/dist/utils/package/types.d.ts +3 -0
- package/dist/utils/pagination/types.d.ts +1 -0
- package/dist/utils/response/callToolResult.d.ts +3 -1
- package/package.json +23 -19
- package/dist/errors/pathUtils.d.ts +0 -1
- package/dist/github/directoryFetch.d.ts +0 -3
- package/dist/github/fileContentRaw.d.ts +0 -2
- package/dist/github/issues.d.ts +0 -3
- package/dist/github/prContentFetcher.d.ts +0 -2
- package/dist/github/queryBuilders.d.ts +0 -4
- package/dist/github/repoStructure.d.ts +0 -1
- package/dist/shared/index.d.ts +0 -6
- package/dist/shared/languageSelectors.d.ts +0 -3
- package/dist/toolContract/schemas.d.ts +0 -31
- package/dist/tools/directToolCatalog.d.ts +0 -15
- package/dist/tools/directToolCatalog.meta.d.ts +0 -28
- package/dist/tools/github_search_code/finalizer.d.ts +0 -2
- package/dist/tools/github_search_repos/execution/ranking.d.ts +0 -4
- package/dist/tools/local_ripgrep/rankingProfile.d.ts +0 -35
- package/dist/tools/local_ripgrep/ripgrepResultBuilder.d.ts +0 -2
- package/dist/tools/lsp/semantic_content/index.d.ts +0 -3
- package/dist/tools/lsp/semantic_content/semanticEnvelopes.d.ts +0 -3
- package/dist/tools/lsp/semantic_content/semanticFileOps.d.ts +0 -8
- package/dist/tools/providerMappers.d.ts +0 -11
- package/dist/tools/toolMetadata/baseSchema.d.ts +0 -1
- package/dist/tools/toolMetadata/descriptions.d.ts +0 -1
- package/dist/tools/toolMetadata/proxies.d.ts +0 -4
- package/dist/tools/toolSchemaImports.d.ts +0 -16
- package/dist/utils/exec/spawn.d.ts +0 -2
- package/dist/utils/file/filters.d.ts +0 -2
- package/dist/utils/http/cache.d.ts +0 -5
- package/dist/utils/package/npm.d.ts +0 -2
- package/dist/utils/response/bulk.d.ts +0 -2
package/dist/index.js
CHANGED
|
@@ -5,53 +5,44 @@ import { dirname as __dirname_fn } from 'path';
|
|
|
5
5
|
const require = __createRequire(import.meta.url);
|
|
6
6
|
const __filename = __fileURLToPath(import.meta.url);
|
|
7
7
|
const __dirname = __dirname_fn(__filename);
|
|
8
|
-
|
|
9
|
-
Caused by: ${o.stack}`),Object.setPrototypeOf(this,e.prototype)}isRecoverable(){return this.recoverability==="recoverable"}requiresUserAction(){return this.recoverability==="user-action-required"}toJSON(){return{name:this.name,errorCode:this.errorCode,category:this.category,message:this.message,recoverability:this.recoverability,context:this.context,stack:this.stack}}}
|
|
10
|
-
`)}return null}async function Oc(e=bn){let t=await Sn({hostname:e,getGhCliToken:()=>null});return t?{token:t.token,source:t.source}:null}async function vc(e=bn,t=hr){let n=await Sn({hostname:e,clientId:t,getGhCliToken:()=>null});return n?{token:n.token,source:n.source,wasRefreshed:n.wasRefreshed,username:n.username}:null}async function Fc(e){let t=Bt(e.hostname),n={...e,hostname:t,updatedAt:new Date().toISOString()};try{let r=Jt();return r.credentials[t]=n,_c(r),wo(t),{success:!0}}catch{throw new Error("Failed to store credentials")}}async function Un(e="github.com",t){let n=Bt(e);if(!t?.bypassCache){let i=lm(n);if(i!==void 0)return i}let o=Jt().credentials[n]||null;return um(n,o),o}function Ji(e="github.com"){let t=Bt(e);return Jt().credentials[t]||null}async function xm(e="github.com"){let t=Bt(e),n=!1,r=Jt();return r.credentials[t]&&(delete r.credentials[t],Object.keys(r.credentials).length===0?Sm():_c(r),n=!0),wo(t),{success:n,deletedFromFile:n}}async function wm(){let e=Jt();return Object.keys(e.credentials)}function Pm(){let e=Jt();return Object.keys(e.credentials)}async function Tm(e="github.com"){return await Un(e)!==null}function Em(e="github.com"){return Ji(e)!==null}async function es(e,t){let n=await Un(e);return n?(n.token=t,n.updatedAt=new Date().toISOString(),await Fc(n),!0):!1}function Am(){return qt}async function Lm(e="github.com"){let t=await Un(e);return!t||!t.token||Zt(t)?null:t.token.token}function _m(e="github.com"){let t=Ji(e);return!t||!t.token||Zt(t)?null:t.token.token}async function km(e,t){return kc({getCredentials:Un,updateToken:es},e,t)}async function Mc(e,t){return Rm({getCredentials:Un,updateToken:es},e,t)}Cm({getTokenWithRefresh:Mc});import yr from"node:os";import Im from"node:path";var Po=yr.platform()==="win32",Nc=yr.platform()==="darwin",Dc=yr.platform()==="linux",gr=yr.homedir();function Om(){return Po?process.env.APPDATA||Im.join(gr,"AppData","Roaming"):gr}function vm(){return Po?process.env.LOCALAPPDATA||Im.join(gr,"AppData","Local"):gr}function Fm(){return Nc?"macOS":Po?"Windows":Dc?"Linux":yr.platform()}function Mm(){return yr.arch()}import{randomUUID as rx}from"node:crypto";import{existsSync as Hc,readFileSync as Bm,writeFileSync as XC,unlinkSync as YC,renameSync as ZC}from"node:fs";import{isPersistentStorageEnabled as zm,isStatsEnabled as jm}from"@octocodeai/config";import{z as Y}from"zod";var $C=Y.object({rawChars:Y.number(),responseChars:Y.number(),savedChars:Y.number(),calls:Y.number()}),WC=Y.object({hits:Y.record(Y.string(),Y.number()).default({}),rateLimits:Y.number().default(0)}),ts=Y.record(Y.string(),Y.number()).default({}),VC=Y.object({toolCalls:Y.number(),errors:Y.number(),rateLimits:Y.number(),rateLimitsByProvider:ts,rawChars:Y.number(),responseChars:Y.number(),savedChars:Y.number(),charSavingsCalls:Y.number(),githubCacheHits:Y.number(),githubCacheRateLimits:Y.number(),packageRegistryFailures:Y.number().default(0),packageRegistryFailuresByRegistry:ts}),ns=Y.object({toolCalls:Y.number(),errors:Y.number(),rateLimits:Y.number(),rateLimitsByProvider:ts,charsSavedByTool:Y.record(Y.string(),$C).default({}),githubCacheHits:WC.default({hits:{},rateLimits:0}),packageRegistryFailures:ts,totalUsage:VC.optional()}),Nm=Y.object({version:Y.literal(1),sessionId:Y.string(),createdAt:Y.string(),lastActiveAt:Y.string(),stats:ns.optional()}),Dm=Y.object({version:Y.literal(1),stats:ns});function Hm(e){return Object.values(e).reduce((t,n)=>t+n,0)}function KC(e){let t=e.charsSavedByTool??{},n=e.githubCacheHits??{hits:{},rateLimits:0},r=e.rateLimitsByProvider??{},o=e.packageRegistryFailures??{},i=Object.values(t).reduce((s,a)=>({rawChars:s.rawChars+a.rawChars,responseChars:s.responseChars+a.responseChars,savedChars:s.savedChars+a.savedChars,charSavingsCalls:s.charSavingsCalls+a.calls}),{rawChars:0,responseChars:0,savedChars:0,charSavingsCalls:0});return{toolCalls:e.toolCalls,errors:e.errors,rateLimits:e.rateLimits,rateLimitsByProvider:r,...i,githubCacheHits:Hm(n.hits),githubCacheRateLimits:n.rateLimits,packageRegistryFailures:Hm(o),packageRegistryFailuresByRegistry:o}}function Rn(e){let t={...e,rateLimitsByProvider:e.rateLimitsByProvider??{},charsSavedByTool:e.charsSavedByTool??{},githubCacheHits:e.githubCacheHits??{hits:{},rateLimits:0},packageRegistryFailures:e.packageRegistryFailures??{}};return{...t,totalUsage:KC(t)}}function Cn(){return Rn({toolCalls:0,errors:0,rateLimits:0,rateLimitsByProvider:{},charsSavedByTool:{},githubCacheHits:{hits:{},rateLimits:0},packageRegistryFailures:{}})}var $n=ze.session,Wn=ze.stats;function Gm(e,t){let n=`${e}.tmp`;XC(n,JSON.stringify(t,null,2),{mode:384}),ZC(n,e)}function qC(e){let t=JSON.parse(e),n=Dm.safeParse(t);if(n.success)return Rn(n.data.stats);let r=ns.safeParse(t);return r.success?Rn(r.data):null}function JC(){if(!Hc(Wn))return Cn();try{let e=Bm(Wn,"utf8");return qC(e)??Cn()}catch{return Cn()}}function rs(e){if(!zm())return;yn(),jm()&&Gm(Wn,{version:e.version,stats:Rn(e.stats)});let{stats:t,...n}=e;Gm($n,n)}function Qm(){if(!zm()||!Hc($n))return null;try{let e=Bm($n,"utf8"),t=JSON.parse(e),n=Nm.safeParse(t);return n.success?{...n.data,stats:jm()?JC():Cn()}:null}catch{return null}}function Um(){let e=!1;for(let t of[$n,Wn])if(Hc(t))try{YC(t),e=!0}catch{return!1}return e}var ex=6e4,Lt=null,xn=!1,br=null,Gc=!1,To=null,Eo=null,Ao=null,os=!1;function tx(){Gc||(Gc=!0,To=()=>{Lo()},Eo=()=>{Lo()},Ao=()=>{Lo()},process.on("exit",To),process.on("SIGINT",Eo),process.on("SIGTERM",Ao))}function Bc(){To&&(process.removeListener("exit",To),To=null),Eo&&(process.removeListener("SIGINT",Eo),Eo=null),Ao&&(process.removeListener("SIGTERM",Ao),Ao=null),Gc=!1}function nx(){br||(br=setInterval(()=>{xn&&Lt&&(rs(Lt),xn=!1)},ex),br.unref())}function zc(){br&&(clearInterval(br),br=null)}function _o(){if(Lt)return Lt;let e=Qm();return e&&(Lt=e),e}function Sr(e){Lt=e,xn=!0,tx(),nx()}function ko(){xn&&Lt&&(rs(Lt),xn=!1)}function Lo(){if(!os&&xn&&Lt){os=!0;try{rs(Lt),xn=!1}catch{}finally{os=!1}}}function jc(){Lt=null,xn=!1,os=!1}function $m(){jc(),zc(),Bc()}var ox=1;function ix(e){return Rn(e)}function sx(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t)){let i=n[r]??{rawChars:0,responseChars:0,savedChars:0,calls:0};n[r]={rawChars:i.rawChars+o.rawChars,responseChars:i.responseChars+o.responseChars,savedChars:i.savedChars+o.savedChars,calls:i.calls+o.calls}}return n}function Wm(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t))n[r]=(n[r]??0)+o;return n}function ax(e,t){if(!t)return e;let n={...e.hits};for(let[r,o]of Object.entries(t.hits??{}))n[r]=(n[r]??0)+o;return{hits:n,rateLimits:e.rateLimits+(t.rateLimits??0)}}function Vm(){let e=new Date().toISOString();return{version:ox,sessionId:rx(),createdAt:e,lastActiveAt:e,stats:Cn()}}function Km(){ko()}function Xm(){Lo()}function Ym(e){if(e?.forceNew){let r=Vm();return Sr(r),ko(),r}let t=_o();if(t){let r={...t,lastActiveAt:new Date().toISOString()};return Sr(r),ko(),r}let n=Vm();return Sr(n),ko(),n}function Zm(){return _o()?.sessionId??null}function dt(e){let t=_o();if(!t)return{success:!1,session:null};let n=ix(t.stats),r=Rn({toolCalls:n.toolCalls+(e.toolCalls??0),errors:n.errors+(e.errors??0),rateLimits:n.rateLimits+(e.rateLimits??0),rateLimitsByProvider:Wm(n.rateLimitsByProvider,e.rateLimitsByProvider),charsSavedByTool:sx(n.charsSavedByTool,e.charsSavedByTool),githubCacheHits:ax(n.githubCacheHits,e.githubCacheHits),packageRegistryFailures:Wm(n.packageRegistryFailures,e.packageRegistryFailures)}),o={...t,lastActiveAt:new Date().toISOString(),stats:r};return Sr(o),{success:!0,session:o}}function qm(e=1){return dt({toolCalls:e})}function Jm(e=1){return dt({errors:e})}function is(e=1){return dt({rateLimits:e})}function ef(e,t=1){return dt({rateLimits:t,rateLimitsByProvider:{[e]:t}})}function ss(e,t,n){let r=Number.isFinite(t)?Math.max(0,t):0,o=Number.isFinite(n)?Math.max(0,n):0;return dt({charsSavedByTool:{[e]:{rawChars:r,responseChars:o,savedChars:Math.max(0,r-o),calls:1}}})}function as(e,t=1){return dt({githubCacheHits:{hits:{[e]:t},rateLimits:0}})}function cs(e=1){return dt({githubCacheHits:{hits:{},rateLimits:e}})}function tf(e,t=1){return dt({packageRegistryFailures:{[e]:t}})}function nf(){let e=_o();if(!e)return{success:!1,session:null};let t={...e,lastActiveAt:new Date().toISOString(),stats:Cn()};return Sr(t),{success:!0,session:t}}function rf(){return jc(),zc(),Bc(),Um()}function of(){$m()}import{z as Ce}from"zod";var sf=Ce.looseObject({$schema:Ce.string().optional(),version:Ce.number().int().optional(),github:Ce.record(Ce.string(),Ce.unknown()).optional(),local:Ce.record(Ce.string(),Ce.unknown()).optional(),tools:Ce.record(Ce.string(),Ce.unknown()).optional(),network:Ce.record(Ce.string(),Ce.unknown()).optional(),lsp:Ce.record(Ce.string(),Ce.unknown()).optional(),output:Ce.record(Ce.string(),Ce.unknown()).optional()});import{existsSync as cx,readdirSync as lx,lstatSync as ux}from"node:fs";import{join as px}from"node:path";function Io(e){if(!cx(e))return 0;let t=0,n=[e];for(;n.length>0;){let r=n.pop(),o;try{o=lx(r)}catch{continue}for(let i of o){let s=px(r,i);try{let a=ux(s);if(a.isSymbolicLink())continue;a.isDirectory()?n.push(s):a.isFile()&&(t+=a.size)}catch{}}}return t}function dx(e){if(e<1024)return`${e} B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)} KB`;let n=t/1024;return n<1024?`${n.toFixed(1)} MB`:`${(n/1024).toFixed(2)} GB`}import{getConfigSync as Uf}from"@octocodeai/config";var Vn="18.2.0";import{maskSensitiveData as xw}from"@octocodeai/octocode-engine/mask";import{mkdirSync as Nf,readFileSync as pw,renameSync as Hf,rmSync as Gf,statSync as dw,writeFileSync as mw}from"node:fs";import{join as qc}from"node:path";import{isPersistentStorageEnabled as Bf}from"@octocodeai/config";import{existsSync as No,readFileSync as Tx,writeFileSync as Ex,mkdirSync as Ax,rmSync as Mo,readdirSync as Lx,statSync as _x}from"node:fs";import{join as wn}from"node:path";import{join as ls}from"node:path";import{createHash as af}from"node:crypto";function fx(e){return Oo(e)}function Oo(e){return ls(e,"tmp","clone")}function us(e){return ls(e,"tmp","tree")}function hx(e){return e?`__sp_${af("sha256").update(e).digest("hex").substring(0,6)}`:""}function gx(e){if(!/[\\/]/.test(e))return e;let t=af("sha256").update(e).digest("hex").substring(0,8);return`${e.replace(/[\\/]/g,"_")}__b_${t}`}function Qc(e,t,n,r,o){let i=`${gx(r)}${hx(o)}`;return ls(Oo(e),t,n,i)}function vo(e,t,n,r){if(!/^[0-9a-f]{40}$/i.test(r))throw new Error("Tree cache identity must be a 40-character commit SHA.");return ls(us(e),t,n,r.toLowerCase())}import{readFileSync as yx,readdirSync as bx,renameSync as Sx,rmSync as uf,statSync as pf,writeFileSync as Rx}from"node:fs";import{join as Rr}from"node:path";var Cx=900*1e3,cf=300*1e3,df=".octocode-lock.json";function xx(e){return typeof e=="object"&&e!==null}function lf(e){try{return bx(e)}catch{return[]}}function Uc(e,t=process.pid,n=Date.now()){try{Rx(Rr(e,df),JSON.stringify({pid:t,createdAt:n}),{encoding:"utf8",mode:384})}catch{}}function wx(e){try{let t=JSON.parse(yx(Rr(e,df),"utf8"));return!xx(t)||!Number.isInteger(t.pid)||t.pid<=0||typeof t.createdAt!="number"?null:{pid:t.pid,createdAt:t.createdAt}}catch{return null}}function Px(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function ps(e,t=Date.now()){let n,r=wx(e);if(r){if(n=r.createdAt,t-n<=cf||Px(r.pid))return!1}else{try{n=pf(e).mtimeMs}catch{return!1}if(t-n<=cf)return!1}let o=`${e}.stale-${process.pid}-${t}`;try{return Sx(e,o),uf(o,{recursive:!0,force:!0}),!0}catch{return!1}}function $c(e,t=Date.now()){let n=Rr(e,"tmp","clone-tmp"),r=0;for(let i of lf(n)){let s=Rr(n,i);try{let a=pf(s);if(t-a.mtimeMs<=Cx)continue;uf(s,{recursive:!0,force:!0}),r++}catch{}}let o=Rr(e,"tmp","clone-locks");for(let i of lf(o))ps(Rr(o,i),t)&&r++;return r}var kx=1440*60*1e3,Ix=2*1024*1024*1024,Ox=50,ff=".octocode-clone-meta.json";function vx(e){return typeof e=="object"&&e!==null}function Fx(e){if(!vx(e)||typeof e.clonedAt!="string"||typeof e.expiresAt!="string"||typeof e.owner!="string"||typeof e.repo!="string"||typeof e.branch!="string"||e.source!=="clone"&&e.source!=="directoryFetch"&&e.source!=="treeFetch")return null;let t={clonedAt:e.clonedAt,expiresAt:e.expiresAt,owner:e.owner,repo:e.repo,branch:e.branch,source:e.source};return typeof e.sparsePath=="string"&&(t.sparsePath=e.sparsePath),typeof e.sizeBytes=="number"&&(t.sizeBytes=e.sizeBytes),typeof e.commitSha=="string"&&e.commitSha.length===40&&(t.commitSha=e.commitSha),t}function Wc(e){let t=wn(e,ff);if(!No(t))return null;try{return Fx(JSON.parse(Tx(t,"utf-8")))}catch{return null}}function Cr(e,t){try{Ex(wn(e,ff),JSON.stringify(t,null,2),"utf-8")}catch{}}function hf(e){return Date.now()<new Date(e.expiresAt).getTime()}function xr(e){let t=Wc(e);return t?hf(t)?No(e)?{hit:!0,meta:t}:{hit:!1}:{hit:!1}:{hit:!1}}function Mx(){let e=process.env.OCTOCODE_CACHE_TTL_MS;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return kx}function Nx(){let e=process.env.OCTOCODE_MAX_CACHE_SIZE;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return Ix}function Dx(){let e=process.env.OCTOCODE_MAX_CLONES;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return Math.floor(t)}return Ox}function wr(e,t,n,r,o,i,s){let a=new Date;return{clonedAt:a.toISOString(),expiresAt:new Date(a.getTime()+Mx()).toISOString(),owner:e,repo:t,branch:n,source:r,...o?{sparsePath:o}:{},...i!=null?{sizeBytes:i}:{},...s?{commitSha:s}:{}}}function Pn(e){let t=wn(e,"..");try{No(t)||Ax(t,{recursive:!0,mode:448})}catch(n){throw new Error(`Failed to create clone parent directory '${t}': ${n instanceof Error?n.message:String(n)}`)}}function ds(e){try{No(e)&&Mo(e,{recursive:!0,force:!0})}catch{}}function Fo(e){try{return _x(e).isDirectory()}catch{return!1}}function Kn(e){try{return Lx(e)}catch{return[]}}function*gf(e){for(let t of Kn(e)){let n=wn(e,t);if(Fo(n))for(let r of Kn(n)){let o=wn(n,r);if(Fo(o))for(let i of Kn(o)){let s=wn(o,i);Fo(s)&&(yield s)}}}}function mf(e){for(let t of[...Kn(e)]){let n=wn(e,t);if(Fo(n)){for(let r of[...Kn(n)]){let o=wn(n,r);if(Fo(o)&&Kn(o).length===0)try{Mo(o,{recursive:!0,force:!0})}catch{}}if(Kn(n).length===0)try{Mo(n,{recursive:!0,force:!0})}catch{}}}}function Hx(e){let t=0;for(let n of gf(e))try{let r=Wc(n);(!r||!hf(r))&&(Mo(n,{recursive:!0,force:!0}),t++)}catch{}return t}function Gx(e){let t=[];for(let n of gf(e)){let r=Wc(n);if(!r)continue;let o=Number.isNaN(Date.parse(r.clonedAt))?0:Date.parse(r.clonedAt);t.push({branchDir:n,clonedAtMs:o,sizeBytes:r.sizeBytes??Io(n)})}return t}function Bx(e,t,n){let r=e.reduce((s,a)=>s+a.sizeBytes,0),o=e.length;if(r<=t&&o<=n)return 0;e.sort((s,a)=>s.clonedAtMs-a.clonedAtMs);let i=0;for(let s of e){if(r<=t&&o<=n)break;try{Mo(s.branchDir,{recursive:!0,force:!0}),i++,r-=s.sizeBytes,o-=1}catch{}}return i}function yf(e){if(!No(e))return 0;let t=0;try{t+=Hx(e)}catch{return t}mf(e);let n=Bx(Gx(e),Nx(),Dx());return t+=n,n>0&&mf(e),t}function ms(e){return yf(Oo(e))}function Pr(e){return yf(us(e))}import zx from"crypto";var jx="v2",Qx=new Set([]);function Ux(e){if(e===null||typeof e!="object"||Array.isArray(e))return e;let t=e,n=!1,r={};for(let o of Object.keys(t)){if(Qx.has(o)){n=!0;continue}r[o]=t[o]}return n?r:e}function xe(e,t,n){let r=Vc(Ux(t)),o=n?`${n}:${r}`:r,i=zx.createHash("sha256").update(o).digest("hex");return`${jx}-${e}:${i}`}function Vc(e,t=new WeakSet){return e===null?"null":e===void 0?"undefined":typeof e!="object"?String(e):t.has(e)?'"[Circular]"':(t.add(e),Array.isArray(e)?`[${e.map(o=>Vc(o,t)).join(",")}]`:`{${Object.keys(e).sort().map(o=>{let i=e[o];return`"${o}":${Vc(i,t)}`}).join(",")}}`)}import $x from"node-cache";var Wx=300*1e3,je=new $x({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1}),me={hits:0,misses:0,sets:0,totalKeys:0,lastReset:new Date},bf={"gh-api-code":3600,"gh-api-repos":7200,"gh-api-prs":1800,"gh-api-issues":1800,"gh-api-history":1800,"gh-api-releases":3600,"gh-api-file-content":300,"gh-repo-structure-api":7200,"github-user":900,"npm-search":14400,default:86400},it=new Map;function Vx(e){return e.match(/^v\d+-([^:]+):/)?.[1]}function Kx(e){return e.startsWith("gh-api-")||e.startsWith("gh-repo-")||e==="github-user"}function Xn(e){let t=Vx(e);if(!(!t||!Kx(t)))try{as(t,1)}catch{}}function fs(){let e=Date.now();for(let[t,n]of it.entries())e-n.startedAt>Wx&&it.delete(t)}function hs(e){return bf[e]||bf.default}function Yn(e,t,n){try{return je.set(e,t,n),me.sets++,me.totalKeys=je.keys().length,!0}catch{try{let r=je.keys();for(let o of r)je.get(o);return je.set(e,t,n),me.sets++,me.totalKeys=je.keys().length,!0}catch{return!1}}}import{createHash as Xx}from"node:crypto";import{chmod as Sf,mkdir as Cf,readFile as xf,readdir as Yx,rename as Rf,rm as Zx,stat as Kc,writeFile as wf}from"node:fs/promises";import{join as Do}from"node:path";import{isPersistentStorageEnabled as qx}from"@octocodeai/config";var Pf=1,Tf=5*1024*1024,Jx=5e3,ew=256*1024*1024,tw=1440*60*1e3,nw=900*1e3,Ef=".last-gc",_e={hits:0,misses:0,sets:0,errors:0,evictions:0};function gs(e,t){let n=Number(process.env[e]);return Number.isFinite(n)&&n>0?Math.floor(n):t}function Xc(){if(!qx())return!1;let e=process.env.OCTOCODE_DISK_CACHE?.trim().toLowerCase();return!(e==="false"||e==="0")}function Yc(e=gn()){return Do(e,"tmp","response")}function rw(e){return(e.match(/^v\d+-([^:]+):/)?.[1]??"default").replace(/[^a-zA-Z0-9._-]/g,"_")}function Af(e,t=gn()){let n=Xx("sha256").update(e).digest("hex");return Do(Yc(t),rw(e),n.slice(0,2),`${n}.json`)}function Lf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ow(e,t){let n;try{n=JSON.parse(e)}catch{return null}return!Lf(n)||n.version!==Pf||n.key!==t||typeof n.createdAt!="number"||typeof n.expiresAt!="number"||typeof n.staleUntil!="number"||!("value"in n)||n.etag!==void 0&&typeof n.etag!="string"?null:n}async function en(e){try{await Zx(e,{force:!0,recursive:!0})}catch{}}async function ys(e,t={}){if(!Xc())return;let n=Af(e);try{let r=await Kc(n);if(!r.isFile()||r.size>gs("OCTOCODE_DISK_CACHE_MAX_ENTRY_SIZE",Tf)){await en(n),_e.errors++;return}let o=ow(await xf(n,"utf8"),e);if(!o){await en(n),_e.errors++;return}let i=Date.now();if(i>=o.staleUntil){await en(n),_e.evictions++,_e.misses++;return}if(i>=o.expiresAt&&!t.allowStale){_e.misses++;return}return _e.hits++,{value:o.value,...o.etag?{etag:o.etag}:{},state:i<o.expiresAt?"fresh":"stale",expiresAt:o.expiresAt}}catch(r){r.code!=="ENOENT"&&_e.errors++,_e.misses++;return}}async function Ho(e,t,n,r={}){if(!Xc())return!1;let o=Date.now(),i=Math.max(1,n*1e3),s=Math.max(i,(r.staleTtlSeconds??n)*1e3),a={version:Pf,key:e,createdAt:o,expiresAt:o+i,staleUntil:o+s,value:t,...r.etag?{etag:r.etag}:{}},c;try{c=JSON.stringify(a)}catch{return _e.errors++,!1}if(c===void 0||Buffer.byteLength(c)>gs("OCTOCODE_DISK_CACHE_MAX_ENTRY_SIZE",Tf))return!1;let l=Af(e),u=Do(l,".."),p=`${l}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;try{await Cf(u,{recursive:!0,mode:448}),await Sf(u,448),await wf(p,c,{encoding:"utf8",mode:384}),await Sf(p,384);try{await Rf(p,l)}catch(d){let m=d.code;if(m!=="EEXIST"&&m!=="EPERM")throw d;await en(l),await Rf(p,l)}return _e.sets++,!0}catch{return _e.errors++,await en(p),!1}}async function iw(e){let t=[],n=[e];for(;n.length>0;){let r=n.pop(),o;try{o=await Yx(r,{withFileTypes:!0})}catch{continue}for(let i of o){let s=Do(r,i.name);i.isDirectory()?n.push(s):i.isFile()&&i.name!==Ef&&t.push(s)}}return t}async function _f(e,t,n){if(!Xc())return 0;let r=Yc(e),o=Do(r,Ef);if(n)try{let p=await Kc(o);if(t-p.mtimeMs<tw)return 0}catch{}let i=0,s=await iw(r),a=gs("OCTOCODE_DISK_CACHE_MAX_ENTRIES",Jx),c=gs("OCTOCODE_DISK_CACHE_MAX_SIZE",ew),l=[],u=0;for(let p of s)try{let d=await Kc(p);if(p.includes(".tmp-")){t-d.mtimeMs>nw&&(await en(p),i++);continue}let m=await xf(p,"utf8"),f;try{f=JSON.parse(m)}catch{f=null}if(!Lf(f)||typeof f.staleUntil!="number"||t>=f.staleUntil){await en(p),i++;continue}l.push({path:p,size:d.size,modified:d.mtimeMs}),u+=d.size}catch{}for(l.sort((p,d)=>p.modified-d.modified);l.length>a||u>c;){let p=l.shift();if(!p)break;await en(p.path),u-=p.size,i++}try{await Cf(r,{recursive:!0,mode:448}),await wf(o,String(t),{encoding:"utf8",mode:384})}catch{_e.errors++}return _e.evictions+=i,i}function PM(e=gn(),t=Date.now()){return _f(e,t,!0)}function kf(e=gn(),t=Date.now()){return _f(e,t,!1)}async function TM(e=gn()){await en(Yc(e))}function If(){return{..._e}}function Of(){_e.hits=0,_e.misses=0,_e.sets=0,_e.errors=0,_e.evictions=0}import{AsyncLocalStorage as sw}from"node:async_hooks";var bs=new sw;async function vf(e){let t={hit:!1};return{value:await bs.run({root:t,depth:0,role:"response"},e),cacheHit:t.hit}}function Ss(e,t="response"){let n=bs.getStore();return n?bs.run({root:n.root,depth:n.depth+1,role:t},e):e()}function tn(){let e=bs.getStore();e&&e.depth<=1&&e.role==="response"&&(e.root.hit=!0)}function aw(e,t){if(t)return t;let n=e.match(/^v\d+-([^:]+):/);return hs(n?.[1]??"default")}async function De(e,t,n={}){return Ss(()=>cw(e,t,n),n.cacheRole)}async function cw(e,t,n){if(n.skipCache)return await t();if(!n.forceRefresh){try{let a=je.get(e);if(a!==void 0)return me.hits++,Xn(e),tn(),a}catch{}let s=await ys(e);if(s?.state==="fresh")return me.hits++,Xn(e),tn(),Yn(e,s.value,Math.max(1,(s.expiresAt-Date.now())/1e3)),s.value}fs();let r=it.get(e);if(r)return r.promise;let o=Symbol(e),i=(async()=>{try{let s=await t();if(n.forceRefresh||me.misses++,(n.shouldCache??(()=>!0))(s)){let c=aw(e,n.ttl);Yn(e,s,c),await Ho(e,s,c)}return s}finally{it.get(e)?.requestId===o&&it.delete(e)}})();return it.set(e,{promise:i,startedAt:Date.now(),requestId:o}),i}import lw from"node-cache";var Ff=86400;function Mf(e,t){if(t)return t;let n=e.match(/^v\d+-([^:]+):/);return hs(n?.[1]??"default")}var Tr=new lw({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1});async function Rs(e,t,n={}){return Ss(()=>uw(e,t,n),n.cacheRole)}async function uw(e,t,n){if(n.skipCache)return(await t({})).value;let r;if(!n.forceRefresh){try{let a=je.get(e);if(a!==void 0)return me.hits++,Xn(e),tn(),a}catch{}if(r=await ys(e,{allowStale:!0}),r?.state==="fresh")return me.hits++,Xn(e),tn(),Yn(e,r.value,Math.max(1,(r.expiresAt-Date.now())/1e3)),r.etag&&Tr.set(e,{data:r.value,etag:r.etag}),r.value}fs();let o=it.get(e);if(o)return o.promise;let i=Symbol(e),s=(async()=>{try{let c=(n.forceRefresh?void 0:Tr.get(e))??(r?{data:r.value,etag:r.etag}:void 0),l=await t({ifNoneMatch:!n.forceRefresh&&c?.etag?c.etag:void 0});if(l.notModified&&c){me.hits++,Xn(e),tn();let p=Mf(e,n.ttl);return Yn(e,c.data,p),await Ho(e,c.data,p,{...c.etag?{etag:c.etag}:{},staleTtlSeconds:Ff}),c.data}if(n.forceRefresh||me.misses++,(n.shouldCache??(()=>!0))(l.value)){let p=Mf(e,n.ttl);Yn(e,l.value,p),Tr.set(e,{data:l.value,etag:l.etag}),await Ho(e,l.value,p,{...l.etag?{etag:l.etag}:{},staleTtlSeconds:Ff})}return l.value}finally{it.get(e)?.requestId===i&&it.delete(e)}})();return it.set(e,{promise:s,startedAt:Date.now(),requestId:i}),s}function zM(){je.flushAll(),Tr.flushAll(),it.clear(),me.hits=0,me.misses=0,me.sets=0,me.totalKeys=0,me.lastReset=new Date,Of()}function Tn(e){let t=je.keys(),n=0;for(let r of t){let i=r.match(/^v\d+-([^:]+):/)?.[1];!i||!i.startsWith(e)||je.del(r)>0&&n++}return n>0&&(me.totalKeys=je.keys().length),n}function jM(){return Tn("local-")}function QM(){return Tn("lsp-")}function UM(){let e=0;return e+=Tn("gh-api-"),e+=Tn("bb-api-"),e+=Tn("gh-repo-"),e+=Tn("bb-repo-"),e+=Tn("github-user"),e+=Tn("npm-search"),Tr.flushAll(),e}function $M(){let e=me.hits+me.misses,t=If();return{...me,hitRate:e>0?me.hits/e*100:0,cacheSize:je.keys().length,diskHits:t.hits,diskMisses:t.misses,diskSets:t.sets,diskErrors:t.errors,diskEvictions:t.evictions}}var Df=1440*60*1e3,fw=60*1e3,hw=900*1e3,gw=".last-cache-maintenance",yw=".cache-maintenance.lock",Er=null,xs=null,Cs=new Map;function zf(e){return qc(e,"tmp")}function jf(e){return qc(zf(e),gw)}function bw(e){try{let t=Number(pw(jf(e),"utf8"));return Number.isFinite(t)&&t>=0?t:null}catch{return null}}function Zc(e,t=Date.now()){let n=bw(e);return n===null?0:Math.min(Df,Math.max(0,n+Df-t))}function Sw(e,t){let n=zf(e),r=qc(n,yw);try{Nf(n,{recursive:!0,mode:448})}catch{return null}let o=()=>{try{return Nf(r,{mode:448}),!0}catch{return!1}};if(o())return r;try{if(t-dw(r).mtimeMs<=hw)return null;let i=`${r}.stale-${process.pid}-${t}`;Hf(r,i),Gf(i,{recursive:!0,force:!0})}catch{return null}return o()?r:null}function Rw(e,t){let n=jf(e),r=`${n}.tmp-${process.pid}-${t}`;mw(r,String(t),{encoding:"utf8",mode:384}),Hf(r,n)}async function Cw(e,t){if(Zc(e,t)>0)return!1;let n=Sw(e,t);if(!n)return!1;try{if(Zc(e,t)>0)return!1;try{return ms(e),Pr(e),$c(e,t),await kf(e,t),Rw(e,t),!0}catch{return!1}}finally{try{Gf(n,{recursive:!0,force:!0})}catch{}}}function Ar(e,t=Date.now()){if(!Bf())return Promise.resolve(!1);let n=Cs.get(e);if(n)return n;let r=Cw(e,t).finally(()=>{Cs.get(e)===r&&Cs.delete(e)});return Cs.set(e,r),r}function Qf(e){if(xs!==e)return;let t=Math.max(fw,Zc(e));Er=setTimeout(()=>{Er=null,Ar(e).finally(()=>{Qf(e)})},t),Er.unref()}function iN(e){Bf()&&xs===null&&(xs=e,Ar(e).finally(()=>{Qf(e)}))}function sN(){xs=null,Er&&clearTimeout(Er),Er=null}var En=null,Lr=null,Jc=Sn;function fN(e){e.resolveTokenFull&&(Jc=e.resolveTokenFull)}function hN(){Jc=Sn}var ww=new Set(["env:OCTOCODE_TOKEN","env:GH_TOKEN","env:GITHUB_TOKEN","env:GITHUB_PERSONAL_ACCESS_TOKEN","octocode-storage","gh-cli","none"]);async function el(){try{let e=await Jc({hostname:"github.com"});if(e?.token){let t=e.source??"none";return{token:e.token,source:ww.has(t)?t:"none"}}return{token:null,source:"none"}}catch{return{token:null,source:"none"}}}async function $f(){if(En!==null)return;if(Lr!==null)return Lr;let e=(async()=>{let t=Uf(),n=await el();En={version:Vn,githubApiUrl:t.github.apiUrl,toolsToRun:t.tools.enabled??void 0,disableTools:t.tools.disabled??void 0,timeout:t.network.timeout,maxRetries:t.network.maxRetries,enableLocal:t.local.enabled,enableClone:t.local.enableClone&&t.storage.mode==="persistent",tokenSource:n.source},await Ar(At())})();Lr=e;try{await e}catch(t){throw Lr===e&&(En=null,Lr=null),t}}function gN(){En=null,Lr=null}function Go(){if(!En){let e=xw(Tc.NOT_INITIALIZED.message);throw new Error(e)}return En}async function tl(){return(await el()).token}function yN(){return Go().enableLocal}function Wf(){let e=Go();return e.enableLocal&&e.enableClone}async function bN(){return En!==null?En.tokenSource:(await el()).source}function nl(){return"github"}function rl(){let e=Uf().github.apiUrl;return{provider:"github",baseUrl:e!=="https://api.github.com"?e:void 0}}function An(e){(e.provider?dt({rateLimits:1,rateLimitsByProvider:{[e.provider]:1}}):is(1)).session&&e.provider==="github"&&cs(1)}function Vf(e){dt({packageRegistryFailures:{[e]:1}})}function qf(e){return Ew("sha256").update(e).digest("hex").substring(0,16)}async function ke(e){let t=e?.token??await tl(),n=t?qf(t):"anon",r=Go().githubApiUrl||"https://api.github.com";try{let o=new URL(r).host;if(o&&o!=="api.github.com")return`${n}@${o}`}catch{}return n}var Aw=Pw.plugin(Tw),Lw=300*1e3,ol=50,_w=60*1e3;function Jf(e){return Date.now()-e.createdAt>Lw}var jt=new Map,Ln=null;function eh(){for(let[e,t]of jt.entries())Jf(t)&&jt.delete(e);if(jt.size>ol){let e=jt.size-ol,t=0;for(let[n]of jt){if(t>=e)break;jt.delete(n),t++}}}function kw(){Ln||(Ln=setInterval(eh,_w),typeof Ln=="object"&&"unref"in Ln&&Ln.unref())}var Kf=3,Xf=60;function Yf(e,t,n){An({limit_type:e,retry_after_seconds:t,api_method:n.method,api_url:n.url,provider:"github"})}var Iw=()=>({onRateLimit:(e,t,n,r)=>(Yf("primary",e,t),r<Kf&&e<Xf),onSecondaryRateLimit:(e,t,n,r)=>(Yf("secondary",e,t),r<Kf&&e<Xf)});function Ow(e){let t=Go(),n=t.githubApiUrl,r={debug:()=>{},info:()=>{},warn:()=>{},error:(...i)=>console.error(...i)},o={userAgent:`octocode-mcp/${Vn}`,baseUrl:n,request:{timeout:t.timeout||3e4,log:r},throttle:Iw(),log:r,...e&&{auth:e}};return new Aw(o)}async function $(e){kw();let t=e?.token??await tl(),n=t?qf(t):"ANONYMOUS",r=jt.get(n);if(r&&!Jf(r))return r.client;jt.size>=ol&&eh();let o=Ow(t??void 0);return jt.set(n,{client:o,createdAt:Date.now()}),o}var vw=200,Fw=300*1e3,Zn=new Map;async function Be(e,t,n){let o=`${await ke(n)}:${e}/${t}`,i=Zn.get(o);if(i&&i.expiresAt>Date.now())return i.branch;i&&Zn.delete(o);let s=await $(n);try{let{data:c}=await s.rest.repos.get({owner:e,repo:t}),l=c.default_branch;return Zf(o,l),l}catch{}let a=["main","master"];for(let c of a)try{return await s.rest.repos.getBranch({owner:e,repo:t,branch:c}),Zf(o,c),c}catch{}throw new Error(`Could not determine default branch for ${e}/${t}. The repository may not exist, require authentication, or be inaccessible.`)}function Zf(e,t){if(Zn.size>=vw){let n=Zn.keys().next().value;n!==void 0&&Zn.delete(n)}Zn.set(e,{branch:t,expiresAt:Date.now()+Fw})}function _N(){jt.clear(),Zn.clear(),Ln&&(clearInterval(Ln),Ln=null)}import{ContentSanitizer as Jw}from"@octocodeai/octocode-engine/contentSanitizer";import{createRequire as Mw}from"node:module";var Nw=Mw(import.meta.url),th="@octocodeai/octocode-engine",Dw=()=>globalThis.__OCTOCODE_ENGINE_BINDING__??Nw(th),ws,Hw=Dw,il=class extends Error{constructor(n){super(`Failed to load native dependency ${th}`);this.cause=n;this.name="ContextUtilsLoadError"}cause};function te(){if(ws)return ws;try{return ws=Hw(),ws}catch(e){throw new il(e)}}var D={applyContentViewMinification(e,t){return te().applyContentViewMinification(e,t)},applyMinification(e,t){return te().applyMinification(e,t)},minifyContent(e,t){return te().minifyContent(e,t)},minifyContentSync(e,t){return te().minifyContentSync(e,t)},minifyContentResult(e,t){return te().minifyContentResult(e,t)},minifyMarkdownCore(e){return te().minifyMarkdownCore(e)},extractSignatures(e,t){return te().extractSignatures(e,t)},extractJsSymbols(e,t){return te().extractJsSymbols(e,t)},findInFileReferences(e,t,n,r){return te().findInFileReferences(e,t,n,r)},extractGraphFacts(e,t){return te().extractGraphFacts(e,t)},scanGraphFacts(e){return te().scanGraphFacts(e)},getSupportedJsTsExtensions(){return te().getSupportedJsTsExtensions()},getSupportedGraphFactExtensions(){return te().getSupportedGraphFactExtensions()},getGraphFactCapabilities(){return te().getGraphFactCapabilities()},structuralSearch(e,t,n,r){return te().structuralSearch(e,t,n,r)},structuralSearchFiles(e){return te().structuralSearchFiles(e)},structuralSearchFilesDetailed(e){return te().structuralSearchFilesDetailed(e)},getSupportedStructuralExtensions(){return te().getSupportedStructuralExtensions()},validateRipgrepPattern(e,t,n){return te().validateRipgrepPattern(e,t,n)},getSemanticBoundaryOffsets(e,t){return te().getSemanticBoundaryOffsets(e,t)},jsonToYamlString(e,t){return te().jsonToYamlString(e,t)},parseRipgrepJson(e,t){return te().parseRipgrepJson(e,t)},searchRipgrep(e){return te().searchRipgrep(e)},queryFileSystem(e){return te().queryFileSystem(e)},extractMatchingLines(e,t,n){return te().extractMatchingLines(e,t,n)},filterPatch(e,t){return te().filterPatch(e,t)},computeLineDiff(e,t){return te().computeLineDiff(e,t)},charToByteOffset(e,t){return te().charToByteOffset(e,t)},byteToCharOffset(e,t){return te().byteToCharOffset(e,t)},byteSliceContent(e,t,n){return te().byteSliceContent(e,t,n)},sliceContent(e,t,n,r){return te().sliceContent(e,t,n,r)},get SIGNATURES_ONLY_HINT(){return te().SIGNATURES_ONLY_HINT}};import{RequestError as rh}from"octokit";var K={AUTH_REQUIRED:"AUTH_REQUIRED",RATE_LIMIT_PRIMARY:"RATE_LIMIT_PRIMARY",RATE_LIMIT_SECONDARY:"RATE_LIMIT_SECONDARY",FORBIDDEN_PERMISSIONS:"FORBIDDEN_PERMISSIONS",NOT_FOUND:"NOT_FOUND",INVALID_REQUEST:"INVALID_REQUEST",SERVER_UNAVAILABLE:"SERVER_UNAVAILABLE",NETWORK_CONNECTION_FAILED:"NETWORK_CONNECTION_FAILED",REQUEST_TIMEOUT:"REQUEST_TIMEOUT",UNKNOWN:"UNKNOWN"},Ie={[K.AUTH_REQUIRED]:{message:"GitHub authentication required",suggestion:"TELL THE USER: Refresh your GitHub token! Run 'gh auth login' OR 'gh auth refresh' OR set a new GITHUB_TOKEN/GH_TOKEN environment variable",explanation:"API request requires authentication. GitHub APIs have different rate limits for authenticated (5000/hour) vs unauthenticated (60/hour) requests."},[K.RATE_LIMIT_PRIMARY]:{message:"GitHub API rate limit exceeded",messageWithTime:(e,t)=>`GitHub API rate limit exceeded. Resets at ${e.toISOString()} (in ${t} seconds)`,messageWithoutTime:"GitHub API rate limit exceeded. Reset time unavailable - check GitHub status or try again later",suggestion:"Set GITHUB_TOKEN for higher rate limits (5000/hour vs 60/hour)",explanation:"Primary rate limit tracks total API calls per hour. Authenticated users get 5000 requests/hour, unauthenticated get 60 requests/hour."},[K.RATE_LIMIT_SECONDARY]:{message:e=>`GitHub secondary rate limit triggered. Retry after ${e} seconds`,suggestion:"Reduce request frequency to avoid abuse detection",explanation:"Secondary rate limits prevent API abuse by limiting request frequency. Triggered by making too many requests too quickly, regardless of remaining quota.",fallbackRetryAfter:60},[K.FORBIDDEN_PERMISSIONS]:{message:"Access forbidden - insufficient permissions",suggestion:"Check repository permissions or authentication",suggestionWithScopes:e=>`Missing required scopes: ${e.join(", ")}. Run: gh auth refresh -s ${e.join(" -s ")}`,fallbackSuggestion:"Token may not have sufficient permissions for this operation",explanation:"GitHub tokens require specific OAuth scopes for different operations. Common scopes: repo (full repository access), read:org (organization access), gist (gist access)."},[K.NOT_FOUND]:{message:"Repository, resource, or path not found",explanation:"Resource not found or not accessible. Could be: incorrect path, deleted resource, private repository without access, wrong branch name."},[K.INVALID_REQUEST]:{message:"Invalid search query or request parameters",suggestion:"Check search syntax and parameter values",explanation:"Request was well-formed but contains invalid parameters. Common causes: invalid search syntax, parameters out of range, invalid filter combinations."},[K.SERVER_UNAVAILABLE]:{message:"GitHub API temporarily unavailable",suggestion:"Retry the request after a short delay",explanation:"GitHub servers are temporarily unavailable. Usually resolves quickly. Check https://www.githubstatus.com for service status."},[K.NETWORK_CONNECTION_FAILED]:{message:"Network connection failed",suggestion:"Check internet connection and GitHub API status",explanation:"Cannot establish connection to GitHub API. Check internet connectivity, DNS settings, and firewall/proxy configuration."},[K.REQUEST_TIMEOUT]:{message:"Request timeout",suggestion:"Retry the request or check network connectivity",explanation:"Request exceeded timeout limit. Could be slow network, large response size, or GitHub server delay."},[K.UNKNOWN]:{message:"Unknown error occurred",explanation:"An unexpected error occurred that does not match known error patterns."}},nh={401:K.AUTH_REQUIRED,403:K.FORBIDDEN_PERMISSIONS,404:K.NOT_FOUND,422:K.INVALID_REQUEST,502:K.SERVER_UNAVAILABLE,503:K.SERVER_UNAVAILABLE,504:K.SERVER_UNAVAILABLE},sl={CONNECTION_FAILED:["ENOTFOUND","ECONNREFUSED"],TIMEOUT:["timeout"]},al={SECONDARY:/\bsecondary rate\b/i,GRAPHQL_TYPE:"RATE_LIMITED"},Ps={RESET_BUFFER_SECONDS:1,SECONDARY_FALLBACK_SECONDS:60};var Gw=["cannot be searched","do not exist","does not exist","could not be found","cannot be found"];function Qt(e){if(!(e instanceof rh)||e.status!==422)return!1;let t=e.response?.data?.errors;return!Array.isArray(t)||t.length===0?!1:t.some(n=>{let r=typeof n?.message=="string"?n.message.toLowerCase():"";return Gw.some(o=>r.includes(o))})}function J(e){return e instanceof rh?Bw(e):e instanceof Error?Kw(e):{error:typeof e=="string"?e:Ie[K.UNKNOWN].message,type:"unknown"}}function Bw(e){let{status:t,message:n,response:r}=e;if(t===403)return jw(n,r);if(t===429)return zw(n,r);let o=nh[t];return o?Vw(o,t):_r(K.UNKNOWN,{error:n||Ie[K.UNKNOWN].message,status:t})}function cl(e,t){let n=e?.[t],r=n===void 0?NaN:parseInt(String(n),10);return isNaN(r)?void 0:r}function zw(e,t){let n=t?.headers,r=cl(n,"retry-after"),o=cl(n,"x-ratelimit-reset"),i=cl(n,"x-ratelimit-remaining")??0,s=o?new Date(o*1e3):null,a=r??(s?Math.max(Math.ceil((s.getTime()-Date.now())/1e3)+Ps.RESET_BUFFER_SECONDS,0):void 0);return An({limit_type:"primary",retry_after_seconds:a,rate_limit_remaining:i,rate_limit_reset_ms:s?s.getTime():void 0,provider:"github"}),_r(K.RATE_LIMIT_PRIMARY,{error:e||Ie[K.RATE_LIMIT_PRIMARY].messageWithoutTime,status:429,rateLimitRemaining:i,rateLimitReset:s?s.getTime():void 0,retryAfter:a,scopesSuggestion:Ie[K.RATE_LIMIT_PRIMARY].suggestion})}function jw(e,t){let n=t?.headers;if(al.SECONDARY.test(e))return Qw(n);let r=n?.["x-ratelimit-remaining"],o=Ww(t);return r!==void 0&&String(r)==="0"||o?Uw(n):$w(n)}function Qw(e){let t=Number(e?.["retry-after"]),n=isNaN(t)?Ps.SECONDARY_FALLBACK_SECONDS:t;return An({limit_type:"secondary",retry_after_seconds:n,provider:"github"}),_r(K.RATE_LIMIT_SECONDARY,{error:Ie[K.RATE_LIMIT_SECONDARY].message(n),status:403,rateLimitRemaining:0,retryAfter:n,scopesSuggestion:Ie[K.RATE_LIMIT_SECONDARY].suggestion})}function Uw(e){let t=e?.["x-ratelimit-reset"],n=t?parseInt(String(t),10):NaN,r=isNaN(n)?null:new Date(n*1e3),o=r?Math.max(Math.ceil((r.getTime()-Date.now())/1e3)+Ps.RESET_BUFFER_SECONDS,0):void 0,i=r?Ie[K.RATE_LIMIT_PRIMARY].messageWithTime(r,o):Ie[K.RATE_LIMIT_PRIMARY].messageWithoutTime;return An({limit_type:"primary",retry_after_seconds:o,rate_limit_remaining:0,rate_limit_reset_ms:r?r.getTime():void 0,provider:"github"}),_r(K.RATE_LIMIT_PRIMARY,{error:i,status:403,rateLimitRemaining:0,rateLimitReset:r?r.getTime():void 0,retryAfter:o,scopesSuggestion:Ie[K.RATE_LIMIT_PRIMARY].suggestion})}function $w(e){let t=e?.["x-accepted-oauth-scopes"],n=e?.["x-oauth-scopes"],r=Ie[K.FORBIDDEN_PERMISSIONS].suggestion;return t&&n&&(r=Xw(String(t),String(n))),_r(K.FORBIDDEN_PERMISSIONS,{error:Ie[K.FORBIDDEN_PERMISSIONS].message,status:403,scopesSuggestion:r})}function Ww(e){return e?.data?.errors?.some(n=>n.type===al.GRAPHQL_TYPE)??!1}function Vw(e,t){let n=Ie[e];return _r(e,{error:n.message,status:t,..."suggestion"in n&&{scopesSuggestion:n.suggestion}})}function Kw(e){return sl.CONNECTION_FAILED.some(t=>e.message.includes(t))?{error:Ie[K.NETWORK_CONNECTION_FAILED].message,type:"network",scopesSuggestion:Ie[K.NETWORK_CONNECTION_FAILED].suggestion}:sl.TIMEOUT.some(t=>e.message.includes(t))?{error:Ie[K.REQUEST_TIMEOUT].message,type:"network",scopesSuggestion:Ie[K.REQUEST_TIMEOUT].suggestion}:{error:e.message,type:"unknown"}}function _r(e,t){return{type:"http",...t}}function Xw(e,t){let n=e.split(",").map(i=>i.trim()).filter(Boolean),r=t.split(",").map(i=>i.trim()).filter(Boolean),o=n.filter(i=>!r.includes(i));return o.length>0?Ie[K.FORBIDDEN_PERMISSIONS].suggestionWithScopes(o):Ie[K.FORBIDDEN_PERMISSIONS].fallbackSuggestion}function oh(e){return`user:${e}`}var Yw=/[@/]/,Zw=/^[A-Za-z0-9_-]+$/;function ll(e){return e.startsWith('"')||Zw.test(e)?e:`"${e.replace(/"/g,'\\"')}"`}var nn=class{queryParts=[];addOwnerRepo(t){if(t.owner&&t.repo){let n=Array.isArray(t.owner)?t.owner:[t.owner],r=Array.isArray(t.repo)?t.repo:[t.repo];n.forEach(o=>{r.forEach(i=>{this.queryParts.push(`repo:${o}/${i}`)})})}else t.owner&&(Array.isArray(t.owner)?t.owner:[t.owner]).forEach(r=>{this.queryParts.push(oh(r))});return this}addDateFilters(t){return Object.entries({created:"created",updated:"updated","author-date":"author-date","committer-date":"committer-date","merged-at":"merged",closed:"closed"}).forEach(([r,o])=>{let i=t[r];i&&this.queryParts.push(`${o}:${i}`)}),this}addArrayFilter(t,n,r=!1){return t&&t!==null&&(Array.isArray(t)?t:[t]).forEach(i=>{let s=r?`"${i}"`:i;this.queryParts.push(`${n}:${s}`)}),this}addBooleanFilter(t,n,r){return t===!0?this.queryParts.push(n):t===!1&&this.queryParts.push(r),this}addSimpleFilter(t,n){return t!=null&&this.queryParts.push(`${n}:${t}`),this}addQuotedFilter(t,n){if(t!=null){let o=Yw.test(t)&&!t.startsWith('"')?`"${t}"`:t;this.queryParts.push(`${n}:${o}`)}return this}addEngagementFilters(t){return this.addSimpleFilter(t.comments,"comments"),this.addSimpleFilter(t.reactions,"reactions"),this}addOrganizationFilters(t){return this.addArrayFilter(t.label,"label",!0),t.milestone&&this.queryParts.push(`milestone:"${t.milestone}"`),this}build(){return this.queryParts.join(" ").trim()}};var qw=/(?:^|\/)([^/]+\.[A-Za-z][A-Za-z0-9]{0,9})$/,ul=class extends nn{addQueryTerms(t){if(Array.isArray(t.keywords)&&t.keywords.length>0){let n=t.keywords.filter(r=>r&&r.trim());n.length>0&&this.queryParts.push(...n.map(ll))}return this}addSearchFilters(t){let n=t.path,r=t.filename,o=typeof n=="string"&&!r?n.match(qw):null;return o&&(r=o[1],n=n.slice(0,o.index)||void 0),this.addSimpleFilter(r,"filename"),this.addSimpleFilter(t.extension,"extension"),this.addQuotedFilter(n,"path"),t.language&&this.queryParts.push(`language:${t.language}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="file"?this.queryParts.push("in:file"):r==="path"&&this.queryParts.push("in:path")}),this}},pl=class extends nn{addQueryTerms(t){return Array.isArray(t.keywords)&&t.keywords.length>0&&this.queryParts.push(...t.keywords.map(ll)),this}addRepoFilters(t){this.addArrayFilter(t.topicsToSearch,"topic"),this.addSimpleFilter(t.stars,"stars");let n=t;return typeof n.size=="string"&&this.queryParts.push(`size:${n.size}`),typeof n.created=="string"&&this.queryParts.push(`created:${n.created}`),t.updated&&this.queryParts.push(`pushed:${t.updated}`),t.language&&this.queryParts.push(`language:${t.language}`),typeof n.forks=="string"&&this.queryParts.push(`forks:${n.forks}`),typeof n.license=="string"&&this.queryParts.push(`license:${n.license}`),typeof n.goodFirstIssues=="string"&&this.queryParts.push(`good-first-issues:${n.goodFirstIssues}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="name"?this.queryParts.push("in:name"):r==="description"?this.queryParts.push("in:description"):r==="readme"&&this.queryParts.push("in:readme")}),this}addQualityFilters(t){let n=t,r=n?.archived;this.queryParts.push(r===!0?"archived:true":"is:not-archived");let o=n?.visibility;return o==="public"?this.queryParts.push("is:public"):o==="private"&&this.queryParts.push("is:private"),this}};function dl(e){return new ul().addQueryTerms(e).addSearchFilters(e).addOwnerRepo(e).addMatchFilters(e).build()}function ml(e){return new pl().addQueryTerms(e).addOwnerRepo(e).addRepoFilters(e).addMatchFilters(e).addQualityFilters(e).build()}var fl=class extends nn{addBasicFilters(t){return t.query&&t.query.trim()&&(this.queryParts.push(t.query.trim()),t.match&&t.match.length>0&&this.queryParts.push(`in:${t.match.join(",")}`)),this.queryParts.push("is:pr"),this}addStateFilters(t){return t.merged===!0&&t.state==="closed"||this.addSimpleFilter(t.state,"is"),this.addBooleanFilter(t.draft,"is:draft","-is:draft"),this.addBooleanFilter(t.merged,"is:merged","is:unmerged"),this}addUserFilters(t){return this.addSimpleFilter(t.author,"author"),this.addSimpleFilter(t.assignee,"assignee"),this.addSimpleFilter(t.mentions,"mentions"),this.addSimpleFilter(t.commenter,"commenter"),this.addSimpleFilter(t["reviewed-by"],"reviewed-by"),this.addSimpleFilter(t["review-requested"],"review-requested"),this}addBranchFilters(t){return this.addSimpleFilter(t.head,"head"),this.addSimpleFilter(t.base,"base"),this}addReviewFilters(t){return t.review&&this.queryParts.push(`review:${t.review}`),this}addNegativeFilters(t){return t.locked===!0?this.queryParts.push("is:locked"):t.locked===!1&&this.queryParts.push("is:unlocked"),t.visibility==="public"?this.queryParts.push("is:public"):t.visibility==="private"&&this.queryParts.push("is:private"),t.project&&this.queryParts.push(`project:${t.project}`),this}addMiscFilters(t){return this.queryParts.push(t.archived===!0?"archived:true":"archived:false"),t.language&&this.queryParts.push(`language:${t.language}`),t.checks&&this.queryParts.push(`status:${t.checks}`),this}};function hl(e){return new fl().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addBranchFilters(e).addDateFilters(e).addEngagementFilters(e).addReviewFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function gl(e){return e.draft!==void 0||e.author!==void 0||e.assignee!==void 0||typeof e.query=="string"&&e.query.trim().length>0||e.label&&e.label.length>0||e.mentions!==void 0||e.commenter!==void 0||e["reviewed-by"]!==void 0||e["review-requested"]!==void 0||e.reactions!==void 0||e.comments!==void 0||e.state==="merged"||e.milestone!==void 0||e.language!==void 0||e.checks!==void 0||e.review!==void 0||e.locked!==void 0||e.visibility!==void 0||e.project!==void 0||e.created!==void 0||e.updated!==void 0||e["merged-at"]!==void 0||e.closed!==void 0||e.merged!==void 0||e.match!==void 0&&e.match.length>0||e.sort==="comments"||e.sort==="reactions"||Array.isArray(e.owner)||Array.isArray(e.repo)}var yl=class extends nn{addBasicFilters(t){return t.query&&t.query.trim()&&(this.queryParts.push(t.query.trim()),t.match&&t.match.length>0&&this.queryParts.push(`in:${t.match.join(",")}`)),this.queryParts.push("is:issue"),this}addStateFilters(t){return(t.state==="open"||t.state==="closed")&&this.addSimpleFilter(t.state,"is"),this}addUserFilters(t){return this.addSimpleFilter(t.author,"author"),this.addSimpleFilter(t.assignee,"assignee"),this.addSimpleFilter(t.mentions,"mentions"),this.addSimpleFilter(t.commenter,"commenter"),this}addNegativeFilters(t){return t.locked===!0?this.queryParts.push("is:locked"):t.locked===!1&&this.queryParts.push("is:unlocked"),t.visibility==="public"?this.queryParts.push("is:public"):t.visibility==="private"&&this.queryParts.push("is:private"),this}addMiscFilters(t){return this.queryParts.push(t.archived===!0?"archived:true":"archived:false"),this}};function bl(e){return new yl().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addDateFilters(e).addEngagementFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function Sl(e){return typeof e.query=="string"&&e.query.trim().length>0||e.author!==void 0||e.assignee!==void 0||e.label!==void 0&&(Array.isArray(e.label),e.label.length>0)||e.mentions!==void 0||e.commenter!==void 0||e.reactions!==void 0||e.comments!==void 0||e.milestone!==void 0||e.locked!==void 0||e.visibility!==void 0||e.created!==void 0||e.updated!==void 0||e.closed!==void 0||e.match!==void 0&&e.match.length>0||e.sort==="comments"||e.sort==="reactions"||Array.isArray(e.owner)||Array.isArray(e.repo)}import{DISCOVERY_IGNORED_FILE_EXTENSIONS as qN,DISCOVERY_IGNORED_FILE_NAMES as JN,DISCOVERY_IGNORED_FOLDER_NAMES as eD,getDiscoveryExtension as ih,shouldIgnoreDiscoveryDir as Bo,shouldIgnoreDiscoveryFile as kr}from"@octocodeai/octocode-engine/security";var sh=Symbol.for("octocode.rawResponseChars");function B(e){if(typeof e=="string")return e.length;try{return JSON.stringify(e)?.length??0}catch{return String(e).length}}function ah(e){if(!(typeof e!="number"||!Number.isFinite(e)))return Math.max(0,e)}function W(e,t){let n=typeof t=="number"?ah(t):B(t);if(n===void 0)return e;try{Object.defineProperty(e,sh,{value:n,enumerable:!1,configurable:!0})}catch{}return e}function ie(e){if(!(typeof e!="object"||e===null))return ah(e[sh])}function Ir(e){let t={};if(!e||typeof e!="object")return t;for(let[n,r]of Object.entries(e))typeof r=="string"?t[n]=r:typeof r=="number"&&Number.isFinite(r)&&(t[n]=String(r));return t}function ch(e){let t=Ir(e),n=Number(t["x-ratelimit-remaining"]),r=Number(t["x-ratelimit-limit"]),o=Number(t["x-ratelimit-reset"]);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=0||n>Math.max(3,r*.15))return;let i=Number.isFinite(o)?Math.max(0,Math.round((o*1e3-Date.now())/1e3)):void 0;return`GitHub rate limit low: ${n}/${r} remaining${i!==void 0?` (resets in ~${i}s)`:""} \u2014 pace or narrow further requests.`}function Or(e){let t=Ir(e),n=t.etag||t.ETag||t.Etag||Object.entries(t).find(([r])=>r.toLowerCase()==="etag")?.[1];return n&&n.length>0?n:void 0}function lh(e,t,n){let r=[],o=0;for(let[i,s]of t){let a=e.slice(i,s);if(!a)continue;let c=n.indexOf(a,o);c===-1&&(c=n.indexOf(a),c===-1)||(r.push([c,c+a.length]),o=c+a.length)}return r}var uh=30;async function ph(e,t,n){let r=await ke(t),o=xe("gh-api-code",{keywords:e.keywords,owner:e.owner,repo:e.repo,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,auth:r},n);return await De(o,async()=>await eP(e,t),{shouldCache:s=>"data"in s&&!s.error})}async function eP(e,t){try{let n=await $(t);if(e.keywords&&e.keywords.length>0&&e.keywords.filter(g=>g&&g.trim()).length===0)return{error:Ke.QUERY_EMPTY.message,type:"http",status:400};let r=dl(e);if(!r.trim())return{error:Ke.QUERY_EMPTY.message,type:"http",status:400};let o=Math.min(typeof e.limit=="number"?e.limit:uh,100),i=e.page||1,s={q:r,per_page:o,page:i,headers:{Accept:"application/vnd.github.v3.text-match+json"}},a=await n.rest.search.code(s),c=await tP(a.data.items,a.data.total_count),l=a.data.incomplete_results===!0,u=c.total_count,p=Math.min(u,1e3),d=Math.ceil(p/o),m=Math.min(i,Math.max(1,d)),f=m<d,h=Math.min(p,d*o);return{data:{total_count:c.total_count,items:c.items,...l?{incompleteResults:!0}:{},repository:c.repository,matchLocations:c.matchLocations,minified:c.minified,minificationFailed:c.minificationFailed,minificationTypes:c.minificationTypes,_researchContext:c._researchContext,pagination:{currentPage:m,totalPages:d,perPage:o,totalMatches:p,reportedTotalMatches:u,reachableTotalMatches:h,totalMatchesKind:"reported",totalMatchesCapped:u>p,hasMore:f,...f?{nextPage:m+1}:{},uniqueFileCount:c._researchContext?.uniqueFileCount}},status:200,headers:Ir(a.headers),rawResponseChars:B(a.data)}}catch(n){if(Qt(n)){let o=Math.min(typeof e.limit=="number"?e.limit:uh,100);return{data:{total_count:0,items:[],nonExistentScope:!0,pagination:{currentPage:e.page||1,totalPages:0,perPage:o,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return J(n)}}async function tP(e,t){let n=nP(e),r=new Set,o=!1,i=[],s=new Set,a=e.filter(m=>!kr(m.path)),c=0,l=0,u=await Promise.allSettled(a.map(async m=>{s.add(m.path);let f=[],h=await Promise.allSettled((m.text_matches||[]).map(async C=>{let P=C.fragment,T=Jw.sanitizeContent(P||"",m.path);P=T.content,T.hasSecrets&&r.add(`Secrets detected in ${m.path}: ${T.secretsDetected.join(", ")}`),T.warnings.length>0&&T.warnings.forEach(k=>r.add(`${m.path}: ${k}`));try{let k=await D.minifyContent(P||"",m.path);P=k.content,k.failed?o=!0:k.type!=="failed"&&(f.push(k.type),i.push(k.type))}catch{o=!0}let E=C.matches?.flatMap(k=>Array.isArray(k.indices)&&k.indices.length>=2?[[k.indices[0],k.indices[1]]]:[])||[];return{context:P||"",positions:lh(C.fragment||"",E,P||"")}})),y=h.filter(C=>C.status==="fulfilled").map(C=>C.value),g=h.filter(C=>C.status==="rejected").length;g>0&&(l+=g);let S=m,R=Array.from(new Set(f));return{path:m.path,matches:y,url:m.html_url,repository:{nameWithOwner:m.repository.full_name,url:m.repository.url,pushedAt:m.repository.pushed_at||void 0},...S.last_modified_at&&{lastModifiedAt:S.last_modified_at},...R.length>0&&{minificationType:R.join(",")}}})),p=u.filter(m=>m.status==="fulfilled").map(m=>m.value);c=u.filter(m=>m.status==="rejected").length;let d={items:p,total_count:t!==void 0?t:a.length,_researchContext:{uniqueFileCount:s.size,repositoryContext:n?(()=>{let m=n.full_name.split("/");return m.length===2&&m[0]&&m[1]?{owner:m[0],repo:m[1],branch:n.default_branch||void 0}:void 0})():void 0}};return n&&(d.repository={name:n.full_name,url:n.url,createdAt:n.created_at||void 0,updatedAt:n.updated_at||void 0,pushedAt:n.pushed_at||void 0}),c>0&&r.add(`${c} item(s) dropped due to processing errors`),l>0&&r.add(`${l} match(es) dropped due to processing errors`),r.size>0&&(d.matchLocations=Array.from(r)),d.minified=!o,d.minificationFailed=o,i.length>0&&(d.minificationTypes=Array.from(new Set(i))),d}function nP(e){if(e.length===0)return null;let t=e[0]?.repository;return t&&e.every(r=>r.repository.full_name===t.full_name)?t:null}import{readdirSync as rP,statSync as dh}from"node:fs";import{join as oP}from"node:path";var zo=50,Ts=5*1024*1024,Rl=300*1024,mh=5,iP=1e4,fh=new Set([".png",".jpg",".jpeg",".gif",".bmp",".ico",".svg",".webp",".mp3",".mp4",".wav",".avi",".mov",".mkv",".webm",".zip",".tar",".gz",".bz2",".7z",".rar",".xz",".exe",".dll",".so",".dylib",".bin",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".woff",".woff2",".ttf",".eot",".otf",".pyc",".class",".o",".obj",".lock",".min.js",".min.css"]),Cl={maxDirectoryFiles:zo,maxTotalSize:Ts,maxFileSize:Rl};function xl(){return{nonFile:0,missingDownloadUrl:0,oversized:0,binary:0,fileLimit:0,fetchFailed:0,totalSizeLimit:0,pathTraversal:0}}function hh(e){return Object.values(e).every(t=>t===0)}function wl(e,t){if(!t&&e)return["Cannot verify completeness against remote tree; use forceRefresh or ghCloneRepo if completeness matters."];if(!e)return["Directory materialization is partial; inspect skipped counts or use ghCloneRepo before repo-wide reachability/dead-code conclusions."]}async function gh(e,t,n){let r=[];for(let o=0;o<e.length;o+=t){let i=e.slice(o,o+t),s=await Promise.allSettled(i.map(async a=>{let c=await aP(a.download_url,n);return{entry:a,content:c}}));for(let a of s)a.status==="fulfilled"&&r.push(a.value)}return r}var sP=new Set(["raw.githubusercontent.com","objects.githubusercontent.com","github.com"]);async function aP(e,t){try{let o=new URL(e);if(!sP.has(o.hostname))throw new Error(`Blocked fetch to unexpected host: ${o.hostname}. Only GitHub download URLs are allowed.`)}catch(o){throw o instanceof TypeError?new Error(`Invalid download URL: ${e}`):o}let n=new AbortController,r=setTimeout(()=>n.abort(),iP);try{let o={"User-Agent":"octocode-mcp"};t&&(o.Authorization=`token ${t}`);let i=await fetch(e,{signal:n.signal,headers:o});if(!i.ok)throw new Error(`HTTP ${i.status} fetching ${e}`);return await i.text()}finally{clearTimeout(r)}}function yh(e,t){let n=[],r=0;function o(i){let s;try{s=rP(i)}catch{return}for(let a of s){if(a.startsWith("."))continue;let c=oP(i,a);try{let l=dh(c);if(l.isDirectory())o(c);else if(l.isFile()){let u=c.substring(t.length+1);r+=l.size,n.push({path:u,size:l.size,type:"file"})}}catch{}}}return o(e),{files:n,fileCount:n.length,totalSize:r}}function bh(e){try{return dh(e).size}catch{return 0}}import{writeFileSync as uP,mkdirSync as Rh,existsSync as Pl,rmSync as pP}from"node:fs";import{join as Ch,dirname as dP,resolve as xh,sep as wh}from"node:path";var cP=60;async function Sh(e,t,n,r){let s=(await(await $(r)).rest.repos.getCommit({owner:e,repo:t,ref:n})).data.sha;if(typeof s!="string"||!/^[0-9a-f]{40}$/i.test(s))throw new Error(`GitHub returned an invalid commit SHA for ref "${n}".`);return s.toLowerCase()}async function lP(e,t,n,r){try{return{commitSha:await Sh(e,t,n,r),resolvedRef:n}}catch(o){if(!(n==="main"||n==="master"))throw o;let s=await Be(e,t,r);if(s===n)throw o;return{commitSha:await Sh(e,t,s,r),resolvedRef:s}}}async function Es(e,t,n,r,o=!1){let i=await ke(r),s=xe("gh-api-ref-resolution",{owner:e,repo:t,ref:n,auth:i});return De(s,()=>lP(e,t,n,r),{ttl:cP,forceRefresh:o,cacheRole:"helper"})}async function Tl(e,t,n,r,o,i=!1){let s=At(),{commitSha:a,resolvedRef:c}=await Es(e,t,r,o,i),l=vo(s,e,t,a),u=xh(Ch(l,n));if(!u.startsWith(l+wh)&&u!==l)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let p=xr(l);if(p.hit&&p.meta.commitSha===a&&!i&&Pl(u)){let w=yh(u,l),L=xl();return{localPath:u,repoRoot:l,files:w.files,fileCount:w.fileCount,totalSize:w.totalSize,complete:!0,verified:!1,commitSha:a,directoryEntryCount:w.fileCount,eligibleFileCount:w.fileCount,savedFileCount:w.fileCount,skipped:L,limits:Cl,warnings:wl(!0,!1),cached:!0,expiresAt:p.meta.expiresAt,owner:e,repo:t,branch:c,directoryPath:n}}let d=await $(o),{data:m}=await d.rest.repos.getContent({owner:e,repo:t,path:n,ref:a});if(!Array.isArray(m))throw new Error(`Path "${n}" is not a directory. Use type "file" to fetch file content.`);let f=m,h=xl(),y=[];for(let w of f){if(w.type!=="file"){h.nonFile+=1;continue}if(!w.download_url){h.missingDownloadUrl+=1;continue}if(w.size>Rl){h.oversized+=1;continue}let L=ih(w.name,{lowercase:!0,leadingDot:!0});if(fh.has(L)){h.binary+=1;continue}y.push(w)}h.fileLimit=Math.max(0,y.length-zo);let g=y.slice(0,zo),S=o?.token,R=await gh(g,mh,S);h.fetchFailed=g.length-R.length;let C=0,P=[];for(let w=0;w<R.length;w+=1){let{entry:L,content:O}=R[w];if(C+O.length>Ts){h.totalSizeLimit=R.length-w;break}C+=O.length,P.push({entry:L,content:O})}Pr(s),Pn(l),Pl(u)&&pP(u,{recursive:!0,force:!0}),Rh(u,{recursive:!0,mode:448});let T=[];for(let{entry:w,content:L}of P){let O=xh(Ch(l,w.path));if(!O.startsWith(l+wh)){h.pathTraversal+=1;continue}let v=dP(O);Pl(v)||Rh(v,{recursive:!0,mode:448}),uP(O,L,"utf-8"),T.push({path:w.path,size:L.length,type:"file"})}let E=wr(e,t,c,"treeFetch",void 0,void 0,a);Cr(l,E);let k=hh(h),x=k,b=h.nonFile>0;return{localPath:u,repoRoot:l,files:T,fileCount:T.length,totalSize:C,complete:k,verified:x,commitSha:a,...b?{hasSubdirectories:!0}:{},directoryEntryCount:f.length,eligibleFileCount:y.length,savedFileCount:T.length,skipped:h,limits:Cl,warnings:wl(k,x),cached:!1,expiresAt:E.expiresAt,owner:e,repo:t,branch:c,directoryPath:n}}import{writeFileSync as WP,mkdirSync as VP,existsSync as Fh}from"node:fs";import{join as KP,dirname as XP,resolve as YP,sep as ZP}from"node:path";import{RequestError as Kl}from"octokit";import{z as El}from"zod";var mt={GITHUB_SEARCH:"ghSearch",GITHUB_FETCH_CONTENT:"ghGetFileContent",GITHUB_SEARCH_HISTORY:"ghSearchHistory",GITHUB_GET_HISTORY_ITEM:"ghGetHistoryItem",PACKAGE_SEARCH:"npmSearch",GITHUB_CLONE_REPO:"ghCloneRepo",LOCAL_SEARCH:"localSearch",LOCAL_ANALYZE_GRAPH:"localAnalyzeGraph",LOCAL_FETCH_CONTENT:"localGetFileContent",LSP_GET_SEMANTIC_CONTENT:"lspGetSemantics"},As=El.object({goal:El.string().optional().describe("What this query should accomplish."),reasoning:El.string().optional().describe("Why this query advances the goal.")}),qn=Object.fromEntries(Object.entries(As.shape).map(([e,t])=>[e,t.description??""]));var mP={ghSearch:["Use only fields listed for the selected operation.","match: code=file|path; repositories=name|description|readme.","code cannot select branch; it searches GitHub's indexed default branch."],localSearch:["text needs searchText.","structural needs exactly one of pattern or rule.","Fields from different operations cannot be mixed."],localAnalyzeGraph:["dependencies | dependents -> requires file; depth applies.","path -> requires file + target.","deadCode/reachability use entrypoints and includeTests as roots."],localGetFileContent:["Choose fullContent, a line range, or matchString.","A line range needs startLine and endLine.","matchString options apply with matchString."],lspGetSemantics:["workspaceSymbol needs symbolName and may use workspaceRoot.","documentSymbols/diagnostic need uri.","definition | references | hover | callers | callees | callHierarchy | implementation | typeDefinition | supertypes | subtypes -> requires uri + symbolName + lineHint."],ghGetFileContent:["Choose fullContent, a line range, or matchString.","A line range needs startLine and endLine.","matchString options apply with matchString.",'type:"directory" materializes; extraction fields read files.'],npmSearch:["Set exactly one of packageName or keywords."]};function Ls(e){return[...mP[e]??[]]}var fP={ghSearch:[{name:"code",when:"Search code contents or file paths",requires:["operation"],excludes:["branch"],fields:["keywords","owner","repo","extension","filename","path","language","match","pageSize","page","concise"],example:{operation:"code",keywords:["toolSchemas"],owner:"bgauryy",repo:"octocode"}},{name:"repositories",when:"Discover repositories",requires:["operation"],fields:["keywords","topics","language","owner","stars","forks","goodFirstIssues","updated","created","size","match","sort","pageSize","page","archived","visibility","license","concise"],example:{operation:"repositories",keywords:["octocode"]}},{name:"tree",when:"Browse a known repository tree",requires:["operation","owner","repo"],fields:["owner","repo","branch","path","maxDepth","page","pageSize","include"],example:{operation:"tree",owner:"bgauryy",repo:"octocode",path:"packages",maxDepth:2}}],localSearch:[{name:"text",when:"Search lexical text or regular expressions",requires:["operation","path","searchText"],example:{operation:"text",path:".",searchText:"toolSchemas"}},{name:"structural",when:"Match AST structure",requires:["operation","path","pattern"],example:{operation:"structural",path:".",pattern:"console.log($A)",langType:"typescript"}},{name:"files",when:"Discover paths by name or metadata",requires:["operation","path"],example:{operation:"files",path:".",names:["*.ts"]}},{name:"tree",when:"Browse a directory tree",requires:["operation","path"],example:{operation:"tree",path:".",maxDepth:5}}],localAnalyzeGraph:[{name:"dependencies",when:"Find files imported by a file",requires:["path","operation","file"],example:{path:".",operation:"dependencies",file:"src/index.ts"}},{name:"dependents",when:"Find files importing a file",requires:["path","operation","file"],example:{path:".",operation:"dependents",file:"src/index.ts"}},{name:"path",when:"Find a shortest dependency path",requires:["path","operation","file","target"],example:{path:".",operation:"path",file:"src/a.ts",target:"src/b.ts"}},{name:"cycles",when:"Find dependency cycles",requires:["path","operation"],example:{path:".",operation:"cycles"}},{name:"deadCode",when:"Find unreachable file candidates",requires:["path","operation"],example:{path:".",operation:"deadCode"}},{name:"reachability",when:"Find files unreachable from selected roots",requires:["path","operation","entrypoints"],example:{path:".",operation:"reachability",entrypoints:["src/index.ts"]}}],lspGetSemantics:[{name:"anchored",when:"Query a named symbol near a source line",requires:["uri","type","symbolName","lineHint"],example:{uri:"src/index.ts",type:"definition",symbolName:"main",lineHint:1}},{name:"document",when:"Query a whole document",requires:["uri","type"],example:{uri:"src/index.ts",type:"documentSymbols"}},{name:"workspace",when:"Search symbols across the workspace",requires:["workspaceRoot","type","symbolName"],example:{workspaceRoot:".",type:"workspaceSymbol",symbolName:"Schema"}}]};function Al(e){return fP[e]??[]}import{z as _s}from"zod";var vr=100,jo=1e3,Ph=1e8,Th=5e4,Ze=1e9,Ll=1e5,Qo=20,ks=100,Uo=1e4,Jn=50,_t=100,kt=30,_l=200,kl=100;var Il=1e5,Ol=500,Is=1e5,vl=1e3,Fl=20,Ml=100,Nl=20;function fe(e){return{...e,description:e.instructions}}function H(e,t){return _s.number().int().min(e).max(t)}var Ae=_s.array(_s.string()).optional();function Le(){return H(1,jo).default(1)}function Qe(){return H(1,jo).optional()}function Os(){return H(0,vr).optional()}function Fr(){return H(1,Ze).optional()}function qe(){return H(0,Ph).optional()}function yt(){return H(1,Th).optional()}var ee=As.shape,hP=new Set(Object.keys(ee)),gP={owner:"Repository owner (user or org).",repo:"Repository name, without the owner.",branch:"Branch, tag, or commit SHA; omit for the default branch.",path:"Target path. GitHub tools: repo-relative, exact case, no leading slash. Local tools: absolute path.",page:"Result page, 1-based. Advance only while pagination.hasMore.",itemsPerPage:"Items per result page.",limit:"Total result cap applied before pagination.",pageSize:"Results returned in one page.",contextLines:"Extra source lines around each match/anchor.",charLength:"Content-window length; continue with the returned offset when partial.",charOffset:"Content-window start; copy the returned offset. A partial window cannot prove absence."};function U(e,t,n=""){let r={};for(let o of Object.keys(t)){let i=t[o],s=n?`${n}.${o}`:o,c=n===""&&hP.has(o)?qn[s]:e[s]??(i.description?void 0:gP[o]);r[o]=c?i.describe(c):i}return _s.object(r).strict()}function vs(e,t){let n=e.fullContent===!0,r=e.matchString!==void 0,o=e.startLine!==void 0||e.endLine!==void 0;n&&r&&t.addIssue({code:"custom",message:"Choose fullContent or matchString.",path:["matchString"]}),n&&o&&t.addIssue({code:"custom",message:"Choose fullContent or startLine/endLine.",path:["startLine"]}),r&&o&&t.addIssue({code:"custom",message:"Choose matchString or startLine/endLine.",path:["startLine"]}),e.startLine===void 0!=(e.endLine===void 0)&&t.addIssue({code:"custom",message:"Set startLine and endLine together.",path:[e.startLine===void 0?"startLine":"endLine"]}),e.startLine!==void 0&&e.endLine!==void 0&&e.endLine<e.startLine&&t.addIssue({code:"custom",message:"Set endLine greater than or equal to startLine.",path:["endLine"]})}import{z as Fs}from"zod";import{z as _n}from"zod";var yP={keywords:"ANDed; keep a phrase as one item; alternatives need separate queries.",path:"Repo path prefix, not a full file path.",match:'For ghSearch operation:"code": "file" returns snippets and character matchIndices; "path" returns paths only. Operation:"repositories" uses text-field names.',extension:'File extension filter, e.g. "ts" (no dot).',filename:"Exact filename filter.",language:'GitHub language filter, e.g. "typescript".',concise:'Flat "owner/repo:path" rows.',limit:"Results per page (paginate with page)."},kn=U(yP,{...ee,keywords:Ae,owner:_n.string().optional(),repo:_n.string().optional(),extension:_n.string().optional(),filename:_n.string().optional(),path:_n.string().optional(),language:_n.string().optional(),match:_n.enum(["file","path"]).default("file"),limit:H(1,_t).default(kt),page:Le(),concise:_n.boolean().optional()});import{z as Je}from"zod";var bP={keywords:"ANDed; keep a phrase as one item; alternatives need separate queries.",topicsToSearch:"ANDed topic filters; metadata can be sparse.",match:'For ghSearch operation:"repositories": text fields to search are name, description, and readme; readme is broader and slower. Operation:"code" uses "file" or "path".',sort:"stars, forks, updated, help-wanted-issues, best-match.",language:'Primary language filter, e.g. "rust".',stars:'Star range: ">100", "10..50".',forks:'Fork range: ">50", "10..100".',goodFirstIssues:'Good-first-issue count range, e.g. ">5".',updated:'Last push date: ">2024-01-01" or "a..b".',created:'Creation date: ">2023-01-01" or "a..b".',size:'Repo size in KB: ">1000", "50..500".',license:'SPDX id, e.g. "mit".',archived:"true = archived only; default excludes archived.",visibility:'"public" or "private" (private needs token scope).',concise:'Flat "owner/repo" rows for triage.',limit:"Results per page (paginate with page)."},rn=U(bP,{...ee,keywords:Ae,topicsToSearch:Ae,language:Je.string().optional(),owner:Je.string().optional(),stars:Je.string().optional(),forks:Je.string().optional(),goodFirstIssues:Je.string().optional(),updated:Je.string().optional(),created:Je.string().optional(),size:Je.string().optional(),match:Je.array(Je.enum(["name","description","readme"])).optional(),sort:Je.enum(["stars","forks","help-wanted-issues","updated","best-match"]).default("best-match"),limit:H(1,_t).default(kt),page:Le(),archived:Je.boolean().optional(),visibility:Je.enum(["public","private"]).optional(),license:Je.string().optional(),concise:Je.boolean().optional()});import{z as Mr}from"zod";var SP={path:'Repo-relative directory; ""/"." for root.',branch:"Ref; fallback warning means default branch was used.",maxDepth:"Tree recursion depth.",page:"Advance only on hasMore.",include:"Optional sizes, languages, contributors, branches, or tags; each adds an API call."},er=U(SP,{...ee,owner:Mr.string(),repo:Mr.string(),branch:Mr.string().optional(),path:Mr.string().optional(),maxDepth:H(0,Nl).optional(),page:Le(),itemsPerPage:H(1,_l).default(kl),include:Mr.array(Mr.enum(["sizes","languages","contributors","branches","tags"])).optional()});var JD=fe({name:"ghSearch",type:"Github",shortDescription:"Search GitHub code or repositories, or browse a repository tree.",instructions:`Choose operation:"code" for code contents or file paths, "repositories" to discover repositories, or "tree" to browse a known repository.
|
|
11
|
-
Each operation has a strict input branch; fields from other operations are rejected. Use ghGetFileContent only after a path is known. Empty GitHub search results do not prove absence.`,schema:{operation:'Required: "code", "repositories", or "tree".'}}),RP=kn.omit({limit:!0}).extend({match:kn.shape.match.describe('For operation:"code": "file" returns snippets; "path" returns paths only.'),pageSize:kn.shape.limit.describe("Results returned per page."),operation:Fs.literal("code").describe("Search code contents or file paths.")}).strict(),CP=rn.omit({topicsToSearch:!0,limit:!0}).extend({topics:rn.shape.topicsToSearch.describe("Repository topics; all must match."),pageSize:rn.shape.limit.describe("Results returned per page."),match:rn.shape.match.describe('For operation:"repositories": fields to search: name, description, or readme.'),operation:Fs.literal("repositories").describe("Discover repositories by keywords and repository filters.")}).strict(),xP=er.omit({itemsPerPage:!0}).extend({operation:Fs.literal("tree").describe("Browse the tree of a known repository."),pageSize:er.shape.itemsPerPage.describe("Tree entries returned per page.")}).strict(),Dl=Fs.discriminatedUnion("operation",[RP,CP,xP]);import{z as It}from"zod";var wP=fe({name:"ghGetFileContent",type:"Github",shortDescription:"Read a file or a specific region from a GitHub repository.",instructions:`Read a known GitHub path after search or structure discovery; a complete search snippet needs no reread. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
|
|
12
|
-
Choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; continue with the returned charOffset. matchedLines are LSP anchors; match ranges and offsets are not. type:"directory" returns localPath when local access is enabled; otherwise use ghSearch operation:"tree".`,schema:{startLine:"Requires endLine; exclusive with fullContent/matchString.",endLine:"Requires startLine; must be >= startLine.",fullContent:"Whole small file; exclusive with range/match.",matchString:"Anchor returning padded matchRanges and exact matchedLines.",matchStringIsRegex:"Makes matchString a regex.",matchStringCaseSensitive:"Case-sensitive matchString.",type:'"file" reads; "directory" materializes localPath when clone/local access is enabled\u2014otherwise use ghSearch operation:"tree".',forceRefresh:"Bypass the 24h fetch cache and re-read from GitHub.",charOffset:"Copy pagination.nextCharOffset.",minify:'"symbols" outline, "standard" compact, "none" exact.'}}),Ms=U(wP.schema,{...ee,owner:It.string(),repo:It.string(),branch:It.string().optional(),path:It.string(),startLine:Fr(),endLine:Fr(),fullContent:It.boolean().optional(),matchString:It.string().optional(),matchStringIsRegex:It.boolean().optional(),matchStringCaseSensitive:It.boolean().optional(),forceRefresh:It.boolean().optional(),type:It.enum(["file","directory"]).default("file"),contextLines:H(0,vr).default(5),charOffset:qe(),charLength:yt(),minify:It.enum(["none","standard","symbols"]).default("standard")}).superRefine(vs);import{z as F}from"zod";var PP=fe({name:"githubHistory",type:"Github",shortDescription:"Search and read GitHub pull requests and commit history.",instructions:`Use for PR/commit archaeology \u2014 not current code (ghSearch operation:"code"/ghGetFileContent). type:"prs" lists/reads PRs; type:"commits" walks history.
|
|
13
|
-
Param relations: list mode uses filters+sort/page; detail mode needs owner+repo+prNumber and content selectors. patches.mode:"selected" requires files or ranges. Body/patch/comment windows continue via returned charOffset/commentBodyOffset; file/comment/commit lists use their page fields. For code identity, clone and use local/LSP.`,schema:{type:'"prs" for pull requests; "commits" for commit history.',keywords:"PR search terms; ignored in commits mode.",match:'PR text fields searched by keywords; ghSearch operation:"code" instead uses match to select file content or paths.',prNumber:"Switches to PR detail mode; needs owner+repo.",issueNumber:"Switches to issue detail mode; needs owner+repo.",concise:"PR list triage; ignored with prNumber.",path:"Commit-mode file/dir prefix; trailing / scopes subtree.",includeDiff:"Commit-mode diffs; costly.",order:"asc+created helps archaeology.",comments:'Comment-count range filter (">5"); not comment content.',reactions:'Reaction-count range filter (">10").',interactions:'Combined comment+reaction count range (">20").',project:'Project board: "owner/number".',"team-mentions":'Team mention: "org/team-slug".',filePage:"Changed-files page from contentPagination.",commentPage:"Comments page from contentPagination.",commitPage:"PR commits page from contentPagination.",reviewMode:'"full" fetches all PR detail surfaces.',content:"Detail selector for prNumber.","content.body":"Full PR description; windowed by charOffset.","content.changedFiles":"File list with status and +/- counts.","content.patches.mode":'"none", "selected" (cheapest; needs files or ranges), or "all".',"content.patches.ranges":"Line ranges for selected patch hunks.","content.comments.reviewInline":"Inline review comments; in_reply_to_id marks threads.","content.comments.includeBots":"Include bot/CI comments.","content.reviews":"Review verdicts per reviewer.","content.commits":"PR-bound commits selector.",matchString:"Substring filter for body/patch/comment windows.",charOffset:"Body/patch continuation offset from nextQuery.",commentBodyOffset:"Comment-body continuation offset from nextQuery.",minify:'"standard" compact patches; "none" exact diff; "symbols" not available.'}}),Nr=PP.schema,Ns=U(Nr,{...ee,type:F.enum(["prs","commits"]).default("prs"),since:F.string().optional(),until:F.string().optional(),path:F.string().optional(),branch:F.string().optional(),includeDiff:F.boolean().optional().default(!1),includeAssets:F.boolean().optional(),keywords:F.array(F.string()).optional(),prNumber:H(1,Ze).optional(),issueNumber:H(1,Ze).optional(),owner:F.string().optional(),repo:F.string().optional(),concise:F.boolean().optional(),state:F.enum(["open","closed","merged"]).optional(),assignee:F.string().optional(),author:F.string().optional(),committer:F.string().optional(),commenter:F.string().optional(),mentions:F.string().optional(),"review-requested":F.string().optional(),"reviewed-by":F.string().optional(),label:F.union([F.string(),F.array(F.string())]).optional(),checks:F.enum(["success","failure","pending"]).optional(),review:F.enum(["approved","changes_requested","required","none"]).optional(),head:F.string().optional(),base:F.string().optional(),created:F.string().optional(),updated:F.string().optional(),closed:F.string().optional(),"merged-at":F.string().optional(),comments:F.string().optional(),reactions:F.string().optional(),draft:F.boolean().optional(),match:F.array(F.enum(["title","body","comments"])).optional(),sort:F.enum(["created","updated","best-match","comments","reactions"]).optional(),order:F.enum(["asc","desc"]).optional(),limit:H(1,_t).default(kt),page:Le(),archived:F.boolean().optional(),filePage:Qe(),commentPage:Qe(),commitPage:Qe(),reviewMode:F.literal("full").optional(),content:U(Nr,{metadata:F.boolean().optional(),body:F.boolean().optional(),changedFiles:F.boolean().optional(),patches:U(Nr,{mode:F.enum(["none","selected","all"]).default("none"),files:Ae,ranges:F.array(U(Nr,{file:F.string(),additions:F.array(H(1,Ze)).optional(),deletions:F.array(H(1,Ze)).optional()},"content.patches.ranges")).optional()},"content.patches").optional(),comments:U(Nr,{discussion:F.boolean().optional(),reviewInline:F.boolean().optional(),includeBots:F.boolean().default(!1),file:F.string().optional()},"content.comments").optional(),reviews:F.boolean().optional(),commits:U(Nr,{list:F.boolean().optional(),includeFiles:F.boolean().optional()},"content.commits").optional()},"content").optional(),matchString:F.string().optional(),commentBodyOffset:qe(),charOffset:qe(),charLength:yt(),minify:F.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let n=e.content?.patches;if(!n)return;let r=(n.files?.length??0)>0,o=(n.ranges?.length??0)>0,i=r||o;n.mode==="selected"&&!i&&t.addIssue({code:"custom",message:'content.patches.mode="selected" requires non-empty files or ranges.',path:["content","patches","files"]}),n.mode!=="selected"&&i&&t.addIssue({code:"custom",message:'content.patches.files and content.patches.ranges require mode="selected".',path:["content","patches","mode"]})});import{z as Q}from"zod";var TP=fe({name:"ghSearchHistory",type:"Github",shortDescription:"Search GitHub pull requests, or read one PR's files, diffs, and reviews.",instructions:`Use for PR history, diffs, and review context; use code tools for current bytes, commits for history, and issues for issue threads. Conversation is context: prove landed behavior from selected patches or the merge SHA.
|
|
14
|
-
List mode uses search filters; detail mode needs owner, repo, prNumber, and explicit content selectors. Selected patches need files or ranges. Continue windows and lists with returned offsets/pages. Use local/LSP for symbol identity.`,schema:{keywords:"PR search terms.",match:'PR text fields searched by keywords: title, body, comments. ghSearch operation:"code" instead uses match to select file content or paths.',prNumber:"PR detail mode; requires owner+repo.",concise:"PR list triage; list mode only.",state:"open, closed, or merged.",assignee:"Assigned GitHub login.",author:"PR author login.",commenter:"Commenter login.",mentions:"Mentioned login.","review-requested":"Requested reviewer login.","reviewed-by":"Reviewer login.",checks:"success, failure, or pending.",review:"approved, changes_requested, required, or none.",comments:'Comment-count range filter (">5"); not comment content.',reactions:'Reaction-count range filter (">10").',created:'Created date/range, e.g. ">2024-01-01" or "a..b".',updated:"Updated-date filter (same format as created).",closed:"Closed-date filter (same format as created).","merged-at":"Merged-date filter (same format as created).",head:"Head branch name filter.",base:"Base branch name filter.",label:"Label name(s); multiple are ANDed.",draft:"true = only drafts; false = exclude drafts.",archived:"Include PRs from archived repos.",sort:"created, updated, comments, reactions, best-match.",order:"asc/desc; asc+created helps archaeology.",filePage:"Changed-files page from contentPagination.",commentPage:"Comments page from contentPagination.",commitPage:"PR commits page from contentPagination.",content:"Detail selector for prNumber.","content.body":"Include the PR description body.","content.changedFiles":"Include changed files and +/- counts.","content.patches":"Patch selector for changed files.","content.patches.mode":'"selected" or "all"; selected is cheapest.',"content.patches.files":'Restrict selected patches to these files (mode:"selected").',"content.patches.ranges":"Line ranges for selected patch hunks.","content.patches.ranges.file":"File the line range applies to.","content.patches.ranges.additions":"Added-side line numbers to include.","content.patches.ranges.deletions":"Deleted-side line numbers to include.","content.comments":"Conversation and inline-review selectors.","content.comments.discussion":"Include the PR conversation timeline.","content.comments.reviewInline":"Include inline review threads.","content.comments.includeBots":"Include bot/CI comments.","content.comments.file":"Filter comments to one file path.","content.reviews":"Include review verdicts per reviewer.","content.commits":"PR-bound commits selector.","content.commits.includeFiles":"Attach per-commit file changes.",matchString:"Substring filter for body/patch/comment windows.",charOffset:"Body/patch continuation offset from nextQuery.",commentBodyOffset:"Comment-body continuation offset from nextQuery.",minify:'"standard" compact patches; "none" exact diff; "symbols" not available.',pageSize:"PRs or detail-list items returned per page."}}),Dr=TP.schema,tr=U(Dr,{...ee,keywords:Q.array(Q.string()).optional(),prNumber:H(1,Ze).optional(),owner:Q.string().optional(),repo:Q.string().optional(),concise:Q.boolean().optional(),state:Q.enum(["open","closed","merged"]).optional(),assignee:Q.string().optional(),author:Q.string().optional(),commenter:Q.string().optional(),mentions:Q.string().optional(),"review-requested":Q.string().optional(),"reviewed-by":Q.string().optional(),label:Q.array(Q.string()).optional(),checks:Q.enum(["success","failure","pending"]).optional(),review:Q.enum(["approved","changes_requested","required","none"]).optional(),head:Q.string().optional(),base:Q.string().optional(),created:Q.string().optional(),updated:Q.string().optional(),closed:Q.string().optional(),"merged-at":Q.string().optional(),comments:Q.string().optional(),reactions:Q.string().optional(),draft:Q.boolean().optional(),match:Q.array(Q.enum(["title","body","comments"])).optional(),sort:Q.enum(["created","updated","best-match","comments","reactions"]).optional(),order:Q.enum(["asc","desc"]).optional(),pageSize:H(1,_t).default(kt),page:Qe(),archived:Q.boolean().optional(),filePage:Qe(),commentPage:Qe(),commitPage:Qe(),content:U(Dr,{body:Q.literal(!0).optional(),changedFiles:Q.literal(!0).optional(),patches:U(Dr,{mode:Q.enum(["selected","all"]),files:Ae,ranges:Q.array(U(Dr,{file:Q.string(),additions:Q.array(H(1,Ze)).optional(),deletions:Q.array(H(1,Ze)).optional()},"content.patches.ranges")).optional()},"content.patches").optional(),comments:U(Dr,{discussion:Q.literal(!0).optional(),reviewInline:Q.literal(!0).optional(),includeBots:Q.literal(!0).optional(),file:Q.string().optional()},"content.comments").optional(),reviews:Q.literal(!0).optional(),commits:U(Dr,{includeFiles:Q.literal(!0).optional()},"content.commits").optional()},"content").optional(),matchString:Q.string().optional(),commentBodyOffset:qe(),charOffset:qe(),charLength:yt(),minify:Q.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let n=["content","filePage","commentPage","commitPage","matchString","commentBodyOffset","charOffset","charLength"],r=["keywords","concise","state","assignee","author","commenter","mentions","review-requested","reviewed-by","label","checks","review","head","base","created","updated","closed","merged-at","comments","reactions","draft","match","sort","order","page","archived"];if(e.prNumber===void 0)for(let c of n)e[c]!==void 0&&t.addIssue({code:"custom",message:`${c} requires prNumber detail mode.`,path:[c]});else{e.owner?.trim()||t.addIssue({code:"custom",message:"owner is required with prNumber.",path:["owner"]}),e.repo?.trim()||t.addIssue({code:"custom",message:"repo is required with prNumber.",path:["repo"]});for(let c of r)e[c]!==void 0&&t.addIssue({code:"custom",message:`${c} is only available in list mode.`,path:[c]})}e.content&&Object.keys(e.content).length===0&&t.addIssue({code:"custom",message:"content needs at least one selector.",path:["content"]});let o=e.content?.patches;if(!o)return;let i=(o.files?.length??0)>0,s=(o.ranges?.length??0)>0,a=i||s;o.mode==="selected"&&!a&&t.addIssue({code:"custom",message:'content.patches.mode="selected" requires non-empty files or ranges.',path:["content","patches","files"]}),o.mode!=="selected"&&a&&t.addIssue({code:"custom",message:'content.patches.files and content.patches.ranges require mode="selected".',path:["content","patches","mode"]})});import{z as ce}from"zod";var EP=fe({name:"ghSearchHistory",type:"Github",shortDescription:"Search GitHub issues, or read one issue's body and comments.",instructions:`Use for bug reports and feature threads; use PR or code tools for those surfaces. List mode uses search filters. Detail mode needs owner, repo, issueNumber, and content selectors; continue bodies/comments with returned offsets and pages.
|
|
15
|
-
GitHub issue search also finds PRs, which are filtered out. totalCount is present only for a complete page; an empty page with hasMore still has a nextPage.`,schema:{keywords:"Issue search terms.",match:"Keyword fields: title, body, comments.",issueNumber:"Issue detail mode; requires owner+repo.",concise:"Issue list triage; list mode only.",state:"open or closed.",assignee:"Assigned GitHub login.",author:"Issue author login.",commenter:"Commenter login.",mentions:"Mentioned login.",archived:"Include issues from archived repos.",comments:'Comment-count range filter (">5"); not comment content.',reactions:'Reaction-count range filter (">10").',created:'Created date/range, e.g. ">2024-01-01" or "a..b".',updated:"Updated-date filter (same format as created).",closed:"Closed-date filter (same format as created).",label:"Label name(s); multiple are ANDed.",sort:"created, updated, comments, reactions, best-match.",order:"asc/desc; asc+created helps archaeology.",commentPage:"Comments page from contentPagination.",content:"Detail selector for issueNumber.","content.body":"Include the issue description body.","content.comments":"Comment-thread selector.","content.comments.discussion":"Include the comment thread.","content.comments.includeBots":"Include bot/CI comments.",matchString:"Substring filter for body/comment windows.",charOffset:"Body continuation offset from nextQuery.",commentBodyOffset:"Comment-body continuation offset from nextQuery.",minify:'"standard" (default) compacts body/comment text; "none" keeps it exact.',pageSize:"Issues or detail comments returned per page."}}),Hl=EP.schema,nr=U(Hl,{...ee,owner:ce.string(),repo:ce.string(),keywords:ce.array(ce.string()).optional(),issueNumber:H(1,Ze).optional(),concise:ce.boolean().optional(),state:ce.enum(["open","closed"]).optional(),assignee:ce.string().optional(),author:ce.string().optional(),commenter:ce.string().optional(),mentions:ce.string().optional(),label:ce.array(ce.string()).optional(),created:ce.string().optional(),updated:ce.string().optional(),closed:ce.string().optional(),comments:ce.string().optional(),reactions:ce.string().optional(),match:ce.array(ce.enum(["title","body","comments"])).optional(),sort:ce.enum(["created","updated","best-match","comments","reactions"]).optional(),order:ce.enum(["asc","desc"]).optional(),pageSize:H(1,_t).default(kt),page:Qe(),archived:ce.boolean().optional(),commentPage:Qe(),content:U(Hl,{body:ce.literal(!0).optional(),comments:U(Hl,{discussion:ce.literal(!0).optional(),includeBots:ce.literal(!0).optional()},"content.comments").optional()},"content").optional(),matchString:ce.string().optional(),commentBodyOffset:qe(),charOffset:qe(),charLength:yt(),minify:ce.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let n=["content","commentPage","matchString","commentBodyOffset","charOffset","charLength"],r=["keywords","concise","state","assignee","author","commenter","mentions","label","created","updated","closed","comments","reactions","match","sort","order","page","archived"];if(e.issueNumber===void 0)for(let o of n)e[o]!==void 0&&t.addIssue({code:"custom",message:`${o} requires issueNumber detail mode.`,path:[o]});else{e.owner?.trim()||t.addIssue({code:"custom",message:"owner is required with issueNumber.",path:["owner"]}),e.repo?.trim()||t.addIssue({code:"custom",message:"repo is required with issueNumber.",path:["repo"]});for(let o of r)e[o]!==void 0&&t.addIssue({code:"custom",message:`${o} is only available in list mode.`,path:[o]})}e.content&&Object.keys(e.content).length===0&&t.addIssue({code:"custom",message:"content needs at least one selector.",path:["content"]})});import{z as Ot}from"zod";var AP=fe({name:"ghSearchHistory",type:"Github",shortDescription:"Walk a GitHub repository's commit history for a path or range.",instructions:`Trace when or why code changed; use code tools for current bytes and PR search for review context. History mode filters by path/date/ref/author; compare mode needs base+head. This tool does not search commit messages.
|
|
16
|
-
For one commit's changes, compare base:"SHA^" to head:"SHA" with includeDiff. Scope diffs to one commit or a tight window. Use a clone and LSP for symbol identity.`,schema:{pageSize:"Commits returned per page (walk with page).",owner:"Repository owner.",repo:"Repository name.",path:"File/dir prefix; trailing / scopes the subtree.",since:'Lower date bound: ISO date or relative window such as "30d".',until:"Upper date bound; same formats as since.",branch:"Ref to walk; defaults to the default branch.",includeDiff:"Attach diffs; prefer one commit or a tight window.",author:"Author login or email.",committer:"Committer login or email.",base:"Compare-mode base ref; set with head.",head:"Compare-mode head ref; set with base.",filePage:"Changed-file page from pagination.nextFilePage.",charOffset:"Patch offset from patchPagination.nextCharOffset.",charLength:"Patch-window length."}}),Ds=U(AP.schema,{...ee,owner:Ot.string(),repo:Ot.string(),path:Ot.string().optional(),since:Ot.string().optional(),until:Ot.string().optional(),branch:Ot.string().optional(),author:Ot.string().optional(),committer:Ot.string().optional(),base:Ot.string().optional(),head:Ot.string().optional(),pageSize:H(1,100).optional().default(30),includeDiff:Ot.boolean().optional().default(!1),page:Le(),filePage:Qe(),charOffset:qe(),charLength:yt()}).superRefine((e,t)=>{(e.base&&!e.head||e.head&&!e.base)&&t.addIssue({code:"custom",path:[e.base?"head":"base"],message:"Set base and head together for compare mode."})});import{z as Gl}from"zod";var LP=fe({name:"npmSearch",type:"NPM",shortDescription:"Look up npm packages and find their source repositories.",instructions:"Resolve npm packages to source repositories. Set exactly one of packageName for exact lookup or keywords for discovery. Follow the repository into GitHub tools.",schema:{keywords:"Discovery terms joined with spaces. Mutually exclusive with packageName.",packageName:"Exact package name; include scope for scoped packages.",page:"Keyword-result page only."}}),Hs=U(LP.schema,{...ee,packageName:Gl.string().optional(),keywords:Gl.array(Gl.string()).optional(),page:Le()}).superRefine((e,t)=>{let n=e.keywords?.join(" ").trim();!e.packageName?.trim()&&!n&&t.addIssue({code:"custom",path:["packageName"],message:"Set packageName or keywords."}),e.packageName?.trim()&&n&&t.addIssue({code:"custom",path:["keywords"],message:"Set packageName or keywords, not both."})});import{z as $o}from"zod";var _P=fe({name:"ghCloneRepo",type:"Github",shortDescription:"Clone a GitHub repo or subtree locally for repeated reads, search, or LSP.",instructions:"Best for repeated reads, local AST/regex, or LSP; use ghGetFileContent for one read. Discover a bounded sparsePath first. branch selects the ref and forceRefresh bypasses the cached clone. Pass results[].data.location.localPath to local tools.",schema:{sparsePath:"Bound checkout to a repo-relative file/dir.",forceRefresh:"Bypass cached clone."}}),Bl=U(_P.schema,{...ee,owner:$o.string(),repo:$o.string(),branch:$o.string().optional(),sparsePath:$o.string().optional(),forceRefresh:$o.boolean().optional()});import{z as bt}from"zod";import{z as Oe}from"zod";var zl={searchText:'Single lexical pattern. regex:"fixed" is literal and "perl" enables advanced syntax.',mode:'Search mode: "discovery" paths; "paginated" snippets; "detailed" context; "structural" AST.',pattern:"Structural code pattern: $X matches one node; $$$ARGS matches a list. Include modifiers or use a kind rule.",rule:"Structural YAML ast-grep rule for relational matches.",regex:'"smart" (default), "fixed" (literal), or "perl" (advanced).',caseMode:'"smart" (default), "sensitive", or "insensitive".',wholeWord:"Match whole words only (text/regex modes).",invertMatch:"Return non-matching lines (text/regex modes).",multiline:'"off" (default), "on", or "dotall" (. spans newlines).',include:"Glob(s) of files to include.",exclude:"Glob(s) of files to exclude.",excludeDir:"Directory names to prune from the walk.",noIgnore:"Also search .gitignored files.",hidden:"Include dot-files.",matchContentLength:"Matched-line characters kept per hit; longer lines are truncated.",maxFiles:"Text: page ceiling. Structural: scan cap; stats report truncation.",maxDepth:"Maximum levels below the search root; 0 means root files.",output:'"content" lines; "files"/"filesWithout" paths; count modes totals; "matchOnly" substrings.',unique:'With output:"matchOnly", deduplicate values or count frequency.',sort:'"relevance" (default), "matchCount", "path", "modified", "accessed", or "created".',sortReverse:"Reverse the sort order.",rankingProfile:'Language tuning for sort:"relevance"; "auto" detects.',langType:'Language/file type, e.g. "ts"; structural mode maps it to include globs.',captureText:"Structural: include verbatim $$$ list captures; ranges remain available when omitted.",maxMatchesPerFile:"Pairs with matchPage.",matchWindow:'Requires output:"matchOnly".',matchPage:"Per-file match page."},ft=U(zl,{...ee,searchText:Oe.string().optional(),path:Oe.string(),mode:Oe.enum(["paginated","discovery","detailed","structural"]).default("paginated"),pattern:Oe.string().optional(),rule:Oe.string().optional(),regex:Oe.enum(["smart","fixed","perl"]).default("smart"),caseMode:Oe.enum(["smart","sensitive","insensitive"]).default("smart"),wholeWord:Oe.boolean().optional(),invertMatch:Oe.boolean().optional(),include:Ae,exclude:Ae,excludeDir:Ae,noIgnore:Oe.boolean().optional(),hidden:Oe.boolean().optional(),contextLines:Os(),matchContentLength:H(1,Il).default(Ol),maxMatchesPerFile:H(1,Is).optional(),maxFiles:H(1,Is).optional(),maxDepth:H(0,Qo).optional(),multiline:Oe.enum(["off","on","dotall"]).default("off"),sort:Oe.enum(["relevance","matchCount","path","modified","accessed","created"]).default("relevance"),sortReverse:Oe.boolean().optional(),rankingProfile:Oe.enum(["auto","typescript","javascript","rust","python","go","java","scala","markdown","json","yaml","generic"]).default("auto"),langType:Oe.string().optional(),captureText:Oe.boolean().optional(),output:Oe.enum(["content","files","filesWithout","countLines","countMatches","matchOnly"]).default("content"),unique:Oe.enum(["off","list","count"]).default("off"),matchWindow:H(0,200).optional(),matchPage:Qe(),itemsPerPage:H(1,vl).optional(),page:Le()}).superRefine((e,t)=>{if(e.mode==="structural"){!e.pattern&&!e.rule&&t.addIssue({code:"custom",message:"Set pattern or rule for structural mode.",path:["pattern"]}),e.pattern&&e.rule&&t.addIssue({code:"custom",message:"Choose pattern or rule, not both.",path:["rule"]}),e.wholeWord&&t.addIssue({code:"custom",message:"Remove wholeWord in structural mode.",path:["wholeWord"]}),e.invertMatch&&t.addIssue({code:"custom",message:"Remove invertMatch in structural mode.",path:["invertMatch"]});for(let r of["regex","caseMode","multiline"]){let o=r==="multiline"?"off":"smart";e[r]!==o&&t.addIssue({code:"custom",message:`Remove ${r} in structural mode.`,path:[r]})}e.output!=="content"&&t.addIssue({code:"custom",message:"Remove output in structural mode.",path:["output"]}),e.unique!=="off"&&t.addIssue({code:"custom",message:"Remove unique in structural mode.",path:["unique"]})}else(e.pattern||e.rule)&&t.addIssue({code:"custom",message:"Use structural mode with pattern or rule.",path:[e.pattern?"pattern":"rule"]}),e.searchText||t.addIssue({code:"custom",message:"Set searchText for text modes.",path:["searchText"]});e.matchWindow!==void 0&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'Use output:"matchOnly" with matchWindow.',path:["matchWindow"]}),e.unique!=="off"&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'Use output:"matchOnly" with unique.',path:["unique"]})});import{z as st}from"zod";var Ql={maxDepth:"Maximum levels below path; 0 is direct entries.",minDepth:"Requires <= maxDepth when both set.",names:"Basename globs; ORed.",pathPattern:"Full-path glob.",regex:"Basename Rust regex.",empty:"Match only empty files/dirs.",time:"Time filters using d/h/w/m durations.","time.modifiedWithin":"Modified within this duration, e.g. 2d or 6h.","time.modifiedBefore":"Modified before this duration ago, e.g. 30d.","time.accessedWithin":"Accessed within this duration, e.g. 1w.",size:"Size range, e.g. 100k or 1m.","size.greater":"Minimum file size, e.g. 100k or 1m.","size.less":"Maximum file size, e.g. 500b or 2m.",extensions:'Extensions without dots, e.g. ["ts","tsx"].',excludeDir:"Directory names; generated/vendor dirs are pruned by default. Pass [] to prune nothing.",entryType:'"f" files, "d" dirs.',permissions:"Exact permission filter.",access:'"executable", "readable", or "writable" filter.',detail:'"basic" (default), "modified" (+mtime), or "full" (all metadata).',sortBy:'"modified" (default), "name", "path", or "size".',limit:"Post-sort result cap; pagination stays within it."},jl=Ql,Ut=U(jl,{...ee,path:st.string(),maxDepth:H(0,ks).optional(),minDepth:H(0,ks).optional(),names:Ae,pathPattern:st.string().optional(),regex:st.string().optional(),empty:st.boolean().optional(),time:U(jl,{modifiedWithin:st.string().optional(),modifiedBefore:st.string().optional(),accessedWithin:st.string().optional()},"time").optional(),size:U(jl,{greater:st.string().optional(),less:st.string().optional()},"size").optional(),permissions:st.string().optional(),access:st.enum(["executable","readable","writable"]).optional(),extensions:Ae,excludeDir:Ae,limit:H(1,Uo).optional(),detail:st.enum(["basic","modified","full"]).default("basic"),sortBy:st.enum(["modified","name","path","size"]).default("modified"),entryType:st.enum(["f","d"]).optional(),page:Le(),itemsPerPage:H(1,Jn).optional()}).superRefine((e,t)=>{e.minDepth!==void 0&&e.maxDepth!==void 0&&e.minDepth>e.maxDepth&&t.addIssue({code:"custom",message:"minDepth must be less than or equal to maxDepth.",path:["minDepth"]})});import{z as In}from"zod";var Ul={pattern:"Name glob or substring; use the files operation for regex.",entryType:'"f" files only, "d" dirs only; omit for both.',detail:'"basic" (default), "modified" (+mtime), or "full" (size/perms).',hidden:"Include dot-files/dirs.",recursive:"true enables the default recursive depth; omit with maxDepth for immediate children.",maxDepth:"Recursion depth. Omitted: immediate children, or 5 if recursive:true; maxDepth alone enables recursion, so recursive:true is not required. 0 uses those defaults.",extensions:"Allowlist without dots.",excludeDir:"Directories to prune; [] includes generated/vendor directories.",sortBy:'"name" (default), "size", "time", or "extension".',reverse:"Reverse the sort order.",limit:"Discovery cap before pagination."},$t=U(Ul,{...ee,path:In.string(),detail:In.enum(["basic","modified","full"]).default("basic"),hidden:In.boolean().optional(),sortBy:In.enum(["name","size","time","extension"]).default("name"),reverse:In.boolean().optional(),pattern:In.string().optional(),entryType:In.enum(["f","d"]).optional(),recursive:In.boolean().optional(),extensions:Ae,excludeDir:Ae,maxDepth:H(0,Qo).optional(),limit:H(1,Uo).optional(),page:Le(),itemsPerPage:H(1,Jn).optional()});var Wo={...zl};delete Wo.mode;delete Wo.output;delete Wo.itemsPerPage;delete Wo.sortReverse;var Ah={...Ul};delete Ah.recursive;var NH=fe({name:"localSearch",type:"Local",shortDescription:"Search local text, syntax, paths, or directory trees through one operation.",instructions:'Choose operation:"text" for lexical anchors, "structural" for AST matches, "files" for path or metadata discovery, and "tree" for directory orientation. Each operation has a strict branch, so do not mix fields across operations. Files/tree prune common generated and vendor directories by default; pass excludeDir:[] to prune nothing. Read exact hits with localGetFileContent and prove symbol identity with lspGetSemantics.',schema:{...Ql,...Ah,...Wo,operation:'Required branch: "text", "structural", "files", or "tree".',resultView:'Text/structural result shape. Text also supports "paginated", "discovery", and "detailed".',pattern:"Structural AST pattern.",namePattern:"Tree entry name glob or substring.",pathRegex:"Files operation: basename Rust regex.",limit:"Files/tree discovery cap before pagination.",pageSize:"Results returned per page.",sort:"Operation-specific sort order.",reverse:"Reverse the selected sort order."}}),Lh=bt.object(ft.shape),kP=bt.object(Ut.shape),IP=bt.enum(["paginated","discovery","detailed","content","files","filesWithout","countLines","countMatches","matchOnly"]),OP=bt.enum(["content","files","countLines","countMatches","matchOnly"]),vP=Lh.omit({pattern:!0,rule:!0,captureText:!0,mode:!0,output:!0,itemsPerPage:!0,sortReverse:!0}).extend({operation:bt.literal("text").describe('Use "text" for lexical search.'),searchText:bt.string().describe("Single lexical pattern."),resultView:IP.optional().default("paginated").describe("Text result shape; paginated is the default."),pageSize:ft.shape.itemsPerPage.describe("Matches returned per page."),reverse:ft.shape.sortReverse.describe("Reverse the selected sort order."),unique:ft.shape.unique.describe('With resultView:"matchOnly", deduplicate values or count frequency.'),matchWindow:ft.shape.matchWindow.describe('Requires resultView:"matchOnly".')}).strict(),_h=Lh.omit({searchText:!0,pattern:!0,rule:!0,mode:!0,regex:!0,caseMode:!0,wholeWord:!0,invertMatch:!0,multiline:!0,unique:!0,matchWindow:!0,output:!0,itemsPerPage:!0,sortReverse:!0}).extend({operation:bt.literal("structural").describe('Use "structural" for AST matching.'),resultView:OP.optional().default("content").describe("Structural result shape; content is the default."),pageSize:ft.shape.itemsPerPage.describe("Matches returned per page."),reverse:ft.shape.sortReverse.describe("Reverse the selected sort order.")}).strict(),FP=_h.extend({pattern:bt.string().describe("Structural AST pattern.")}).strict(),MP=_h.extend({rule:bt.string().describe("Structural YAML ast-grep rule.")}).strict(),NP=kP.omit({regex:!0,limit:!0,sortBy:!0,itemsPerPage:!0}).extend({operation:bt.literal("files").describe('Use "files" for path and metadata discovery.'),pathRegex:Ut.shape.regex.describe("Basename Rust regex."),limit:Ut.shape.limit.describe("Post-sort discovery cap."),sort:Ut.shape.sortBy.describe("File sort order."),pageSize:Ut.shape.itemsPerPage.describe("Files returned per page.")}).strict(),DP=$t.omit({pattern:!0,recursive:!0,limit:!0,sortBy:!0,itemsPerPage:!0}).extend({operation:bt.literal("tree").describe('Use "tree" for directory orientation.'),namePattern:$t.shape.pattern.describe("Entry name glob or substring."),limit:$t.shape.limit.describe("Discovery cap before pagination."),sort:$t.shape.sortBy.describe("Tree sort order."),pageSize:$t.shape.itemsPerPage.describe("Entries returned per page.")}).strict();function Eh(e,t){if("error"in e)for(let n of e.error.issues)n.code==="custom"&&t.addIssue({code:"custom",message:n.message,path:n.path})}var $l=bt.union([vP,FP,MP,NP,DP]).superRefine((e,t)=>{if(e.operation==="text"){let n=e.resultView,r={...e,itemsPerPage:e.pageSize,sortReverse:e.reverse};delete r.operation,delete r.resultView,delete r.pageSize,delete r.reverse;let o=["paginated","discovery","detailed"].includes(n)?{...r,mode:n}:{...r,mode:"paginated",output:n};Eh(ft.safeParse(o),t);return}if(e.operation!=="structural"&&e.operation==="files"){let n={...e,regex:e.pathRegex,limit:e.limit,sortBy:e.sort,itemsPerPage:e.pageSize};delete n.operation,delete n.pathRegex,delete n.pageSize,delete n.sort,Eh(Ut.safeParse(n),t)}});import{z as ve}from"zod";var HP="localAnalyzeGraph",BH=fe({name:HP,type:"Local",shortDescription:"Analyze a repository file graph through one bounded operation.",instructions:"Map file topology, not symbol identity. dependencies/dependents need file; path needs file+target; deadCode/reachability accept roots; cycles needs no selector. Import edges and dead-code results are candidates\u2014verify changes and deletions with exact reads plus LSP.",schema:{path:"Absolute repository or package root to scan.",operation:"One bounded operation: deadCode, cycles, dependencies, dependents, path, or reachability.",file:"Repository-relative source file for dependencies, dependents, or path.",target:"Repository-relative destination file for path.",depth:"Traversal depth for dependencies or dependents.",entrypoints:"Repository-relative roots for deadCode or reachability.",includeTests:"Treat test files as reachability roots.",excludeDir:"Directory names to prune from graph construction.",maxFiles:"Maximum source files scanned; truncation is reported.",limit:"Result cap applied before pagination.",page:"Result page, 1-based; advance only while pagination.hasMore.",pageSize:"Results returned per page."}}),Vo=(e,t)=>ve.preprocess(n=>typeof n=="number"&&Number.isFinite(n)?Math.min(Math.max(n,e),t):n,ve.number().int().min(e).max(t)),Hr=(e,t)=>ve.literal(e).describe(t),Gr={...ee,path:ve.string().describe("Absolute repository or package root to scan."),excludeDir:ve.array(ve.string()).optional().describe("Directory names to prune from graph construction."),maxFiles:Vo(1,5e4).optional().describe("Maximum source files scanned; truncation is reported."),limit:Vo(1,5e3).optional().describe("Result cap applied before pagination."),page:Vo(1,jo).optional().default(1).describe("Result page, 1-based."),pageSize:Vo(1,Jn).optional().describe("Results returned per page.")},kh={entrypoints:ve.array(ve.string()).optional().describe("Repo-relative reachability roots; omit to detect package.json main/exports/bin."),includeTests:ve.boolean().optional().default(!0).describe("Treat tests as reachability roots (default true).")},Ih={file:ve.string().describe("Repo-relative source file."),depth:Vo(1,50).optional().default(1).describe("Maximum traversal depth (default 1).")},On=ve.discriminatedUnion("operation",[ve.object({...Gr,...kh,operation:Hr("deadCode","Find unreachable or unretained exported symbols and dead SCCs.")}).strict(),ve.object({...Gr,operation:Hr("cycles","Find strongly connected file components.")}).strict(),ve.object({...Gr,...Ih,operation:Hr("dependencies","Traverse files imported or re-exported by the source file; results include edgeKinds and syntactic confidence.")}).strict(),ve.object({...Gr,...Ih,operation:Hr("dependents","Traverse files that import or re-export the source file; results include edgeKinds and syntactic confidence.")}).strict(),ve.object({...Gr,file:ve.string().describe("Repo-relative source file."),target:ve.string().describe("Repo-relative destination file."),operation:Hr("path","Find the shortest directed import/re-export path with per-edge provenance.")}).strict(),ve.object({...Gr,...kh,operation:Hr("reachability","Classify scanned files by reachability from entrypoints.")}).strict()]);import{z as Br}from"zod";var GP=fe({name:"localGetFileContent",type:"Local",shortDescription:"Read a local file or a specific region.",instructions:`Read a known local path after search, find, or structure discovery. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
|
|
17
|
-
Choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; continue with the returned charOffset. matchedLines are LSP anchors; match ranges and character offsets are not. Report fetched bytes only.`,schema:{fullContent:"Whole file; small files only; exclusive with range/match.",matchString:"Anchor returning padded matchRanges and exact matchedLines.",matchStringIsRegex:"Makes matchString a regex.",matchStringCaseSensitive:"Case-sensitive matchString.",startLine:"Requires endLine; exclusive with fullContent/matchString.",endLine:"Requires startLine; must be >= startLine.",charOffset:"Copy pagination.nextCharOffset.",minify:'"symbols" outline, "standard" compact, "none" exact.'}}),Gs=U(GP.schema,{...ee,path:Br.string(),fullContent:Br.boolean().optional(),matchString:Br.string().optional(),matchStringIsRegex:Br.boolean().optional(),matchStringCaseSensitive:Br.boolean().optional(),startLine:Fr(),endLine:Fr(),contextLines:H(0,vr).default(5),charOffset:qe(),charLength:yt(),minify:Br.enum(["none","standard","symbols"]).default("standard")}).superRefine(vs);import{z as rr}from"zod";var BP=fe({name:"lspGetSemantics",type:"Local",shortDescription:"Run LSP semantic queries \u2014 definitions, references, call hierarchy, symbols, type hierarchy, diagnostics.",instructions:`Use a real search/read line anchor for semantic proof. references finds usages; callers incoming calls; callees outgoing calls; callHierarchy both. Fall back to references if call hierarchy is unavailable.
|
|
18
|
-
documentSymbols/diagnostic need uri; workspaceSymbol needs symbolName; other operations need uri+symbolName+lineHint. orderHint resolves same-line names. format:"compact" saves tokens. Empty/unavailable results call for a new anchor or text search.`,schema:{pageSize:"References or symbols returned per page.",page:"Reference/symbol result page.",type:"Identity, usage, hierarchy, hover, symbol, or diagnostic operation.",uri:"Target file path/URI; required for every type except workspaceSymbol.",symbolName:"Bare anchored identifier, or fuzzy workspace symbol query.",lineHint:"Observed line containing symbolName.",orderHint:"Disambiguate repeated symbols on one line.",depth:"Call/type hierarchy depth; 0 is direct only.",includeDeclaration:"references: include the declaration; disable before unused analysis.",groupByFile:"references summary mode.",contextLines:"Lines of surrounding source shown around each result location.",format:'"compact" saves tokens; "structured" has typed locations.',workspaceRoot:"Use when auto-root is wrong."}}),Bs=U(BP.schema,{...ee,uri:rr.string().optional(),type:rr.enum(["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation","workspaceSymbol","supertypes","subtypes","diagnostic"]).default("definition"),symbolName:rr.string().min(1).optional(),lineHint:H(1,Ze).optional(),orderHint:H(0,Ll).default(0),depth:H(0,Fl).optional(),includeDeclaration:rr.boolean().default(!0),groupByFile:rr.boolean().optional(),page:Le(),pageSize:H(1,Ml).optional(),contextLines:Os(),format:rr.enum(["structured","compact"]).default("structured"),workspaceRoot:rr.string().optional()}).superRefine((e,t)=>{if(e.type==="workspaceSymbol"){e.symbolName||t.addIssue({code:"custom",path:["symbolName"],message:"Set symbolName for workspaceSymbol."});return}e.uri||t.addIssue({code:"custom",path:["uri"],message:"Set uri for file-scoped operations."}),!(e.type==="documentSymbols"||e.type==="diagnostic")&&(e.symbolName||t.addIssue({code:"custom",path:["symbolName"],message:"Set symbolName for anchored operations."}),Number.isInteger(e.lineHint)||t.addIssue({code:"custom",path:["lineHint"],message:"Set lineHint for anchored operations."}))});var Wt=mt.LOCAL_ANALYZE_GRAPH,et="localSearch",St=mt.GITHUB_SEARCH,le="ghSearchHistory",ye="ghGetHistoryItem",oe={GITHUB_SEARCH:mt.GITHUB_SEARCH,GITHUB_FETCH_CONTENT:mt.GITHUB_FETCH_CONTENT,PACKAGE_SEARCH:mt.PACKAGE_SEARCH,GITHUB_CLONE_REPO:mt.GITHUB_CLONE_REPO,LOCAL_FETCH_CONTENT:mt.LOCAL_FETCH_CONTENT,LOCAL_ANALYZE_GRAPH:mt.LOCAL_ANALYZE_GRAPH,LSP_GET_SEMANTIC_CONTENT:mt.LSP_GET_SEMANTIC_CONTENT,GITHUB_SEARCH_HISTORY:le,GITHUB_GET_HISTORY_ITEM:ye},we=oe.LSP_GET_SEMANTIC_CONTENT,zP=new Set([et,oe.LOCAL_FETCH_CONTENT,Wt,we]);function RG(e){return zP.has(e)}var I={...oe,LOCAL_SEARCH:"localSearch",GITHUB_SEARCH_CODE:"github.code",GITHUB_VIEW_REPO_STRUCTURE:"github.tree",GITHUB_SEARCH_REPOSITORIES:"github.repositories",LOCAL_RIPGREP:"local.text",LOCAL_VIEW_STRUCTURE:"local.tree",LOCAL_FIND_FILES:"local.files"};var Ue={ghSearch:`Choose operation:"code" for code contents or file paths, "repositories" to discover repositories, or "tree" to browse a known repository.
|
|
19
|
-
Each operation has a strict input branch; fields from other operations are rejected. Use ghGetFileContent only after a path is known. Empty GitHub search results do not prove absence.`,ghGetFileContent:`Read a known GitHub path after search or structure discovery; a complete search snippet needs no reread. A path-only call returns a bounded standard-minified view. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
|
|
20
|
-
Optionally choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; run the returned continuation. matchedLines are LSP anchors; match ranges and offsets are not. type:"directory" returns localPath when local access is enabled; otherwise use ghSearch operation:"tree".`,ghSearchHistory:'Search or list repository history. Choose operation:"pullRequests", "issues", or "commits"; fields from other operations are rejected. Pull-request search may be global, while issue and commit history require owner+repo. Search branches never accept detail identities, content selectors, or diff pagination. Follow a result with ghGetHistoryItem.',ghGetHistoryItem:'Retrieve exact GitHub history. Choose operation:"pullRequest" or "issue" with number, "commit" with ref, or "compare" with base+head. Every branch requires owner+repo and rejects fields from other branches. PR/issue content and commit/compare diffs keep their branch-specific page and character windows; copy returned continuations exactly.',npmSearch:"Resolve npm packages to source repositories. Set exactly one of packageName for exact lookup or keywords for discovery. Follow the repository into GitHub tools.",ghCloneRepo:"Best for repeated reads, local AST/regex, or LSP; use ghGetFileContent for one read. Discover a bounded sparsePath first; complete is relative to that requested scope. branch selects the ref and forceRefresh bypasses the cached clone. Pass results[].data.location.localPath to local tools.",localSearch:'Choose operation:"text" for lexical anchors, "structural" for AST matches, "files" for path or metadata discovery, and "tree" for directory orientation. Each operation has a strict branch, so do not mix fields across operations. Files/tree prune common generated and vendor directories by default; pass excludeDir:[] to prune nothing. Read exact hits with localGetFileContent and prove symbol identity with lspGetSemantics.',localAnalyzeGraph:"Map file topology, not symbol identity. dependencies/dependents need file; path needs file+target; deadCode/reachability accept roots; cycles needs no selector. Import edges and dead-code results are candidates\u2014verify changes and deletions with exact reads plus LSP.",localGetFileContent:`Read a known local path after search, find, or structure discovery. A path-only call returns a bounded standard-minified view. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
|
|
21
|
-
Optionally choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; run the returned continuation. matchedLines are LSP anchors; match ranges and character offsets are not. Report fetched bytes only.`,lspGetSemantics:`Use a real search/read line anchor for semantic proof. references finds usages; callers incoming calls; callees outgoing calls; callHierarchy both. Fall back to references if call hierarchy is unavailable.
|
|
22
|
-
documentSymbols/diagnostic need uri; workspaceSymbol needs symbolName; other operations need uri+symbolName+lineHint. orderHint resolves same-line names. format:"compact" saves tokens. Empty/unavailable results call for a new anchor or text search.`};function jP(e){return Object.prototype.hasOwnProperty.call(Ue,e)}function Wl(e,t){let n=e.split("/").pop()||"",r=t.some(i=>{let s=i.split("/").pop()||"";return s.toLowerCase()===n.toLowerCase()&&s!==n}),o=[];return r&&o.push('GitHub paths are case-sensitive. Verify exact casing with ghSearch operation:"tree".'),o.push(`Did you mean: ${t.join(", ")}?`),o}async function Vl(e,t,n,r,o){try{let i=r.split("/").slice(0,-1).join("/"),s=r.split("/").pop();if(!s)return[];let a=await e.rest.repos.getContent({owner:t,repo:n,path:i,ref:o});if(!Array.isArray(a.data))return[];let c=a.data,l=[],u=c.find(m=>m.name.toLowerCase()===s.toLowerCase());u&&l.push(u.path);let p=s.replace(/\.[^/.]+$/,"");return c.filter(m=>m.name===s?!1:!!m.name.startsWith(p+".")).forEach(m=>l.push(m.path)),l.length===0&&p.length>=3&&c.filter(f=>{let h=f.name.replace(/\.[^/.]+$/,"");return h!==p&&h.length>=3&&(p.startsWith(h)||h.startsWith(p))}).forEach(f=>l.push(f.path)),Array.from(new Set(l)).slice(0,3)}catch{return[]}}async function QP(e,t,n,r,o,i,s,a){let c=await Be(r,o,a);if((s==="main"||s==="master")&&s!==c)try{return{result:await e.rest.repos.getContent({...n,ref:c}),actualBranch:c}}catch{throw t}let u=J(t),p=s===c?void 0:`Branch '${s}' not found. Default branch is '${c}'. Ask user: Do you want to get the file from '${c}' instead?`,d=await Vl(e,r,o,i,s||c);return d.length>0&&(u.hints=[...u.hints||[],...Wl(i,d)]),{...u,...p&&{scopesSuggestion:p}}}async function UP(e,t,n,r,o,i){let s=J(t),a=await Vl(e,n,r,o,i||"main");return a.length>0&&(s.hints=[...s.hints||[],...Wl(o,a)]),s}async function Oh(e,t){let n=e.replace(/\s/g,"");if(!n)return{error:fn.FILE_EMPTY.message,type:"unknown",status:404};try{let r=Buffer.from(n,"base64");return r.indexOf(0)!==-1?{error:fn.BINARY_FILE.message,type:"unknown",status:415}:{data:r.toString("utf-8"),status:200}}catch{return{error:fn.DECODE_FAILED.message,type:"unknown",status:422}}}async function vh(e,t,n,r,o){try{let i=await e.rest.git.getBlob({owner:t,repo:n,file_sha:r}),{content:s,encoding:a}=i.data;return a==="base64"?Oh(s,o):a==="utf-8"?{data:s,status:200}:{error:`Unsupported blob encoding: ${a}`,type:"unknown",status:415}}catch(i){return J(i)}}async function $P(e,t,n,r,o,i){try{let s=r.split("/").slice(0,-1).join("/"),a=r.split("/").pop();if(!a)return{error:`Cannot determine file name from path: ${r}`,type:"unknown",status:400};let c=o||await Be(t,n,i).catch(()=>"HEAD"),l=await e.rest.repos.getContent({owner:t,repo:n,path:s||"",ref:c});if(!Array.isArray(l.data))return{error:`Expected directory listing for ${s||"root"}`,type:"unknown",status:500};let u=l.data.find(d=>d.name===a&&d.type==="file");if(!u)return{error:`File ${a} not found in ${s||"root"}`,type:"unknown",status:404};let p=await vh(e,t,n,u.sha,r);return"error"in p?p:{data:{rawContent:p.data,branch:typeof c=="string"?c:void 0,resolvedRef:typeof c=="string"?c:"HEAD"},status:200}}catch(s){return J(s)}}async function Ko(e,t,n={}){try{let r=await $(t),{owner:o,repo:i,path:s,branch:a}=e,c={owner:o,repo:i,path:s,...a&&{ref:a},...n.ifNoneMatch?{headers:{"If-None-Match":n.ifNoneMatch}}:{}},l,u=a;try{l=await r.rest.repos.getContent(c)}catch(m){if(m instanceof Kl&&m.status===304)return{data:{rawContent:"",resolvedRef:a||"HEAD"},status:304,etag:n.ifNoneMatch,notModified:!0};if(m instanceof Kl&&m.status===404)if(a){let f=await QP(r,m,c,o,i,s,a,t);if("result"in f)l=f.result,u=f.actualBranch;else return f}else return await UP(r,m,o,i,s,a);else{if(m instanceof Kl&&m.status===413)return await $P(r,o,i,s,a||u,t);throw m}}let p=l.data,d=Or(l.headers);if(Array.isArray(p))return{error:fn.PATH_IS_DIRECTORY.message(I.GITHUB_VIEW_REPO_STRUCTURE),type:"unknown",status:400};if("content"in p&&p.type==="file"){let m=typeof p.content=="string"?p.content:"",f=p.size??0,h;if(m.length>0)h=await Oh(m,s);else if(f>0&&"sha"in p&&typeof p.sha=="string"&&p.sha)h=await vh(r,o,i,p.sha,s);else return{error:fn.FILE_EMPTY.message,type:"unknown",status:404};if("error"in h)return h;if(!u&&!a)try{u=await Be(o,i,t)}catch{}return{data:{rawContent:h.data,branch:u||void 0,resolvedRef:u||a||"HEAD"},status:200,rawResponseChars:B(p),...d?{etag:d}:{}}}return{error:fn.UNSUPPORTED_TYPE.message(p.type),type:"unknown",status:415}}catch(r){return J(r)}}async function Xl(e,t,n,r,o,i=!1){let s=At(),{commitSha:a,resolvedRef:c}=await Es(e,t,r,o,i),l=vo(s,e,t,a),u=YP(KP(l,n));if(!u.startsWith(l+ZP)&&u!==l)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let p=xr(l);if(!i&&p.hit&&p.meta.commitSha===a&&Fh(u))return{localPath:u,repoRoot:l,path:n,size:bh(u),cached:!0,expiresAt:p.meta.expiresAt,owner:e,repo:t,branch:c,commitSha:a};let d=await Ko({owner:e,repo:t,path:n,type:"file",branch:a,fullContent:!0,contextLines:0,minify:"none",goal:`Save ${e}/${t}/${n} locally`,reasoning:"GitHub file materialization"},o);if(!("data"in d)||!d.data){let h="error"in d?d.error:void 0;throw new Error(h||`Failed to fetch ${e}/${t}/${n}`)}Pr(s),Pn(l);let m=XP(u);Fh(m)||VP(m,{recursive:!0,mode:448}),WP(u,d.data.rawContent,"utf-8");let f=wr(e,t,c,"treeFetch",void 0,void 0,a);return Cr(l,f),{localPath:u,repoRoot:l,path:n,size:d.data.rawContent.length,cached:!1,expiresAt:f.expiresAt,owner:e,repo:t,branch:c,commitSha:a}}import{ContentSanitizer as eu}from"@octocodeai/octocode-engine/contentSanitizer";function Xo(e){if(e.length===0)return[];let t=e.split(/\r?\n/);return t.length>0&&t[t.length-1]===""&&t.pop(),t}function Vt(e){return Xo(e).length}function zs(e,t,n,r=!1,o=!1,i){if(r)try{new RegExp(t)}catch(l){let u=l instanceof Error?l.message:String(l);throw new Error(`Invalid regex pattern: ${u}`)}if(i!==void 0&&i<=0)return{lines:[],matchRanges:[],matchCount:0,matchingLines:[]};let s=e.join(`
|
|
23
|
-
`),a={isRegex:r,caseSensitive:o,contextLines:n,maxMatches:i},c=D.extractMatchingLines(s,t,a);return{lines:c.lines,matchRanges:c.matchRanges.map(l=>({start:l.start,end:l.end})),matchCount:c.matchCount,matchingLines:c.matchingLines.map(l=>l)}}var qP=/\.(?:md|markdown|mdx)$/i;function JP(e){return qP.test(e.split(/[?#]/,1)[0]??e)}function Mh(e,t){return JP(t)?tT(eT(e)):null}function js(e,t){let n=Mh(e,t);if(n===null||n.length===0)return null;let r=[];return Dh(n,r),r.join(`
|
|
24
|
-
`)}function Nh(e,t){let n=Mh(e,t);return n===null?null:n.map(Hh)}function eT(e){let t=[],n=e.split(/\r?\n/),r;return n.forEach((o,i)=>{let s=o.match(/^[ \t]{0,3}(`{3,}|~{3,})/);if(s?.[1]){let l=s[1][0],u=s[1].length;r?r.marker===l&&u>=r.length&&(r=void 0):r={marker:l,length:u};return}if(r)return;let a=o.match(/^[ \t]{0,3}(#{1,6})(?:[ \t]+|$)(.*)$/);if(!a?.[1])return;let c=(a[2]??"").replace(/[ \t]+#+[ \t]*$/,"").trim();t.push({line:i+1,level:a[1].length,text:c.length>0?c:"(untitled heading)",children:[]})}),t}function tT(e){let t=[],n=[];for(let r of e){for(;n.length>0&&n[n.length-1].level>=r.level;)n.pop();let o=n[n.length-1];o?o.children.push(r):t.push(r),n.push(r)}return t}function Dh(e,t){for(let n of e){let r=String(n.line).padStart(4," "),o=" ".repeat(Math.max(0,n.level-1));t.push(`${r}| ${o}${"#".repeat(n.level)} ${n.text}`),Dh(n.children,t)}}function Hh(e){let t=`${"#".repeat(e.level)} ${e.text}`;return{name:t,kind:"markdownHeading",range:{start:{line:e.line-1,character:0},end:{line:e.line-1,character:t.length}},selectionRange:{start:{line:e.line-1,character:0},end:{line:e.line-1,character:t.length}},children:e.children.map(Hh)}}import{getConfigSync as nT,DEFAULT_OUTPUT_CONFIG as rT}from"@octocodeai/config";function or(){try{return nT().output.pagination.defaultCharLength}catch{return rT.pagination.defaultCharLength}}function oT(e,t,n){return D.byteSliceContent(e,t,n)}function Qs(e,t){return D.byteToCharOffset(e,t)}function Gh(e,t){return D.charToByteOffset(e,t)}function Bh(e){return D.charToByteOffset(e,e.length)}function fB(e,t,n){let r=oT(e,t,t+n);return{charOffset:Qs(e,t),charLength:r.length,text:r}}function Yl(e,t,n,r){return D.sliceContent(e,t,n,r)}function Us(e,t=0,n,r={}){let o=r.mode??"characters",i=e.length,s=Bh(e);if(n===void 0)return{paginatedContent:e,byteOffset:0,byteLength:s,totalBytes:s,nextByteOffset:void 0,charOffset:0,charLength:i,totalChars:i,nextCharOffset:void 0,hasMore:!1,estimatedTokens:Math.ceil(e.length/4),currentPage:1,totalPages:1};let a=Math.max(1,r.pageSize??n),c,l,u,p,d,m,f,h;if(o==="bytes"){let y=Math.min(t,s),g=Math.min(y+n,s);p=Qs(e,y),d=Qs(e,g),d<i&&Gh(e,d)<g&&(d+=1);let S=Yl(e,p,d-p);c=S.text,p=S.charOffset,d=S.charOffset+S.charLength,l=S.byteOffset,u=S.byteOffset+S.byteLength,m=u<s;let R=r.actualOffset??y;f=Math.floor(R/a)+1,h=Math.max(f,Math.ceil(s/a))}else{let y=Yl(e,t,n);c=y.text,p=y.charOffset,d=y.charOffset+y.charLength,l=y.byteOffset,u=y.byteOffset+y.byteLength,m=d<i;let g=r.actualOffset??p;f=Math.floor(g/a)+1,h=Math.max(f,Math.ceil(i/a))}return{paginatedContent:c,byteOffset:l,byteLength:u-l,totalBytes:s,nextByteOffset:m?u:void 0,charOffset:p,charLength:c.length,totalChars:i,nextCharOffset:m?d:void 0,hasMore:m,estimatedTokens:Math.ceil(c.length/4),currentPage:f,totalPages:h}}function yB(e,t=!1){return t?JSON.stringify(e,null,2):JSON.stringify(e)}function Zl(e){return{currentPage:e.currentPage,totalPages:e.totalPages,hasMore:e.hasMore,charOffset:e.charOffset,charLength:e.charLength,totalChars:e.totalChars,...e.nextCharOffset!==void 0&&{nextCharOffset:e.nextCharOffset}}}function bB(e,t,n){let r=e.length;if(r===0)return{sliced:"",actualOffset:0,actualLength:0,hasMore:!1,lineCount:0,totalChars:0};if(t>=r)return{sliced:"",actualOffset:r,actualLength:0,hasMore:!1,lineCount:0,totalChars:r,nextOffset:r};let o=t;if(o>0&&e[o-1]!==`
|
|
8
|
+
var jA=Object.defineProperty;var b=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Pn=(e,t)=>{for(var n in t)jA(e,n,{get:t[n],enumerable:!0})};var Pe,Te,TB,EB,AB,ga,Tg,ya,LB,Vt,ba,B,Eg,Jr,Ag,Tn,kB,ce=b(()=>{"use strict";Pe=30,Te=100,TB=10,EB=100,AB=200,ga=20,Tg=100,ya=20,LB=50,Vt=1e4,ba=20,B=1e3,Eg=100,Jr=5e4,Ag=8e3,Tn=1e5,kB=500});var Wu,Ci,xi,QA,Sr,zn,ct,WA,wi,VA,vB,kt=b(()=>{"use strict";Wu={NOT_INITIALIZED:{code:"CONFIG_NOT_INITIALIZED",message:"Configuration not initialized. Call initialize() and await its completion before calling getServerConfig()."}},Ci={PROMISES_NOT_ARRAY:{code:"VALIDATION_PROMISES_NOT_ARRAY",message:"promises must be an array"},TIMEOUT_NOT_POSITIVE:{code:"VALIDATION_TIMEOUT_NOT_POSITIVE",message:"timeout must be positive"},CONCURRENCY_NOT_POSITIVE:{code:"VALIDATION_CONCURRENCY_NOT_POSITIVE",message:"concurrency must be positive"}},xi={FETCH_NOT_AVAILABLE:{code:"FETCH_NOT_AVAILABLE",message:"Global fetch is not available in this environment."},FETCH_FAILED_AFTER_RETRIES:{code:"FETCH_FAILED_AFTER_RETRIES",message:(e,t)=>`Failed to fetch after ${e} attempts: ${t}`},FETCH_HTTP_ERROR:{code:"FETCH_HTTP_ERROR",message:(e,t)=>`Failed to fetch (${e} ${t})`}},QA={INVALID_FORMAT:{code:"TOOL_METADATA_INVALID_FORMAT",message:"Invalid tool metadata format from remote source."},INVALID_API_RESPONSE:{code:"TOOL_METADATA_INVALID_API_RESPONSE",message:"Invalid API response structure"}},Sr={PATH_IS_DIRECTORY:{code:"FILE_PATH_IS_DIRECTORY",message:e=>`Path is a directory. Use ${e} to list directory contents`},FILE_TOO_LARGE:{code:"FILE_TOO_LARGE",message:(e,t,n)=>`File too large (${e}KB > ${t}KB). Use ${n} to search within the file or use startLine/endLine parameters to get specific sections`},FILE_EMPTY:{code:"FILE_EMPTY",message:"File is empty - no content to display"},BINARY_FILE:{code:"FILE_BINARY",message:"Binary file detected. Cannot display as text - download directly from GitHub"},DECODE_FAILED:{code:"FILE_DECODE_FAILED",message:"Failed to decode file. Encoding may not be supported (expected UTF-8)"},UNSUPPORTED_TYPE:{code:"FILE_UNSUPPORTED_TYPE",message:e=>`Unsupported file type: ${e}`}},zn={NOT_FOUND:{code:"REPO_NOT_FOUND",message:(e,t,n)=>`Repository "${e}/${t}" not found or not accessible: ${n}`},PATH_NOT_FOUND:{code:"REPO_PATH_NOT_FOUND",message:(e,t,n,r)=>`Path "${e}" not found in repository "${t}/${n}" on branch "${r}"`},PATH_NOT_FOUND_ANY_BRANCH:{code:"REPO_PATH_NOT_FOUND_ANY_BRANCH",message:(e,t,n)=>`Path "${e}" not found in repository "${t}/${n}" on any common branch`},ACCESS_FAILED:{code:"REPO_ACCESS_FAILED",message:(e,t,n)=>`Failed to access repository "${e}/${t}": ${n}`},STRUCTURE_EXPLORATION_FAILED:{code:"REPO_STRUCTURE_EXPLORATION_FAILED",message:"Failed to explore repository structure"}},ct={QUERY_EMPTY:{code:"SEARCH_QUERY_EMPTY",message:"Search query cannot be empty"},NO_VALID_PARAMETERS:{code:"SEARCH_NO_VALID_PARAMETERS",message:"No valid search parameters provided"},PR_REQUIRED_PARAMS:{code:"SEARCH_PR_REQUIRED_PARAMS",message:"Owner, repo, and prNumber are required parameters"},PR_SINGLE_VALUES:{code:"SEARCH_PR_SINGLE_VALUES",message:"Owner and repo must be single values"},PULL_REQUEST_SEARCH_FAILED:{code:"SEARCH_PR_SEARCH_FAILED",message:e=>`Pull request search failed: ${e}`},PULL_REQUEST_LIST_FAILED:{code:"SEARCH_PR_LIST_FAILED",message:e=>`Pull request list failed: ${e}`},PULL_REQUEST_FETCH_FAILED:{code:"SEARCH_PR_FETCH_FAILED",message:(e,t)=>`Failed to fetch pull request #${e}: ${t}`}},WA={NO_TOOLS_REGISTERED:{code:"STARTUP_NO_TOOLS_REGISTERED",message:"No tools were successfully registered"},UNCAUGHT_EXCEPTION:{code:"STARTUP_UNCAUGHT_EXCEPTION",message:e=>`Uncaught exception: ${e}`},UNHANDLED_REJECTION:{code:"STARTUP_UNHANDLED_REJECTION",message:e=>`Unhandled rejection: ${e}`},STARTUP_FAILED:{code:"STARTUP_FAILED",message:e=>`Startup failed: ${e}`}},wi={TIMEOUT:{code:"PROMISE_TIMEOUT",message:(e,t)=>`Query ${e+1} timed out after ${t}ms \u2014 retry it alone, with tighter caps (maxFiles/maxMatchesPerFile/itemsPerPage) if it was large`},NOT_A_FUNCTION:{code:"PROMISE_NOT_A_FUNCTION",message:e=>`Promise function at index ${e} is not a function`},FUNCTION_UNDEFINED:{code:"PROMISE_FUNCTION_UNDEFINED",message:"Promise function is undefined"}},VA={EXECUTION_FAILED:{code:"TOOL_EXECUTION_FAILED",message:(e,t)=>`Tool ${e} execution failed: ${t}`},SECURITY_VALIDATION_FAILED:{code:"TOOL_SECURITY_VALIDATION_FAILED",message:(e,t)=>`Security validation failed for ${e}: ${t}`}},vB={...Wu,...Ci,...xi,...QA,...Sr,...zn,...ct,...WA,...wi,...VA}});var W,KA,Lg,jn=b(()=>{"use strict";W={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"},KA=(i=>(i.FILE_SYSTEM="FILE_SYSTEM",i.VALIDATION="VALIDATION",i.SEARCH="SEARCH",i.PAGINATION="PAGINATION",i.EXECUTION="EXECUTION",i))(KA||{}),Lg={[W.PATH_VALIDATION_FAILED]:{code:W.PATH_VALIDATION_FAILED,category:"VALIDATION",description:"Path validation failed - invalid or unsafe path",recoverability:"user-action-required"},[W.FILE_ACCESS_FAILED]:{code:W.FILE_ACCESS_FAILED,category:"FILE_SYSTEM",description:"Cannot access file - may not exist or lack permissions",recoverability:"unrecoverable"},[W.FILE_READ_FAILED]:{code:W.FILE_READ_FAILED,category:"FILE_SYSTEM",description:"Failed to read file contents",recoverability:"unrecoverable"},[W.FILE_TOO_LARGE]:{code:W.FILE_TOO_LARGE,category:"FILE_SYSTEM",description:"File exceeds size limits for operation",recoverability:"user-action-required"},[W.BINARY_FILE_UNSUPPORTED]:{code:W.BINARY_FILE_UNSUPPORTED,category:"FILE_SYSTEM",description:"Binary file is not supported by text content reader",recoverability:"user-action-required"},[W.NO_MATCHES]:{code:W.NO_MATCHES,category:"SEARCH",description:"Search pattern found no matches",recoverability:"user-action-required"},[W.OUTPUT_TOO_LARGE]:{code:W.OUTPUT_TOO_LARGE,category:"PAGINATION",description:"Output exceeds size limits",recoverability:"user-action-required"},[W.COMMAND_NOT_AVAILABLE]:{code:W.COMMAND_NOT_AVAILABLE,category:"EXECUTION",description:"Required CLI command is not installed or not in PATH",recoverability:"user-action-required"},[W.COMMAND_EXECUTION_FAILED]:{code:W.COMMAND_EXECUTION_FAILED,category:"EXECUTION",description:"System command execution failed",recoverability:"unrecoverable"},[W.COMMAND_TIMEOUT]:{code:W.COMMAND_TIMEOUT,category:"EXECUTION",description:"Command execution timed out",recoverability:"user-action-required"},[W.TOOL_EXECUTION_FAILED]:{code:W.TOOL_EXECUTION_FAILED,category:"EXECUTION",description:"Generic tool execution failure",recoverability:"unrecoverable"},[W.LSP_SERVER_UNAVAILABLE]:{code:W.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"}}});function Vu(e){return e instanceof Je}function kg(e,t=W.TOOL_EXECUTION_FAILED,n){if(Vu(e))return e;if(e instanceof Error)return new Je(t,e.message,n,e);let r=String(e);return new Je(t,r,n)}var Je,Pi=b(()=>{"use strict";jn();Je=class e extends Error{errorCode;category;recoverability;context;constructor(t,n,r,o){let i=Lg[t],s=n||i.description;super(s,o?{cause:o}:void 0),this.name="ToolError",this.errorCode=t,this.category=i.category,this.recoverability=i.recoverability,this.context=r,o&&o.stack&&(this.stack=`${this.stack}
|
|
9
|
+
Caused by: ${o.stack}`),Object.setPrototypeOf(this,e.prototype)}isRecoverable(){return this.recoverability==="recoverable"}requiresUserAction(){return this.recoverability==="user-action-required"}toJSON(){return{name:this.name,errorCode:this.errorCode,category:this.category,message:this.message,recoverability:this.recoverability,context:this.context,stack:this.stack}}}});import{redactPath as Ra}from"@octocodeai/octocode-engine/pathUtils";var lt,Zr=b(()=>{"use strict";Pi();jn();lt={pathValidationFailed:(e,t,n)=>new Je(W.PATH_VALIDATION_FAILED,t||`Path validation failed: ${Ra(e,n)}`,{path:e}),fileAccessFailed:(e,t,n)=>{let r=Ra(e,n),o=`Cannot access file: ${r}`,i=t?.code;return i==="ENOENT"?o=`File not found: ${r}. Verify the path with localSearch operation:"files".`:i==="EACCES"?o=`Permission denied: ${r}. Check file permissions.`:i==="EISDIR"?o=`Path is a directory: ${r}. Use localSearch operation:"tree".`:i==="ENOTDIR"?o=`Invalid path: ${r}. A component of the path is not a directory.`:i==="ENAMETOOLONG"&&(o=`Path too long: ${r}`),new Je(W.FILE_ACCESS_FAILED,o,{path:e,errorCode:i},t)},fileReadFailed:(e,t,n)=>new Je(W.FILE_READ_FAILED,`Failed to read file: ${Ra(e,n)}`,{path:e,errorCode:t?.code},t),fileTooLarge:(e,t,n)=>new Je(W.FILE_TOO_LARGE,(()=>{let r=o=>Number.isInteger(o)?`${o}KB`:`${o.toFixed(1)}KB`;return`File too large: ${r(t)} (limit: ${r(n)}). Use startLine/endLine, matchString, or charOffset/charLength to read a bounded slice.`})(),{path:e,sizeKB:t,limitKB:n}),binaryFileUnsupported:e=>new Je(W.BINARY_FILE_UNSUPPORTED,`Binary file unsupported: ${Ra(e)}. Use localSearch operation:"text" for embedded strings.`,{path:e}),outputTooLarge:(e,t)=>new Je(W.OUTPUT_TOO_LARGE,`Output too large: ${e} (limit: ${t})`,{size:e,limit:t}),commandNotAvailable:(e,t)=>new Je(W.COMMAND_NOT_AVAILABLE,`Command '${e}' is not available. ${t||"Please install it and ensure it is in your PATH."}`,{command:e,installHint:t}),commandExecutionFailed:(e,t,n)=>new Je(W.COMMAND_EXECUTION_FAILED,n?`Command '${e}' failed: ${n}`:`Command execution failed: ${e}`,{command:e,stderr:n},t),toolExecutionFailed:(e,t)=>new Je(W.TOOL_EXECUTION_FAILED,`Tool execution failed: ${e}`,{toolName:e},t)}});import{existsSync as Sa,mkdirSync as Ca}from"node:fs";import{join as Mt}from"node:path";import{getOctocodeHome as XA}from"@octocodeai/config";function Un(){return XA(process.env)}function Kt(){return ut}function wa(){Sa(et.home)||Ca(et.home,{recursive:!0,mode:xa})}function YA(){_g()}function Ku(){wa(),Sa(et.tmp)||Ca(et.tmp,{recursive:!0,mode:xa})}function _g(){Ku(),Sa(et.clone)||Ca(et.clone,{recursive:!0,mode:xa})}function JA(){Ku(),Sa(et.tree)||Ca(et.tree,{recursive:!0,mode:xa})}var xa,ut,et,pn=b(()=>{"use strict";xa=448;ut=Un(),et={home:ut,config:Mt(ut,".octocoderc"),credentials:Mt(ut,"credentials.json"),key:Mt(ut,".key"),session:Mt(ut,"session.json"),stats:Mt(ut,"stats.json"),tmp:Mt(ut,"tmp"),clone:Mt(ut,"tmp","clone"),tree:Mt(ut,"tmp","tree"),response:Mt(ut,"tmp","response"),repos:Mt(ut,"tmp","clone"),cliConfig:Mt(ut,"config.json"),lspConfig:Mt(ut,"lsp-servers.json")}});function dn(e){return e.toLowerCase().replace(/^https?:\/\//,"").replace(/\/$/,"")}function En(e){if(!e.token.expiresAt)return!1;let t=new Date(e.token.expiresAt);if(isNaN(t.getTime()))return!0;let n=new Date;return t.getTime()-n.getTime()<300*1e3}function Ti(e){if(!e.token.refreshTokenExpiresAt)return!1;let t=new Date(e.token.refreshTokenExpiresAt);return isNaN(t.getTime())?!0:new Date>=t}var Pa=b(()=>{"use strict"});function qA(e){let t=dn(e),n=Ei.get(t);return!n||Date.now()-n.cachedAt>=ZA?!1:n.credentials?!En(n.credentials):!0}function Ai(e){e?Ei.delete(dn(e)):Ei.clear()}function vg(e){let t=dn(e);if(qA(t))return Ei.get(t).credentials}function Ig(e,t){let n=dn(e);Ei.set(n,{credentials:t,cachedAt:Date.now()})}var Ei,ZA,Og=b(()=>{"use strict";Pa();Ei=new Map,ZA=300*1e3});import{z as Qe}from"zod";var eL,tL,Fg,Mg=b(()=>{"use strict";eL=Qe.object({token:Qe.string(),tokenType:Qe.literal("oauth"),scopes:Qe.array(Qe.string()).optional(),refreshToken:Qe.string().optional(),expiresAt:Qe.string().optional(),refreshTokenExpiresAt:Qe.string().optional()}),tL=Qe.object({hostname:Qe.string(),username:Qe.string(),token:eL,gitProtocol:Qe.enum(["ssh","https"]),createdAt:Qe.string(),updatedAt:Qe.string()}),Fg=Qe.object({version:Qe.number(),credentials:Qe.record(Qe.string(),tL)})});import{existsSync as Ta,readFileSync as Dg,writeFileSync as Hg,unlinkSync as Ng,statSync as nL,chmodSync as rL}from"node:fs";import{createCipheriv as oL,createDecipheriv as iL,randomBytes as Gg}from"node:crypto";function $n(){wa()}function zg(){if($n(),Ta(mn))return nL(mn).mode&511&63&&rL(mn,384),Buffer.from(Dg(mn,"utf8"),"hex");let e=Gg(32);return Hg(mn,e.toString("hex"),{mode:384}),e}function Ea(e){let t=zg(),n=Gg(sL),r=oL(Bg,t,n),o=r.update(e,"utf8","hex");o+=r.final("hex");let i=r.getAuthTag();return`${n.toString("hex")}:${i.toString("hex")}:${o}`}function Aa(e){let t=zg(),[n,r,o]=e.split(":");if(!n||!r||!o)throw new Error("Invalid encrypted data format");let i=Buffer.from(n,"hex"),s=Buffer.from(r,"hex"),a=iL(Bg,t,i);a.setAuthTag(s);let c=a.update(o,"hex","utf8");return c+=a.final("utf8"),c}function Ln(){if($n(),!Ta(An))return{version:1,credentials:{}};try{let e=Dg(An,"utf8"),t=Aa(e),n=JSON.parse(t),r=Fg.safeParse(n);return r.success?r.data:{version:1,credentials:{}}}catch{return{version:1,credentials:{}}}}function Yu(e){$n();let t=Ea(JSON.stringify(e,null,2));Hg(An,t,{mode:384})}function jg(){try{Ta(An)&&Ng(An),Ta(mn)&&Ng(mn)}catch{}}var Xu,An,mn,Bg,sL,Ug=b(()=>{"use strict";pn();Mg();Xu=et.home,An=et.credentials,mn=et.key,Bg="aes-256-gcm",sL=16});var qr,Qn,Ju=b(()=>{"use strict";qr="178c6fc778ccc68e1d6a",Qn="github.com"});import{refreshToken as aL}from"@octokit/oauth-methods";import{request as cL}from"@octokit/request";function lL(e){return e.replace(/\b(ghp_|gho_|ghu_|ghs_|ghr_)[a-zA-Z0-9]{36,}\b/g,"***MASKED***").replace(/\b[a-zA-Z0-9]{40,}\b/g,"***MASKED***")}function uL(e){return e==="github.com"||e===Qn?"https://api.github.com":`https://${e}/api/v3`}async function Zu(e,t=Qn,n=qr){let r=await e.getCredentials(t);if(!r)return{success:!1,error:`Not logged in to ${t}`};if(!r.token.refreshToken)return{success:!1,error:"Token does not support refresh (OAuth App tokens do not expire)"};if(Ti(r))return{success:!1,error:"Refresh token has expired. Please login again."};try{let o=await aL({clientType:"github-app",clientId:n,clientSecret:"",refreshToken:r.token.refreshToken,request:cL.defaults({baseUrl:uL(t)})}),i={token:o.authentication.token,tokenType:"oauth",refreshToken:o.authentication.refreshToken,expiresAt:o.authentication.expiresAt,refreshTokenExpiresAt:o.authentication.refreshTokenExpiresAt};return await e.updateToken(t,i),{success:!0,username:r.username,hostname:t}}catch(o){return{success:!1,error:o instanceof Error?lL(o.message):"Token refresh failed"}}}async function $g(e,t=Qn,n=qr){let r=await e.getCredentials(t);if(!r||!r.token)return{token:null,source:"none"};if(!En(r))return{token:r.token.token,source:"stored",username:r.username};if(r.token.refreshToken){let o=await Zu(e,t,n);if(o.success){let i=await e.getCredentials(t);if(i?.token.token)return{token:i.token.token,source:"refreshed",username:i.username}}return{token:null,source:"none",refreshError:o.error}}return{token:null,source:"none",refreshError:"Token expired and no refresh token available"}}var Qg=b(()=>{"use strict";Pa();Ju()});import{execFile as pL}from"child_process";function La(e){return new Promise(t=>{let n=["auth","token"];e&&n.push("--hostname",e);let r=process.env.PATH??"",o=new Set(r.split(":")),i=dL.filter(a=>!o.has(a)),s=i.length?`${i.join(":")}:${r}`:r;pL("gh",n,{encoding:"utf8",timeout:5e3,env:{...process.env,PATH:s}},(a,c)=>{if(a||!c){t(null);return}t(c.trim()||null)})})}var dL,qu=b(()=>{"use strict";dL=["/opt/homebrew/bin","/usr/local/bin","/home/linuxbrew/.linuxbrew/bin"]});import{resolveEnvToken as mL}from"@octocodeai/config";function Wg(e){ka=e}function ep(){ka=null}function fL(){if(!ka)throw new Error("Token resolution not initialized. Call initTokenResolution() first.");return ka}async function Wn(e){let t=e?.hostname??Qn,n=e?.clientId??qr,r=e?.getGhCliToken??La,o=mL();if(o)return{token:o.token,source:o.source,wasRefreshed:!1};let i=await fL().getTokenWithRefresh(t,n);if(i.token)return{token:i.token,source:"octocode-storage",wasRefreshed:i.source==="refreshed",username:i.username};try{let s=await Promise.resolve(r(t));if(s?.trim())return{token:s.trim(),source:"gh-cli",wasRefreshed:!1}}catch(s){process.stderr.write(`[octocode] gh auth token failed: ${s instanceof Error?s.message:String(s)}
|
|
10
|
+
`)}return null}async function tp(e=Qn){let t=await Wn({hostname:e,getGhCliToken:()=>null});return t?{token:t.token,source:t.source}:null}async function np(e=Qn,t=qr){let n=await Wn({hostname:e,clientId:t,getGhCliToken:()=>null});return n?{token:n.token,source:n.source,wasRefreshed:n.wasRefreshed,username:n.username}:null}var ka,Vg=b(()=>{"use strict";qu();Ju();ka=null});async function rp(e){let t=dn(e.hostname),n={...e,hostname:t,updatedAt:new Date().toISOString()};try{let r=Ln();return r.credentials[t]=n,Yu(r),Ai(t),{success:!0}}catch{throw new Error("Failed to store credentials")}}async function Cr(e="github.com",t){let n=dn(e);if(!t?.bypassCache){let i=vg(n);if(i!==void 0)return i}let o=Ln().credentials[n]||null;return Ig(n,o),o}function _a(e="github.com"){let t=dn(e);return Ln().credentials[t]||null}async function Kg(e="github.com"){let t=dn(e),n=!1,r=Ln();return r.credentials[t]&&(delete r.credentials[t],Object.keys(r.credentials).length===0?jg():Yu(r),n=!0),Ai(t),{success:n,deletedFromFile:n}}async function Xg(){let e=Ln();return Object.keys(e.credentials)}function Yg(){let e=Ln();return Object.keys(e.credentials)}async function Jg(e="github.com"){return await Cr(e)!==null}function Zg(e="github.com"){return _a(e)!==null}async function va(e,t){let n=await Cr(e);return n?(n.token=t,n.updatedAt=new Date().toISOString(),await rp(n),!0):!1}function qg(){return An}async function ey(e="github.com"){let t=await Cr(e);return!t||!t.token||En(t)?null:t.token.token}function ty(e="github.com"){let t=_a(e);return!t||!t.token||En(t)?null:t.token.token}async function ny(e,t){return Zu({getCredentials:Cr,updateToken:va},e,t)}async function op(e,t){return $g({getCredentials:Cr,updateToken:va},e,t)}var ip=b(()=>{"use strict";Og();Ug();Qg();Vg();Pa();Wg({getTokenWithRefresh:op})});var sp=b(()=>{"use strict";ip();qu()});var xr,Ia=b(()=>{xr="19.1.0"});import{existsSync as gL,readdirSync as yL,lstatSync as bL}from"node:fs";import{join as RL}from"node:path";function Li(e){if(!gL(e))return 0;let t=0,n=[e];for(;n.length>0;){let r=n.pop(),o;try{o=yL(r)}catch{continue}for(let i of o){let s=RL(r,i);try{let a=bL(s);if(a.isSymbolicLink())continue;a.isDirectory()?n.push(s):a.isFile()&&(t+=a.size)}catch{}}}return t}function SL(e){if(e<1024)return`${e} B`;let t=e/1024;if(t<1024)return`${t.toFixed(1)} KB`;let n=t/1024;return n<1024?`${n.toFixed(1)} MB`:`${(n/1024).toFixed(2)} GB`}var Oa=b(()=>{"use strict"});import{join as eo}from"node:path";import{createHash as ki}from"node:crypto";function Fa(e){return eo(e,"tmp","clone")}function Ma(e){return eo(e,"tmp","tree")}function Na(e,t){return eo(e,"tmp","tree-locks",ki("sha256").update(t).digest("hex"))}function _i(e,t){return eo(e,"tmp","clone-locks",ki("sha256").update(t).digest("hex").slice(0,16))}function CL(e){return e?`__sp_${ki("sha256").update(e).digest("hex").substring(0,6)}`:""}function xL(e){if(!/[\\/]/.test(e))return e;let t=ki("sha256").update(e).digest("hex").substring(0,8);return`${e.replace(/[\\/]/g,"_")}__b_${t}`}function ap(e,t,n,r,o,i){let s=i?`__host_${ki("sha256").update(i).digest("hex").slice(0,16)}`:"",a=`${xL(r)}${CL(o)}${s}`;return eo(Fa(e),t,n,a)}function vi(e,t,n,r){if(!/^[0-9a-f]{40}$/i.test(r))throw new Error("Tree cache identity must be a 40-character commit SHA.");return eo(Ma(e),t,n,r.toLowerCase())}var wr=b(()=>{"use strict"});import{readFileSync as wL,readdirSync as PL,renameSync as TL,rmSync as cp,statSync as sy,writeFileSync as EL,mkdirSync as ry}from"node:fs";import{dirname as AL,join as to}from"node:path";function Da(e){ry(AL(e),{recursive:!0,mode:448});try{ry(e,{mode:448})}catch(t){if(t.code==="EEXIST")return;throw t}return no(e),()=>cp(e,{recursive:!0,force:!0})}function kL(e){return typeof e=="object"&&e!==null}function iy(e){try{return PL(e)}catch{return[]}}function no(e,t=process.pid,n=Date.now()){try{EL(to(e,ay),JSON.stringify({pid:t,createdAt:n}),{encoding:"utf8",mode:384})}catch{}}function _L(e){try{let t=JSON.parse(wL(to(e,ay),"utf8"));return!kL(t)||!Number.isInteger(t.pid)||t.pid<=0||typeof t.createdAt!="number"?null:{pid:t.pid,createdAt:t.createdAt}}catch{return null}}function vL(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function ro(e,t=Date.now()){let n;try{n=Da(`${e}.recovery`)}catch{return!1}if(!n)return!1;try{return IL(e,t)}finally{n()}}function IL(e,t){let n,r=_L(e);if(r){if(n=r.createdAt,t-n<=oy||vL(r.pid))return!1}else{try{n=sy(e).mtimeMs}catch{return!1}if(t-n<=oy)return!1}let o=`${e}.stale-${process.pid}-${t}`;try{return TL(e,o),cp(o,{recursive:!0,force:!0}),!0}catch{return!1}}function lp(e,t=Date.now()){let n=0;for(let r of["clone-tmp","tree-staging"]){let o=to(e,"tmp",r);for(let i of iy(o)){let s=to(o,i);try{let a=sy(s);if(t-a.mtimeMs<=LL)continue;cp(s,{recursive:!0,force:!0}),n++}catch{}}}for(let r of["clone-locks","tree-locks"]){let o=to(e,"tmp",r);for(let i of iy(o))ro(to(o,i),t)&&n++}return n}var LL,oy,ay,oo=b(()=>{"use strict";LL=900*1e3,oy=300*1e3,ay=".octocode-lock.json"});import{existsSync as Oi,readFileSync as OL,writeFileSync as FL,mkdirSync as ML,rmSync as up,readdirSync as NL,statSync as DL,rmdirSync as cy}from"node:fs";import{join as Vn}from"node:path";function zL(e){return typeof e=="object"&&e!==null}function jL(e){if(!zL(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 Fi(e){let t=Vn(e,uy);if(!Oi(t))return null;try{return jL(JSON.parse(OL(t,"utf-8")))}catch{return null}}function py(e,t){try{FL(Vn(e,uy),JSON.stringify(t,null,2),"utf-8")}catch{}}function dy(e){return Date.now()<new Date(e.expiresAt).getTime()}function io(e){let t=Fi(e);return t?dy(t)?Oi(e)?{hit:!0,meta:t}:{hit:!1}:{hit:!1}:{hit:!1}}function UL(){let e=process.env.OCTOCODE_CACHE_TTL_MS;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return HL}function $L(){let e=process.env.OCTOCODE_MAX_CACHE_SIZE;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return GL}function QL(){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 BL}function so(e,t,n,r,o,i,s){let a=new Date;return{clonedAt:a.toISOString(),expiresAt:new Date(a.getTime()+UL()).toISOString(),owner:e,repo:t,branch:n,source:r,...o?{sparsePath:o}:{},...i!=null?{sizeBytes:i}:{},...s?{commitSha:s}:{}}}function Ha(e){let t=Vn(e,"..");try{Oi(t)||ML(t,{recursive:!0,mode:448})}catch(n){throw new Error(`Failed to create clone parent directory '${t}': ${n instanceof Error?n.message:String(n)}`,{cause:n})}}function Ga(e){try{Oi(e)&&up(e,{recursive:!0,force:!0})}catch{}}function Ii(e){try{return DL(e).isDirectory()}catch{return!1}}function Pr(e){try{return NL(e)}catch{return[]}}function*my(e){for(let t of Pr(e)){let n=Vn(e,t);if(Ii(n))for(let r of Pr(n)){let o=Vn(n,r);if(Ii(o))for(let i of Pr(o)){let s=Vn(o,i);Ii(s)&&(yield s)}}}}function ly(e){for(let t of[...Pr(e)]){let n=Vn(e,t);if(Ii(n)){for(let r of[...Pr(n)]){let o=Vn(n,r);if(Ii(o)&&Pr(o).length===0)try{cy(o)}catch{}}if(Pr(n).length===0)try{cy(n)}catch{}}}}function WL(e,t){let n=0;for(let r of my(e)){let o=t(r);if(o)try{let i=Fi(r);(!i||!dy(i))&&(up(r,{recursive:!0,force:!0}),n++)}catch{}finally{o()}}return n}function VL(e,t){let n=[];for(let r of my(e)){let o=t(r);if(o)try{let i=Fi(r);if(!i)continue;let s=Number.isNaN(Date.parse(i.clonedAt))?0:Date.parse(i.clonedAt);n.push({branchDir:r,clonedAtMs:s,sizeBytes:i.sizeBytes??Li(r)})}finally{o()}}return n}function KL(e,t,n,r){let o=e.reduce((a,c)=>a+c.sizeBytes,0),i=e.length;if(o<=t&&i<=n)return 0;e.sort((a,c)=>a.clonedAtMs-c.clonedAtMs);let s=0;for(let a of e){if(o<=t&&i<=n)break;let c=r(a.branchDir);if(c)try{up(a.branchDir,{recursive:!0,force:!0}),s++,o-=a.sizeBytes,i-=1}catch{}finally{c()}}return s}function fy(e,t){if(!Oi(e))return 0;let n=0;try{n+=WL(e,t)}catch{return n}ly(e);let r=KL(VL(e,t),$L(),QL(),t);return n+=r,r>0&&ly(e),n}function Ba(e){return fy(Fa(e),t=>Da(_i(e,t)))}function ao(e){return fy(Ma(e),t=>Da(Na(e,t)))}var HL,GL,BL,uy,Tr=b(()=>{"use strict";Oa();wr();oo();HL=1440*60*1e3,GL=2*1024*1024*1024,BL=50,uy=".octocode-clone-meta.json"});import{createHash as XL}from"node:crypto";import{chmod as hy,mkdir as yy,readFile as by,readdir as YL,rename as gy,rm as JL,stat as pp,writeFile as Ry}from"node:fs/promises";import{join as Mi}from"node:path";import{isPersistentStorageEnabled as ZL}from"@octocodeai/config";function za(e,t){let n=Number(process.env[e]);return Number.isFinite(n)&&n>0?Math.floor(n):t}function dp(){if(!ZL())return!1;let e=process.env.OCTOCODE_DISK_CACHE?.trim().toLowerCase();return!(e==="false"||e==="0")}function mp(e=Un()){return Mi(e,"tmp","response")}function rk(e){return(e.match(/^v\d+-([^:]+):/)?.[1]??"default").replace(/[^a-zA-Z0-9._-]/g,"_")}function wy(e,t=Un()){let n=XL("sha256").update(e).digest("hex");return Mi(mp(t),rk(e),n.slice(0,2),`${n}.json`)}function Py(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ok(e,t){let n;try{n=JSON.parse(e)}catch{return null}return!Py(n)||n.version!==Sy||n.key!==t||typeof n.createdAt!="number"||typeof n.expiresAt!="number"||typeof n.staleUntil!="number"||!("value"in n)||n.etag!==void 0&&typeof n.etag!="string"?null:n}async function kn(e){try{await JL(e,{force:!0,recursive:!0})}catch{}}async function ja(e,t={}){if(!dp())return;let n=wy(e);try{let r=await pp(n);if(!r.isFile()||r.size>za("OCTOCODE_DISK_CACHE_MAX_ENTRY_SIZE",Cy)){await kn(n),Ne.errors++;return}let o=ok(await by(n,"utf8"),e);if(!o){await kn(n),Ne.errors++;return}let i=Date.now();if(i>=o.staleUntil){await kn(n),Ne.evictions++,Ne.misses++;return}if(i>=o.expiresAt&&!t.allowStale){Ne.misses++;return}return Ne.hits++,{value:o.value,...o.etag?{etag:o.etag}:{},state:i<o.expiresAt?"fresh":"stale",expiresAt:o.expiresAt}}catch(r){r.code!=="ENOENT"&&Ne.errors++,Ne.misses++;return}}async function Ni(e,t,n,r={}){if(!dp())return!1;let o=Date.now(),i=Math.max(1,n*1e3),s=Math.max(i,(r.staleTtlSeconds??n)*1e3),a={version:Sy,key:e,createdAt:o,expiresAt:o+i,staleUntil:o+s,value:t,...r.etag?{etag:r.etag}:{}},c;try{c=JSON.stringify(a)}catch{return Ne.errors++,!1}if(c===void 0||Buffer.byteLength(c)>za("OCTOCODE_DISK_CACHE_MAX_ENTRY_SIZE",Cy))return!1;let l=wy(e),d=Mi(l,".."),u=`${l}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;try{await yy(d,{recursive:!0,mode:448}),await hy(d,448),await Ry(u,c,{encoding:"utf8",mode:384}),await hy(u,384);try{await gy(u,l)}catch(p){let f=p.code;if(f!=="EEXIST"&&f!=="EPERM")throw p;await kn(l),await gy(u,l)}return Ne.sets++,!0}catch{return Ne.errors++,await kn(u),!1}}async function ik(e){let t=[],n=[e];for(;n.length>0;){let r=n.pop(),o;try{o=await YL(r,{withFileTypes:!0})}catch{continue}for(let i of o){let s=Mi(r,i.name);i.isDirectory()?n.push(s):i.isFile()&&i.name!==xy&&t.push(s)}}return t}async function Ty(e,t,n){if(!dp())return 0;let r=mp(e),o=Mi(r,xy);if(n)try{let u=await pp(o);if(t-u.mtimeMs<tk)return 0}catch{}let i=0,s=await ik(r),a=za("OCTOCODE_DISK_CACHE_MAX_ENTRIES",qL),c=za("OCTOCODE_DISK_CACHE_MAX_SIZE",ek),l=[],d=0;for(let u of s)try{let p=await pp(u);if(u.includes(".tmp-")){t-p.mtimeMs>nk&&(await kn(u),i++);continue}let f=await by(u,"utf8"),m;try{m=JSON.parse(f)}catch{m=null}if(!Py(m)||typeof m.staleUntil!="number"||t>=m.staleUntil){await kn(u),i++;continue}l.push({path:u,size:p.size,modified:p.mtimeMs}),d+=p.size}catch{}for(l.sort((u,p)=>u.modified-p.modified);l.length>a||d>c;){let u=l.shift();if(!u)break;await kn(u.path),d-=u.size,i++}try{await yy(r,{recursive:!0,mode:448}),await Ry(o,String(t),{encoding:"utf8",mode:384})}catch{Ne.errors++}return Ne.evictions+=i,i}function Q1(e=Un(),t=Date.now()){return Ty(e,t,!0)}function Ey(e=Un(),t=Date.now()){return Ty(e,t,!1)}async function W1(e=Un()){await kn(mp(e))}function Ay(){return{...Ne}}function Ly(){Ne.hits=0,Ne.misses=0,Ne.sets=0,Ne.errors=0,Ne.evictions=0}var Sy,Cy,qL,ek,tk,nk,xy,Ne,co=b(()=>{"use strict";pn();Sy=1,Cy=5*1024*1024,qL=5e3,ek=256*1024*1024,tk=1440*60*1e3,nk=900*1e3,xy=".last-gc",Ne={hits:0,misses:0,sets:0,errors:0,evictions:0}});import{mkdirSync as ky,readFileSync as sk,renameSync as vy,rmSync as Iy,statSync as ak,writeFileSync as ck}from"node:fs";import{join as hp}from"node:path";import{isPersistentStorageEnabled as Oy}from"@octocodeai/config";function Fy(e){return hp(e,"tmp")}function My(e){return hp(Fy(e),pk)}function mk(e){try{let t=Number(sk(My(e),"utf8"));return Number.isFinite(t)&&t>=0?t:null}catch{return null}}function fp(e,t=Date.now()){let n=mk(e);return n===null?0:Math.min(_y,Math.max(0,n+_y-t))}function fk(e,t){let n=Fy(e),r=hp(n,dk);try{ky(n,{recursive:!0,mode:448})}catch{return null}let o=()=>{try{return ky(r,{mode:448}),!0}catch{return!1}};if(o())return r;try{if(t-ak(r).mtimeMs<=uk)return null;let i=`${r}.stale-${process.pid}-${t}`;vy(r,i),Iy(i,{recursive:!0,force:!0})}catch{return null}return o()?r:null}function hk(e,t){let n=My(e),r=`${n}.tmp-${process.pid}-${t}`;ck(r,String(t),{encoding:"utf8",mode:384}),vy(r,n)}async function gk(e,t){if(fp(e,t)>0)return!1;let n=fk(e,t);if(!n)return!1;try{if(fp(e,t)>0)return!1;try{return Ba(e),ao(e),lp(e,t),await Ey(e,t),hk(e,t),!0}catch{return!1}}finally{try{Iy(n,{recursive:!0,force:!0})}catch{}}}function uo(e,t=Date.now()){if(!Oy())return Promise.resolve(!1);let n=Ua.get(e);if(n)return n;let r=gk(e,t).finally(()=>{Ua.get(e)===r&&Ua.delete(e)});return Ua.set(e,r),r}function Ny(e){if($a!==e)return;let t=Math.max(lk,fp(e));lo=setTimeout(()=>{lo=null,uo(e).finally(()=>{Ny(e)})},t),lo.unref()}function ez(e){Oy()&&$a===null&&($a=e,uo(e).finally(()=>{Ny(e)}))}function tz(){$a=null,lo&&clearTimeout(lo),lo=null}var _y,lk,uk,pk,dk,lo,$a,Ua,Qa=b(()=>{"use strict";Tr();oo();co();_y=1440*60*1e3,lk=60*1e3,uk=900*1e3,pk=".last-cache-maintenance",dk=".cache-maintenance.lock",lo=null,$a=null,Ua=new Map});import{getConfigSync as Dy}from"@octocodeai/config";import{maskSensitiveData as yk}from"@octocodeai/octocode-engine/mask";function uz(e){e.resolveTokenFull&&(gp=e.resolveTokenFull)}function pz(){gp=Wn}async function yp(){try{let e=await gp({hostname:"github.com"});if(e?.token){let t=e.source??"none";return{token:e.token,source:bk.has(t)?t:"none"}}return{token:null,source:"none"}}catch{return{token:null,source:"none"}}}async function Hy(){if(Kn!==null)return;if(po!==null)return po;let e=(async()=>{let t=Dy(),n=await yp();Kn={version:xr,githubApiUrl:t.github.apiUrl,toolsToRun:t.tools.enabled??void 0,disableTools:t.tools.disabled??void 0,timeout:t.network.timeout,maxRetries:t.network.maxRetries,enableLocal:t.local.enabled,enableClone:t.local.enableClone&&t.storage.mode==="persistent",tokenSource:n.source},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.
|
|
11
|
+
`),await uo(Kt())})();po=e;try{await e}catch(t){throw po===e&&(Kn=null,po=null),t}}function dz(){Kn=null,po=null}function Er(){if(!Kn){let e=yk(Wu.NOT_INITIALIZED.message);throw new Error(e)}return Kn}async function bp(){return(await yp()).token}function mz(){return Er().enableLocal}function Gy(){let e=Er();return e.enableLocal&&e.enableClone}async function fz(){return Kn!==null?Kn.tokenSource:(await yp()).source}function Rp(){return"github"}function Sp(){let e=Dy().github.apiUrl;return{provider:"github",baseUrl:e!=="https://api.github.com"?e:void 0}}var Kn,po,gp,bk,Xn=b(()=>{"use strict";pn();sp();Ia();kt();Qa();Kn=null,po=null,gp=Wn;bk=new Set(["env:OCTOCODE_TOKEN","env:GH_TOKEN","env:GITHUB_TOKEN","env:GITHUB_PERSONAL_ACCESS_TOKEN","octocode-storage","gh-cli","none"])});import{z as te}from"zod";var Rk,Sk,Wa,Ck,Va,By,zy,jy=b(()=>{"use strict";Rk=te.object({rawChars:te.number(),responseChars:te.number(),savedChars:te.number(),calls:te.number()}),Sk=te.object({hits:te.record(te.string(),te.number()).default({}),rateLimits:te.number().default(0)}),Wa=te.record(te.string(),te.number()).default({}),Ck=te.object({toolCalls:te.number(),errors:te.number(),rateLimits:te.number(),rateLimitsByProvider:Wa,rawChars:te.number(),responseChars:te.number(),savedChars:te.number(),charSavingsCalls:te.number(),githubCacheHits:te.number(),githubCacheRateLimits:te.number(),packageRegistryFailures:te.number().default(0),packageRegistryFailuresByRegistry:Wa}),Va=te.object({toolCalls:te.number(),errors:te.number(),rateLimits:te.number(),rateLimitsByProvider:Wa,charsSavedByTool:te.record(te.string(),Rk).default({}),githubCacheHits:Sk.default({hits:{},rateLimits:0}),packageRegistryFailures:Wa,totalUsage:Ck.optional()}),By=te.object({version:te.literal(1),sessionId:te.string(),createdAt:te.string(),lastActiveAt:te.string(),stats:Va.optional()}),zy=te.object({version:te.literal(1),stats:Va})});function Uy(e){return Object.values(e).reduce((t,n)=>t+n,0)}function xk(e){let t=e.charsSavedByTool??{},n=e.githubCacheHits??{hits:{},rateLimits:0},r=e.rateLimitsByProvider??{},o=e.packageRegistryFailures??{},i=Object.values(t).reduce((s,a)=>({rawChars:s.rawChars+a.rawChars,responseChars:s.responseChars+a.responseChars,savedChars:s.savedChars+a.savedChars,charSavingsCalls:s.charSavingsCalls+a.calls}),{rawChars:0,responseChars:0,savedChars:0,charSavingsCalls:0});return{toolCalls:e.toolCalls,errors:e.errors,rateLimits:e.rateLimits,rateLimitsByProvider:r,...i,githubCacheHits:Uy(n.hits),githubCacheRateLimits:n.rateLimits,packageRegistryFailures:Uy(o),packageRegistryFailuresByRegistry:o}}function Yn(e){let t={...e,rateLimitsByProvider:e.rateLimitsByProvider??{},charsSavedByTool:e.charsSavedByTool??{},githubCacheHits:e.githubCacheHits??{hits:{},rateLimits:0},packageRegistryFailures:e.packageRegistryFailures??{}};return{...t,totalUsage:xk(t)}}function Jn(){return Yn({toolCalls:0,errors:0,rateLimits:0,rateLimitsByProvider:{},charsSavedByTool:{},githubCacheHits:{hits:{},rateLimits:0},packageRegistryFailures:{}})}var Cp=b(()=>{"use strict"});import{existsSync as xp,readFileSync as Qy,writeFileSync as wk,unlinkSync as Pk,renameSync as Tk}from"node:fs";import{isPersistentStorageEnabled as Wy,isStatsEnabled as Vy}from"@octocodeai/config";function $y(e,t){let n=`${e}.tmp`;wk(n,JSON.stringify(t,null,2),{mode:384}),Tk(n,e)}function Ek(e){let t=JSON.parse(e),n=zy.safeParse(t);if(n.success)return Yn(n.data.stats);let r=Va.safeParse(t);return r.success?Yn(r.data):null}function Ak(){if(!xp(fo))return Jn();try{let e=Qy(fo,"utf8");return Ek(e)??Jn()}catch{return Jn()}}function Ka(e){if(!Wy())return;$n(),Vy()&&$y(fo,{version:e.version,stats:Yn(e.stats)});let{stats:t,...n}=e;$y(mo,n)}function Ky(){if(!Wy()||!xp(mo))return null;try{let e=Qy(mo,"utf8"),t=JSON.parse(e),n=By.safeParse(t);return n.success?{...n.data,stats:Vy()?Ak():Jn()}:null}catch{return null}}function Xy(){let e=!1;for(let t of[mo,fo])if(xp(t))try{Pk(t),e=!0}catch{return!1}return e}var mo,fo,Xa=b(()=>{"use strict";ip();pn();jy();Cp();mo=et.session,fo=et.stats});function kk(){wp||(wp=!0,Di=()=>{Bi()},Hi=()=>{Bi()},Gi=()=>{Bi()},process.on("exit",Di),process.on("SIGINT",Hi),process.on("SIGTERM",Gi))}function Pp(){Di&&(process.removeListener("exit",Di),Di=null),Hi&&(process.removeListener("SIGINT",Hi),Hi=null),Gi&&(process.removeListener("SIGTERM",Gi),Gi=null),wp=!1}function _k(){ho||(ho=setInterval(()=>{Zn&&Xt&&(Ka(Xt),Zn=!1)},Lk),ho.unref())}function Tp(){ho&&(clearInterval(ho),ho=null)}function zi(){if(Xt)return Xt;let e=Ky();return e&&(Xt=e),e}function go(e){Xt=e,Zn=!0,kk(),_k()}function ji(){Zn&&Xt&&(Ka(Xt),Zn=!1)}function Bi(){if(!Ya&&Zn&&Xt){Ya=!0;try{Ka(Xt),Zn=!1}catch{}finally{Ya=!1}}}function Ep(){Xt=null,Zn=!1,Ya=!1}function Yy(){Ep(),Tp(),Pp()}var Lk,Xt,Zn,ho,wp,Di,Hi,Gi,Ya,Jy=b(()=>{"use strict";Xa();Lk=6e4,Xt=null,Zn=!1,ho=null,wp=!1,Di=null,Hi=null,Gi=null,Ya=!1});import{randomUUID as vk}from"node:crypto";function Ok(e){return Yn(e)}function Fk(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t)){let i=n[r]??{rawChars:0,responseChars:0,savedChars:0,calls:0};n[r]={rawChars:i.rawChars+o.rawChars,responseChars:i.responseChars+o.responseChars,savedChars:i.savedChars+o.savedChars,calls:i.calls+o.calls}}return n}function Zy(e,t){if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t))n[r]=(n[r]??0)+o;return n}function Mk(e,t){if(!t)return e;let n={...e.hits};for(let[r,o]of Object.entries(t.hits??{}))n[r]=(n[r]??0)+o;return{hits:n,rateLimits:e.rateLimits+(t.rateLimits??0)}}function qy(){let e=new Date().toISOString();return{version:Ik,sessionId:vk(),createdAt:e,lastActiveAt:e,stats:Jn()}}function eb(){ji()}function tb(){Bi()}function nb(e){if(e?.forceNew){let r=qy();return go(r),ji(),r}let t=zi();if(t){let r={...t,lastActiveAt:new Date().toISOString()};return go(r),ji(),r}let n=qy();return go(n),ji(),n}function rb(){return zi()?.sessionId??null}function _t(e){let t=zi();if(!t)return{success:!1,session:null};let n=Ok(t.stats),r=Yn({toolCalls:n.toolCalls+(e.toolCalls??0),errors:n.errors+(e.errors??0),rateLimits:n.rateLimits+(e.rateLimits??0),rateLimitsByProvider:Zy(n.rateLimitsByProvider,e.rateLimitsByProvider),charsSavedByTool:Fk(n.charsSavedByTool,e.charsSavedByTool),githubCacheHits:Mk(n.githubCacheHits,e.githubCacheHits),packageRegistryFailures:Zy(n.packageRegistryFailures,e.packageRegistryFailures)}),o={...t,lastActiveAt:new Date().toISOString(),stats:r};return go(o),{success:!0,session:o}}function ob(e=1){return _t({toolCalls:e})}function ib(e=1){return _t({errors:e})}function Ja(e=1){return _t({rateLimits:e})}function sb(e,t=1){return _t({rateLimits:t,rateLimitsByProvider:{[e]:t}})}function Za(e,t,n){let r=Number.isFinite(t)?Math.max(0,t):0,o=Number.isFinite(n)?Math.max(0,n):0;return _t({charsSavedByTool:{[e]:{rawChars:r,responseChars:o,savedChars:Math.max(0,r-o),calls:1}}})}function qa(e,t=1){return _t({githubCacheHits:{hits:{[e]:t},rateLimits:0}})}function ec(e=1){return _t({githubCacheHits:{hits:{},rateLimits:e}})}function ab(e,t=1){return _t({packageRegistryFailures:{[e]:t}})}function cb(){let e=zi();if(!e)return{success:!1,session:null};let t={...e,lastActiveAt:new Date().toISOString(),stats:Jn()};return go(t),{success:!0,session:t}}function lb(){return Ep(),Tp(),Pp(),Xy()}function ub(){Yy()}var Ik,tc=b(()=>{"use strict";Xa();Cp();Jy();Ik=1});var Ui=b(()=>{"use strict";Xa();tc();tc();tc()});function qn(e){(e.provider?_t({rateLimits:1,rateLimitsByProvider:{[e.provider]:1}}):Ja(1)).session&&e.provider==="github"&&ec(1)}function pb(e){_t({packageRegistryFailures:{[e]:1}})}var $i=b(()=>{"use strict";Ui()});import{Octokit as Nk}from"octokit";import{throttling as Dk}from"@octokit/plugin-throttling";import{createHash as Hk}from"crypto";function gb(e){return Hk("sha256").update(e).digest("hex").substring(0,16)}function yb(e){try{let t=new URL(e);return t.hash="",t.toString().replace(/\/$/,"")}catch{return e}}async function re(e){let t=e?.token??await bp(),n=t?gb(t):"anon",r=yb(Er().githubApiUrl||"https://api.github.com");return r==="https://api.github.com"?n:`${n}@${r}`}function bb(e){return Date.now()-e.createdAt>Bk}function Rb(){for(let[e,t]of fn.entries())bb(t)&&fn.delete(e);if(fn.size>Ap){let e=fn.size-Ap,t=0;for(let[n]of fn){if(t>=e)break;fn.delete(n),t++}}}function jk(){er||(er=setInterval(Rb,zk),typeof er=="object"&&"unref"in er&&er.unref())}function fb(e,t,n){qn({limit_type:e,retry_after_seconds:t,api_method:n.method,api_url:n.url,provider:"github"})}function $k(e,t,n){let r={debug:()=>{},info:()=>{},warn:()=>{},error:(...i)=>console.error(...i)},o={userAgent:`octocode-mcp/${xr}`,baseUrl:t,request:{timeout:n,log:r},throttle:Uk(),log:r,...e&&{auth:e}};return new Gk(o)}async function Y(e){jk();let t=e?.token??await bp(),n=Er(),r=yb(n.githubApiUrl||"https://api.github.com"),o=n.timeout||3e4,i=JSON.stringify([t?gb(t):"ANONYMOUS",r,o]),s=fn.get(i);if(s&&!bb(s))return s.client;fn.size>=Ap&&Rb();let a=$k(t??void 0,r,o);return fn.set(i,{client:a,createdAt:Date.now()}),a}async function pt(e,t,n){let o=`${await re(n)}:${e}/${t}`,i=Ar.get(o);if(i&&i.expiresAt>Date.now())return i.branch;i&&Ar.delete(o);let s=await Y(n);try{let{data:c}=await s.rest.repos.get({owner:e,repo:t}),l=c.default_branch;return hb(o,l),l}catch{}let a=["main","master"];for(let c of a)try{return await s.rest.repos.getBranch({owner:e,repo:t,branch:c}),hb(o,c),c}catch{}throw new Error(`Could not determine default branch for ${e}/${t}. The repository may not exist, require authentication, or be inaccessible.`)}function hb(e,t){if(Ar.size>=Qk){let n=Ar.keys().next().value;n!==void 0&&Ar.delete(n)}Ar.set(e,{branch:t,expiresAt:Date.now()+Wk})}function Xz(){fn.clear(),Ar.clear(),er&&(clearInterval(er),er=null)}var Gk,Bk,Ap,zk,fn,er,db,mb,Uk,Qk,Wk,Ar,de=b(()=>{"use strict";Xn();Xn();Ia();$i();Gk=Nk.plugin(Dk),Bk=300*1e3,Ap=50,zk=60*1e3;fn=new Map,er=null;db=3,mb=60;Uk=()=>({onRateLimit:(e,t,n,r)=>(fb("primary",e,t),r<db&&e<mb),onSecondaryRateLimit:(e,t,n,r)=>(fb("secondary",e,t),r<db&&e<mb)});Qk=200,Wk=300*1e3,Ar=new Map});import{createRequire as Vk}from"node:module";function le(){if(nc)return nc;try{return nc=Yk(),nc}catch(e){throw new Lp(e)}}var Kk,Sb,Xk,nc,Yk,Lp,U,We=b(()=>{"use strict";Kk=Vk(import.meta.url),Sb="@octocodeai/octocode-engine",Xk=()=>globalThis.__OCTOCODE_ENGINE_BINDING__??Kk(Sb),Yk=Xk,Lp=class extends Error{constructor(n){super(`Failed to load native dependency ${Sb}`);this.cause=n;this.name="ContextUtilsLoadError"}cause};U={applyContentViewMinification(e,t){return le().applyContentViewMinification(e,t)},applyMinification(e,t){return le().applyMinification(e,t)},minifyContent(e,t){return le().minifyContent(e,t)},minifyContentSync(e,t){return le().minifyContentSync(e,t)},minifyContentResult(e,t){return le().minifyContentResult(e,t)},minifyMarkdownCore(e){return le().minifyMarkdownCore(e)},extractSignatures(e,t){return le().extractSignatures(e,t)},extractJsSymbols(e,t){return le().extractJsSymbols(e,t)},findInFileReferences(e,t,n,r){return le().findInFileReferences(e,t,n,r)},extractGraphFacts(e,t){return le().extractGraphFacts(e,t)},scanGraphFacts(e){return le().scanGraphFacts(e)},getSupportedJsTsExtensions(){return le().getSupportedJsTsExtensions()},getSupportedGraphFactExtensions(){return le().getSupportedGraphFactExtensions()},getGraphFactCapabilities(){return le().getGraphFactCapabilities()},structuralSearch(e,t,n,r){return le().structuralSearch(e,t,n,r)},structuralSearchFiles(e){return le().structuralSearchFiles(e)},structuralSearchFilesDetailed(e){return le().structuralSearchFilesDetailed(e)},getSupportedStructuralExtensions(){return le().getSupportedStructuralExtensions()},validateRipgrepPattern(e,t,n){return le().validateRipgrepPattern(e,t,n)},getSemanticBoundaryOffsets(e,t){return le().getSemanticBoundaryOffsets(e,t)},jsonToYamlString(e,t){return le().jsonToYamlString(e,t)},parseRipgrepJson(e,t){return le().parseRipgrepJson(e,t)},searchRipgrep(e){return le().searchRipgrep(e)},queryFileSystem(e){return le().queryFileSystem(e)},extractMatchingLines(e,t,n){return le().extractMatchingLines(e,t,n)},filterPatch(e,t){return le().filterPatch(e,t)},computeLineDiff(e,t){return le().computeLineDiff(e,t)},charToByteOffset(e,t){return le().charToByteOffset(e,t)},byteToCharOffset(e,t){return le().byteToCharOffset(e,t)},byteSliceContent(e,t,n){return le().byteSliceContent(e,t,n)},sliceContent(e,t,n,r){return le().sliceContent(e,t,n,r)},get SIGNATURES_ONLY_HINT(){return le().SIGNATURES_ONLY_HINT}}});function kp(e,t,n){let r=[],o=0;for(let[i,s]of t){let a=e.slice(i,s);if(!a)continue;let c=n.indexOf(a,o);c===-1&&(c=n.indexOf(a),c===-1)||(r.push([c,c+a.length]),o=c+a.length)}return r}var Cb=b(()=>{"use strict"});async function xb(e,t,n,r){let o={context:t,positions:kp(e,n,t)};try{let i=await U.minifyContent(t,r);if(i.failed||i.type==="failed")return{...o,failed:!0};let s=kp(e,n,i.content);return s.length!==o.positions.length?o:{context:i.content,positions:s,minificationType:i.type}}catch{return{...o,failed:!0}}}var wb=b(()=>{"use strict";We();Cb()});var Z,De,Pb,_p,vp,rc,Ip=b(()=>{"use strict";Z={AUTH_REQUIRED:"AUTH_REQUIRED",RATE_LIMIT_PRIMARY:"RATE_LIMIT_PRIMARY",RATE_LIMIT_SECONDARY:"RATE_LIMIT_SECONDARY",FORBIDDEN_PERMISSIONS:"FORBIDDEN_PERMISSIONS",NOT_FOUND:"NOT_FOUND",INVALID_REQUEST:"INVALID_REQUEST",SERVER_UNAVAILABLE:"SERVER_UNAVAILABLE",NETWORK_CONNECTION_FAILED:"NETWORK_CONNECTION_FAILED",REQUEST_TIMEOUT:"REQUEST_TIMEOUT",UNKNOWN:"UNKNOWN"},De={[Z.AUTH_REQUIRED]:{message:"GitHub authentication required",suggestion:"TELL THE USER: Refresh your GitHub token! Run 'gh auth login' OR 'gh auth refresh' OR set a new GITHUB_TOKEN/GH_TOKEN environment variable",explanation:"API request requires authentication. GitHub APIs have different rate limits for authenticated (5000/hour) vs unauthenticated (60/hour) requests."},[Z.RATE_LIMIT_PRIMARY]:{message:"GitHub API rate limit exceeded",messageWithTime:(e,t)=>`GitHub API rate limit exceeded. Resets at ${e.toISOString()} (in ${t} seconds)`,messageWithoutTime:"GitHub API rate limit exceeded. Reset time unavailable - check GitHub status or try again later",suggestion:"Set GITHUB_TOKEN for higher rate limits (5000/hour vs 60/hour)",explanation:"Primary rate limit tracks total API calls per hour. Authenticated users get 5000 requests/hour, unauthenticated get 60 requests/hour."},[Z.RATE_LIMIT_SECONDARY]:{message:e=>`GitHub secondary rate limit triggered. Retry after ${e} seconds`,suggestion:"Reduce request frequency to avoid abuse detection",explanation:"Secondary rate limits prevent API abuse by limiting request frequency. Triggered by making too many requests too quickly, regardless of remaining quota.",fallbackRetryAfter:60},[Z.FORBIDDEN_PERMISSIONS]:{message:"Access forbidden - insufficient permissions",suggestion:"Check repository permissions or authentication",suggestionWithScopes:e=>`Missing required scopes: ${e.join(", ")}. Run: gh auth refresh -s ${e.join(" -s ")}`,fallbackSuggestion:"Token may not have sufficient permissions for this operation",explanation:"GitHub tokens require specific OAuth scopes for different operations. Common scopes: repo (full repository access), read:org (organization access), gist (gist access)."},[Z.NOT_FOUND]:{message:"Repository, resource, or path not found",explanation:"Resource not found or not accessible. Could be: incorrect path, deleted resource, private repository without access, wrong branch name."},[Z.INVALID_REQUEST]:{message:"Invalid search query or request parameters",suggestion:"Check search syntax and parameter values",explanation:"Request was well-formed but contains invalid parameters. Common causes: invalid search syntax, parameters out of range, invalid filter combinations."},[Z.SERVER_UNAVAILABLE]:{message:"GitHub API temporarily unavailable",suggestion:"Retry the request after a short delay",explanation:"GitHub servers are temporarily unavailable. Usually resolves quickly. Check https://www.githubstatus.com for service status."},[Z.NETWORK_CONNECTION_FAILED]:{message:"Network connection failed",suggestion:"Check internet connection and GitHub API status",explanation:"Cannot establish connection to GitHub API. Check internet connectivity, DNS settings, and firewall/proxy configuration."},[Z.REQUEST_TIMEOUT]:{message:"Request timeout",suggestion:"Retry the request or check network connectivity",explanation:"Request exceeded timeout limit. Could be slow network, large response size, or GitHub server delay."},[Z.UNKNOWN]:{message:"Unknown error occurred",explanation:"An unexpected error occurred that does not match known error patterns."}},Pb={401:Z.AUTH_REQUIRED,403:Z.FORBIDDEN_PERMISSIONS,404:Z.NOT_FOUND,422:Z.INVALID_REQUEST,502:Z.SERVER_UNAVAILABLE,503:Z.SERVER_UNAVAILABLE,504:Z.SERVER_UNAVAILABLE},_p={CONNECTION_FAILED:["ENOTFOUND","ECONNREFUSED"],TIMEOUT:["timeout"]},vp={SECONDARY:/\bsecondary rate\b/i,GRAPHQL_TYPE:"RATE_LIMITED"},rc={RESET_BUFFER_SECONDS:1,SECONDARY_FALLBACK_SECONDS:60}});import{RequestError as Tb}from"octokit";function hn(e){if(!(e instanceof Tb)||e.status!==422)return!1;let t=e.response?.data?.errors;return!Array.isArray(t)||t.length===0?!1:t.some(n=>{let r=typeof n?.message=="string"?n.message.toLowerCase():"";return Jk.some(o=>r.includes(o))})}function ne(e){return e instanceof Tb?Zk(e):e instanceof Error?s_(e):{error:typeof e=="string"?e:De[Z.UNKNOWN].message,type:"unknown"}}function Zk(e){let{status:t,message:n,response:r}=e;if(t===403)return e_(n,r);if(t===429)return qk(n,r);let o=Pb[t];return o?i_(o,t):yo(Z.UNKNOWN,{error:n||De[Z.UNKNOWN].message,status:t})}function Op(e,t){let n=e?.[t],r=n===void 0?NaN:parseInt(String(n),10);return isNaN(r)?void 0:r}function qk(e,t){let n=t?.headers,r=Op(n,"retry-after"),o=Op(n,"x-ratelimit-reset"),i=Op(n,"x-ratelimit-remaining")??0,s=o?new Date(o*1e3):null,a=r??(s?Math.max(Math.ceil((s.getTime()-Date.now())/1e3)+rc.RESET_BUFFER_SECONDS,0):void 0);return qn({limit_type:"primary",retry_after_seconds:a,rate_limit_remaining:i,rate_limit_reset_ms:s?s.getTime():void 0,provider:"github"}),yo(Z.RATE_LIMIT_PRIMARY,{error:e||De[Z.RATE_LIMIT_PRIMARY].messageWithoutTime,status:429,rateLimitRemaining:i,rateLimitReset:s?s.getTime():void 0,retryAfter:a,scopesSuggestion:De[Z.RATE_LIMIT_PRIMARY].suggestion})}function e_(e,t){let n=t?.headers;if(vp.SECONDARY.test(e))return t_(n);let r=n?.["x-ratelimit-remaining"],o=o_(t);return r!==void 0&&String(r)==="0"||o?n_(n):r_(n)}function t_(e){let t=Number(e?.["retry-after"]),n=isNaN(t)?rc.SECONDARY_FALLBACK_SECONDS:t;return qn({limit_type:"secondary",retry_after_seconds:n,provider:"github"}),yo(Z.RATE_LIMIT_SECONDARY,{error:De[Z.RATE_LIMIT_SECONDARY].message(n),status:403,rateLimitRemaining:0,retryAfter:n,scopesSuggestion:De[Z.RATE_LIMIT_SECONDARY].suggestion})}function n_(e){let t=e?.["x-ratelimit-reset"],n=t?parseInt(String(t),10):NaN,r=isNaN(n)?null:new Date(n*1e3),o=r?Math.max(Math.ceil((r.getTime()-Date.now())/1e3)+rc.RESET_BUFFER_SECONDS,0):void 0,i=r?De[Z.RATE_LIMIT_PRIMARY].messageWithTime(r,o):De[Z.RATE_LIMIT_PRIMARY].messageWithoutTime;return qn({limit_type:"primary",retry_after_seconds:o,rate_limit_remaining:0,rate_limit_reset_ms:r?r.getTime():void 0,provider:"github"}),yo(Z.RATE_LIMIT_PRIMARY,{error:i,status:403,rateLimitRemaining:0,rateLimitReset:r?r.getTime():void 0,retryAfter:o,scopesSuggestion:De[Z.RATE_LIMIT_PRIMARY].suggestion})}function r_(e){let t=e?.["x-accepted-oauth-scopes"],n=e?.["x-oauth-scopes"],r=De[Z.FORBIDDEN_PERMISSIONS].suggestion;return t&&n&&(r=a_(String(t),String(n))),yo(Z.FORBIDDEN_PERMISSIONS,{error:De[Z.FORBIDDEN_PERMISSIONS].message,status:403,scopesSuggestion:r})}function o_(e){return e?.data?.errors?.some(n=>n.type===vp.GRAPHQL_TYPE)??!1}function i_(e,t){let n=De[e];return yo(e,{error:n.message,status:t,..."suggestion"in n&&{scopesSuggestion:n.suggestion}})}function s_(e){return _p.CONNECTION_FAILED.some(t=>e.message.includes(t))?{error:De[Z.NETWORK_CONNECTION_FAILED].message,type:"network",scopesSuggestion:De[Z.NETWORK_CONNECTION_FAILED].suggestion}:_p.TIMEOUT.some(t=>e.message.includes(t))?{error:De[Z.REQUEST_TIMEOUT].message,type:"network",scopesSuggestion:De[Z.REQUEST_TIMEOUT].suggestion}:{error:e.message,type:"unknown"}}function yo(e,t){return{type:"http",...t}}function a_(e,t){let n=e.split(",").map(i=>i.trim()).filter(Boolean),r=t.split(",").map(i=>i.trim()).filter(Boolean),o=n.filter(i=>!r.includes(i));return o.length>0?De[Z.FORBIDDEN_PERMISSIONS].suggestionWithScopes(o):De[Z.FORBIDDEN_PERMISSIONS].fallbackSuggestion}var Jk,tt=b(()=>{"use strict";Ip();$i();Jk=["cannot be searched","do not exist","does not exist","could not be found","cannot be found"]});function Eb(e){return`user:${e}`}function Fp(e){return e.startsWith('"')||l_.test(e)?e:`"${e.replace(/"/g,'\\"')}"`}var c_,l_,_n,Qi=b(()=>{"use strict";c_=/[@/]/,l_=/^[A-Za-z0-9_-]+$/;_n=class{queryParts=[];addOwnerRepo(t){if(t.owner&&t.repo){let n=Array.isArray(t.owner)?t.owner:[t.owner],r=Array.isArray(t.repo)?t.repo:[t.repo];n.forEach(o=>{r.forEach(i=>{this.queryParts.push(`repo:${o}/${i}`)})})}else t.owner&&(Array.isArray(t.owner)?t.owner:[t.owner]).forEach(r=>{this.queryParts.push(Eb(r))});return this}addDateFilters(t){return Object.entries({created:"created",updated:"updated","author-date":"author-date","committer-date":"committer-date","merged-at":"merged",closed:"closed"}).forEach(([r,o])=>{let i=t[r];i&&this.queryParts.push(`${o}:${i}`)}),this}addArrayFilter(t,n,r=!1){return t&&t!==null&&(Array.isArray(t)?t:[t]).forEach(i=>{let s=r?`"${i}"`:i;this.queryParts.push(`${n}:${s}`)}),this}addBooleanFilter(t,n,r){return t===!0?this.queryParts.push(n):t===!1&&this.queryParts.push(r),this}addSimpleFilter(t,n){return t!=null&&this.queryParts.push(`${n}:${t}`),this}addQuotedFilter(t,n){if(t!=null){let o=c_.test(t)&&!t.startsWith('"')?`"${t}"`:t;this.queryParts.push(`${n}:${o}`)}return this}addEngagementFilters(t){return this.addSimpleFilter(t.comments,"comments"),this.addSimpleFilter(t.reactions,"reactions"),this}addOrganizationFilters(t){return this.addArrayFilter(t.label,"label",!0),t.milestone&&this.queryParts.push(`milestone:"${t.milestone}"`),this}build(){return this.queryParts.join(" ").trim()}}});function Dp(e){return new Mp().addQueryTerms(e).addSearchFilters(e).addOwnerRepo(e).addMatchFilters(e).build()}function Hp(e){return new Np().addQueryTerms(e).addOwnerRepo(e).addRepoFilters(e).addMatchFilters(e).addQualityFilters(e).build()}var u_,Mp,Np,oc=b(()=>{"use strict";Qi();u_=/(?:^|\/)([^/]+\.[A-Za-z][A-Za-z0-9]{0,9})$/,Mp=class extends _n{addQueryTerms(t){if(Array.isArray(t.keywords)&&t.keywords.length>0){let n=t.keywords.filter(r=>r&&r.trim());n.length>0&&this.queryParts.push(...n.map(Fp))}return this}addSearchFilters(t){let n=t.path,r=t.filename,o=typeof n=="string"&&!r?n.match(u_):null;return o&&(r=o[1],n=n.slice(0,o.index)||void 0),this.addSimpleFilter(r,"filename"),this.addSimpleFilter(t.extension,"extension"),this.addQuotedFilter(n,"path"),t.language&&this.queryParts.push(`language:${t.language}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="file"?this.queryParts.push("in:file"):r==="path"&&this.queryParts.push("in:path")}),this}},Np=class extends _n{addQueryTerms(t){return Array.isArray(t.keywords)&&t.keywords.length>0&&this.queryParts.push(...t.keywords.map(Fp)),this}addRepoFilters(t){this.addArrayFilter(t.topicsToSearch,"topic"),this.addSimpleFilter(t.stars,"stars");let n=t;return typeof n.size=="string"&&this.queryParts.push(`size:${n.size}`),typeof n.created=="string"&&this.queryParts.push(`created:${n.created}`),t.updated&&this.queryParts.push(`pushed:${t.updated}`),t.language&&this.queryParts.push(`language:${t.language}`),typeof n.forks=="string"&&this.queryParts.push(`forks:${n.forks}`),typeof n.license=="string"&&this.queryParts.push(`license:${n.license}`),typeof n.goodFirstIssues=="string"&&this.queryParts.push(`good-first-issues:${n.goodFirstIssues}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="name"?this.queryParts.push("in:name"):r==="description"?this.queryParts.push("in:description"):r==="readme"&&this.queryParts.push("in:readme")}),this}addQualityFilters(t){let n=t,r=n?.archived;this.queryParts.push(r===!0?"archived:true":"is:not-archived");let o=n?.visibility;return o==="public"?this.queryParts.push("is:public"):o==="private"&&this.queryParts.push("is:private"),this}}});import p_ from"crypto";function f_(e){if(e===null||typeof e!="object"||Array.isArray(e))return e;let t=e,n=!1,r={};for(let o of Object.keys(t)){if(m_.has(o)){n=!0;continue}r[o]=t[o]}return n?r:e}function q(e,t,n){let r=Gp(f_(t)),o=n?`${n}:${r}`:r,i=p_.createHash("sha256").update(o).digest("hex");return`${d_}-${e}:${i}`}function Gp(e,t=new WeakSet){return e===null?"null":e===void 0?"undefined":typeof e!="object"?String(e):t.has(e)?'"[Circular]"':(t.add(e),Array.isArray(e)?`[${e.map(o=>Gp(o,t)).join(",")}]`:`{${Object.keys(e).sort().map(o=>{let i=e[o];return`"${o}":${Gp(i,t)}`}).join(",")}}`)}var d_,m_,Oe=b(()=>{"use strict";d_="v2",m_=new Set([])});import h_ from"node-cache";function y_(e){return e.match(/^v\d+-([^:]+):/)?.[1]}function b_(e){return e.startsWith("gh-api-")||e.startsWith("gh-repo-")||e==="github-user"}function Lr(e){let t=y_(e);if(!(!t||!b_(t)))try{qa(t,1)}catch{}}function ic(){let e=Date.now();for(let[t,n]of Ct.entries())e-n.startedAt>g_&&Ct.delete(t)}function sc(e){return Ab[e]||Ab.default}function kr(e,t,n){try{return nt.set(e,t,n),Re.sets++,Re.totalKeys=nt.keys().length,!0}catch{try{let r=nt.keys();for(let o of r)nt.get(o);return nt.set(e,t,n),Re.sets++,Re.totalKeys=nt.keys().length,!0}catch{return!1}}}var g_,nt,Re,Ab,Ct,ac=b(()=>{"use strict";Ui();g_=300*1e3,nt=new h_({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1}),Re={hits:0,misses:0,sets:0,totalKeys:0,lastReset:new Date},Ab={"gh-api-code":3600,"gh-api-repos":7200,"gh-api-prs":1800,"gh-api-issues":1800,"gh-api-history":1800,"gh-api-releases":3600,"gh-api-file-content":300,"gh-repo-structure-api":7200,"github-user":900,"npm-search":14400,default:86400},Ct=new Map});import{AsyncLocalStorage as R_}from"node:async_hooks";async function Lb(e){let t={hit:!1};return{value:await cc.run({root:t,depth:0,role:"response"},e),cacheHit:t.hit}}function lc(e,t="response"){let n=cc.getStore();return n?cc.run({root:n.root,depth:n.depth+1,role:t},e):e()}function vn(){let e=cc.getStore();e&&e.depth<=1&&e.role==="response"&&(e.root.hit=!0)}var cc,Wi=b(()=>{"use strict";cc=new R_});function S_(e,t){if(t)return t;let n=e.match(/^v\d+-([^:]+):/);return sc(n?.[1]??"default")}async function oe(e,t,n={}){return lc(()=>C_(e,t,n),n.cacheRole)}async function C_(e,t,n){if(n.skipCache)return await t();if(!n.forceRefresh){try{let a=nt.get(e);if(a!==void 0)return Re.hits++,Lr(e),vn(),a}catch{}let s=await ja(e);if(s?.state==="fresh")return Re.hits++,Lr(e),vn(),kr(e,s.value,Math.max(1,(s.expiresAt-Date.now())/1e3)),s.value}ic();let r=Ct.get(e);if(r)return r.promise;let o=Symbol(e),i=(async()=>{try{let s=await t();if(n.forceRefresh||Re.misses++,(n.shouldCache??(()=>!0))(s)){let c=S_(e,n.ttl);kr(e,s,c),await Ni(e,s,c)}return s}finally{Ct.get(e)?.requestId===o&&Ct.delete(e)}})();return Ct.set(e,{promise:i,startedAt:Date.now(),requestId:o}),i}var Ve=b(()=>{"use strict";ac();co();Wi()});function j(e){if(typeof e=="string")return e.length;try{return JSON.stringify(e)?.length??0}catch{return String(e).length}}function _b(e){if(!(typeof e!="number"||!Number.isFinite(e)))return Math.max(0,e)}function ee(e,t){let n=typeof t=="number"?_b(t):j(t);if(n===void 0)return e;try{Object.defineProperty(e,kb,{value:n,enumerable:!1,configurable:!0})}catch{}return e}function me(e){if(!(typeof e!="object"||e===null))return _b(e[kb])}var kb,ue=b(()=>{"use strict";kb=Symbol.for("octocode.rawResponseChars")});function bo(e){let t={};if(!e||typeof e!="object")return t;for(let[n,r]of Object.entries(e))typeof r=="string"?t[n]=r:typeof r=="number"&&Number.isFinite(r)&&(t[n]=String(r));return t}function vb(e){let t=bo(e),n=Number(t["x-ratelimit-remaining"]),r=Number(t["x-ratelimit-limit"]),o=Number(t["x-ratelimit-reset"]);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=0||n>Math.max(3,r*.15))return;let i=Number.isFinite(o)?Math.max(0,Math.round((o*1e3-Date.now())/1e3)):void 0;return`GitHub rate limit low: ${n}/${r} remaining${i!==void 0?` (resets in ~${i}s)`:""} \u2014 pace or narrow further requests.`}function Ro(e){let t=bo(e),n=t.etag||t.ETag||t.Etag||Object.entries(t).find(([r])=>r.toLowerCase()==="etag")?.[1];return n&&n.length>0?n:void 0}var tr=b(()=>{"use strict"});import{ContentSanitizer as x_}from"@octocodeai/octocode-engine/contentSanitizer";async function Ib(e,t,n){let r=await re(t),o=q("gh-api-code",{keywords:e.keywords,owner:e.owner,repo:e.repo,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,auth:r},n);return await oe(o,async()=>await w_(e,t),{shouldCache:s=>"data"in s&&!s.data?.incompleteResults&&!s.error})}async function w_(e,t){try{let n=await Y(t);if(e.keywords&&e.keywords.length>0&&e.keywords.filter(y=>y&&y.trim()).length===0)return{error:ct.QUERY_EMPTY.message,type:"http",status:400};let r=Dp(e);if(!r.trim())return{error:ct.QUERY_EMPTY.message,type:"http",status:400};let o=Math.min(typeof e.limit=="number"?e.limit:30,100),i=e.page||1,s={q:r,per_page:o,page:i,headers:{Accept:"application/vnd.github.v3.text-match+json"}},a=await n.rest.search.code(s),c=await P_(a.data.items,a.data.total_count),l=a.data.incomplete_results===!0,d=c.total_count,u=Math.min(d,1e3),p=Math.ceil(u/o),f=i<p,m=Math.min(u,p*o);return{data:{total_count:c.total_count,items:c.items,...l?{incompleteResults:!0}:{},repository:c.repository,matchLocations:c.matchLocations,minified:c.minified,minificationFailed:c.minificationFailed,minificationTypes:c.minificationTypes,_researchContext:c._researchContext,pagination:{currentPage:i,totalPages:p,perPage:o,totalMatches:u,reportedTotalMatches:d,reachableTotalMatches:m,totalMatchesKind:"reported",totalMatchesCapped:d>u,hasMore:f,...f?{nextPage:i+1}:{},uniqueFileCount:c._researchContext?.uniqueFileCount}},status:200,headers:bo(a.headers),rawResponseChars:j(a.data)}}catch(n){if(hn(n)){let o=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:o,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return ne(n)}}async function P_(e,t){let n=T_(e),r=new Set,o=!1,i=[],s=new Set,a=0,c=await Promise.allSettled(e.map(async p=>{s.add(`${p.repository.full_name}/${p.path}`);let f=[],m=await Promise.allSettled((p.text_matches||[]).map(async S=>{let C=x_.sanitizeContent(S.fragment||"",p.path);C.hasSecrets&&r.add(`Secrets detected in ${p.path}: ${C.secretsDetected.join(", ")}`),C.warnings.length>0&&C.warnings.forEach(k=>r.add(`${p.path}: ${k}`));let w=S.matches?.flatMap(k=>Array.isArray(k.indices)&&k.indices.length>=2?[[k.indices[0],k.indices[1]]]:[])||[],T=await xb(S.fragment||"",C.content,w,p.path);return T.failed&&(o=!0),T.minificationType&&(f.push(T.minificationType),i.push(T.minificationType)),{context:T.context,positions:T.positions}})),h=m.filter(S=>S.status==="fulfilled").map(S=>S.value),y=m.filter(S=>S.status==="rejected").length;y>0&&(a+=y);let g=p,R=Array.from(new Set(f));return{path:p.path,matches:h,url:p.html_url,repository:{nameWithOwner:p.repository.full_name,url:p.repository.url,pushedAt:p.repository.pushed_at||void 0},...g.last_modified_at&&{lastModifiedAt:g.last_modified_at},...R.length>0&&{minificationType:R.join(",")}}})),l=c.filter(p=>p.status==="fulfilled").map(p=>p.value),d=c.filter(p=>p.status==="rejected").length,u={items:l,total_count:t!==void 0?t:e.length,_researchContext:{uniqueFileCount:s.size,repositoryContext:n?(()=>{let p=n.full_name.split("/");return p.length===2&&p[0]&&p[1]?{owner:p[0],repo:p[1],branch:n.default_branch||void 0}:void 0})():void 0}};return n&&(u.repository={name:n.full_name,url:n.url,createdAt:n.created_at||void 0,updatedAt:n.updated_at||void 0,pushedAt:n.pushed_at||void 0}),d>0&&r.add(`${d} item(s) dropped due to processing errors`),a>0&&r.add(`${a} match(es) dropped due to processing errors`),r.size>0&&(u.matchLocations=Array.from(r)),u.minified=!o,u.minificationFailed=o,i.length>0&&(u.minificationTypes=Array.from(new Set(i))),u}function T_(e){if(e.length===0)return null;let t=e[0]?.repository;return t&&e.every(r=>r.repository.full_name===t.full_name)?t:null}var Bp=b(()=>{"use strict";wb();de();tt();oc();Oe();Ve();kt();ue();tr();ce()});import{readFileSync as E_,writeFileSync as A_}from"node:fs";import{join as Ob}from"node:path";import{z as nr}from"zod";function Fb(e,t){try{let n=L_.safeParse(JSON.parse(E_(Ob(e,uc),"utf8")));if(n.success&&n.data.commitSha===t)return n.data}catch{}}function Mb(e,t){A_(Ob(e,uc),JSON.stringify(t),{encoding:"utf8",mode:384})}var uc,gn,L_,zp=b(()=>{"use strict";uc=".octocode-directory-meta.json",gn=nr.number().int().nonnegative(),L_=nr.object({commitSha:nr.string(),complete:nr.boolean(),directoryEntryCount:gn,eligibleFileCount:gn,skipped:nr.object({nonFile:gn,oversized:gn,binary:gn,fileLimit:gn,fetchFailed:gn,totalSizeLimit:gn,pathTraversal:gn}),files:nr.array(nr.object({path:nr.string(),size:gn}))})});import{readdirSync as k_,statSync as Nb}from"node:fs";import{join as __}from"node:path";function $p(){return{nonFile:0,oversized:0,binary:0,fileLimit:0,fetchFailed:0,totalSizeLimit:0,pathTraversal:0}}function Qp(e){return Object.values(e).every(t=>t===0)}function Wp(e,t){if(!t&&e)return["Cannot verify completeness against remote tree; use forceRefresh or ghCloneRepo if completeness matters."];if(!e)return["Directory materialization is partial; inspect skipped counts or use ghCloneRepo before repo-wide reachability/dead-code conclusions."]}async function Gb(e,t,n){let r=[];for(let o=0;o<e.length;o+=t){let i=e.slice(o,o+t),s=await Promise.allSettled(i.map(async a=>{let c=await n(a);return{entry:a,content:c}}));for(let a of s)a.status==="fulfilled"&&r.push(a.value)}return r}function Bb(e,t){let n=[],r=0;function o(i){let s;try{s=k_(i)}catch{return}for(let a of s){if(a===uc||a===".octocode-clone-meta.json")continue;let c=__(i,a);try{let l=Nb(c);if(l.isDirectory())o(c);else if(l.isFile()){let d=c.substring(t.length+1);r+=l.size,n.push({path:d,size:l.size,type:"file"})}}catch{}}}return o(e),{files:n,fileCount:n.length,totalSize:r}}function zb(e){try{return Nb(e).size}catch{return 0}}var Vi,pc,jp,Db,Hb,Up,dc=b(()=>{"use strict";zp();Vi=50,pc=5*1024*1024,jp=300*1024,Db=5,Hb=new Set([".png",".jpg",".jpeg",".gif",".bmp",".ico",".webp",".mp3",".mp4",".wav",".avi",".mov",".mkv",".webm",".zip",".tar",".gz",".bz2",".7z",".rar",".xz",".exe",".dll",".so",".dylib",".bin",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".woff",".woff2",".ttf",".eot",".otf",".pyc",".class",".o",".obj"]),Up={maxDirectoryFiles:Vi,maxTotalSize:pc,maxFileSize:jp}});import v_ from"node-cache";function Ub(e,t){if(t)return t;let n=e.match(/^v\d+-([^:]+):/);return sc(n?.[1]??"default")}async function mc(e,t,n={}){return lc(()=>I_(e,t,n),n.cacheRole)}async function I_(e,t,n){if(n.skipCache)return(await t({})).value;let r;if(!n.forceRefresh){try{let a=nt.get(e);if(a!==void 0)return Re.hits++,Lr(e),vn(),a}catch{}if(r=await ja(e,{allowStale:!0}),r?.state==="fresh")return Re.hits++,Lr(e),vn(),kr(e,r.value,Math.max(1,(r.expiresAt-Date.now())/1e3)),r.etag&&So.set(e,{data:r.value,etag:r.etag}),r.value}ic();let o=Ct.get(e);if(o)return o.promise;let i=Symbol(e),s=(async()=>{try{let c=(n.forceRefresh?void 0:So.get(e))??(r?{data:r.value,etag:r.etag}:void 0),l=await t({ifNoneMatch:!n.forceRefresh&&c?.etag?c.etag:void 0});if(l.notModified&&c){Re.hits++,Lr(e),vn();let u=Ub(e,n.ttl);return kr(e,c.data,u),await Ni(e,c.data,u,{...c.etag?{etag:c.etag}:{},staleTtlSeconds:jb}),c.data}if(n.forceRefresh||Re.misses++,(n.shouldCache??(()=>!0))(l.value)){let u=Ub(e,n.ttl);kr(e,l.value,u),So.set(e,{data:l.value,etag:l.etag}),await Ni(e,l.value,u,{...l.etag?{etag:l.etag}:{},staleTtlSeconds:jb})}return l.value}finally{Ct.get(e)?.requestId===i&&Ct.delete(e)}})();return Ct.set(e,{promise:s,startedAt:Date.now(),requestId:i}),s}var jb,So,Ki=b(()=>{"use strict";ac();co();Wi();jb=86400;So=new v_({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1})});import{z as Vp}from"zod";var Nt,Kp,Xi,Yi=b(()=>{"use strict";Nt={GITHUB_SEARCH:"ghSearch",GITHUB_FETCH_CONTENT:"ghGetFileContent",GITHUB_SEARCH_HISTORY:"ghSearchHistory",GITHUB_GET_HISTORY_ITEM:"ghGetHistoryItem",PACKAGE_SEARCH:"npmSearch",GITHUB_CLONE_REPO:"ghCloneRepo",LOCAL_SEARCH:"localSearch",LOCAL_ANALYZE_GRAPH:"localAnalyzeGraph",LOCAL_FETCH_CONTENT:"localGetFileContent",LSP_GET_SEMANTIC_CONTENT:"lspGetSemantics"},Kp=Vp.object({goal:Vp.string().optional().describe("What this query should accomplish."),reasoning:Vp.string().optional().describe("Why this query advances the goal.")}),Xi=Object.fromEntries(Object.entries(Kp.shape).map(([e,t])=>[e,t.description??""]))});function Zj(e){return O_.has(e)}var yn,dt,Dt,fe,Ee,pe,we,O_,he=b(()=>{"use strict";Yi();yn=Nt.LOCAL_ANALYZE_GRAPH,dt="localSearch",Dt=Nt.GITHUB_SEARCH,fe="ghSearchHistory",Ee="ghGetHistoryItem",pe={GITHUB_SEARCH:Nt.GITHUB_SEARCH,GITHUB_FETCH_CONTENT:Nt.GITHUB_FETCH_CONTENT,PACKAGE_SEARCH:Nt.PACKAGE_SEARCH,GITHUB_CLONE_REPO:Nt.GITHUB_CLONE_REPO,LOCAL_FETCH_CONTENT:Nt.LOCAL_FETCH_CONTENT,LOCAL_ANALYZE_GRAPH:Nt.LOCAL_ANALYZE_GRAPH,LSP_GET_SEMANTIC_CONTENT:Nt.LSP_GET_SEMANTIC_CONTENT,GITHUB_SEARCH_HISTORY:fe,GITHUB_GET_HISTORY_ITEM:Ee},we=pe.LSP_GET_SEMANTIC_CONTENT,O_=new Set([dt,pe.LOCAL_FETCH_CONTENT,yn,we])});var N,Ke=b(()=>{"use strict";he();N={...pe,LOCAL_SEARCH:"localSearch",GITHUB_SEARCH_CODE:"github.code",GITHUB_VIEW_REPO_STRUCTURE:"github.tree",GITHUB_SEARCH_REPOSITORIES:"github.repositories",LOCAL_RIPGREP:"local.text",LOCAL_VIEW_STRUCTURE:"local.tree",LOCAL_FIND_FILES:"local.files"}});function Xp(e,t){let n=e.split("/").pop()||"",r=t.some(i=>{let s=i.split("/").pop()||"";return s.toLowerCase()===n.toLowerCase()&&s!==n}),o=[];return r&&o.push('GitHub paths are case-sensitive. Verify exact casing with ghSearch operation:"tree".'),o.push(`Did you mean: ${t.join(", ")}?`),o}async function Yp(e,t,n,r,o){try{let i=r.split("/").slice(0,-1).join("/"),s=r.split("/").pop();if(!s)return[];let a=await e.rest.repos.getContent({owner:t,repo:n,path:i,ref:o});if(!Array.isArray(a.data))return[];let c=a.data,l=[],d=c.find(f=>f.name.toLowerCase()===s.toLowerCase());d&&l.push(d.path);let u=s.replace(/\.[^/.]+$/,"");return c.filter(f=>f.name===s?!1:!!f.name.startsWith(u+".")).forEach(f=>l.push(f.path)),l.length===0&&u.length>=3&&c.filter(m=>{let h=m.name.replace(/\.[^/.]+$/,"");return h!==u&&h.length>=3&&(u.startsWith(h)||h.startsWith(u))}).forEach(m=>l.push(m.path)),Array.from(new Set(l)).slice(0,3)}catch{return[]}}var $b=b(()=>{"use strict"});import{RequestError as Jp}from"octokit";async function F_(e,t,n,r,o,i,s){let a=await pt(n,r,s).catch(()=>{}),c=ne(t),l=`Path '${o}' could not be read at ref '${i}'. Verify the path and ref.${a?` The default branch is '${a}'. Omit branch to read the default branch.`:""}`,d=await Yp(e,n,r,o,i);return d.length>0&&(c.hints=[...c.hints||[],...Xp(o,d)]),{...c,...l&&{scopesSuggestion:l}}}async function M_(e,t,n,r,o,i){let s=ne(t),a=await Yp(e,n,r,o,i||"main");return a.length>0&&(s.hints=[...s.hints||[],...Xp(o,a)]),s}async function Qb(e,t){let n=e.replace(/\s/g,"");try{let r=Buffer.from(n,"base64");return r.indexOf(0)!==-1?{error:Sr.BINARY_FILE.message,type:"unknown",status:415}:{data:r.toString("utf-8"),status:200}}catch{return{error:Sr.DECODE_FAILED.message,type:"unknown",status:422}}}async function Wb(e,t,n,r,o){try{let i=await e.rest.git.getBlob({owner:t,repo:n,file_sha:r}),{content:s,encoding:a}=i.data;return a==="base64"?Qb(s,o):a==="utf-8"?{data:s,status:200}:{error:`Unsupported blob encoding: ${a}`,type:"unknown",status:415}}catch(i){return ne(i)}}async function N_(e,t,n,r,o,i){try{let s=r.split("/").slice(0,-1).join("/"),a=r.split("/").pop();if(!a)return{error:`Cannot determine file name from path: ${r}`,type:"unknown",status:400};let c=o||await pt(t,n,i).catch(()=>"HEAD"),l=await e.rest.repos.getContent({owner:t,repo:n,path:s||"",ref:c});if(!Array.isArray(l.data))return{error:`Expected directory listing for ${s||"root"}`,type:"unknown",status:500};let d=l.data.find(p=>p.name===a&&p.type==="file");if(!d)return{error:`File ${a} not found in ${s||"root"}`,type:"unknown",status:404};let u=await Wb(e,t,n,d.sha,r);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(s){return ne(s)}}async function Zp(e,t,n={}){try{let r=await Y(t),{owner:o,repo:i,path:s,branch:a}=e,c={owner:o,repo:i,path:s,...a&&{ref:a},...n.ifNoneMatch?{headers:{"If-None-Match":n.ifNoneMatch}}:{}},l,d=a;try{l=await r.rest.repos.getContent(c)}catch(f){if(f instanceof Jp&&f.status===304)return{data:{rawContent:"",resolvedRef:a||"HEAD"},status:304,etag:n.ifNoneMatch,notModified:!0};if(f instanceof Jp&&f.status===404)return a?await F_(r,f,o,i,s,a,t):await M_(r,f,o,i,s,a);if(f instanceof Jp&&f.status===413)return await N_(r,o,i,s,a||d,t);throw f}let u=l.data,p=Ro(l.headers);if(Array.isArray(u))return{error:Sr.PATH_IS_DIRECTORY.message(N.GITHUB_VIEW_REPO_STRUCTURE),type:"unknown",status:400};if("content"in u&&u.type==="file"){let f=typeof u.content=="string"?u.content:"",m=u.size??0,h;if(f.length>0)h=await Qb(f,s);else if(u.size===0&&typeof u.content=="string")h={data:"",status:200};else if(m>0&&"sha"in u&&typeof u.sha=="string"&&u.sha)h=await Wb(r,o,i,u.sha,s);else return{error:Sr.FILE_EMPTY.message,type:"unknown",status:404};if("error"in h)return h;if(!d&&!a)try{d=await pt(o,i,t)}catch{}return{data:{rawContent:h.data,branch:d||void 0,resolvedRef:d||a||"HEAD"},status:200,rawResponseChars:j(u),...p?{etag:p}:{}}}return{error:Sr.UNSUPPORTED_TYPE.message(u.type),type:"unknown",status:415}}catch(r){return ne(r)}}var qp=b(()=>{"use strict";de();tt();Ke();kt();ue();tr();$b()});async function Co(e,t,n){let r=await re(t),o=q("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,auth:r},n);return{rawResult:await mc(o,async({ifNoneMatch:s})=>{let a=await Zp(e,t,{ifNoneMatch:s}),{etag:c,notModified:l,...d}=a;return{value:d,etag:c,notModified:l}},{shouldCache:s=>"data"in s&&!s.error,forceRefresh:e.forceRefresh===!0}),auth:r}}var fc=b(()=>{"use strict";de();Oe();Ki();qp()});import{cpSync as D_,existsSync as H_,lstatSync as G_,mkdirSync as Ji,mkdtempSync as B_,renameSync as Vb,rmSync as hc,statSync as z_,writeFileSync as j_}from"node:fs";import{dirname as Kb,join as _r}from"node:path";import{randomUUID as U_}from"node:crypto";async function gc(e,t,n){let r=Na(e,t);Ji(Kb(r),{recursive:!0,mode:448});let o=Date.now();for(;;)try{Ji(r,{mode:448}),no(r);break}catch(i){if(i.code!=="EEXIST")throw i;if(ro(r))continue;if(Date.now()-o>3e4)throw new Error("Timed out waiting for tree materialization lock.",{cause:i});await new Promise(s=>setTimeout(s,25))}try{return await n()}finally{hc(r,{recursive:!0,force:!0})}}function yc(e,t){let n=e;for(let r of t.split("/").filter(Boolean)){if(r===".."||r===".")throw new Error("Invalid snapshot directory path.");if(n=_r(n,r),H_(n)&&G_(n).isSymbolicLink())throw new Error("Snapshot paths cannot traverse symbolic links.");Ji(n,{recursive:!0,mode:448})}return n}function bc(e){let t=Fi(e)?.snapshotId;if(!t||!/^[0-9a-f-]{36}$/.test(t))return;let n=_r(e,"snapshots",t);try{return z_(n).isDirectory()?n:void 0}catch{return}}function Rc(e,t,n,r,o){let i=_r(e,"tmp","tree-staging");Ji(i,{recursive:!0,mode:448});let s=B_(_r(i,"snapshot-")),a=U_(),c=_r(t,"snapshots",a),l=_r(t,`.snapshot-${a}.tmp`),d=!1;try{return n&&D_(n,s,{recursive:!0,dereference:!1}),o(s),Ji(Kb(c),{recursive:!0,mode:448}),Vb(s,c),j_(l,JSON.stringify({...r,snapshotId:a}),{encoding:"utf8",mode:384}),Vb(l,_r(t,$_)),d=!0,c}finally{hc(s,{recursive:!0,force:!0}),hc(l,{force:!0}),d||hc(c,{recursive:!0,force:!0})}}var $_,ed=b(()=>{"use strict";Tr();wr();oo();$_=".octocode-clone-meta.json"});async function W_(e,t,n,r){let s=(await(await Y(r)).rest.repos.getCommit({owner:e,repo:t,ref:n})).data.sha;if(typeof s!="string"||!/^[0-9a-f]{40}$/i.test(s))throw new Error(`GitHub returned an invalid commit SHA for ref "${n}".`);return s.toLowerCase()}async function V_(e,t,n,r){return{commitSha:await W_(e,t,n,r),resolvedRef:n}}async function rr(e,t,n,r,o=!1){let i=await re(r),s=q("gh-api-ref-resolution",{owner:e,repo:t,ref:n,auth:i});return oe(s,()=>V_(e,t,n,r),{ttl:Q_,forceRefresh:o,cacheRole:"helper"})}var Q_,Zi=b(()=>{"use strict";de();Oe();Ve();Q_=60});import{writeFileSync as K_,existsSync as Xb,rmSync as Yb,readdirSync as X_}from"node:fs";import{join as qi,resolve as Jb,relative as Y_,sep as Zb}from"node:path";import{getDiscoveryExtension as J_}from"@octocodeai/octocode-engine/security";async function td(e,t,n,r,o,i=!1){let s=Kt(),{commitSha:a,resolvedRef:c}=await rr(e,t,r,o,i),l=vi(s,e,t,a);return ao(s),gc(s,l,async()=>{let d=bc(l),u=d??l,p=Jb(qi(u,n));if(!p.startsWith(u+Zb)&&p!==u)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let f=io(l);if(f.hit&&f.meta.commitSha===a&&!i&&d&&Xb(p)){let A=Bb(p,u),I=Fb(p,a),L=I?.skipped??$p(),M=new Map(A.files.map(ie=>[ie.path,ie.size])),K=I?.complete===!0&&Qp(L)&&I.files.length===A.fileCount&&I.files.every(ie=>M.get(ie.path)===ie.size);return{localPath:p,repoRoot:u,files:A.files,fileCount:A.fileCount,totalSize:A.totalSize,complete:K,verified:!1,commitSha:a,...L.nonFile>0?{hasSubdirectories:!0}:{},directoryEntryCount:I?.directoryEntryCount??A.fileCount,eligibleFileCount:I?.eligibleFileCount??A.fileCount,savedFileCount:A.fileCount,skipped:L,limits:Up,warnings:Wp(K,!1),cached:!0,expiresAt:f.meta.expiresAt,owner:e,repo:t,branch:c,directoryPath:n}}let m=await Y(o),{data:h}=await m.rest.repos.getContent({owner:e,repo:t,path:n,ref:a});if(!Array.isArray(h))throw new Error(`Path "${n}" is not a directory. Use type "file" to fetch file content.`);let y=h,g=$p(),R=[];for(let A of y){if(A.type!=="file"){g.nonFile+=1;continue}if(A.size>jp){g.oversized+=1;continue}let I=J_(A.name,{lowercase:!0,leadingDot:!0});if(Hb.has(I)){g.binary+=1;continue}R.push(A)}g.fileLimit=Math.max(0,R.length-Vi);let S=R.slice(0,Vi),C=await Gb(S,Db,async A=>{let{rawResult:I}=await Co({owner:e,repo:t,path:A.path,branch:a,type:"file",fullContent:!0,minify:"none",contextLines:0,forceRefresh:i},o);if(!("data"in I)||!I.data)throw new Error("Directory file read failed");return I.data.rawContent});g.fetchFailed=S.length-C.length;let w=0,T=[];for(let A=0;A<C.length;A+=1){let{entry:I,content:L}=C[A],M=Buffer.byteLength(L,"utf8");if(w+M>pc){g.totalSizeLimit=C.length-A;break}w+=M,T.push({entry:I,content:L})}let k=[],F=T.filter(({entry:A})=>{let I=Jb(qi(u,A.path)),L=Y_(p,I);return!L||L.startsWith("..")||L.includes(Zb)||A.name===".octocode-directory-meta.json"?(g.pathTraversal+=1,!1):!0});w=0;for(let{entry:A,content:I}of F){let L=Buffer.byteLength(I,"utf8");w+=L,k.push({path:A.path,size:L,type:"file"})}let P=so(e,t,c,"treeFetch",void 0,void 0,a),x=Qp(g),_=x,v=g.nonFile>0;return u=Rc(s,l,d,P,A=>{let I=yc(A,n);for(let L of X_(I,{withFileTypes:!0}))L.isDirectory()||Yb(qi(I,L.name),{force:!0});for(let{entry:L,content:M}of F){let K=qi(A,L.path);Xb(K)&&Yb(K,{recursive:!0,force:!0}),K_(K,M,"utf-8")}Mb(I,{commitSha:a,complete:x,directoryEntryCount:y.length,eligibleFileCount:R.length,skipped:g,files:k})}),p=qi(u,n),{localPath:p,repoRoot:u,files:k,fileCount:k.length,totalSize:w,complete:x,verified:_,commitSha:a,...v?{hasSubdirectories:!0}:{},directoryEntryCount:y.length,eligibleFileCount:R.length,savedFileCount:k.length,skipped:g,limits:Up,warnings:Wp(x,_),cached:!1,expiresAt:P.expiresAt,owner:e,repo:t,branch:c,directoryPath:n}})}var nd=b(()=>{"use strict";pn();de();fc();Tr();wr();dc();ed();Zi();zp()});import{writeFileSync as Z_,existsSync as q_,statSync as ev,lstatSync as tv,rmSync as nv}from"node:fs";import{join as rd,dirname as rv,resolve as ov,sep as iv}from"node:path";async function od(e,t,n,r,o,i=!1){let s=Kt(),{commitSha:a,resolvedRef:c}=await rr(e,t,r,o,i),l=vi(s,e,t,a);return ao(s),gc(s,l,async()=>{let d=bc(l),u=d??l,p=ov(rd(u,n));if(!p.startsWith(u+iv))throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let f=io(l);if(!i&&f.hit&&f.meta.commitSha===a&&d&&q_(p)&&ev(p).isFile())return{localPath:p,repoRoot:u,path:n,size:zb(p),cached:!0,expiresAt:f.meta.expiresAt,owner:e,repo:t,branch:c,commitSha:a};let{rawResult:m}=await Co({owner:e,repo:t,path:n,type:"file",branch:a,fullContent:!0,contextLines:0,minify:"none",goal:`Save ${e}/${t}/${n} locally`,reasoning:"GitHub file materialization"},o);if(!("data"in m)||!m.data){let y="error"in m?m.error:void 0;throw new Error(y||`Failed to fetch ${e}/${t}/${n}`)}let h=so(e,t,c,"treeFetch",void 0,void 0,a);return u=Rc(s,l,d,h,y=>{let g=rv(n);yc(y,g==="."?"":g);let R=rd(y,n);tv(R,{throwIfNoEntry:!1})&&nv(R,{recursive:!0,force:!0}),Z_(R,m.data.rawContent,"utf8")}),p=rd(u,n),{localPath:p,repoRoot:u,path:n,size:Buffer.byteLength(m.data.rawContent,"utf8"),cached:!1,expiresAt:h.expiresAt,owner:e,repo:t,branch:c,commitSha:a}})}var id=b(()=>{"use strict";pn();fc();Tr();wr();dc();ed();Zi()});import{getConfigSync as sv,DEFAULT_OUTPUT_CONFIG as av}from"@octocodeai/config";function vr(){try{return sv().output.pagination.defaultCharLength}catch{return av.pagination.defaultCharLength}}var es=b(()=>{"use strict"});function cv(e,t,n){return U.byteSliceContent(e,t,n)}function Sc(e,t){return U.byteToCharOffset(e,t)}function qb(e,t){return U.charToByteOffset(e,t)}function eR(e){return U.charToByteOffset(e,e.length)}function t$(e,t,n){let r=cv(e,t,t+n);return{charOffset:Sc(e,t),charLength:r.length,text:r}}function sd(e,t,n,r){return U.sliceContent(e,t,n,r)}var ad=b(()=>{"use strict";We()});function ts(e,t=0,n,r={}){let o=r.mode??"characters",i=e.length,s=eR(e);if(n===void 0)return t>0?ts(e,t,o==="bytes"?s:i,r):{paginatedContent:e,byteOffset:0,byteLength:s,totalBytes:s,nextByteOffset:void 0,charOffset:0,charLength:i,totalChars:i,nextCharOffset:void 0,hasMore:!1,estimatedTokens:Math.ceil(e.length/4),currentPage:1,totalPages:1};let a=Math.max(1,r.pageSize??n),c,l,d,u,p,f,m,h;if(o==="bytes"){let y=Math.min(t,s),g=Math.min(y+n,s);u=Sc(e,y),p=Sc(e,g),p<i&&qb(e,p)<g&&(p+=1);let R=sd(e,u,p-u);c=R.text,u=R.charOffset,p=R.charOffset+R.charLength,l=R.byteOffset,d=R.byteOffset+R.byteLength,f=d<s;let S=r.actualOffset??y;m=Math.floor(S/a)+1,h=Math.max(m,Math.ceil(s/a))}else{let y=sd(e,t,n);c=y.text,u=y.charOffset,p=y.charOffset+y.charLength,l=y.byteOffset,d=y.byteOffset+y.byteLength,f=p<i;let g=r.actualOffset??u;m=Math.floor(g/a)+1,h=Math.max(m,Math.ceil(i/a))}return{paginatedContent:c,byteOffset:l,byteLength:d-l,totalBytes:s,nextByteOffset:f?d:void 0,charOffset:u,charLength:c.length,totalChars:i,nextCharOffset:f?p:void 0,hasMore:f,estimatedTokens:Math.ceil(c.length/4),currentPage:m,totalPages:h}}function o$(e,t=!1){return t?JSON.stringify(e,null,2):JSON.stringify(e)}function cd(e){return{...e.pageCountsKind?{pageCountsKind:e.pageCountsKind}:{},currentPage:e.currentPage,totalPages:e.totalPages,hasMore:e.hasMore,charOffset:e.charOffset,charLength:e.charLength,totalChars:e.totalChars,...e.nextCharOffset!==void 0&&{nextCharOffset:e.nextCharOffset}}}function i$(e,t,n){let r=e.length;if(r===0)return{sliced:"",actualOffset:0,actualLength:0,hasMore:!1,lineCount:0,totalChars:0};if(t>=r)return{sliced:"",actualOffset:r,actualLength:0,hasMore:!1,lineCount:0,totalChars:r,nextOffset:r};let o=t;if(o>0&&e[o-1]!==`
|
|
25
12
|
`){let l=e.lastIndexOf(`
|
|
26
13
|
`,o-1);o=l===-1?0:l+1}let i=o,s=0;for(;i<r;){let l=e.indexOf(`
|
|
27
|
-
`,i);if(l===-1){i=r;break}if(i=l+1,s++,i-o>=n)break}let a=e.substring(o,i),c=i<r;return{sliced:a,actualOffset:o,actualLength:a.length,hasMore:c,lineCount:s,totalChars:r,nextOffset:c?i:void 0}}var
|
|
28
|
-
`,t);return n===-1?void 0:n+1}function
|
|
29
|
-
`).at(-1)??"";return t.length>0&&(t[0]===" "||t[0]===" ")}async function
|
|
30
|
-
`),
|
|
31
|
-
`);let
|
|
32
|
-
`),
|
|
33
|
-
|
|
34
|
-
`).trim()}import{ContentSanitizer as su}from"@octocodeai/octocode-engine/contentSanitizer";var fT=new Set(["vercel","pkg-pr-new","coderabbitai","github-actions","codecov","changeset-bot","netlify","sonarcloud","socket-security"]);function ir(e){let t=e.toLowerCase();return t.endsWith("[bot]")||fT.has(t)}async function Zs(e){let t=[],n=0,r=1,o=!0;do{let i=await e(r);n+=B(i.data),t.push(...i.data),o=i.data.length===100,r++}while(o);return{items:t,rawResponseChars:n}}async function ou(e,t,n,r){let o=await $(r),{items:i,rawResponseChars:s}=await Zs(a=>o.rest.pulls.listFiles({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return W({total_count:i.length,files:i},s)}async function hT(e,t,n,r){let o=await $(r),{items:i,rawResponseChars:s}=await Zs(a=>o.rest.pulls.listCommits({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return W(i,s)}async function gT(e,t,n,r){try{let i=await(await $(r)).rest.repos.getCommit({owner:e,repo:t,ref:n});return W(i.data.files||[],i.data)}catch{return null}}var yT=5;async function bT(e,t,n){if(e.length===0)return[];let r=new Array(e.length),o=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let s=o++;if(s>=e.length)break;r[s]=await n(e[s],s)}});return await Promise.all(i),r}async function iu(e,t,n,r,o){let i=await hT(e,t,n,o);if(!i)return null;let s=ie(i)??0,a=[...i].sort((l,u)=>{let p=l.commit.author?.date?new Date(l.commit.author.date).getTime():0;return(u.commit.author?.date?new Date(u.commit.author.date).getTime():0)-p}),c=await bT(a,yT,async l=>{let u=await gT(e,t,l.sha,o),p=[];return u&&(s+=ie(u)??0,p=ei(u,r)),{sha:l.sha,message:l.commit.message,author:l.commit.author?.name||"unknown",date:l.commit.author?.date||"",files:p}});return W(c,s)}async function au(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let m=await e.rest.issues.listComments({owner:t,repo:n,issue_number:r,per_page:100,page:a});s+=B(m.data),i.push(...m.data),c=m.data.length===100,a++}while(c);let l=o?i:i.filter(m=>!ir(m.user?.login??"")),u=i.length-l.length,p=l.map(m=>{let f=D.minifyMarkdownCore(Ys(m.body??""));return{id:String(m.id),user:m.user?.login??"unknown",body:su.sanitizeContent(f).content,createdAt:m.created_at??"",updatedAt:m.updated_at??"",commentType:"discussion"}}),d=[];return u>0&&d.push(`${u} bot comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:W(p,s),note:d.length>0?d.join("; "):void 0}}catch{return{comments:W([],0)}}}async function cu(e,t,n,r){try{let{items:o,rawResponseChars:i}=await Zs(s=>e.rest.pulls.listReviews({owner:t,repo:n,pull_number:r,per_page:100,page:s}));return W(o.map(s=>({id:String(s.id),user:s.user?.login??"unknown",state:s.state??"",body:su.sanitizeContent(D.minifyMarkdownCore(Ys(s.body??""))).content,submittedAt:s.submitted_at??void 0,commitId:s.commit_id??void 0})),i)}catch{return W([],0)}}async function lu(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let m=await e.rest.pulls.listReviewComments({owner:t,repo:n,pull_number:r,per_page:100,page:a});s+=B(m.data),i.push(...m.data),c=m.data.length===100,a++}while(c);let l=o?i:i.filter(m=>!ir(m.user?.login??"")),u=i.length-l.length,p=l.map(m=>{let f=D.minifyMarkdownCore(Ys(m.body??""));return{id:String(m.id),user:m.user?.login??"unknown",body:su.sanitizeContent(f).content,createdAt:m.created_at??"",updatedAt:m.updated_at??"",commentType:"review_inline",path:m.path,line:m.line??m.original_line??void 0,...m.in_reply_to_id!=null?{inReplyToId:m.in_reply_to_id}:{}}}),d=[];return u>0&&d.push(`${u} bot inline comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:W(p,s),note:d.length>0?d.join("; "):void 0}}catch{return{comments:W([],0)}}}async function uu(e,t,n){let r=e,{prData:o,sanitizationWarnings:i}=tu(r);i.size>0&&(o._sanitization_warnings=Array.from(i));let s=0;if(e.pull_request&&nu(t))try{let{owner:l,repo:u}=Jo(t);if(l&&u){let p=await n.rest.pulls.get({owner:l,repo:u,pull_number:e.number});if(p.data&&(s+=B(p.data),o.head=p.data.head?.ref,o.head_sha=p.data.head?.sha,o.base=p.data.base?.ref,o.base_sha=p.data.base?.sha,o.draft=p.data.draft??!1,p.data.merged_at&&(o.merged_at=p.data.merged_at),o.additions=p.data.additions??0,o.deletions=p.data.deletions??0,jr(t)||(o.file_changes={total_count:p.data.changed_files??0,files:[]}),jr(t))){let d=await ou(l,u,e.number);d&&(s+=ie(d)??0,d.files=ei(d.files,t),o.file_changes=d)}}}catch(l){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${l instanceof Error?l.message:String(l)}`]}let a=Ws(t),c=Vs(t);if(a||c){let{owner:l,repo:u}=Jo(t);if(l&&u){let p=ru(t),d=()=>Promise.resolve({comments:W([],0)}),[{comments:m,note:f},{comments:h,note:y}]=await Promise.all([a?au(n,l,u,e.number,p):d(),c?lu(n,l,u,e.number,p):d()]);o.comments=[...m,...h],s+=(ie(m)??0)+(ie(h)??0);let g=[f,y].filter(S=>typeof S=="string");g.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...g])}}if(Xs(t))try{let{owner:l,repo:u}=Jo(t);if(l&&u){let p=await cu(n,l,u,e.number);s+=ie(p)??0,o.reviews=p}}catch(l){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${l instanceof Error?l.message:String(l)}`]}if(Ks(t))try{let{owner:l,repo:u}=Jo(t);if(l&&u){let p=await iu(l,u,e.number,t);p&&(s+=ie(p)??0,o.commits=p)}}catch(l){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${l instanceof Error?l.message:String(l)}`]}return W(o,s)}async function ti(e,t,n,r){let{prData:o,sanitizationWarnings:i}=tu(e);i.size>0&&(o._sanitization_warnings=Array.from(i));let s=0,a=t.owner,c=t.repo;if(o.additions="additions"in e?e.additions??0:0,o.deletions="deletions"in e?e.deletions??0:0,jr(t)||(o.file_changes={total_count:"changed_files"in e?e.changed_files??0:0,files:[]}),jr(t))try{let p=await ou(a,c,e.number,r);p&&(s+=ie(p)??0,p.files=ei(p.files,t),o.file_changes=p)}catch(p){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${p instanceof Error?p.message:String(p)}`]}let l=Ws(t),u=Vs(t);if(l||u){let p=ru(t),d=()=>Promise.resolve({comments:W([],0)}),[{comments:m,note:f},{comments:h,note:y}]=await Promise.all([l?au(n,a,c,e.number,p):d(),u?lu(n,a,c,e.number,p):d()]);o.comments=[...m,...h],s+=(ie(m)??0)+(ie(h)??0);let g=[f,y].filter(S=>typeof S=="string");g.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...g])}if(Xs(t))try{let p=await cu(n,a,c,e.number);s+=ie(p)??0,o.reviews=p}catch(p){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${p instanceof Error?p.message:String(p)}`]}if(Ks(t))try{let p=await iu(a,c,e.number,t,r);p&&(s+=ie(p)??0,o.commits=p)}catch(p){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${p instanceof Error?p.message:String(p)}`]}return W(o,s)}function ST(e,t,n){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}async function Pz(e,t,n){let r=await ke(t),o=xe("gh-api-prs",{owner:e.owner,repo:e.repo,prNumber:e.prNumber,content:e.content,auth:r},n);return await De(o,async()=>await pu(e,t),{shouldCache:s=>!s.error})}async function pu(e,t){let{owner:n,repo:r,prNumber:o}=e;if(!n||!r||!o)return{pullRequests:[],totalCount:0,error:Ke.PR_REQUIRED_PARAMS.message,hints:["Provide owner, repo, and prNumber"]};if(Array.isArray(n)||Array.isArray(r))return{pullRequests:[],totalCount:0,error:Ke.PR_SINGLE_VALUES.message,hints:["Do not use array for owner or repo when fetching by number"]};try{let i=await $(t),s=await i.rest.pulls.get({owner:n,repo:r,pull_number:o}),a=s.data,c=await ti(a,e,i,t);return{pullRequests:[zr(c,{includeFullBody:!0,includeFullCommentDetails:!0})],totalCount:1,rawResponseChars:B(s.data)+(ie(c)??0)}}catch(i){let s=J(i);return ST(s,Ke.PULL_REQUEST_FETCH_FAILED.message(o,s.error),[`Verify that pull request #${o} exists in ${n}/${r}`,"Check if you have access to this repository","Ensure the PR number is correct"])}}function du(e,t,n){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}function mu(e){let t=Math.min(e.limit||30,100);return{pullRequests:[],totalCount:0,pagination:{currentPage:e.page||1,totalPages:0,perPage:t,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}}}async function Yh(e,t){try{let n=t.owner,r=t.repo,o=Math.min(t.limit||30,100),i=t.page||1,s=await e.rest.pulls.list({owner:n,repo:r,state:(t.state==="merged"?"closed":t.state)||"open",per_page:o,page:i,sort:t.sort==="updated"?"updated":"created",direction:t.order||"desc",...t.head&&{head:t.head},...t.base&&{base:t.base}}),a=await Promise.all(s.data.map(async d=>await ti(d,t,e))),c=a.reduce((d,m)=>d+(ie(m)??0),0),l=a.map(d=>zr(d,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:t.charOffset,charLength:t.charLength})),u=s.data.length===o,p=(i-1)*o+l.length;return{pullRequests:l,totalCount:l.length,pagination:{currentPage:i,totalPages:u?i+1:i,perPage:o,totalMatches:p+(u?1:0),reachableTotalMatches:p,totalMatchesKind:u?"lowerBound":"exact",hasMore:u,...u?{nextPage:i+1}:{}},rawResponseChars:B(s.data)+c}}catch(n){if(Qt(n))return mu(t);let r=J(n);return du(r,Ke.PULL_REQUEST_LIST_FAILED.message(r.error),["Verify repository access and authentication"])}}async function RT(e,t){if(!t.owner||!t.repo||Array.isArray(t.owner)||Array.isArray(t.repo))return t;try{let n=await e.rest.repos.get({owner:t.owner,repo:t.repo}),[r,o]=n.data.full_name?.split("/")??[];return!r||!o||r===t.owner&&o===t.repo?t:{...t,owner:r,repo:o}}catch{return t}}function CT(e,t,n="anon"){return xe("gh-api-prs",{query:e.query,owner:e.owner,repo:e.repo,prNumber:e.prNumber,state:e.state,draft:e.draft,merged:e.merged,author:e.author,assignee:e.assignee,mentions:e.mentions,commenter:e.commenter,"reviewed-by":e["reviewed-by"],"review-requested":e["review-requested"],head:e.head,base:e.base,created:e.created,updated:e.updated,"merged-at":e["merged-at"],closed:e.closed,comments:e.comments,reactions:e.reactions,label:e.label,milestone:e.milestone,language:e.language,checks:e.checks,review:e.review,locked:e.locked,visibility:e.visibility,project:e.project,archived:e.archived,match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,auth:n},t)}async function Zh(e,t,n){let r=await ke(t),o=CT(e,n,r);return await De(o,async()=>await xT(e,t,n),{shouldCache:s=>!s.error})}async function xT(e,t,n){try{if(e.prNumber&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await pu(e,t);let r=await $(t);if(!gl(e)&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await Yh(r,e);let i=await RT(r,e),s=hl(i);if(!s)return{pullRequests:[],totalCount:0,error:Ke.NO_VALID_PARAMETERS.message,hints:["Provide search query or filters like owner/repo"]};let a=i.sort&&i.sort!=="best-match"?i.sort:void 0,c=Math.min(i.limit||30,100),l=i.page||1,u=s,p=await r.rest.search.issuesAndPullRequests({q:s,sort:a,order:e.order||"desc",per_page:c,page:l}),d=p.data.items?.filter(T=>!!T.pull_request)||[],m=await Promise.all(d.map(async T=>await uu(T,i,r))),f=m.reduce((T,E)=>T+(ie(E)??0),0),h=m.map(T=>zr(T,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:i.charOffset,charLength:i.charLength})),y=p.data.total_count,g=Math.min(y,1e3),S=Math.ceil(g/c),R=Math.min(l,Math.max(1,S)),C=R<S,P=Math.min(g,S*c);return{pullRequests:h,totalCount:p.data.total_count,effectiveQuery:u,...p.data.incomplete_results&&{incompleteResults:!0},pagination:{currentPage:R,totalPages:S,perPage:c,totalMatches:g,reportedTotalMatches:y,reachableTotalMatches:P,totalMatchesKind:"reported",totalMatchesCapped:y>g,hasMore:C,...C?{nextPage:R+1}:{}},rawResponseChars:B(p.data)+f}}catch(r){if(Qt(r))return mu(e);let o=J(r);return du(o,Ke.PULL_REQUEST_SEARCH_FAILED.message(o.error),["Verify authentication and search parameters"])}}var wT=/^(\d+)\s*([hdwmy])$/i;function fu(e){let t=e.trim(),n=wT.exec(t);if(n){let r=Number(n[1]),o=n[2].toLowerCase(),i=new Date;switch(o){case"h":i.setUTCHours(i.getUTCHours()-r);break;case"d":i.setUTCDate(i.getUTCDate()-r);break;case"w":i.setUTCDate(i.getUTCDate()-r*7);break;case"m":i.setUTCMonth(i.getUTCMonth()-r);break;case"y":i.setUTCFullYear(i.getUTCFullYear()-r);break}return{value:i.toISOString()}}return Number.isNaN(Date.parse(t))?{warning:`"${e}" is not a valid date or relative window \u2014 use e.g. "30d", "2w", "6m", "1y", or an ISO date like "2026-01-01". Filter skipped.`}:{value:t}}function hu(e,t,n){if(!e)return;if(!n&&!t)return{patch:e};let r=e.length,o=Math.min(Math.max(0,t??0),r),i=Math.max(1,n??r),s=Math.min(o+i,r),a=s<r;return{patch:e.slice(o,s),patchPagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function sr(e,t){let n=e.map(u=>{let p=u.patch!==void 0?hu(u.patch,t.charOffset,t.charLength):void 0;return{filename:u.filename,status:u.status,additions:u.additions,deletions:u.deletions,...p!==void 0?{patch:p.patch,...p.patchPagination?{patchPagination:p.patchPagination}:{}}:{},...u.previous_filename?{previousFilename:u.previous_filename}:{}}}),r=Math.max(1,t.filePage??1),o=Math.max(1,t.itemsPerPage??20),i=n.length,s=Math.max(1,Math.ceil(i/o)),a=Math.min(r,s),c=(a-1)*o;return{files:n.slice(c,c+o),filesPagination:{currentPage:a,totalPages:s,itemsPerPage:o,totalFiles:i,hasMore:a<s,...a<s&&a<1e3?{nextFilePage:a+1}:{},...a<s&&a>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}}var PT=5;function qs(e){return e?e.includes('rel="next"'):!1}async function TT(e,t,n){if(e.length===0)return[];let r=new Array(e.length),o=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let s=o++;if(s>=e.length)return;r[s]=await n(e[s],s)}});return await Promise.all(i),r}async function qh(e,t,n){let r=await ke(t),o=xe("gh-api-history",{type:e.type,owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,since:e.since,until:e.until,author:e.author,committer:e.committer,page:e.page,perPage:e.perPage,filePage:e.filePage,itemsPerPage:e.itemsPerPage,includeDiff:e.includeDiff,charOffset:e.charOffset,charLength:e.charLength,auth:r},n);return De(o,()=>ET(e,t),{shouldCache:i=>"data"in i&&!("error"in i)})}async function ET(e,t){try{let n=await $(t),r=[],o=e.since?fu(e.since):void 0,i=e.until?fu(e.until):void 0;o?.warning&&r.push(`since ${o.warning}`),i?.warning&&r.push(`until ${i.warning}`);let s={owner:e.owner,repo:e.repo,per_page:e.perPage,page:e.page,...e.path?{path:e.path}:{},...e.branch?{sha:e.branch}:{},...o?.value?{since:o.value}:{},...i?.value?{until:i.value}:{},...e.author?{author:e.author}:{},...e.committer?{committer:e.committer}:{}},a=await n.rest.repos.listCommits(s),c=a.headers.link,l=qs(c),u=a.data.map(g=>{let S=g.commit.author,R=g.commit.committer,C=R?.date??S?.date??"",P=g.commit.message,T=P.split(`
|
|
35
|
-
`)[0]??
|
|
36
|
-
${k?`${E.slice(0,500)}\u2026`:E}`,b=R?.name===S?.name&&R?.email===S?.email||g.committer?.login==="web-flow";return{sha:g.sha,date:C,...x===T?{}:{message:x},...k?{messageTruncated:!0}:{},messageHeadline:T,author:{name:S?.name??"unknown",email:S?.email??"",...g.author?.login?{login:g.author.login}:{}},...R&&!b?{committer:{name:R.name??"unknown",email:R.email??"",...g.committer?.login?{login:g.committer.login}:{}}}:{}}});u.length===0&&(o?.value!==void 0||i?.value!==void 0)&&r.push("no commits matched the since/until window \u2014 GitHub filters by committer date (not author date; rebases and squash-merges reset it), and a path-scoped walk does not follow renames. Widen or drop since/until and inspect commit dates directly.");let p={currentPage:e.page,perPage:e.perPage,hasMore:l,...l?{nextPage:e.page+1}:{}};if(!e.includeDiff)return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:u,pagination:p,...r.length?{warnings:r}:{}},status:200};let d=!1,m=!1,f=await TT(u,PT,async(g,S)=>{try{let R=a.data[S]?.sha??g.sha,C=await n.rest.repos.getCommit({owner:e.owner,repo:e.repo,ref:R});if(e.type==="file"&&e.path){let P=e.path,T=C.data.files?.find(x=>x.filename===P||x.previous_filename===P);if(T){let x=T.patch!==void 0?hu(T.patch,e.charOffset,e.charLength):void 0;return{...g,additions:T.additions,deletions:T.deletions,status:T.status,...x!==void 0?{patch:x.patch,...x.patchPagination?{patchPagination:x.patchPagination}:{}}:{},...T.previous_filename?{previousFilename:T.previous_filename}:{}}}let E=P.endsWith("/")?P:`${P}/`,k=(C.data.files??[]).filter(x=>x.filename.startsWith(E));return k.length>0?(d=!0,{...g,...sr(k,e)}):(m=!0,g)}else{let P=e.path,T=(C.data.files??[]).filter(E=>!P||E.filename.startsWith(P));return{...g,...sr(T,e)}}}catch{}return g}),h=[];d&&h.push(`path '${e.path}' matched no single file in these commits but matches files under it \u2014 treated as a directory filter and returned per-commit changed files (append '/' to select directory mode explicitly).`),m&&h.push(`includeDiff: some commits contain no file matching '${e.path}' (rename or shallow diff?) \u2014 those commits are listed without a diff.`);let y=[...r,...h];return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:f,pagination:p,...y.length?{warnings:y}:{}},status:200}}catch(n){return J(n)}}var Jh=30;function eg(e){let t={},n=e.license;n?.spdx_id&&n.spdx_id!=="NOASSERTION"&&(t.license=n.spdx_id);let r=e.homepage;return r&&(t.homepage=r),t}async function tg(e,t,n){let r=await ke(t),o=e,i=xe("gh-api-repos",{keywords:e.keywords,topicsToSearch:e.topicsToSearch,owner:e.owner,repo:o.repo,stars:e.stars,size:o.size,created:o.created,updated:e.updated,language:o.language,match:e.match,sort:e.sort,limit:e.limit,page:e.page,archived:o.archived,visibility:o.visibility,forks:o.forks,license:o.license,goodFirstIssues:o.goodFirstIssues,auth:r},n);return await De(i,async()=>await LT(e,t),{shouldCache:a=>"data"in a&&!a.error})}async function AT(e,t){let n=Math.min(e.limit||100,100),r=e.page||1,o=e.sort==="updated"?"updated":"full_name",i,s;try{i=(await t.rest.repos.listForOrg({org:e.owner,per_page:n,page:r,sort:o})).data,s=void 0}catch(m){if(m?.status!==404)return J(m);try{i=(await t.rest.repos.listForUser({username:e.owner,per_page:n,page:r,sort:o})).data,s=void 0}catch(h){return J(h)}}let a=i.map(m=>{let h=m.full_name.split("/"),y=h[0]||"",g=h[1]||"";return{owner:y,repo:g,defaultBranch:m.default_branch,stars:m.stargazers_count||0,description:m.description?m.description:"No description",url:m.html_url,createdAt:m.created_at,updatedAt:m.updated_at,pushedAt:m.pushed_at,visibility:m.visibility,...m.topics&&m.topics.length>0&&{topics:m.topics},...m.forks_count&&m.forks_count>0&&{forksCount:m.forks_count},...m.open_issues_count&&m.open_issues_count>0&&{openIssuesCount:m.open_issues_count},...m.language&&{language:m.language},...eg(m)}}),c=a.length,l=c===n,u=(r-1)*n+c,p=s??u+(l?1:0),d=s!==void 0||!l?"exact":"lowerBound";return{data:{repositories:a,pagination:{currentPage:r,totalPages:l?r+1:r,perPage:n,totalMatches:p,reachableTotalMatches:u,totalMatchesKind:d,hasMore:l,...l?{nextPage:r+1}:{}}},status:200,rawResponseChars:B(i)}}async function LT(e,t){try{let n=await $(t),r=(e.keywords?.length??0)>0||(e.topicsToSearch?.length??0)>0,o=e,i=!!(e.stars||e.updated||e.language||e.match||o.forks||o.goodFirstIssues||o.created||o.size||o.license||o.visibility||o.archived!==void 0||e.sort&&!["best-match","updated"].includes(e.sort)),s=typeof e.owner=="string"?e.owner:Array.isArray(e.owner)?e.owner[0]:void 0;if(!r&&!i&&s)return await AT({owner:s,sort:e.sort,limit:e.limit,page:e.page},n);let a=ml(e);if(!a.trim())return{error:Ke.QUERY_EMPTY.message,type:"http",status:400};let c=Math.min(e.limit||Jh,100),l=e.page||1,u={q:a,per_page:c,page:l},p=["stars","forks","help-wanted-issues","updated"];e.sort&&p.includes(e.sort)&&(u.sort=e.sort);let d=await n.rest.search.repos(u),m=d.data.items.map(C=>{let T=C.full_name.split("/"),E=T[0]||"",k=T[1]||"";return{owner:E,repo:k,defaultBranch:C.default_branch,stars:C.stargazers_count||0,description:C.description?C.description:"No description",url:C.html_url,createdAt:C.created_at,updatedAt:C.updated_at,pushedAt:C.pushed_at,visibility:C.visibility,...C.topics&&C.topics.length>0&&{topics:C.topics},...C.forks_count&&C.forks_count>0&&{forksCount:C.forks_count},...C.open_issues_count&&C.open_issues_count>0&&{openIssuesCount:C.open_issues_count},...C.language&&{language:C.language},...eg(C)}}),f=d.data.total_count,h=Math.min(f,1e3),y=Math.ceil(h/c),g=Math.min(l,Math.max(1,y)),S=g<y,R=Math.min(h,y*c);return{data:{repositories:m,pagination:{currentPage:g,totalPages:y,perPage:c,totalMatches:h,reportedTotalMatches:f,reachableTotalMatches:R,totalMatchesKind:"reported",totalMatchesCapped:f>h,hasMore:S,...S?{nextPage:g+1}:{}}},status:200,headers:Ir(d.headers),rawResponseChars:B(d.data)}}catch(n){if(Qt(n)){let r=Math.min(e.limit||Jh,100);return{data:{repositories:[],nonExistentScope:!0,pagination:{currentPage:e.page||1,totalPages:0,perPage:r,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return J(n)}}var vn={ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200};function _T(e,t){return t?e>5e4?[`Response ~${e.toLocaleString()} tokens \u2014 exceeds typical context. Reduce charLength or refine the query.`]:e>3e4?[`Response ~${e.toLocaleString()} tokens \u2014 approaching context limit. Consider reducing charLength.`]:[]:[]}function kT(e){if(e.hasMore&&e.nextCharOffset!==void 0){let t=e.charOffset+1,n=e.charOffset+e.charLength;return[`Page ${e.currentPage}/${e.totalPages} (chars ${t}-${n} of ${e.totalChars}). Next: charOffset=${e.nextCharOffset}`]}return[]}function pj(e,t={}){let{enableWarnings:n=!0,customHints:r=[]}=t,o=[];return o.push(...r),e.estimatedTokens&&o.push(..._T(e.estimatedTokens,n)),o.push(...kT(e)),o}function Js(e,t){return e.hasMore?[`Page ${e.currentPage}/${e.totalPages}. Next: page=${e.currentPage+1}`]:[]}function ng(e,t){let n=e._cachedItems;if(!n||n.length===0){let{_cachedItems:x,...b}=e;return b}let r=t.itemsPerPage??vn.ENTRIES_PER_PAGE,o=t.page??1,i=n.length,s=Math.max(1,Math.ceil(i/r)),a=(o-1)*r,c=Math.min(a+r,i),l=n.slice(a,c),u=Object.create(null),p=e.path==="/"?"":e.path,d=x=>{let b=x;p&&x.startsWith(p)&&(b=x.slice(p.length),b.startsWith("/")&&(b=b.slice(1)));let w=b.lastIndexOf("/");return w===-1?".":b.slice(0,w)},m=x=>{let b=x.lastIndexOf("/");return b===-1?x:x.slice(b+1)};for(let x of l){let b=d(x.path);u[b]||(u[b]={files:[],folders:[]});let w=m(x.path);x.type==="file"?u[b].files.push(w):u[b].folders.push(w)}for(let x of Object.keys(u)){let b=u[x];b&&(b.files.sort(),b.folders.sort())}let f=Object.create(null),h=Object.keys(u).sort((x,b)=>x==="."?-1:b==="."?1:x.localeCompare(b));for(let x of h){let b=u[x];b&&(f[x]=b)}let y=l.filter(x=>x.type==="file").length,g=l.filter(x=>x.type==="dir").length,S=n.filter(x=>x.type==="file").length,R=n.filter(x=>x.type==="dir").length,C=o<s,P={currentPage:o,totalPages:s,hasMore:C,...C?{nextPage:o+1}:{},entriesPerPage:r,totalEntries:i},T=Js(P,{owner:e.owner,repo:e.repo,branch:e.branch,path:p,depth:t.maxDepth??1,pageFiles:y,pageFolders:g,allFiles:S,allFolders:R}),E,k=e._cachedFileSizeMap;if(k){let x=new Set(l.filter(L=>L.type==="file").map(L=>L.path)),b=e.path==="/"?"":e.path,w=Object.create(null);for(let[L,O]of Object.entries(k))for(let[v,A]of Object.entries(O)){let q=L==="."?b?`${b}/${v}`:v:b?`${b}/${L}/${v}`:`${L}/${v}`;x.has(q)&&(w[L]||(w[L]=Object.create(null)),w[L][v]=A)}Object.keys(w).length>0&&(E=w)}return{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,apiSource:e.apiSource,summary:{totalFiles:S,totalFolders:R,truncated:C,filtered:!0,originalCount:i},structure:f,...E!==void 0&&{fileSizeMap:E},...k!==void 0&&{_cachedFileSizeMap:k},pagination:P,hints:T,rawResponseChars:e.rawResponseChars}}import{RequestError as IT}from"octokit";var og=Symbol.for("octocode.recursiveFetchFailures"),OT=new Set([401,403,429]);function rg(e){return e instanceof IT&&OT.has(e.status)}function gu(e,t){try{Object.defineProperty(e,og,{value:t,enumerable:!1,configurable:!0})}catch{}return e}function ni(e){if(typeof e!="object"||e===null)return 0;let t=e[og];return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}async function ri(e,t,n,r,o,i,s,a=new Set){if(i>s||a.has(o))return gu(W([],0),0);a.add(o);let c;try{c=await e.rest.repos.getContent({owner:t,repo:n,path:o||"",ref:r})}catch(f){if(rg(f))throw f;return gu(W([],0),1)}let l=B(c.data),p=(Array.isArray(c.data)?c.data:[c.data]).filter(f=>f.type==="file"||f.type==="dir").map(f=>({name:f.name,path:f.path,type:f.type,size:"size"in f?f.size:void 0,download_url:"download_url"in f?f.download_url:void 0,url:f.url,html_url:f.html_url,git_url:f.git_url,sha:f.sha})),d=[...p],m=0;if(i<s){let f=p.filter(y=>y.type==="dir"),h=3;for(let y=0;y<f.length;y+=h){let g=f.slice(y,y+h),S=await Promise.allSettled(g.map(R=>ri(e,t,n,r,R.path,i+1,s,a)));for(let R of S)if(R.status==="fulfilled"){let C=R.value;l+=ie(C)??0,m+=ni(C),d.push(...C)}else{if(rg(R.reason))throw R.reason;m+=1}}}return gu(W(d,l),m)}import{RequestError as vT}from"octokit";function FT(e,t){let n=(t.pathPrefix??"").replace(/^\/+|\/+$/g,""),r=n?`${n}/`:"",o=Math.max(1,t.maxDepth),i=[];for(let s of e){if(!s.path||s.type!=="blob"&&s.type!=="tree")continue;let a=s.path;if(n){if(s.path===n||!s.path.startsWith(r))continue;a=s.path.slice(r.length)}let c=a.split("/").filter(Boolean).length;if(c===0||c>o)continue;let l=a.lastIndexOf("/"),u=l===-1?a:a.slice(l+1);i.push({name:u,path:s.path,type:s.type==="tree"?"dir":"file",size:s.type==="blob"?s.size:void 0,sha:s.sha,url:s.url,html_url:void 0,git_url:void 0,download_url:void 0})}return i}function ig(e=process.env){return e.OCTOCODE_GH_STRUCTURE_TREES!=="0"}async function sg(e,t){let{data:n}=await e.rest.repos.getBranch({owner:t.owner,repo:t.repo,branch:t.workingBranch}),r=n.commit.commit.tree.sha;if(!r)throw new Error(`Could not resolve tree SHA for ${t.owner}/${t.repo}@${t.workingBranch}`);let o;try{o=await e.rest.git.getTree({owner:t.owner,repo:t.repo,tree_sha:r,recursive:"true",...t.ifNoneMatch?{headers:{"If-None-Match":t.ifNoneMatch}}:{}})}catch(c){if(c instanceof vT&&c.status===304)return{items:[],truncated:!1,rawResponseChars:0,etag:t.ifNoneMatch,notModified:!0};throw c}let i=o.data,s=Or(o.headers);return{items:FT(i.tree,{pathPrefix:t.pathPrefix,maxDepth:t.maxDepth}),truncated:!!i.truncated,rawResponseChars:B(n)+B(i),...s?{etag:s}:{}}}import{RequestError as ag}from"octokit";async function yu(e,t,n,r,o,i,s){let a,c;try{o?a=o:(c=await Be(t,n,i),a=c)}catch(l){let u=J(l);return{error:hn.NOT_FOUND.message(t,n,u.error),status:u.status}}try{let l=await e.rest.repos.getContent({owner:t,repo:n,path:r||"",ref:a,...s?{headers:{"If-None-Match":s}}:{}}),u=Or(l.headers);return{data:l.data,workingBranch:a,...c!==void 0?{repoDefaultBranch:c}:{},...u?{etag:u}:{}}}catch(l){if(l instanceof ag&&l.status===304)return{data:null,workingBranch:a,...c!==void 0?{repoDefaultBranch:c}:{},etag:s,notModified:!0};if(!(l instanceof ag&&l.status===404)){let p=J(l);return{error:hn.ACCESS_FAILED.message(t,n,p.error),status:p.status,rateLimitRemaining:p.rateLimitRemaining,rateLimitReset:p.rateLimitReset,retryAfter:p.retryAfter}}let u=J(l);return{error:hn.PATH_NOT_FOUND.message(r,t,n,a),status:u.status}}}function cg(e){return e.map(t=>{let n=t;return{name:n.name,path:n.path,type:n.type,size:"size"in n?n.size:void 0,download_url:"download_url"in n?n.download_url:void 0,url:n.url,html_url:n.html_url,git_url:n.git_url,sha:n.sha}})}function MT(e,t){let n=Object.create(null),r=a=>{let c=a;t&&a.startsWith(t)&&(c=a.slice(t.length),c.startsWith("/")&&(c=c.slice(1)));let l=c.lastIndexOf("/");return l===-1?".":c.slice(0,l)},o=a=>{let c=a.lastIndexOf("/");return c===-1?a:a.slice(c+1)};for(let a of e){let c=r(a.path);n[c]||(n[c]={files:[],folders:[]});let l=o(a.path);a.type==="file"?n[c].files.push(l):n[c].folders.push(l)}for(let a of Object.values(n))a&&(a.files.sort(),a.folders.sort());let i=Object.keys(n).sort((a,c)=>a==="."?-1:c==="."?1:a.localeCompare(c)),s=Object.create(null);for(let a of i){let c=n[a];c&&(s[a]=c)}return s}function lg(e,t){let n=Object.create(null);for(let r of e){if(r.type!=="file"||r.size===void 0)continue;let o=r.path;t&&r.path.startsWith(t)&&(o=r.path.slice(t.length).replace(/^\//,""));let i=o.lastIndexOf("/"),s=i===-1?".":o.slice(0,i),a=i===-1?o:o.slice(i+1);n[s]||(n[s]=Object.create(null)),n[s][a]=r.size}return n}function ea(e){let{owner:t,repo:n,workingBranch:r,repoDefaultBranch:o,cleanPath:i,depth:s,partialTreeFailures:a,incompleteTree:c,rawResponseChars:l,includeSizes:u,extraHints:p=[]}=e,d=e.allItems.filter(A=>A.type==="dir"?!Bo(A.name):!kr(A.path));d.sort((A,q)=>{if(A.type!==q.type)return A.type==="dir"?-1:1;let ne=A.path.split("/").length,Me=q.path.split("/").length;return ne!==Me?ne-Me:A.path.localeCompare(q.path)});let m=e.itemsPerPage??vn.ENTRIES_PER_PAGE,f=e.page??1,h=d.length,y=Math.max(1,Math.ceil(h/m)),g=(f-1)*m,S=Math.min(g+m,h),R=d.slice(g,S),C=MT(R,i),P=u?lg(d,i):void 0,T=P!==void 0?lg(R,i):void 0,E=R.filter(A=>A.type==="file").length,k=R.filter(A=>A.type==="dir").length,x=d.filter(A=>A.type==="file").length,b=d.filter(A=>A.type==="dir").length,w=f<y,L={currentPage:f,totalPages:y,hasMore:w,...w?{nextPage:f+1}:{},entriesPerPage:m,totalEntries:h},O=Js(L,{owner:t,repo:n,branch:r,path:i,depth:s,pageFiles:E,pageFolders:k,allFiles:x,allFolders:b});a>0&&O.unshift(`Partial tree: ${a} subdirectory subtree(s) failed to load and are missing from this structure. The listing is incomplete \u2014 retry or narrow the path/depth.`);for(let A of p)O.unshift(A);let v=[...c?["providerTreeTruncated"]:[],...a>0?["partialTreeFailures"]:[]];return{owner:t,repo:n,branch:r,...o!==void 0&&{defaultBranch:o},path:i||"/",apiSource:!0,summary:{totalFiles:x,totalFolders:b,truncated:w,filtered:!0,originalCount:d.length,...c?{incompleteTree:!0}:{}},structure:C,...T!==void 0&&{fileSizeMap:T},...P!==void 0&&{_cachedFileSizeMap:P},pagination:L,...v.length>0?{isPartial:!0,partialReasons:v}:{},...c?{terminalLimit:!0}:{},hints:O,rawResponseChars:l,_cachedItems:d.map(A=>({path:A.path,type:A.type}))}}async function bu(e,t,n){let r=await ke(t),o=xe("gh-repo-structure-api",{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,depth:e.maxDepth,auth:r},n),i=await Rs(o,async({ifNoneMatch:s})=>{let a=await NT({...e,itemsPerPage:e.itemsPerPage??vn.ENTRIES_PER_PAGE,page:e.page??1},t,s);return{value:a.result,etag:a.etag,notModified:a.notModified}},{shouldCache:s=>!("error"in s)});return!("error"in i)&&i.structure?ng(i,e):i}async function NT(e,t,n){try{let r=await $(t),{owner:o,repo:i,branch:s,path:a="",maxDepth:c=1}=e,l=a.replace(/^\/+|\/+$/g,"");if(c>1&&ig())return await DT(r,e,l,c,t,n);let u=await yu(r,o,i,l,s,t,c===1?n:void 0);if("error"in u)return{result:u};if(u.notModified)return{result:{error:"not-modified",status:304},etag:u.etag??n,notModified:!0};let{data:p,workingBranch:d,repoDefaultBranch:m,etag:f}=u,h=B(p),y=Array.isArray(p)?p:[p],g=cg(y),S=0;if(c>1){let R=await ri(r,o,i,d,l,1,c);S=ni(R),h=ie(R)??0,g=R}return{result:ea({owner:o,repo:i,workingBranch:d,repoDefaultBranch:m,cleanPath:l,depth:c,allItems:g,partialTreeFailures:S,incompleteTree:!1,rawResponseChars:h,includeSizes:e.includeSizes===!0,itemsPerPage:e.itemsPerPage,page:e.page}),...c===1&&f?{etag:f}:{}}}catch(r){let o=J(r);return{result:{error:hn.STRUCTURE_EXPLORATION_FAILED.message,status:o.status,rateLimitRemaining:o.rateLimitRemaining,rateLimitReset:o.rateLimitReset,retryAfter:o.retryAfter}}}}async function DT(e,t,n,r,o,i){let{owner:s,repo:a,branch:c}=t,l,u;try{c?l=c:(u=await Be(s,a,o),l=u)}catch(g){let S=J(g);return{result:{error:hn.NOT_FOUND.message(s,a,S.error),status:S.status}}}let p;try{p=await sg(e,{owner:s,repo:a,workingBranch:l,pathPrefix:n,maxDepth:r,ifNoneMatch:i})}catch(g){let S=await yu(e,s,a,n,l,o);if("error"in S)return{result:S};let R=await ri(e,s,a,S.workingBranch,n,1,r);return{result:ea({owner:s,repo:a,workingBranch:S.workingBranch,repoDefaultBranch:u,cleanPath:n,depth:r,allItems:R,partialTreeFailures:ni(R),incompleteTree:!1,rawResponseChars:ie(R)??0,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:[`Git Trees fetch failed (${g instanceof Error?g.message:String(g)}); used Contents recursion instead.`]})}}if(p.notModified)return{result:{error:"not-modified",status:304},etag:p.etag??i,notModified:!0};let d=p.items,m=0,f=p.rawResponseChars,h=p.truncated,y=[];if(h){y.push("Git Trees response was truncated by GitHub \u2014 this structure listing may be incomplete. Narrow path/depth or set OCTOCODE_GH_STRUCTURE_TREES=0 for Contents recursion.");try{let g=await ri(e,s,a,l,n,1,r);m=ni(g),f+=ie(g)??0,d=[...d,...g].filter((R,C,P)=>P.findIndex(T=>T.path===R.path)===C)}catch{}}return{result:ea({owner:s,repo:a,workingBranch:l,repoDefaultBranch:u,cleanPath:n,depth:r,allItems:d,partialTreeFailures:m,incompleteTree:h,rawResponseChars:f,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:y}),...p.etag&&!h?{etag:p.etag}:{}}}var ug={github:{cloneRepo:!0,fetchDirectoryToDisk:!0,requiresScopedCodeSearch:!1,supportsMergedState:!1,supportsMultiTopicSearch:!0}};function Rt(e){return!!(e&&typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&"type"in e)}function HT(e){return!!(e&&typeof e=="object"&&e!==null&&"data"in e&&"status"in e&&typeof e.status=="number")}function GT(e){return!!(e&&typeof e=="object"&&e!==null&&"id"in e&&typeof e.id=="number"&&"name"in e&&typeof e.name=="string"&&"full_name"in e&&typeof e.full_name=="string"&&"private"in e&&typeof e.private=="boolean")}function Fe(e){if(!e)return{owner:void 0,repo:void 0};let t=e.split("/");if(t.length!==2||!t[0]||!t[1])throw new Error(`Invalid GitHub projectId format: '${e}'. Expected 'owner/repo'.`);return{owner:t[0],repo:t[1]}}function BT(e){if(e.rateLimitRemaining===void 0&&e.retryAfter===void 0&&e.rateLimitReset===void 0)return;let t=e.rateLimitReset,n=t&&!isNaN(t)?Math.floor(t/1e3):Math.floor(Date.now()/1e3)+(e.retryAfter??3600);return{remaining:e.rateLimitRemaining??0,reset:n,retryAfter:e.retryAfter}}function on(e){return{error:e.error,status:e.status||500,provider:"github",hints:e.hints,rateLimit:BT(e)}}function ta(e){return zT(e)?on({error:typeof e.error=="string"?e.error:String(e.error),status:e.status||500,hints:e.hints,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}):null}function zT(e){if(typeof e!="object"||e===null||!("error"in e))return!1;let n=e.error;return typeof n=="string"||jT(n)}function jT(e){return typeof e=="object"&&e!==null&&typeof e.toString=="function"}function oi(e){let t=typeof e?.totalMatchesCapped=="boolean"?e.totalMatchesCapped:typeof e?.reportedTotalMatches=="number"&&typeof e?.reachableTotalMatches=="number"?e.reportedTotalMatches>e.reachableTotalMatches:void 0;return{...e?.totalMatchesKind==="lowerBound"?{totalMatchesKind:"lowerBound"}:{},...typeof t=="boolean"?{totalMatchesCapped:t}:{},...typeof e?.uniqueFileCount=="number"?{uniqueFileCount:e.uniqueFileCount}:{}}}function QT(e){return{items:e.items.map(n=>({path:n.path,matches:n.matches.map(r=>({context:r.context,positions:r.positions})),url:n.url||"",repository:{id:n.repository.nameWithOwner,name:n.repository.nameWithOwner,url:n.repository.url},lastModifiedAt:n.lastModifiedAt})),totalCount:e.total_count,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...oi(e.pagination)},repositoryContext:e._researchContext?.repositoryContext,nonExistentScope:e.nonExistentScope,incompleteResults:e.incompleteResults}}function UT(e){let t=e.repositories.map(n=>({id:`${n.owner}/${n.repo}`,name:n.repo,fullPath:`${n.owner}/${n.repo}`,description:n.description||null,url:n.url,cloneUrl:`https://github.com/${n.owner}/${n.repo}.git`,defaultBranch:n.defaultBranch||"main",stars:n.stars||0,forks:n.forksCount||0,visibility:n.visibility||"public",topics:n.topics||[],createdAt:n.createdAt,updatedAt:n.updatedAt,lastActivityAt:n.pushedAt||n.updatedAt,openIssuesCount:n.openIssuesCount,language:n.language}));return{repositories:t,totalCount:e.pagination?.totalMatches||t.length,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...oi(e.pagination)},nonExistentScope:e.nonExistentScope}}async function pg(e,t,n=Fe){let{owner:r,repo:o}=n(e.projectId),i=r||e.owner,s={keywords:e.keywords,owner:i,repo:o,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning},a=await ph(s,t);return Rt(a)?on(a):a.data?{data:QT(a.data),status:200,provider:"github",rawResponseChars:a.rawResponseChars??B(a.data)}:{error:"No data returned from GitHub API",status:500,provider:"github"}}async function dg(e,t){let n={keywords:e.keywords,topicsToSearch:e.topics,owner:e.owner,stars:e.stars??(e.minStars?`>=${e.minStars}`:void 0),size:e.size,created:e.created,updated:e.updated,language:e.language,match:e.match,archived:e.archived,visibility:e.visibility,forks:e.forks,license:e.license,goodFirstIssues:e.goodFirstIssues,sort:e.sort==="best-match"?void 0:e.sort,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning},r=await tg(n,t);return"error"in r?ta(r)??{error:"Unknown GitHub API error",status:500,provider:"github"}:!("data"in r)||!r.data?{error:"No data returned from GitHub API",status:500,provider:"github"}:{data:UT(r.data),status:200,provider:"github",rawResponseChars:r.rawResponseChars??B(r.data)}}function WT(e,t){return{path:e.path||t.path,content:e.content||"",encoding:"utf-8",size:e.content?.length||0,totalLines:e.totalLines,sourceChars:e.sourceChars,contentView:e.contentView,ref:e.branch||t.ref||"",lastModified:e.lastModified,lastModifiedBy:e.lastModifiedBy,pagination:e.pagination,isPartial:e.isPartial,startLine:e.startLine,endLine:e.endLine,matchRanges:e.matchRanges,matchedLines:e.matchedLines,warnings:VT(e,t),matchNotFound:e.matchNotFound,searchedFor:e.searchedFor}}function VT(e,t){if(e.matchNotFound===!0){let n=e;if(Array.isArray(n.hints)&&n.hints.length>0){let a=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"";return n.hints.map(c=>c.replace(" in file",` in file${a}`))}let r=e.searchedFor??t.matchString??"",o=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"",s=t.matchStringIsRegex===!0?"Try a different pattern, widen the anchor, or use fullContent=true to inspect the file.":"Try matchStringIsRegex=true for pattern matching, a different anchor, or fullContent=true.";return[`No matches for "${r}" in file${o}. ${s}`]}return e.warnings??e.matchLocations}async function mg(e,t,n=Fe){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for file content",status:400,provider:"github"};let i={owner:r,repo:o,path:e.path,type:"file",branch:e.ref,startLine:e.startLine,endLine:e.endLine,matchString:e.matchString,contextLines:e.contextLines??5,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,charOffset:e.charOffset,charLength:e.charLength,fullContent:e.fullContent,forceRefresh:e.forceRefresh,minify:e.minify??"standard",goal:e.goal,reasoning:e.reasoning},s=await Qh(i,t);if(Rt(s))return on(s);if(!s.data)return{error:"No data returned from GitHub API",status:500,provider:"github"};let a=s.data.hints;return{data:WT(s.data,e),status:200,provider:"github",rawResponseChars:s.rawResponseChars??B(s.data),...a?.length?{hints:a}:{}}}function XT(e,t,n=Fe){let r=(e.pullRequests||[]).map(a=>({number:a.number,title:a.title,body:a.body||null,...a.bodyPagination&&{bodyPagination:a.bodyPagination},state:a.merged?"merged":a.state,draft:a.draft||!1,author:a.author,assignees:a.assignees?.map(c=>typeof c=="string"?c:String(c.login??""))||[],labels:a.labels?.map(c=>typeof c=="string"?c:c.name??"")||[],sourceBranch:a.headRef||"",targetBranch:a.baseRef||"",sourceSha:a.headSha,targetSha:a.baseSha,createdAt:a.createdAt,updatedAt:a.updatedAt,closedAt:a.closedAt,mergedAt:a.mergedAt,commentsCount:a.comments,changedFilesCount:a.changedFiles,additions:a.additions,deletions:a.deletions,comments:a.commentDetails?.map(c=>({id:c.id,author:c.user,body:c.body,...c.bodyPagination&&{bodyPagination:c.bodyPagination},createdAt:c.createdAt,updatedAt:c.updatedAt,...c.commentType&&{commentType:c.commentType},...c.path&&{path:c.path},...c.line!==void 0&&{line:c.line},...c.inReplyToId!=null&&{inReplyToId:c.inReplyToId}})),reviews:a.reviews?.map(c=>({id:c.id,user:c.user,state:c.state,body:c.body,submittedAt:c.submittedAt,commitId:c.commitId})),commits:a.commitDetails?.map(c=>({sha:c.sha,message:c.message,author:c.author,date:c.date})),fileChanges:a.fileChanges?.map(c=>({path:c.filename,status:c.status,additions:c.additions,deletions:c.deletions,patch:c.patch})),...Array.isArray(a.sanitizationWarnings)&&a.sanitizationWarnings.length>0?{sanitizationWarnings:a.sanitizationWarnings}:{}})),{owner:o,repo:i}=t.projectId?n(t.projectId):{owner:void 0,repo:void 0},s=o||t.owner;return{items:r,totalCount:e.totalCount||r.length,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...oi(e.pagination)},...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},repositoryContext:s&&i?{owner:s,repo:i}:void 0}}function YT(e,t,n){return{owner:t,repo:n,query:e.query,prNumber:e.number,state:e.state==="merged"?"closed":e.state==="all"?void 0:e.state,merged:e.state==="merged"?!0:void 0,draft:e.draft,author:e.author,assignee:e.assignee,commenter:e.commenter,mentions:e.mentions,"reviewed-by":e.reviewedBy,"review-requested":e.reviewRequested,label:e.labels,base:e.baseBranch,head:e.headBranch,created:e.created,updated:e.updated,closed:e.closed,"merged-at":e.mergedAt,comments:e.comments,reactions:e.reactions,match:e.match,checks:e.checks,review:e.review,archived:e.archived,content:e.content,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,sort:e.sort,order:e.order,limit:e.limit,page:e.page,charOffset:e.charOffset,charLength:e.charLength}}async function fg(e,t,n=Fe){let{owner:r,repo:o}=e.projectId?n(e.projectId):{owner:void 0,repo:void 0},i=r||e.owner,s=YT(e,i,o),a=await Zh(s,t);return a.error?on({error:typeof a.error=="string"?a.error:String(a.error),status:a.status||500,hints:a.hints,rateLimitRemaining:a.rateLimitRemaining,rateLimitReset:a.rateLimitReset,retryAfter:a.retryAfter}):{data:XT(a,e,n),status:200,provider:"github",rawResponseChars:a.rawResponseChars??B(a)}}async function qT(e,t,n){try{let o=await(await $(n)).rest.repos.listLanguages({owner:e,repo:t}),i=Object.entries(o.data).sort((s,a)=>a[1]-s[1]);return i.length===0?void 0:{languages:Object.fromEntries(i),dominantLanguage:i[0][0]}}catch{return}}async function JT(e,t,n){try{let i=(await(await $(n)).rest.repos.listContributors({owner:e,repo:t,per_page:30})).data.filter(s=>typeof s.login=="string").map(s=>({login:s.login,contributions:s.contributions??0}));return i.length>0?{contributors:i}:void 0}catch{return}}async function eE(e,t,n){try{let i=(await(await $(n)).rest.repos.listBranches({owner:e,repo:t,per_page:100})).data.map(s=>s.name).filter(s=>typeof s=="string");return i.length>0?{branches:i}:void 0}catch{return}}async function tE(e,t,n){try{let i=(await(await $(n)).rest.repos.listTags({owner:e,repo:t,per_page:50})).data.filter(s=>typeof s.name=="string").map(s=>({name:s.name,sha:s.commit?.sha??""}));return i.length>0?{tags:i}:void 0}catch{return}}function nE(e){return{projectPath:`${e.owner}/${e.repo}`,branch:e.branch||"",...e.defaultBranch!==void 0&&{defaultBranch:e.defaultBranch},path:e.path||"/",structure:e.structure||{},...e.fileSizeMap!==void 0&&{fileSizeMap:e.fileSizeMap},summary:{totalFiles:e.summary?.totalFiles||0,totalFolders:e.summary?.totalFolders||0,truncated:e.summary?.truncated||!1},pagination:e.pagination,hints:e.hints}}async function hg(e,t,n=Fe){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for repository structure",status:400,provider:"github"};let i={owner:r,repo:o,branch:e.ref||"HEAD",path:e.path,maxDepth:e.depth,itemsPerPage:e.itemsPerPage,page:e.page,includeSizes:e.includeSizes,goal:e.goal,reasoning:e.reasoning},[s,a,c,l,u]=await Promise.all([bu(i,t),e.includeLanguages?qT(r,o,t):Promise.resolve(void 0),e.includeContributors?JT(r,o,t):Promise.resolve(void 0),e.includeBranches?eE(r,o,t):Promise.resolve(void 0),e.includeTags?tE(r,o,t):Promise.resolve(void 0)]);return"error"in s?ta(s)??{error:"Unknown GitHub API error",status:500,provider:"github"}:{data:{...nE(s),...a?{languages:a.languages,dominantLanguage:a.dominantLanguage}:{},...c?{contributors:c.contributors}:{},...l?{branches:l.branches}:{},...u?{tags:u.tags}:{}},status:200,provider:"github",rawResponseChars:s.rawResponseChars??B(s)}}var na=class{type="github";capabilities=ug.github;authInfo;constructor(t){t?.authInfo?this.authInfo=t.authInfo:t?.token&&(this.authInfo={token:t.token})}async searchCode(t){try{return await pg(t,this.authInfo,Fe)}catch(n){return this.handleError(n)}}async getFileContent(t){try{return await mg(t,this.authInfo,Fe)}catch(n){return this.handleError(n)}}async searchRepos(t){try{return await dg(t,this.authInfo)}catch(n){return this.handleError(n)}}async searchPullRequests(t){try{return await fg(t,this.authInfo,Fe)}catch(n){return this.handleError(n)}}async getRepoStructure(t){try{return await hg(t,this.authInfo,Fe)}catch(n){return this.handleError(n)}}async resolveDefaultBranch(t){let{owner:n,repo:r}=Fe(t);if(!n||!r)throw new Error(`Cannot resolve default branch: invalid projectId '${t}'.`);return Be(n,r,this.authInfo)}handleError(t){let n=J(t);return on(n)}};import{createHash as oE}from"crypto";var iE=3600*1e3,gg=20,vt=new Map;function yg(e){return Date.now()-e.createdAt<iE}function sE(e=0){for(let[n,r]of vt.entries())yg(r)||vt.delete(n);let t=Math.max(0,gg-e);if(vt.size>t){let n=[...vt.entries()].sort((o,i)=>o[1].lastAccessedAt-i[1].lastAccessedAt),r=vt.size-t;for(let o=0;o<r&&o<n.length;o++){let i=n[o];i&&vt.delete(i[0])}}}function aE(e){return e?oE("sha256").update(e).digest("hex").slice(0,16):"default"}function cE(e){if(e==="default")return e;try{let t=new URL(e),n=`${t.protocol}//${t.hostname.toLowerCase()}`;return t.port&&(n+=`:${t.port}`),n+=t.pathname.replace(/\/+$/,"")||"",n}catch{return e.replace(/\/+$/,"")}}function lE(e,t){let n=cE(t?.baseUrl||"default"),r=aE(t?.token||t?.authInfo?.token);return`${e}:${n}:${r}`}function Su(e="github",t){if(e!=="github")throw new Error(`Unknown provider type: '${e}'. Only 'github' is supported.`);let n=lE(e,t),r=vt.get(n);if(r&&yg(r))return r.lastAccessedAt=Date.now(),r.provider;r&&vt.delete(n),vt.size>=gg&&sE(1);let o=new na({...t,type:e}),i=Date.now();return vt.set(n,{provider:o,createdAt:i,lastAccessedAt:i}),o}function EQ(){vt.clear()}async function bg(){try{return Su("github"),[{provider:"github",ok:!0}]}catch(e){let t=e instanceof Error?e.message:String(e);return process.stderr.write(`\u26A0\uFE0F github provider failed to initialize: ${t}
|
|
37
|
-
`),[{provider:"github",ok:!1,error:t}]}}import{ContentSanitizer as
|
|
38
|
-
`}],isError:!0};let{data:t,instructions:n,isError:r}=e;return{content:[{type:"text",text:
|
|
14
|
+
`,i);if(l===-1){i=r;break}if(i=l+1,s++,i-o>=n)break}let a=e.substring(o,i),c=i<r;return{sliced:a,actualOffset:o,actualLength:a.length,hasMore:c,lineCount:s,totalChars:r,nextOffset:c?i:void 0}}var Cc=b(()=>{"use strict";ad()});function pv(e){return e&&e.trim().length>0?e:uv}async function tR(e,t){return(await U.getSemanticBoundaryOffsets(e,pv(t))).filter(r=>Number.isInteger(r)&&r>=0&&r<=e.length)}function dv(e,t){let n=e.indexOf(`
|
|
15
|
+
`,t);return n===-1?void 0:n+1}function ns(e){let t=e.trimEnd().split(`
|
|
16
|
+
`).at(-1)??"";return t.length>0&&(t[0]===" "||t[0]===" ")}async function rs(e,t,n){let r=dv(e,Math.max(0,t));return r===void 0?void 0:(await tR(e,n)).find(i=>i>=r&&i>t)}async function c$(e,t,n,r,o){if(!ns(e))return;let i=await rs(t,n,o);if(i===void 0)return;let s=i-n,a=`Page cut mid-block at char ${n}. Next top-level definition at char ${i}. Re-request with charLength=${r+s} to extend this page to the next boundary, or use charOffset=${n} to continue page-by-page.`;return{nextBlockChar:i,hint:a}}async function xc(e,t,n,r){let o=Math.min(Math.max(0,t),e.length),i=Math.max(1,n),s=o+i;if(s>=e.length)return{length:e.length-o,chunkMode:"char-limit"};let a=await tR(e,r);if(a.length===0)return{length:i,chunkMode:"char-limit"};let c=a.find(d=>d>s);return c===void 0?{length:i,chunkMode:"char-limit"}:c-s<=lv?{length:c-o,chunkMode:"semantic"}:{length:i,chunkMode:"char-limit"}}var lv,uv,wc=b(()=>{"use strict";We();lv=8e3,uv="__octocode_generic__.unknown"});function mv(){let e=vr();return Math.min(e,8e3)}async function ld(e,t,n){let r=e.content??"",o=n??mv();if(r.length<=o&&t===0)return e;let i=e.path??void 0,{length:s,chunkMode:a}=await xc(r,t,o,i),c=ts(r,t,s,{pageSize:o}),l;if(c.hasMore&&a==="char-limit"&&ns(c.paginatedContent)){let d=c.charOffset+c.charLength;l=await rs(r,d,i)}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:a,...l!==void 0&&{nextBlockChar:l}}}}async function ud(e,t,n,r,o){try{let i=await e.rest.repos.listCommits({owner:t,repo:n,path:r,per_page:1,...o&&{sha:o}});if(i.data.length>0){let s=i.data[0],a=s?.commit?.committer?.date,c=s?.commit?.author?.name||s?.author?.login||"Unknown";return{lastModified:a||"Unknown",lastModifiedBy:c}}return null}catch{return null}}var pd=b(()=>{"use strict";es();ce();Cc();wc()});function os(e){if(e.length===0)return[];let t=e.split(/\r?\n/);return t.length>0&&t[t.length-1]===""&&t.pop(),t}function Ht(e){return os(e).length}var Ir=b(()=>{"use strict"});function Pc(e,t,n,r=!1,o=!1,i){if(r)try{new RegExp(t)}catch(l){let d=l instanceof Error?l.message:String(l);throw new Error(`Invalid regex pattern: ${d}`,{cause:l})}if(i!==void 0&&i<=0)return{lines:[],matchRanges:[],matchCount:0,matchingLines:[]};let s=e.join(`
|
|
17
|
+
`),a={isRegex:r,caseSensitive:o,contextLines:n,maxMatches:i},c=U.extractMatchingLines(s,t,a);return{lines:c.lines,matchRanges:c.matchRanges.map(l=>({start:l.start,end:l.end})),matchCount:c.matchCount,matchingLines:c.matchingLines.map(l=>l)}}var Tc=b(()=>{"use strict";We()});function hv(e){return fv.test(e.split(/[?#]/,1)[0]??e)}function nR(e,t){return hv(t)?yv(gv(e)):null}function Ec(e,t){let n=nR(e,t);if(n===null||n.length===0)return null;let r=[];return oR(n,r),r.join(`
|
|
18
|
+
`)}function rR(e,t){let n=nR(e,t);return n===null?null:n.map(iR)}function gv(e){let t=[],n=e.split(/\r?\n/),r;return n.forEach((o,i)=>{let s=o.match(/^[ \t]{0,3}(`{3,}|~{3,})/);if(s?.[1]){let l=s[1][0],d=s[1].length;r?r.marker===l&&d>=r.length&&(r=void 0):r={marker:l,length:d};return}if(r)return;let a=o.match(/^[ \t]{0,3}(#{1,6})(?:[ \t]+|$)(.*)$/);if(!a?.[1])return;let c=(a[2]??"").replace(/[ \t]+#+[ \t]*$/,"").trim();t.push({line:i+1,level:a[1].length,text:c.length>0?c:"(untitled heading)",children:[]})}),t}function yv(e){let t=[],n=[];for(let r of e){for(;n.length>0&&n[n.length-1].level>=r.level;)n.pop();let o=n[n.length-1];o?o.children.push(r):t.push(r),n.push(r)}return t}function oR(e,t){for(let n of e){let r=String(n.line).padStart(4," "),o=" ".repeat(Math.max(0,n.level-1));t.push(`${r}| ${o}${"#".repeat(n.level)} ${n.text}`),oR(n.children,t)}}function iR(e){let t=`${"#".repeat(e.level)} ${e.text}`;return{name:t,kind:"markdownHeading",range:{start:{line:e.line-1,character:0},end:{line:e.line-1,character:t.length}},selectionRange:{start:{line:e.line-1,character:0},end:{line:e.line-1,character:t.length}},children:e.children.map(iR)}}var fv,Ac=b(()=>{"use strict";fv=/\.(?:md|markdown|mdx)$/i});import{ContentSanitizer as dd}from"@octocodeai/octocode-engine/contentSanitizer";function xo(e,t){return{sourceChars:e,sourceBytes:t}}async function sR(e,t,n,r,o,i,s,a,c=5,l,d,u,p="standard"){let f=e.length,m=Buffer.byteLength(e,"utf-8"),h=()=>({owner:t,repo:n,path:o,branch:r,content:"",totalLines:Ht(e),...xo(f,m),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."]}),y=!l&&(p==="standard"||p==="symbols"),g=y?"standard":"none",R;if(p==="symbols"){let L=U.extractSignatures(e,o);if(L===null){let M=Ec(e,o);if(M!==null){let K=dd.sanitizeContent(M,o);if(K.secretsDetected.includes("content-size-exceeded"))return h();let ie=[U.SIGNATURES_ONLY_HINT];return K.hasSecrets&&ie.push(`Secrets detected and redacted: ${K.secretsDetected.join(", ")}`),{owner:t,repo:n,path:o,content:K.content,contentView:"symbols",branch:r,totalLines:Ht(e),...xo(f,m),isPartial:!1,hints:ie}}R=`No smaller outline is available for ${o}; using the standard content view. The outline may be unsupported, oversized, or unavailable for this source.`}if(L!==null){let M=dd.sanitizeContent(L,o);if(M.secretsDetected.includes("content-size-exceeded"))return h();let K=U.applyContentViewMinification(M.content,o),ie=[U.SIGNATURES_ONLY_HINT];return l&&ie.push('matchString was ignored \u2014 minify:"symbols" returns the full skeleton index. Use startLine/endLine from the gutter to read the matching body.'),M.hasSecrets&&ie.push(`Secrets detected and redacted: ${M.secretsDetected.join(", ")}`),{owner:t,repo:n,path:o,content:K,contentView:"symbols",branch:r,totalLines:Ht(e),...xo(f,m),isPartial:!1,hints:ie}}}let S=new Set,C=e,w=C.split(`
|
|
19
|
+
`),T=Ht(C),k=e,F,P,x=!1,_,v;if(i)k=e;else if(l){let L=u===!0,M;try{M=Pc(w,l,c,d??!1,L)}catch{return{owner:t,repo:n,path:o,content:"",branch:r,totalLines:T,...xo(f,m),matchNotFound:!0,searchedFor:l,hints:["Fix the regex or set matchStringIsRegex:false for a literal."]}}if(M.matchCount===0){let E=d?[`No lines matched "${l}" (case-${L?"sensitive":"insensitive"}). Check the pattern or use fullContent:true.`]:[`"${l}" not found in file${L?" (case-sensitive)":""}. Try matchStringIsRegex=true for pattern matching, broaden the search, or use fullContent=true.`];return{owner:t,repo:n,path:o,content:"",branch:r,totalLines:T,...xo(f,m),matchNotFound:!0,searchedFor:l,hints:E}}k=M.lines.join(`
|
|
20
|
+
`);let K=M.matchRanges[0],ie=M.matchRanges[M.matchRanges.length-1];s=K.start,a=ie.end,F=K.start,P=ie.end,x=!1,_=M.matchRanges,v=M.matchingLines;let Ye=M.matchingLines.slice(0,5).join(", "),st=M.matchingLines.length>5?` and ${M.matchingLines.length-5} more`:"";S.add(M.matchCount>1?`Found ${M.matchCount} occurrences of "${l}" on lines ${Ye}${st} \u2014 all shown as ${M.matchRanges.length} slice${M.matchRanges.length===1?"":"s"}, \xB1${c} lines of context each.`:`Found "${l}" on line ${M.matchingLines[0]}`)}else if(s!==void 0||a!==void 0){let L=s||1,M=a||T;if(L<1||L>T)k=e,S.add(`Requested startLine ${L} is out of range for this ${T}-line file \u2014 returning the full file instead of a range.`);else if(M<L)k=e,S.add(`Requested range startLine=${L}, endLine=${M} is invalid (endLine before startLine) \u2014 returning the full file instead of a range.`);else{let K=Math.max(1,L),ie=Math.min(T,M),Ye=w.slice(K-1,ie);F=K,P=ie,x=ie<T,k=Ye.join(`
|
|
21
|
+
`),M>T&&S.add(`Requested endLine ${M} adjusted to ${T} (file end)`)}}let A=dd.sanitizeContent(k,o);if(A.secretsDetected.includes("content-size-exceeded"))return h();if(k=y?U.applyContentViewMinification(A.content,o):A.content,A.hasSecrets&&S.add(`Secrets detected and redacted: ${A.secretsDetected.join(", ")}`),A.warnings.length>0&&A.warnings.forEach(L=>S.add(L)),T>2e3&&p!=="symbols"&&!l&&!s&&!a&&!i){let L=Math.max(1,T-200);S.add(`Large file (${T} lines) \u2014 minify:"symbols" for an export index, or startLine=${L} for the tail.`)}let I=Array.from(S);return{owner:t,repo:n,path:o,content:k,contentView:g,branch:r,totalLines:T,...xo(f,m),...x&&{startLine:F,endLine:P,isPartial:x},..._&&{matchRanges:_},...v&&{matchedLines:v},...I.length>0&&{matchLocations:I},...(I.length>0||R)&&{warnings:[...R?[R]:[],...I]}}}var md=b(()=>{"use strict";We();Ir();Tc();Ac()});async function aR(e,t,n){let{rawResult:r,auth:o}=await Co(e,t,n);if(!("data"in r)||!r.data)return r;let i=r.data.branch||r.data.resolvedRef||e.branch||"",s=await sR(r.data.rawContent,e.owner,e.repo,i,e.path,e.fullContent||!1,e.startLine,e.endLine,e.contextLines??5,e.matchString,e.matchStringIsRegex,e.matchStringCaseSensitive,e.minify??"standard");if("error"in s)return{error:s.error||"Unknown error",status:500,type:"unknown"};if(s.terminalLimit)return{data:s,status:200,rawResponseChars:r.rawResponseChars};let a=e.charOffset??0,c=e.charLength,d=e.fullContent===!0&&a===0&&c===void 0?s:await ld(s,a,c),u=(e.charOffset??0)>0;if(!e.noTimestamp&&!u)try{let p=await Y(t),f=await oe(q("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,ts:!0,auth:o},n),()=>ud(p,e.owner,e.repo,e.path,e.branch),{shouldCache:m=>m!==null,forceRefresh:e.forceRefresh===!0,cacheRole:"helper"});f&&(d.lastModified=f.lastModified,d.lastModifiedBy=f.lastModifiedBy)}catch{}return{data:d,status:200,rawResponseChars:r.rawResponseChars}}var fd=b(()=>{"use strict";de();Oe();Ve();fc();pd();md()});function F$(e,t=Rv){let n=e?os(e):[];return{lines:n.slice(0,t),moreCount:Math.max(0,n.length-t)}}function cR(e,t,n){if(!e)return"";if(t===void 0&&n===void 0)return e;let r={additions:t,deletions:n};return U.filterPatch(e,r)}function lR(e){return e?U.filterPatch(e,{trimContext:!0,contextLines:bv}):""}var bv,Rv,Lc=b(()=>{"use strict";We();Ir();bv=2,Rv=20});import{ContentSanitizer as uR}from"@octocodeai/octocode-engine/contentSanitizer";function hd(e){let t=uR.sanitizeContent(e.title??""),n=e.body?uR.sanitizeContent(e.body):{content:void 0,warnings:[]},r=new Set([...t.warnings,...n.warnings]),i=e.state?.toLowerCase()==="closed"?"closed":"open";return{prData:{number:e.number,title:t.content,body:n.content,state:i,author:e.user?.login??"",labels:e.labels?.map(a=>typeof a=="string"?a:a.name??"")??[],created_at:e.created_at??"",updated_at:e.updated_at??"",closed_at:e.closed_at??null,url:e.html_url,comments:[],...typeof e.comments=="number"&&e.comments>0?{total_comment_count:e.comments}:{},reactions:0,draft:e.draft??!1,head:e.head?.ref,head_sha:e.head?.sha,base:e.base?.ref,base_sha:e.base?.sha,...e.merged_at&&{merged_at:e.merged_at}},sanitizationWarnings:r}}function dR(e,t,n,r){if(typeof e!="string"||!r)return{value:e};let o=e.length,i=Math.min(Math.max(0,t),o),s=Math.max(1,n),a=Math.min(i+s,o),c=a<o;return i===0&&a===o?{value:e}:{value:e.slice(i,a),pagination:{charOffset:i,charLength:a-i,totalChars:o,hasMore:c,...c?{nextCharOffset:a}:{}}}}function wo(e,t={}){let n=t.charOffset??0,r=t.charLength??Sv,o=t.charLength??Cv,i=dR(e.body,n,r,!t.includeFullBody),s=(e.comments??[]).sort((f,m)=>{let h=f.commentType==="review_inline"?0:1,y=m.commentType==="review_inline"?0:1;return h-y}),a=s.filter(f=>f.commentType==="review_inline").length,c=s.length-a,l=t.includeFullCommentDetails?s:s.slice(0,pR),d=l.map(f=>{let m=dR(f.body,n,o,!t.includeFullCommentDetails);return{...f,body:m.value??"",...m.pagination?{bodyPagination:m.pagination}:{}}}),u=!t.includeFullCommentDetails&&(s.length>l.length||d.some(f=>"bodyPagination"in f)),p=[...i.pagination&&t.includeFullBody?[`PR body paginated at charOffset=${i.pagination.charOffset}, charLength=${i.pagination.charLength}, totalChars=${i.pagination.totalChars}. Re-call with prNumber and charOffset=${i.pagination.nextCharOffset??i.pagination.totalChars} to continue this body.`]:[],...u?[`PR comments are paginated/summarized to ${pR} comment(s) per search result with ${o} chars each. Use prNumber with content.comments={discussion:true,reviewInline:true} and charOffset to continue specific comment bodies.`]:[]];return{number:e.number,...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:i.value,...i.pagination?{bodyPagination:i.pagination}:{},comments:e.total_comment_count??s.length,...s.length>0&&{commentDetailsBreakdown:{inlineReview:a,discussion:c}},commits:e.commits?.length||0,additions:e.additions??e.file_changes?.files.reduce((f,m)=>f+m.additions,0)??0,deletions:e.deletions??e.file_changes?.files.reduce((f,m)=>f+m.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},...d.length>0&&{commentDetails:d,commentDetailsShown:d.length,commentDetailsTotal:s.length,...u?{commentDetailsPaginated:!0}:{}},...(e._sanitization_warnings||p.length>0)&&{sanitizationWarnings:[...e._sanitization_warnings||[],...p]}}}function is(e){let t=Array.isArray(e.owner)?e.owner[0]||void 0:e.owner,n=Array.isArray(e.repo)?e.repo[0]||void 0:e.repo;return{owner:t,repo:n}}function gd(e,t){let r=t.content?.patches,o=r?.mode??"none",i=new Map(r?.ranges?.map(a=>[a.file,a])||[]),s=new Set([...r?.files??[],...i.keys()]);return o==="none"?e.map(a=>({...a,patch:void 0})):o==="selected"?e.filter(a=>s.has(a.filename)).map(a=>{let c=i.get(a.filename);return{...a,patch:a.patch?cR(a.patch,c?.additions,c?.deletions):void 0}}):e.map(a=>({...a}))}var Sv,Cv,pR,Po=b(()=>{"use strict";Lc();es();Sv=vr(),Cv=Math.round(vr()/4),pR=3});function To(e){let t=e.content;return!!(t?.changedFiles||t?.patches?.mode&&t.patches.mode!=="none")}function mR(e){return e.content?.comments??null}function kc(e){let t=mR(e);return t?t.discussion===!0:!1}function _c(e){let t=mR(e);return t?t.reviewInline===!0:!1}function vc(e){return!!e.content?.commits}function Ic(e){return!!e.content?.reviews}function yd(e){return e.prNumber!==void 0?!0:To(e)||kc(e)||_c(e)||vc(e)||Ic(e)}function bd(e){return!!e.content?.comments?.includeBots}var Rd=b(()=>{"use strict"});function Or(e){let t=e.toLowerCase();return t.endsWith("[bot]")||xv.has(t)}var xv,Oc=b(()=>{"use strict";xv=new Set(["vercel","pkg-pr-new","coderabbitai","github-actions","codecov","changeset-bot","netlify","sonarcloud","socket-security"])});async function Fr(e,t,n,r){if(t===0)return{items:[],rawResponseChars:0,collectionState:{page:0,hasMore:!1}};let o=await re(r);return oe(q("gh-pr-collection-page",{...e,page:t,auth:o}),async()=>{let i=await n(t);return{items:i.data,rawResponseChars:j(i.data),collectionState:{page:t,hasMore:/;\s*rel="next"/.test(i.headers?.link??"")}}})}var Sd=b(()=>{"use strict";de();Oe();Ve();ue()});import{ContentSanitizer as Cd}from"@octocodeai/octocode-engine/contentSanitizer";async function xd(e,t,n,r,o=!1,i,s=1){let{items:a,rawResponseChars:c,collectionState:l}=await Fr({owner:t,repo:n,prNumber:r,surface:"discussion"},s,m=>e.rest.issues.listComments({owner:t,repo:n,issue_number:r,per_page:100,page:m}),i),d=o?a:a.filter(m=>!Or(m.user?.login??"")),u=a.length-d.length,p=d.map(m=>({id:String(m.id),user:m.user?.login??"unknown",body:Cd.sanitizeContent(m.body??"").content,createdAt:m.created_at??"",updatedAt:m.updated_at??"",commentType:"discussion"})),f=[];return u>0&&f.push(`${u} bot comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:ee(Object.assign(p,{collectionState:l}),c),note:f.length>0?f.join("; "):void 0}}async function wd(e,t,n,r,o,i=1){let{items:s,rawResponseChars:a,collectionState:c}=await Fr({owner:t,repo:n,prNumber:r,surface:"reviews"},i,l=>e.rest.pulls.listReviews({owner:t,repo:n,pull_number:r,per_page:100,page:l}),o);return ee(Object.assign(s.map(l=>({id:String(l.id),user:l.user?.login??"unknown",state:l.state??"",body:Cd.sanitizeContent(l.body??"").content,submittedAt:l.submitted_at??void 0,commitId:l.commit_id??void 0})),{collectionState:c}),a)}async function Pd(e,t,n,r,o=!1,i,s=1){let{items:a,rawResponseChars:c,collectionState:l}=await Fr({owner:t,repo:n,prNumber:r,surface:"inline"},s,m=>e.rest.pulls.listReviewComments({owner:t,repo:n,pull_number:r,per_page:100,page:m}),i),d=o?a:a.filter(m=>!Or(m.user?.login??"")),u=a.length-d.length,p=d.map(m=>({id:String(m.id),user:m.user?.login??"unknown",body:Cd.sanitizeContent(m.body??"").content,createdAt:m.created_at??"",updatedAt:m.updated_at??"",commentType:"review_inline",path:m.path,line:m.line??m.original_line??void 0,...m.in_reply_to_id!=null?{inReplyToId:m.in_reply_to_id}:{}})),f=[];return u>0&&f.push(`${u} bot inline comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:ee(Object.assign(p,{collectionState:l}),c),note:f.length>0?f.join("; "):void 0}}var fR=b(()=>{"use strict";Oc();ue();Sd()});async function Fc(e,t){let n=await re(t),{fileBatch:r=1,...o}=e,i=q("gh-commit-detail-page",{...o,fileBatch:r,auth:n});return oe(i,async()=>{let a=await(await Y(t)).rest.repos.getCommit({...o,per_page:Td,page:r}),c=a.data.files??[],l=/;\s*rel="next"/.test(a.headers?.link??""),d=r*Td>=ss&&(c.length>=Td||l);return{data:a.data,collectionState:{page:r,hasMore:l&&!d},terminalLimit:d,rawResponseChars:j(a.data)}})}var ss,Td,Ed=b(()=>{"use strict";de();Oe();Ve();ue();ss=3e3,Td=100});async function Ad(e,t,n,r,o=1){let i=await Y(r),{items:s,rawResponseChars:a,collectionState:c}=await Fr({owner:e,repo:t,prNumber:n,surface:"changedFiles"},o,u=>i.rest.pulls.listFiles({owner:e,repo:t,pull_number:n,per_page:100,page:u}),r),l=o*100>=gR&&(s.length>=100||c.hasMore),d={...c,hasMore:c.hasMore&&!l};return ee({collectionState:d,total_count:s.length,files:[...s],...l?{providerLimits:[{reason:"providerResultCap",surface:"changedFiles",maxResults:gR}]}:{}},a)}async function wv(e,t,n,r,o=1){let i=await Y(r),{items:s,rawResponseChars:a,collectionState:c}=await Fr({owner:e,repo:t,prNumber:n,surface:"commits"},o,p=>i.rest.pulls.listCommits({owner:e,repo:t,pull_number:n,per_page:50,page:p}),r),l=o*50>=hR&&(s.length>=50||c.hasMore),d={...c,hasMore:c.hasMore&&!l},u=Object.assign([...s],{collectionState:d});return l&&(u.providerLimits=[{reason:"providerResultCap",surface:"commits",maxResults:hR}]),ee(u,a)}async function Pv(e,t,n,r){let o=await Fc({owner:e,repo:t,ref:n},r),i=[...o.data.files||[]];return o.terminalLimit&&(i.providerLimits=[{reason:"providerResultCap",surface:"commitFiles",maxResults:ss,sha:n}]),ee(Object.assign(i,{collectionState:o.collectionState}),o.rawResponseChars)}async function Ev(e,t,n){if(e.length===0)return[];let r=new Array(e.length),o=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let s=o++;if(s>=e.length)break;r[s]=await n(e[s],s)}});return await Promise.all(i),r}async function Ld(e,t,n,r,o){let i=await wv(e,t,n,o,r.collectionPages?.commits??1);if(!i)return null;let s=me(i)??0,a=r.content?.commits?.includeFiles===!0,c=Math.min(Math.max(1,r.itemsPerPage??20),100),l=Math.max(1,Math.ceil(i.length/c)),u=(Math.min(Math.max(1,r.commitPage??r.page??1),l)-1)*c,p=[...i.providerLimits??[]],f=await Ev(i,Tv,async(m,h)=>{let y=a&&h>=u&&h<u+c?await Pv(e,t,m.sha,o):null,g=[];return y&&(p.push(...y.providerLimits??[]),s+=me(y)??0,g=y),{sha:m.sha,message:m.commit.message,author:m.commit.author?.name||"unknown",date:m.commit.author?.date||"",files:g,filesCollectionState:y?.collectionState}});return f.collectionState=i.collectionState,p.length&&(f.providerLimits=p),ee(f,s)}var hR,gR,Tv,yR=b(()=>{"use strict";de();Sd();ce();Ed();ue();hR=250,gR=3e3;Tv=5});async function kd(e,t,n,r){let o={...e,merged_at:e.pull_request?.merged_at??e.merged_at},{prData:i,sanitizationWarnings:s}=hd(o);i.collectionStates={},s.size>0&&(i._sanitization_warnings=Array.from(s));let a=0;if(e.pull_request&&yd(t)){let{owner:d,repo:u}=is(t);if(d&&u){let p=await n.rest.pulls.get({owner:d,repo:u,pull_number:e.number});if(p.data&&(a+=j(p.data),i.head=p.data.head?.ref,i.head_sha=p.data.head?.sha,i.base=p.data.base?.ref,i.base_sha=p.data.base?.sha,i.draft=p.data.draft??!1,p.data.merged_at&&(i.merged_at=p.data.merged_at),i.additions=p.data.additions??0,i.deletions=p.data.deletions??0,To(t)||(i.file_changes={total_count:p.data.changed_files??0,files:[]}),To(t))){let f=await Ad(d,u,e.number,r,t.collectionPages?.changedFiles??1);f&&(a+=me(f)??0,f.files=gd(f.files,t),f.total_count=p.data.changed_files??f.total_count,i.file_changes=f,i.collectionStates.changedFiles=f.collectionState,f.providerLimits&&(i.providerLimits=[...i.providerLimits??[],...f.providerLimits]))}}}let c=kc(t),l=_c(t);if(c||l){let{owner:d,repo:u}=is(t);if(d&&u){let p=bd(t),f=()=>Promise.resolve({comments:ee([],0)}),[{comments:m,note:h},{comments:y,note:g}]=await Promise.all([c?xd(n,d,u,e.number,p,r,t.collectionPages?.discussion??1):f(),l?Pd(n,d,u,e.number,p,r,t.collectionPages?.inline??1):f()]);i.comments=[...m,...y],i.collectionStates.discussion=m.collectionState,i.collectionStates.inline=y.collectionState,a+=(me(m)??0)+(me(y)??0);let R=[h,g].filter(S=>typeof S=="string");R.length>0&&(i._sanitization_warnings=[...i._sanitization_warnings||[],...R])}}if(Ic(t)){let{owner:d,repo:u}=is(t);if(d&&u){let p=await wd(n,d,u,e.number,r,t.collectionPages?.reviews??1);a+=me(p)??0,i.reviews=p,i.collectionStates.reviews=p.collectionState}}if(vc(t)){let{owner:d,repo:u}=is(t);if(d&&u){let p=await Ld(d,u,e.number,t,r);p&&(a+=me(p)??0,i.commits=p,i.collectionStates.commits=p.collectionState,p.providerLimits&&(i.providerLimits=[...i.providerLimits??[],...p.providerLimits]))}}return ee(i,a)}async function as(e,t,n,r){let{prData:o,sanitizationWarnings:i}=hd(e);o.collectionStates={},i.size>0&&(o._sanitization_warnings=Array.from(i));let s=0,a=t.owner,c=t.repo;if(o.additions="additions"in e?e.additions??0:0,o.deletions="deletions"in e?e.deletions??0:0,To(t)||(o.file_changes={total_count:"changed_files"in e?e.changed_files??0:0,files:[]}),To(t)){let u=await Ad(a,c,e.number,r,t.collectionPages?.changedFiles??1);u&&(s+=me(u)??0,u.files=gd(u.files,t),u.total_count="changed_files"in e?e.changed_files??u.total_count:u.total_count,o.file_changes=u,o.collectionStates.changedFiles=u.collectionState,u.providerLimits&&(o.providerLimits=[...o.providerLimits??[],...u.providerLimits]))}let l=kc(t),d=_c(t);if(l||d){let u=bd(t),p=()=>Promise.resolve({comments:ee([],0)}),[{comments:f,note:m},{comments:h,note:y}]=await Promise.all([l?xd(n,a,c,e.number,u,r,t.collectionPages?.discussion??1):p(),d?Pd(n,a,c,e.number,u,r,t.collectionPages?.inline??1):p()]);o.comments=[...f,...h],o.collectionStates.discussion=f.collectionState,o.collectionStates.inline=h.collectionState,s+=(me(f)??0)+(me(h)??0);let g=[m,y].filter(R=>typeof R=="string");g.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...g])}if(Ic(t)){let u=await wd(n,a,c,e.number,r,t.collectionPages?.reviews??1);s+=me(u)??0,o.reviews=u,o.collectionStates.reviews=u.collectionState}if(vc(t)){let u=await Ld(a,c,e.number,t,r);u&&(s+=me(u)??0,o.commits=u,o.collectionStates.commits=u.collectionState,u.providerLimits&&(o.providerLimits=[...o.providerLimits??[],...u.providerLimits]))}return ee(o,s)}var cs=b(()=>{"use strict";Po();ue();Rd();fR();yR()});function Av(e,t,n){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}async function wQ(e,t,n){let r=await re(t),o=q("gh-api-prs",{owner:e.owner,repo:e.repo,prNumber:e.prNumber,content:e.content,auth:r},n);return await oe(o,async()=>await _d(e,t),{shouldCache:s=>!s.error})}async function _d(e,t){let{owner:n,repo:r,prNumber:o}=e;if(!n||!r||!o)return{pullRequests:[],totalCount:0,error:ct.PR_REQUIRED_PARAMS.message,hints:["Provide owner, repo, and prNumber"]};if(Array.isArray(n)||Array.isArray(r))return{pullRequests:[],totalCount:0,error:ct.PR_SINGLE_VALUES.message,hints:["Do not use array for owner or repo when fetching by number"]};try{let i=await Y(t),s=await i.rest.pulls.get({owner:n,repo:r,pull_number:o}),a=s.data,c=await as(a,e,i,t);return{pullRequests:[wo(c,{includeFullBody:!0,includeFullCommentDetails:!0})],totalCount:1,rawResponseChars:j(s.data)+(me(c)??0)}}catch(i){let s=ne(i);return Av(s,ct.PULL_REQUEST_FETCH_FAILED.message(o,s.error),[`Verify that pull request #${o} exists in ${n}/${r}`,"Check if you have access to this repository","Ensure the PR number is correct"])}}var vd=b(()=>{"use strict";kt();de();tt();Oe();Ve();Po();cs();ue()});function Od(e){return new Id().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addBranchFilters(e).addDateFilters(e).addEngagementFilters(e).addReviewFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function Fd(e){return e.draft!==void 0||e.author!==void 0||e.assignee!==void 0||typeof e.query=="string"&&e.query.trim().length>0||e.label&&e.label.length>0||e.mentions!==void 0||e.commenter!==void 0||e["reviewed-by"]!==void 0||e["review-requested"]!==void 0||e.reactions!==void 0||e.comments!==void 0||e.state==="merged"||e.milestone!==void 0||e.language!==void 0||e.checks!==void 0||e.review!==void 0||e.locked!==void 0||e.visibility!==void 0||e.project!==void 0||e.created!==void 0||e.updated!==void 0||e["merged-at"]!==void 0||e.closed!==void 0||e.merged!==void 0||e.match!==void 0&&e.match.length>0||e.sort==="comments"||e.sort==="reactions"||Array.isArray(e.owner)||Array.isArray(e.repo)}var Id,Md=b(()=>{"use strict";Qi();Id=class extends _n{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 Nd(e,t,n){return{pullRequests:[],totalCount:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}function Dd(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 bR(e,t){try{let n=t.owner,r=t.repo,o=Math.min(t.limit||30,100),i=t.page||1,s=await e.rest.pulls.list({owner:n,repo:r,state:(t.state==="merged"?"closed":t.state)||"open",per_page:o,page:i,sort:t.sort==="updated"?"updated":"created",direction:t.order||"desc",...t.head&&{head:t.head},...t.base&&{base:t.base}}),a=await Promise.all(s.data.map(async p=>await as(p,t,e))),c=a.reduce((p,f)=>p+(me(f)??0),0),l=a.map(p=>wo(p,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:t.charOffset,charLength:t.charLength})),d=s.data.length===o,u=(i-1)*o+l.length;return{pullRequests:l,totalCount:l.length,pagination:{currentPage:i,totalPages:d?i+1:i,perPage:o,totalMatches:u+(d?1:0),reachableTotalMatches:u,totalMatchesKind:d?"lowerBound":"exact",hasMore:d,...d?{nextPage:i+1}:{}},rawResponseChars:j(s.data)+c}}catch(n){if(hn(n))return Dd(t);let r=ne(n);return Nd(r,ct.PULL_REQUEST_LIST_FAILED.message(r.error),["Verify repository access and authentication"])}}var RR=b(()=>{"use strict";ce();kt();tt();ue();Po();cs()});async function Lv(e,t){if(!t.owner||!t.repo||Array.isArray(t.owner)||Array.isArray(t.repo))return t;try{let n=await e.rest.repos.get({owner:t.owner,repo:t.repo}),[r,o]=n.data.full_name?.split("/")??[];return!r||!o||r===t.owner&&o===t.repo?t:{...t,owner:r,repo:o}}catch{return t}}function kv(e,t,n="anon"){return q("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:n},t)}async function SR(e,t,n){let r=await re(t),o=kv(e,n,r);return await oe(o,async()=>await _v(e,t,n),{shouldCache:s=>!s.error&&!s.incompleteResults})}async function _v(e,t,n){try{if(e.prNumber&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await _d(e,t);let r=await Y(t);if(!Fd(e)&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await bR(r,e);let i=await Lv(r,e),s=Od(i);if(!s)return{pullRequests:[],totalCount:0,error:ct.NO_VALID_PARAMETERS.message,hints:["Provide search query or filters like owner/repo"]};let a=i.sort&&i.sort!=="best-match"?i.sort:void 0,c=Math.min(i.limit||30,100),l=i.page||1,d=s,u=await r.rest.search.issuesAndPullRequests({q:s,sort:a,order:e.order||"desc",per_page:c,page:l}),p=u.data.items?.filter(T=>!!T.pull_request)||[],f=await Promise.all(p.map(async T=>await kd(T,i,r,t))),m=f.reduce((T,k)=>T+(me(k)??0),0),h=f.map(T=>wo(T,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:i.charOffset,charLength:i.charLength})),y=u.data.total_count,g=Math.min(y,1e3),R=Math.ceil(g/c),S=Math.min(l,Math.max(1,R)),C=S<R,w=Math.min(g,R*c);return{pullRequests:h,totalCount:u.data.total_count,effectiveQuery:d,...u.data.incomplete_results&&{incompleteResults:!0},pagination:{currentPage:S,totalPages:R,perPage:c,totalMatches:g,reportedTotalMatches:y,reachableTotalMatches:w,totalMatchesKind:"reported",totalMatchesCapped:y>g,hasMore:C,...C?{nextPage:S+1}:{}},rawResponseChars:j(u.data)+m}}catch(r){if(hn(r))return Dd(e);let o=ne(r);return Nd(o,ct.PULL_REQUEST_SEARCH_FAILED.message(o.error),["Verify authentication and search parameters"])}}var Hd=b(()=>{"use strict";ce();kt();de();tt();Md();Oe();Ve();ue();Po();cs();vd();RR()});function Eo(e){let t=e.trim(),n=vv.exec(t);if(n){let r=Number(n[1]),o=n[2].toLowerCase(),i=new Date;switch(o){case"h":i.setUTCHours(i.getUTCHours()-r);break;case"d":i.setUTCDate(i.getUTCDate()-r);break;case"w":i.setUTCDate(i.getUTCDate()-r*7);break;case"m":i.setUTCMonth(i.getUTCMonth()-r);break;case"y":i.setUTCFullYear(i.getUTCFullYear()-r);break}return{value:i.toISOString()}}return Number.isNaN(Date.parse(t))?{warning:`"${e}" is not a valid date or relative window \u2014 use e.g. "30d", "2w", "6m", "1y", or an ISO date like "2026-01-01". Filter skipped.`}:{value:t}}var vv,Gd=b(()=>{"use strict";vv=/^(\d+)\s*([hdwmy])$/i});function Bd(e){return typeof e=="string"?{}:{isPartial:!0,terminalLimit:!0,patchUnavailable:{reason:"providerOmittedPatch"}}}function zd(e,t,n){if(e===void 0)return;if(!n&&!t)return{patch:e};let r=e.length,o=Math.min(Math.max(0,t??0),r),i=Math.max(1,n??r),s=Math.min(o+i,r),a=s<r;return{patch:e.slice(o,s),patchPagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function In(e,t){let n=e.map(d=>{let u=d.patch!==void 0?zd(d.patch,t.charOffset,t.charLength):void 0;return{filename:d.filename,...Bd(d.patch),status:d.status,additions:d.additions,deletions:d.deletions,...u!==void 0?{patch:u.patch,...u.patchPagination?{patchPagination:u.patchPagination}:{}}:{},...d.previous_filename?{previousFilename:d.previous_filename}:{}}}),r=Math.max(1,t.filePage??1),o=Math.max(1,t.itemsPerPage??20),i=n.length,s=Math.max(1,Math.ceil(i/o)),a=Math.min(r,s),c=(a-1)*o;return{files:n.slice(c,c+o),filesPagination:{currentPage:a,totalPages:s,itemsPerPage:o,totalFiles:i,hasMore:a<s,...a<s&&a<1e3?{nextFilePage:a+1}:{},...a<s&&a>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}}var Ao=b(()=>{"use strict";ce()});function Mc(e){return e?e.includes('rel="next"'):!1}async function Ov(e,t,n){if(e.length===0)return[];let r=new Array(e.length),o=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let s=o++;if(s>=e.length)return;r[s]=await n(e[s],s)}});return await Promise.all(i),r}async function CR(e,t,n){let r=await re(t),o=q("gh-api-history",{type:e.type,owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,since:e.since,until:e.until,author:e.author,committer:e.committer,page:e.page,perPage:e.perPage,filePage:e.filePage,itemsPerPage:e.itemsPerPage,includeDiff:e.includeDiff,charOffset:e.charOffset,charLength:e.charLength,auth:r},n);return oe(o,()=>Fv(e,t),{shouldCache:i=>"data"in i&&!("error"in i)})}async function Fv(e,t){try{let n=await Y(t),r=[],o=e.since?Eo(e.since):void 0,i=e.until?Eo(e.until):void 0;o?.warning&&r.push(`since ${o.warning}`),i?.warning&&r.push(`until ${i.warning}`);let s={owner:e.owner,repo:e.repo,per_page:e.perPage,page:e.page,...e.path?{path:e.path}:{},...e.branch?{sha:e.branch}:{},...o?.value?{since:o.value}:{},...i?.value?{until:i.value}:{},...e.author?{author:e.author}:{},...e.committer?{committer:e.committer}:{}},a=await n.rest.repos.listCommits(s),c=a.headers.link,l=Mc(c),d=a.data.map(g=>{let R=g.commit.author,S=g.commit.committer,C=S?.date??R?.date??"",w=g.commit.message,T=w.split(`
|
|
22
|
+
`)[0]??w,k=w.slice(T.length).trim(),F=k.length>500,P=k.length===0?T:`${T}
|
|
23
|
+
${F?`${k.slice(0,500)}\u2026`:k}`,x=S?.name===R?.name&&S?.email===R?.email||g.committer?.login==="web-flow";return{sha:g.sha,date:C,...P===T?{}:{message:P},...F?{messageTruncated:!0}:{},messageHeadline:T,author:{name:R?.name??"unknown",email:R?.email??"",...g.author?.login?{login:g.author.login}:{}},...S&&!x?{committer:{name:S.name??"unknown",email:S.email??"",...g.committer?.login?{login:g.committer.login}:{}}}:{}}});d.length===0&&(o?.value!==void 0||i?.value!==void 0)&&r.push("no commits matched the since/until window \u2014 GitHub filters by committer date (not author date; rebases and squash-merges reset it), and a path-scoped walk does not follow renames. Widen or drop since/until and inspect commit dates directly.");let u={currentPage:e.page,perPage:e.perPage,hasMore:l,...l?{nextPage:e.page+1}:{}};if(!e.includeDiff)return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:d,pagination:u,...r.length?{warnings:r}:{}},status:200};let p=!1,f=!1,m=await Ov(d,Iv,async(g,R)=>{try{let S=a.data[R]?.sha??g.sha,C=await n.rest.repos.getCommit({owner:e.owner,repo:e.repo,ref:S});if(e.type==="file"&&e.path){let w=e.path,T=C.data.files?.find(P=>P.filename===w||P.previous_filename===w);if(T){let P=T.patch!==void 0?zd(T.patch,e.charOffset,e.charLength):void 0;return{...g,additions:T.additions,deletions:T.deletions,status:T.status,...P!==void 0?{patch:P.patch,...P.patchPagination?{patchPagination:P.patchPagination}:{}}:{},...T.previous_filename?{previousFilename:T.previous_filename}:{}}}let k=w.endsWith("/")?w:`${w}/`,F=(C.data.files??[]).filter(P=>P.filename.startsWith(k));return F.length>0?(p=!0,{...g,...In(F,e)}):(f=!0,g)}else{let w=e.path,T=(C.data.files??[]).filter(k=>!w||k.filename.startsWith(w));return{...g,...In(T,e)}}}catch{}return g}),h=[];p&&h.push(`path '${e.path}' matched no single file in these commits but matches files under it \u2014 treated as a directory filter and returned per-commit changed files (append '/' to select directory mode explicitly).`),f&&h.push(`includeDiff: some commits contain no file matching '${e.path}' (rename or shallow diff?) \u2014 those commits are listed without a diff.`);let y=[...r,...h];return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:m,pagination:u,...y.length?{warnings:y}:{}},status:200}}catch(n){return ne(n)}}var Iv,Nc=b(()=>{"use strict";de();Gd();tt();Oe();Ve();Ao();Iv=5});function Ud(e){return new jd().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addDateFilters(e).addEngagementFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function $d(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)}var jd,Dc=b(()=>{"use strict";Qi();jd=class extends _n{addBasicFilters(t){return t.query&&t.query.trim()&&(this.queryParts.push(t.query.trim()),t.match&&t.match.length>0&&this.queryParts.push(`in:${t.match.join(",")}`)),this.queryParts.push("is:issue"),this}addStateFilters(t){return(t.state==="open"||t.state==="closed")&&this.addSimpleFilter(t.state,"is"),this}addUserFilters(t){return this.addSimpleFilter(t.author,"author"),this.addSimpleFilter(t.assignee,"assignee"),this.addSimpleFilter(t.mentions,"mentions"),this.addSimpleFilter(t.commenter,"commenter"),this}addNegativeFilters(t){return t.locked===!0?this.queryParts.push("is:locked"):t.locked===!1&&this.queryParts.push("is:unlocked"),t.visibility==="public"?this.queryParts.push("is:public"):t.visibility==="private"&&this.queryParts.push("is:private"),this}addMiscFilters(t){return this.queryParts.push(t.archived===!0?"archived:true":"archived:false"),this}}});function wR(e){let t={},n=e.license;n?.spdx_id&&n.spdx_id!=="NOASSERTION"&&(t.license=n.spdx_id);let r=e.homepage;return r&&(t.homepage=r),t}async function PR(e,t,n){let r=await re(t),o=e,i=q("gh-api-repos",{keywords:e.keywords,topicsToSearch:e.topicsToSearch,owner:e.owner,repo:o.repo,stars:e.stars,size:o.size,created:o.created,updated:e.updated,language:o.language,match:e.match,sort:e.sort,limit:e.limit,page:e.page,archived:o.archived,visibility:o.visibility,forks:o.forks,license:o.license,goodFirstIssues:o.goodFirstIssues,auth:r},n);return await oe(i,async()=>await Nv(e,t),{shouldCache:a=>"data"in a&&!a.data?.incompleteResults&&!a.error})}async function Mv(e,t){let n=Math.min(e.limit||100,100),r=e.page||1,o=e.sort==="updated"?"updated":"full_name",i,s,a;try{let m=await t.rest.repos.listForOrg({org:e.owner,per_page:n,page:r,sort:o});i=m.data,a=m.headers,s=void 0}catch(m){if(m?.status!==404)return ne(m);try{let y=await t.rest.repos.listForUser({username:e.owner,per_page:n,page:r,sort:o});i=y.data,a=y.headers,s=void 0}catch(y){return ne(y)}}let c=i.map(m=>{let y=m.full_name.split("/"),g=y[0]||"",R=y[1]||"";return{owner:g,repo:R,defaultBranch:m.default_branch,stars:m.stargazers_count||0,description:m.description?m.description:"No description",url:m.html_url,createdAt:m.created_at,updatedAt:m.updated_at,pushedAt:m.pushed_at,visibility:m.visibility,...m.topics&&m.topics.length>0&&{topics:m.topics},...m.forks_count&&m.forks_count>0&&{forksCount:m.forks_count},...m.open_issues_count&&m.open_issues_count>0&&{openIssuesCount:m.open_issues_count},...m.language&&{language:m.language},...wR(m)}}),l=c.length,d=a?/;\s*rel="next"/.test(a.link??""):l===n,u=(r-1)*n+l,p=s??u+(d?1:0),f=s!==void 0||!d?"exact":"lowerBound";return{data:{repositories:c,pagination:{currentPage:r,totalPages:d?r+1:r,perPage:n,totalMatches:p,reachableTotalMatches:u,totalMatchesKind:f,hasMore:d,...d?{nextPage:r+1}:{}}},status:200,rawResponseChars:j(i)}}async function Nv(e,t){try{let n=await Y(t),r=(e.keywords?.length??0)>0||(e.topicsToSearch?.length??0)>0,o=e,i=!!(e.stars||e.updated||e.language||e.match||o.forks||o.goodFirstIssues||o.created||o.size||o.license||o.visibility||o.archived!==void 0||e.sort&&!["best-match","updated"].includes(e.sort)),s=typeof e.owner=="string"?e.owner:Array.isArray(e.owner)?e.owner[0]:void 0;if(!r&&!i&&s)return await Mv({owner:s,sort:e.sort,limit:e.limit,page:e.page},n);let a=Hp(e);if(!a.trim())return{error:ct.QUERY_EMPTY.message,type:"http",status:400};let c=Math.min(e.limit||xR,100),l=e.page||1,d={q:a,per_page:c,page:l},u=["stars","forks","help-wanted-issues","updated"];e.sort&&u.includes(e.sort)&&(d.sort=e.sort);let p=await n.rest.search.repos(d),f=p.data.items.map(S=>{let w=S.full_name.split("/"),T=w[0]||"",k=w[1]||"";return{owner:T,repo:k,defaultBranch:S.default_branch,stars:S.stargazers_count||0,description:S.description?S.description:"No description",url:S.html_url,createdAt:S.created_at,updatedAt:S.updated_at,pushedAt:S.pushed_at,visibility:S.visibility,...S.topics&&S.topics.length>0&&{topics:S.topics},...S.forks_count&&S.forks_count>0&&{forksCount:S.forks_count},...S.open_issues_count&&S.open_issues_count>0&&{openIssuesCount:S.open_issues_count},...S.language&&{language:S.language},...wR(S)}}),m=p.data.total_count,h=Math.min(m,1e3),y=Math.ceil(h/c),g=l<y,R=Math.min(h,y*c);return{data:{repositories:f,incompleteResults:p.data.incomplete_results,pagination:{currentPage:l,totalPages:y,perPage:c,totalMatches:h,reportedTotalMatches:m,reachableTotalMatches:R,totalMatchesKind:"reported",totalMatchesCapped:m>h,hasMore:g,...g?{nextPage:l+1}:{}}},status:200,headers:bo(p.headers),rawResponseChars:j(p.data)}}catch(n){if(hn(n)){let r=Math.min(e.limit||xR,100);return{data:{repositories:[],nonExistentScope:!0,pagination:{currentPage:e.page||1,totalPages:0,perPage:r,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}},status:200,rawResponseChars:0}}return ne(n)}}var xR,Qd=b(()=>{"use strict";de();tt();oc();Oe();Ve();kt();ue();tr();ce();xR=30});var On,ls=b(()=>{"use strict";On={ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200}});function Dv(e,t){return t?e>5e4?[`Response ~${e.toLocaleString()} tokens \u2014 exceeds typical context. Reduce charLength or refine the query.`]:e>3e4?[`Response ~${e.toLocaleString()} tokens \u2014 approaching context limit. Consider reducing charLength.`]:[]:[]}function Hv(e){if(e.hasMore&&e.nextCharOffset!==void 0){let t=e.charOffset+1,n=e.charOffset+e.charLength;return[`Page ${e.currentPage}/${e.totalPages} (chars ${t}-${n} of ${e.totalChars}). Next: charOffset=${e.nextCharOffset}`]}return[]}function yW(e,t={}){let{enableWarnings:n=!0,customHints:r=[]}=t,o=[];return o.push(...r),e.estimatedTokens&&o.push(...Dv(e.estimatedTokens,n)),o.push(...Hv(e)),o}function Hc(e,t){return e.hasMore?[`Page ${e.currentPage}/${e.totalPages}. Next: page=${e.currentPage+1}`]:[]}var Gc=b(()=>{"use strict"});function TR(e,t){let n=e._cachedItems;if(!n||n.length===0){let{_cachedItems:P,...x}=e;return x}let r=t.itemsPerPage??On.ENTRIES_PER_PAGE,o=t.page??1,i=n.length,s=Math.max(1,Math.ceil(i/r)),a=(o-1)*r,c=Math.min(a+r,i),l=n.slice(a,c),d=Object.create(null),u=e.path==="/"?"":e.path,p=P=>{let x=P;u&&P.startsWith(u)&&(x=P.slice(u.length),x.startsWith("/")&&(x=x.slice(1)));let _=x.lastIndexOf("/");return _===-1?".":x.slice(0,_)},f=P=>{let x=P.lastIndexOf("/");return x===-1?P:P.slice(x+1)};for(let P of l){let x=p(P.path);d[x]||(d[x]={files:[],folders:[]});let _=f(P.path);P.type==="file"?d[x].files.push(_):d[x].folders.push(_)}for(let P of Object.keys(d)){let x=d[P];x&&(x.files.sort(),x.folders.sort())}let m=Object.create(null),h=Object.keys(d).sort((P,x)=>P==="."?-1:x==="."?1:P.localeCompare(x));for(let P of h){let x=d[P];x&&(m[P]=x)}let y=l.filter(P=>P.type==="file").length,g=l.filter(P=>P.type==="dir").length,R=n.filter(P=>P.type==="file").length,S=n.filter(P=>P.type==="dir").length,C=o<s,w={currentPage:o,totalPages:s,hasMore:C,...C?{nextPage:o+1}:{},entriesPerPage:r,totalEntries:i},T=Hc(w,{owner:e.owner,repo:e.repo,branch:e.branch,path:u,depth:t.maxDepth??1,pageFiles:y,pageFolders:g,allFiles:R,allFolders:S}),k,F=e._cachedFileSizeMap;if(F){let P=new Set(l.filter(v=>v.type==="file").map(v=>v.path)),x=e.path==="/"?"":e.path,_=Object.create(null);for(let[v,A]of Object.entries(F))for(let[I,L]of Object.entries(A)){let M=v==="."?x?`${x}/${I}`:I:x?`${x}/${v}/${I}`:`${v}/${I}`;P.has(M)&&(_[v]||(_[v]=Object.create(null)),_[v][I]=L)}Object.keys(_).length>0&&(k=_)}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:R,totalFolders:S,truncated:C,filtered:!0,originalCount:i,...e.summary.incompleteTree!==void 0&&{incompleteTree:e.summary.incompleteTree}},structure:m,...k!==void 0&&{fileSizeMap:k},...F!==void 0&&{_cachedFileSizeMap:F},pagination:w,hints:T,rawResponseChars:e.rawResponseChars}}var Wd=b(()=>{"use strict";ls();Gc()});import{RequestError as Gv}from"octokit";function ER(e){return e instanceof Gv&&Bv.has(e.status)}function Vd(e,t){try{Object.defineProperty(e,AR,{value:t,enumerable:!1,configurable:!0})}catch{}return e}function us(e){if(typeof e!="object"||e===null)return 0;let t=e[AR];return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}async function ps(e,t,n,r,o,i,s,a=new Set){if(i>s||a.has(o))return Vd(ee([],0),0);a.add(o);let c;try{c=await e.rest.repos.getContent({owner:t,repo:n,path:o||"",ref:r})}catch(m){if(ER(m))throw m;return Vd(ee([],0),1)}let l=j(c.data),u=(Array.isArray(c.data)?c.data:[c.data]).filter(m=>m.type==="file"||m.type==="dir").map(m=>({name:m.name,path:m.path,type:m.type,size:"size"in m?m.size:void 0,download_url:"download_url"in m?m.download_url:void 0,url:m.url,html_url:m.html_url,git_url:m.git_url,sha:m.sha})),p=[...u],f=0;if(i<s){let m=u.filter(y=>y.type==="dir"),h=3;for(let y=0;y<m.length;y+=h){let g=m.slice(y,y+h),R=await Promise.allSettled(g.map(S=>ps(e,t,n,r,S.path,i+1,s,a)));for(let S of R)if(S.status==="fulfilled"){let C=S.value;l+=me(C)??0,f+=us(C),p.push(...C)}else{if(ER(S.reason))throw S.reason;f+=1}}}return Vd(ee(p,l),f)}var AR,Bv,Kd=b(()=>{"use strict";ue();AR=Symbol.for("octocode.recursiveFetchFailures"),Bv=new Set([401,403,429])});import{RequestError as zv}from"octokit";function jv(e,t){let n=(t.pathPrefix??"").replace(/^\/+|\/+$/g,""),r=n?`${n}/`:"",o=Math.max(1,t.maxDepth),i=[];for(let s of e){if(!s.path||s.type!=="blob"&&s.type!=="tree")continue;let a=s.path;if(n){if(s.path===n||!s.path.startsWith(r))continue;a=s.path.slice(r.length)}let c=a.split("/").filter(Boolean).length;if(c===0||c>o)continue;let l=a.lastIndexOf("/"),d=l===-1?a:a.slice(l+1);i.push({name:d,path:s.path,type:s.type==="tree"?"dir":"file",size:s.type==="blob"?s.size:void 0,sha:s.sha,url:s.url,html_url:void 0,git_url:void 0,download_url:void 0})}return i}function LR(e=process.env){return e.OCTOCODE_GH_STRUCTURE_TREES!=="0"}async function kR(e,t){let n=(t.pathPrefix??"").replace(/^\/+|\/+$/g,""),r,o;if(n&&n!=="."){let u=n.includes("/")?n.slice(0,n.lastIndexOf("/")):"",{data:p}=await e.rest.repos.getContent({owner:t.owner,repo:t.repo,path:u,ref:t.workingBranch});o=j(p),r=Array.isArray(p)?p.find(f=>f.path===n&&f.type==="dir")?.sha:void 0}else{let{data:u}=await e.rest.repos.getBranch({owner:t.owner,repo:t.repo,branch:t.workingBranch});o=j(u),r=u.commit.commit.tree.sha}if(!r)throw new Error(`Could not resolve tree SHA for ${t.owner}/${t.repo}@${t.workingBranch}`);let i;try{i=await e.rest.git.getTree({owner:t.owner,repo:t.repo,tree_sha:r,recursive:"true",...t.ifNoneMatch?{headers:{"If-None-Match":t.ifNoneMatch}}:{}})}catch(u){if(u instanceof zv&&u.status===304)return{items:[],truncated:!1,rawResponseChars:0,etag:t.ifNoneMatch,notModified:!0};throw u}let s=i.data,a=Ro(i.headers),c=n==="."?"":n,l=c?s.tree.map(u=>({...u,path:u.path?`${c}/${u.path}`:void 0})):s.tree;return{items:jv(l,{pathPrefix:c,maxDepth:t.maxDepth}),truncated:!!s.truncated,rawResponseChars:o+j(s),...a?{etag:a}:{}}}var _R=b(()=>{"use strict";ue();tr()});import{RequestError as vR}from"octokit";async function Xd(e,t,n,r,o,i,s){let a,c;try{o?a=o:(c=await pt(t,n,i),a=c)}catch(l){let d=ne(l);return{error:zn.NOT_FOUND.message(t,n,d.error),status:d.status}}try{let l=await e.rest.repos.getContent({owner:t,repo:n,path:r||"",ref:a,...s?{headers:{"If-None-Match":s}}:{}}),d=Ro(l.headers);return{data:l.data,workingBranch:a,...c!==void 0?{repoDefaultBranch:c}:{},...d?{etag:d}:{}}}catch(l){if(l instanceof vR&&l.status===304)return{data:null,workingBranch:a,...c!==void 0?{repoDefaultBranch:c}:{},etag:s,notModified:!0};if(!(l instanceof vR&&l.status===404)){let u=ne(l);return{error:zn.ACCESS_FAILED.message(t,n,u.error),status:u.status,rateLimitRemaining:u.rateLimitRemaining,rateLimitReset:u.rateLimitReset,retryAfter:u.retryAfter}}let d=ne(l);return{error:zn.PATH_NOT_FOUND.message(r,t,n,a),status:d.status}}}function IR(e){return e.map(t=>{let n=t;return{name:n.name,path:n.path,type:n.type,size:"size"in n?n.size:void 0,download_url:"download_url"in n?n.download_url:void 0,url:n.url,html_url:n.html_url,git_url:n.git_url,sha:n.sha}})}var OR=b(()=>{"use strict";tt();kt();de();tr()});import{shouldIgnoreDiscoveryDir as Uv,shouldIgnoreDiscoveryFile as $v}from"@octocodeai/octocode-engine/security";function Qv(e,t){let n=Object.create(null),r=a=>{let c=a;t&&a.startsWith(t)&&(c=a.slice(t.length),c.startsWith("/")&&(c=c.slice(1)));let l=c.lastIndexOf("/");return l===-1?".":c.slice(0,l)},o=a=>{let c=a.lastIndexOf("/");return c===-1?a:a.slice(c+1)};for(let a of e){let c=r(a.path);n[c]||(n[c]={files:[],folders:[]});let l=o(a.path);a.type==="file"?n[c].files.push(l):n[c].folders.push(l)}for(let a of Object.values(n))a&&(a.files.sort(),a.folders.sort());let i=Object.keys(n).sort((a,c)=>a==="."?-1:c==="."?1:a.localeCompare(c)),s=Object.create(null);for(let a of i){let c=n[a];c&&(s[a]=c)}return s}function FR(e,t){let n=Object.create(null);for(let r of e){if(r.type!=="file"||r.size===void 0)continue;let o=r.path;t&&r.path.startsWith(t)&&(o=r.path.slice(t.length).replace(/^\//,""));let i=o.lastIndexOf("/"),s=i===-1?".":o.slice(0,i),a=i===-1?o:o.slice(i+1);n[s]||(n[s]=Object.create(null)),n[s][a]=r.size}return n}function Bc(e){let{owner:t,repo:n,workingBranch:r,repoDefaultBranch:o,cleanPath:i,depth:s,partialTreeFailures:a,incompleteTree:c,rawResponseChars:l,includeSizes:d,extraHints:u=[]}=e,p=e.allItems.filter(L=>L.type==="dir"?!Uv(L.name):!$v(L.path));p.sort((L,M)=>{if(L.type!==M.type)return L.type==="dir"?-1:1;let K=L.path.split("/").length,ie=M.path.split("/").length;return K!==ie?K-ie:L.path.localeCompare(M.path)});let f=e.itemsPerPage??On.ENTRIES_PER_PAGE,m=e.page??1,h=p.length,y=Math.max(1,Math.ceil(h/f)),g=(m-1)*f,R=Math.min(g+f,h),S=p.slice(g,R),C=Qv(S,i),w=d?FR(p,i):void 0,T=w!==void 0?FR(S,i):void 0,k=S.filter(L=>L.type==="file").length,F=S.filter(L=>L.type==="dir").length,P=p.filter(L=>L.type==="file").length,x=p.filter(L=>L.type==="dir").length,_=m<y,v={currentPage:m,totalPages:y,hasMore:_,..._?{nextPage:m+1}:{},entriesPerPage:f,totalEntries:h},A=Hc(v,{owner:t,repo:n,branch:r,path:i,depth:s,pageFiles:k,pageFolders:F,allFiles:P,allFolders:x});a>0&&A.unshift(`Partial tree: ${a} subdirectory subtree(s) failed to load and are missing from this structure. The listing is incomplete \u2014 retry or narrow the path/depth.`);for(let L of u)A.unshift(L);let I=[...c?["providerTreeTruncated"]:[],...a>0?["partialTreeFailures"]:[]];return{owner:t,repo:n,branch:r,...o!==void 0&&{defaultBranch:o},path:i||"/",apiSource:!0,summary:{totalFiles:P,totalFolders:x,truncated:_,filtered:!0,originalCount:p.length,...c?{incompleteTree:!0}:{}},structure:C,...T!==void 0&&{fileSizeMap:T},...w!==void 0&&{_cachedFileSizeMap:w},pagination:v,...I.length>0?{isPartial:!0,partialReasons:I}:{},...c?{terminalLimit:!0}:{},hints:A,rawResponseChars:l,_cachedItems:p.map(L=>({path:L.path,type:L.type}))}}var MR=b(()=>{"use strict";ls();Gc()});async function Yd(e,t,n){let r=await re(t),o=q("gh-repo-structure-api",{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,depth:e.maxDepth,includeSizes:e.includeSizes===!0,auth:r},n),i=await mc(o,async({ifNoneMatch:s})=>{let a=await Wv({...e,itemsPerPage:e.itemsPerPage??On.ENTRIES_PER_PAGE,page:e.page??1},t,s);return{value:a.result,etag:a.etag,notModified:a.notModified}},{shouldCache:s=>!("error"in s)&&s.isPartial!==!0});return!("error"in i)&&i.structure?TR(i,e):i}async function Wv(e,t,n){try{let r=await Y(t),{owner:o,repo:i,branch:s,path:a="",maxDepth:c=1}=e,l=a.replace(/^\/+|\/+$/g,"");if(c>1&&LR())return await Vv(r,e,l,c,t,n);let d=await Xd(r,o,i,l,s,t,c===1?n:void 0);if("error"in d)return{result:d};if(d.notModified)return{result:{error:"not-modified",status:304},etag:d.etag??n,notModified:!0};let{data:u,workingBranch:p,repoDefaultBranch:f,etag:m}=d,h=j(u),y=Array.isArray(u)?u:[u],g=IR(y),R=0;if(c>1){let S=await ps(r,o,i,p,l,1,c);R=us(S),h=me(S)??0,g=S}return{result:Bc({owner:o,repo:i,workingBranch:p,repoDefaultBranch:f,cleanPath:l,depth:c,allItems:g,partialTreeFailures:R,incompleteTree:!1,rawResponseChars:h,includeSizes:e.includeSizes===!0,itemsPerPage:e.itemsPerPage,page:e.page}),...c===1&&m?{etag:m}:{}}}catch(r){let o=ne(r);return{result:{error:zn.STRUCTURE_EXPLORATION_FAILED.message,status:o.status,rateLimitRemaining:o.rateLimitRemaining,rateLimitReset:o.rateLimitReset,retryAfter:o.retryAfter}}}}async function Vv(e,t,n,r,o,i){let{owner:s,repo:a,branch:c}=t,l,d;try{c?l=c:(d=await pt(s,a,o),l=d)}catch(g){let R=ne(g);return{result:{error:zn.NOT_FOUND.message(s,a,R.error),status:R.status}}}let u;try{u=await kR(e,{owner:s,repo:a,workingBranch:l,pathPrefix:n,maxDepth:r,ifNoneMatch:i})}catch(g){let R=await Xd(e,s,a,n,l,o);if("error"in R)return{result:R};let S=await ps(e,s,a,R.workingBranch,n,1,r);return{result:Bc({owner:s,repo:a,workingBranch:R.workingBranch,repoDefaultBranch:d,cleanPath:n,depth:r,allItems:S,partialTreeFailures:us(S),incompleteTree:!1,rawResponseChars:me(S)??0,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:[`Git Trees fetch failed (${g instanceof Error?g.message:String(g)}); used Contents recursion instead.`]})}}if(u.notModified)return{result:{error:"not-modified",status:304},etag:u.etag??i,notModified:!0};let p=u.items,f=0,m=u.rawResponseChars,h=u.truncated,y=[];if(h){y.push("Git Trees response was truncated by GitHub \u2014 this structure listing may be incomplete. Narrow path/depth or set OCTOCODE_GH_STRUCTURE_TREES=0 for Contents recursion.");try{let g=await ps(e,s,a,l,n,1,r);f=us(g),m+=me(g)??0,p=[...p,...g].filter((S,C,w)=>w.findIndex(T=>T.path===S.path)===C)}catch{}}return{result:Bc({owner:s,repo:a,workingBranch:l,repoDefaultBranch:d,cleanPath:n,depth:r,allItems:p,partialTreeFailures:f,incompleteTree:h,rawResponseChars:m,includeSizes:t.includeSizes===!0,itemsPerPage:t.itemsPerPage,page:t.page,extraHints:y}),...u.etag&&!h?{etag:u.etag}:{}}}var Jd=b(()=>{"use strict";ls();de();tt();Oe();Ki();kt();ue();Wd();Kd();_R();OR();MR()});var NR,Zd=b(()=>{"use strict";NR={github:{cloneRepo:!0,fetchDirectoryToDisk:!0,requiresScopedCodeSearch:!1,supportsMergedState:!1,supportsMultiTopicSearch:!0}}});function vt(e){return!!(e&&typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&"type"in e)}function Kv(e){return!!(e&&typeof e=="object"&&e!==null&&"data"in e&&"status"in e&&typeof e.status=="number")}function Xv(e){return!!(e&&typeof e=="object"&&e!==null&&"id"in e&&typeof e.id=="number"&&"name"in e&&typeof e.name=="string"&&"full_name"in e&&typeof e.full_name=="string"&&"private"in e&&typeof e.private=="boolean")}var Mr=b(()=>{"use strict"});function mt(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 Yv(e){if(e.rateLimitRemaining===void 0&&e.retryAfter===void 0&&e.rateLimitReset===void 0)return;let t=e.rateLimitReset,n=t&&!isNaN(t)?Math.floor(t/1e3):Math.floor(Date.now()/1e3)+(e.retryAfter??3600);return{remaining:e.rateLimitRemaining??0,reset:n,retryAfter:e.retryAfter}}function Fn(e){return{error:e.error,status:e.status||500,provider:"github",hints:e.hints,rateLimit:Yv(e)}}function zc(e){return Jv(e)?Fn({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 Jv(e){if(typeof e!="object"||e===null||!("error"in e))return!1;let n=e.error;return typeof n=="string"||Zv(n)}function Zv(e){return typeof e=="object"&&e!==null&&typeof e.toString=="function"}var Nr=b(()=>{"use strict"});function ds(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}:{}}}var qd=b(()=>{"use strict"});function qv(e){return{items:e.items.map(n=>({path:n.path,matches:n.matches.map(r=>({context:r.context,positions:r.positions})),url:n.url||"",repository:{id:n.repository.nameWithOwner,name:n.repository.nameWithOwner,url:n.repository.url},lastModifiedAt:n.lastModifiedAt})),totalCount:e.total_count,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,...e.pagination?.hasMore?{nextPage:(e.pagination?.currentPage||1)+1}:{},totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...ds(e.pagination)},repositoryContext:e._researchContext?.repositoryContext,nonExistentScope:e.nonExistentScope,incompleteResults:e.incompleteResults}}function eI(e){let t=e.repositories.map(n=>({id:`${n.owner}/${n.repo}`,name:n.repo,fullPath:`${n.owner}/${n.repo}`,description:n.description||null,url:n.url,cloneUrl:`https://github.com/${n.owner}/${n.repo}.git`,defaultBranch:n.defaultBranch||"main",stars:n.stars||0,forks:n.forksCount||0,visibility:n.visibility||"public",topics:n.topics||[],createdAt:n.createdAt,updatedAt:n.updatedAt,lastActivityAt:n.pushedAt||n.updatedAt,openIssuesCount:n.openIssuesCount,language:n.language,license:n.license,homepage:n.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,...ds(e.pagination)},nonExistentScope:e.nonExistentScope,incompleteResults:e.incompleteResults}}async function DR(e,t,n=mt){let{owner:r,repo:o}=n(e.projectId),i=r||e.owner,s={keywords:e.keywords,owner:i,repo:o,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning},a=await Ib(s,t);return vt(a)?Fn(a):a.data?{data:qv(a.data),status:200,provider:"github",rawResponseChars:a.rawResponseChars??j(a.data)}:{error:"No data returned from GitHub API",status:500,provider:"github"}}async function HR(e,t){let n={keywords:e.keywords,topicsToSearch:e.topics,owner:e.owner,stars:e.stars??(e.minStars?`>=${e.minStars}`:void 0),size:e.size,created:e.created,updated:e.updated,language:e.language,match:e.match,archived:e.archived,visibility:e.visibility,forks:e.forks,license:e.license,goodFirstIssues:e.goodFirstIssues,sort:e.sort==="best-match"?void 0:e.sort,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning},r=await PR(n,t);return"error"in r?zc(r)??{error:"Unknown GitHub API error",status:500,provider:"github"}:!("data"in r)||!r.data?{error:"No data returned from GitHub API",status:500,provider:"github"}:{data:eI(r.data),status:200,provider:"github",rawResponseChars:r.rawResponseChars??j(r.data)}}var em=b(()=>{"use strict";Bp();Qd();Mr();ue();Nr();qd()});function nI(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:rI(e,t),matchNotFound:e.matchNotFound,searchedFor:e.searchedFor}}function rI(e,t){if(e.matchNotFound===!0){let n=e;if(Array.isArray(n.hints)&&n.hints.length>0){let a=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"";return n.hints.map(c=>c.replace(" in file",` in file${a}`))}let r=e.searchedFor??t.matchString??"",o=typeof e.totalLines=="number"?` (${e.totalLines} lines scanned)`:"",s=t.matchStringIsRegex===!0?"Try a different pattern, widen the anchor, or use fullContent=true to inspect the file.":"Try matchStringIsRegex=true for pattern matching, a different anchor, or fullContent=true.";return[`No matches for "${r}" in file${o}. ${s}`]}return e.warnings??e.matchLocations}async function GR(e,t,n=mt){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for file content",status:400,provider:"github"};let i={owner:r,repo:o,path:e.path,type:"file",branch:e.ref,startLine:e.startLine,endLine:e.endLine,matchString:e.matchString,contextLines:e.contextLines??5,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,charOffset:e.charOffset,charLength:e.charLength,fullContent:e.fullContent,forceRefresh:e.forceRefresh,minify:e.minify??"standard",goal:e.goal,reasoning:e.reasoning},s=await aR(i,t);if(vt(s))return Fn(s);if(!s.data)return{error:"No data returned from GitHub API",status:500,provider:"github"};let a=s.data.hints;return{data:nI(s.data,e),status:200,provider:"github",rawResponseChars:s.rawResponseChars??j(s.data),...a?.length?{hints:a}:{}}}var tm=b(()=>{"use strict";fd();Mr();ue();Nr()});function iI(e,t,n=mt){let r=(e.pullRequests||[]).map(a=>({number:a.number,...a.collectionStates?{collectionStates:a.collectionStates}:{},...a.providerLimits?.length?{providerLimits:a.providerLimits}:{},title:a.title,body:a.body||null,...a.bodyPagination&&{bodyPagination:a.bodyPagination},state:a.merged?"merged":a.state,draft:a.draft||!1,author:a.author,assignees:a.assignees?.map(c=>typeof c=="string"?c:String(c.login??""))||[],labels:a.labels?.map(c=>typeof c=="string"?c:c.name??"")||[],sourceBranch:a.headRef||"",targetBranch:a.baseRef||"",sourceSha:a.headSha,targetSha:a.baseSha,createdAt:a.createdAt,updatedAt:a.updatedAt,closedAt:a.closedAt,mergedAt:a.mergedAt,commentsCount:a.comments,changedFilesCount:a.changedFiles,additions:a.additions,deletions:a.deletions,comments:a.commentDetails?.map(c=>({id:c.id,author:c.user,body:c.body,...c.bodyPagination&&{bodyPagination:c.bodyPagination},createdAt:c.createdAt,updatedAt:c.updatedAt,...c.commentType&&{commentType:c.commentType},...c.path&&{path:c.path},...c.line!==void 0&&{line:c.line},...c.inReplyToId!=null&&{inReplyToId:c.inReplyToId}})),reviews:a.reviews?.map(c=>({id:c.id,user:c.user,state:c.state,body:c.body,submittedAt:c.submittedAt,commitId:c.commitId})),commits:a.commitDetails?.map(c=>({sha:c.sha,filesCollectionState:c.filesCollectionState,message:c.message,author:c.author,date:c.date,...c.files?{files:c.files}:{}})),fileChanges:a.fileChanges?.map(c=>({path:c.filename,status:c.status,additions:c.additions,deletions:c.deletions,patch:c.patch})),...Array.isArray(a.sanitizationWarnings)&&a.sanitizationWarnings.length>0?{sanitizationWarnings:a.sanitizationWarnings}:{}})),{owner:o,repo:i}=t.projectId?n(t.projectId):{owner:void 0,repo:void 0},s=o||t.owner;return{items:r,totalCount:e.totalCount||r.length,...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,...ds(e.pagination)},...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},repositoryContext:s&&i?{owner:s,repo:i}:void 0}}function sI(e,t,n){return{owner:t,repo:n,query:e.query,prNumber:e.number,state:e.state==="merged"?"closed":e.state==="all"?void 0:e.state,merged:e.state==="merged"?!0:void 0,draft:e.draft,author:e.author,assignee:e.assignee,commenter:e.commenter,mentions:e.mentions,"reviewed-by":e.reviewedBy,"review-requested":e.reviewRequested,label:e.labels,base:e.baseBranch,head:e.headBranch,created:e.created,updated:e.updated,closed:e.closed,"merged-at":e.mergedAt,comments:e.comments,reactions:e.reactions,match:e.match,checks:e.checks,review:e.review,archived:e.archived,content:e.content,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,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 BR(e,t,n=mt){let{owner:r,repo:o}=e.projectId?n(e.projectId):{owner:void 0,repo:void 0},i=r||e.owner,s=sI(e,i,o),a=await SR(s,t);return a.error?Fn({error:typeof a.error=="string"?a.error:String(a.error),status:a.status||500,hints:a.hints,rateLimitRemaining:a.rateLimitRemaining,rateLimitReset:a.rateLimitReset,retryAfter:a.retryAfter}):{data:iI(a,e,n),status:200,provider:"github",rawResponseChars:a.rawResponseChars??j(a)}}var nm=b(()=>{"use strict";Hd();ue();Nr();qd()});import{z as jc}from"zod";function rt(e){return{...e,description:e.instructions}}function z(e,t){return jc.number().int().min(e).max(t)}function He(){return z(1,Dr).default(1)}function Ge(){return z(1,Dr).optional()}function Qc(){return z(0,ms).optional()}function ko(){return z(1,xt).optional()}function ft(){return z(0,cI).optional()}function Gt(){return z(1,lI).optional()}function V(e,t,n=""){let r={};for(let o of Object.keys(t)){let i=t[o],s=n?`${n}.${o}`:o,c=n===""&&uI.has(o)?Xi[s]:e[s]??(i.description?void 0:pI[o]);r[o]=c?i.describe(c):i}return jc.object(r).strict()}function Wc(e,t){let n=e.fullContent===!0,r=e.matchString!==void 0,o=e.startLine!==void 0||e.endLine!==void 0;n&&r&&t.addIssue({code:"custom",message:"Choose fullContent or matchString.",path:["matchString"]}),n&&o&&t.addIssue({code:"custom",message:"Choose fullContent or startLine/endLine.",path:["startLine"]}),r&&o&&t.addIssue({code:"custom",message:"Choose matchString or startLine/endLine.",path:["startLine"]}),e.startLine===void 0!=(e.endLine===void 0)&&t.addIssue({code:"custom",message:"Set startLine and endLine together.",path:[e.startLine===void 0?"startLine":"endLine"]}),e.startLine!==void 0&&e.endLine!==void 0&&e.endLine<e.startLine&&t.addIssue({code:"custom",message:"Set endLine greater than or equal to startLine.",path:["endLine"]})}var ms,Dr,cI,lI,xt,zR,Uc,rm,$c,Lo,bn,Rn,jR,UR,$R,QR,om,WR,VR,KR,XR,Fe,se,uI,pI,Me=b(()=>{"use strict";Yi();ms=100,Dr=1e3,cI=1e8,lI=5e4,xt=1e9,zR=1e5,Uc=20,rm=100,$c=1e4,Lo=50,bn=100,Rn=30,jR=200,UR=100,$R=1e5,QR=500,om=1e5,WR=1e3,VR=20,KR=100,XR=20;Fe=jc.array(jc.string()).optional();se=Kp.shape,uI=new Set(Object.keys(se)),pI={owner:"Repository owner (user or org).",repo:"Repository name, without the owner.",branch:"Branch, tag, or commit SHA; omit for the default branch.",path:"Target path. GitHub tools: repo-relative, exact case, no leading slash. Local tools: absolute path.",page:"Result page, 1-based. Advance only while pagination.hasMore.",itemsPerPage:"Items per result page.",limit:"Total result cap applied before pagination.",pageSize:"Results returned in one page.",contextLines:"Extra source lines around each match/anchor.",charLength:"Content-window length; continue with the returned offset when partial.",charOffset:"Content-window start; copy the returned offset. A partial window cannot prove absence."}});async function dI(e,t,n){try{let r=await re(n),o=q("gh-repo-metadata",{owner:e,repo:t,kind:"languages",auth:r});return await oe(o,async()=>{let s=await(await Y(n)).rest.repos.listLanguages({owner:e,repo:t}),a=Object.entries(s.data).sort((c,l)=>l[1]-c[1]);return{languages:Object.fromEntries(a),dominantLanguage:a[0]?.[0],rawResponseChars:j(s.data)}},{cacheRole:"helper"})}catch{return{rawResponseChars:0,metadataPagination:{languages:{currentPage:1,perPage:1,returned:0,hasMore:!1,failed:!0}}}}}async function im(e,t,n,r,o){let i={contributors:30,branches:100,tags:50}[e];try{let s=await re(o),a=q("gh-repo-metadata",{owner:t,repo:n,kind:e,page:r,perPage:i,auth:s});return await oe(a,async()=>{let c=await Y(o),l={owner:t,repo:n,page:r,per_page:i},d=await(e==="contributors"?c.rest.repos.listContributors(l):e==="branches"?c.rest.repos.listBranches(l):c.rest.repos.listTags(l)),u=Object.entries(d.headers??{}).find(([h])=>h.toLowerCase()==="link")?.[1],p=typeof u=="string"&&/rel=["']next["']/.test(u),f=d.data,m=e==="contributors"?{contributors:f.filter(h=>typeof h.login=="string").map(h=>({login:h.login,contributions:h.contributions??0}))}:e==="branches"?{branches:f.map(h=>h.name)}:{tags:f.map(h=>({name:h.name,sha:h.commit.sha}))};return{...m,rawResponseChars:j(f),metadataPagination:{[e]:{currentPage:r,perPage:i,returned:Object.values(m)[0].length,hasMore:p,...p&&r>=Dr?{terminalLimit:!0}:{}}}}},{cacheRole:"helper"})}catch{return{rawResponseChars:0,metadataPagination:{[e]:{currentPage:r,perPage:i,returned:0,hasMore:!1,failed:!0}}}}}function mI(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 YR(e,t,n=mt){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for repository structure",status:400,provider:"github"};let i={owner:r,repo:o,branch:e.ref||"HEAD",path:e.path,maxDepth:e.depth,itemsPerPage:e.itemsPerPage,page:e.page,includeSizes:e.includeSizes,goal:e.goal,reasoning:e.reasoning},[s,a,c,l,d]=await Promise.all([Yd(i,t),e.includeLanguages?dI(r,o,t):Promise.resolve(void 0),e.includeContributors?im("contributors",r,o,e.metadataPage??1,t):Promise.resolve(void 0),e.includeBranches?im("branches",r,o,e.metadataPage??1,t):Promise.resolve(void 0),e.includeTags?im("tags",r,o,e.metadataPage??1,t):Promise.resolve(void 0)]);if("error"in s)return zc(s)??{error:"Unknown GitHub API error",status:500,provider:"github"};let u=mI(s),p={...c?.metadataPagination,...l?.metadataPagination,...d?.metadataPagination,...a?.metadataPagination},f=Object.values(p),m=new Set(u.partialReasons);for(let h of f)h?.failed?m.add("metadataFetchFailed"):h?.terminalLimit?m.add("metadataPageLimit"):h?.hasMore&&m.add("metadataPagination");return{data:{...u,...a?.languages?{languages:a.languages,dominantLanguage:a.dominantLanguage}:{},...c?.contributors?{contributors:c.contributors}:{},...l?.branches?{branches:l.branches}:{},...d?.tags?{tags:d.tags}:{},...f.length>0?{metadataPagination:p}:{},...m.size>0?{isPartial:!0,partialReasons:[...m]}:{},...f.some(h=>h?.terminalLimit)?{terminalLimit:!0}:{}},status:200,provider:"github",rawResponseChars:(s.rawResponseChars??j(s))+(c?.rawResponseChars??0)+(l?.rawResponseChars??0)+(d?.rawResponseChars??0)+(a?.rawResponseChars??0)}}var sm=b(()=>{"use strict";Jd();de();Oe();Ve();Me();ue();Nr()});var Vc,am=b(()=>{"use strict";em();tm();nm();sm();tt();de();Zd();Nr();Vc=class{type="github";capabilities=NR.github;authInfo;constructor(t){t?.authInfo?this.authInfo=t.authInfo:t?.token&&(this.authInfo={token:t.token})}async searchCode(t){try{return await DR(t,this.authInfo,mt)}catch(n){return this.handleError(n)}}async getFileContent(t){try{return await GR(t,this.authInfo,mt)}catch(n){return this.handleError(n)}}async searchRepos(t){try{return await HR(t,this.authInfo)}catch(n){return this.handleError(n)}}async searchPullRequests(t){try{return await BR(t,this.authInfo,mt)}catch(n){return this.handleError(n)}}async getRepoStructure(t){try{return await YR(t,this.authInfo,mt)}catch(n){return this.handleError(n)}}async resolveDefaultBranch(t){let{owner:n,repo:r}=mt(t);if(!n||!r)throw new Error(`Cannot resolve default branch: invalid projectId '${t}'.`);return pt(n,r,this.authInfo)}handleError(t){let n=ne(t);return Fn(n)}}});import{createHash as hI}from"crypto";function ZR(e){return Date.now()-e.createdAt<gI}function yI(e=0){for(let[n,r]of Yt.entries())ZR(r)||Yt.delete(n);let t=Math.max(0,JR-e);if(Yt.size>t){let n=[...Yt.entries()].sort((o,i)=>o[1].lastAccessedAt-i[1].lastAccessedAt),r=Yt.size-t;for(let o=0;o<r&&o<n.length;o++){let i=n[o];i&&Yt.delete(i[0])}}}function bI(e){return e?hI("sha256").update(e).digest("hex").slice(0,16):"default"}function RI(e){if(e==="default")return e;try{let t=new URL(e),n=`${t.protocol}//${t.hostname.toLowerCase()}`;return t.port&&(n+=`:${t.port}`),n+=t.pathname.replace(/\/+$/,"")||"",n}catch{return e.replace(/\/+$/,"")}}function SI(e,t){let n=RI(t?.baseUrl||"default"),r=bI(t?.token||t?.authInfo?.token);return`${e}:${n}:${r}`}function cm(e="github",t){if(e!=="github")throw new Error(`Unknown provider type: '${e}'. Only 'github' is supported.`);let n=SI(e,t),r=Yt.get(n);if(r&&ZR(r))return r.lastAccessedAt=Date.now(),r.provider;r&&Yt.delete(n),Yt.size>=JR&&yI(1);let o=new Vc({...t,type:e}),i=Date.now();return Yt.set(n,{provider:o,createdAt:i,lastAccessedAt:i}),o}function OV(){Yt.clear()}async function qR(){try{return cm("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}
|
|
24
|
+
`),[{provider:"github",ok:!1,error:t}]}}var gI,JR,Yt,Kc=b(()=>{"use strict";am();gI=3600*1e3,JR=20,Yt=new Map});import{ContentSanitizer as CI}from"@octocodeai/octocode-engine/contentSanitizer";import{getConfigSync as xI}from"@octocodeai/config";function wI(){try{return xI().output.format}catch{return"yaml"}}function HV(e){if(e==null||typeof e!="object")return{content:[{type:"text",text:`error: "Invalid result options"
|
|
25
|
+
`}],isError:!0};let{data:t,instructions:n,isError:r}=e;return{content:[{type:"text",text:_o({data:t,instructions:n})}],isError:!!r}}function Mn(e){if(e==null)return e;if(typeof e=="string")return CI.sanitizeContent(e).content;if(Array.isArray(e))return e.map(t=>Mn(t));if(typeof e=="object"){let t={};for(let[n,r]of Object.entries(e))n!=="warnings"&&(t[n]=Mn(r));return t}return e}function GV(e,t){if(t==="json")return JSON.stringify(e);let n=Array.isArray(e.content)?e.content.map(r=>"text"in r&&typeof r.text=="string"?r.text:"").filter(r=>r.length>0):[];return n.length>0?n.join(`
|
|
39
26
|
|
|
40
|
-
`):e.structuredContent!==void 0?JSON.stringify(e.structuredContent,null,2):JSON.stringify(e,null,2)}function Qr(e,t){let n=ii(e)??{},r=sn(n),o=dE(),i="results"in r?["results","index","status","cache","meta","data"]:["instructions","status","data"];return o==="json"?JSON.stringify(ra(r,t||i),null,2):D.jsonToYamlString(r,{keysPriority:t||i})}function ra(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(o=>ra(o,t));if(typeof e!="object")return e;let n=e,r={};for(let o of t)o in n&&(r[o]=ra(n[o],t));for(let o of Object.keys(n))o in r||(r[o]=ra(n[o],t));return r}var mE=new Set(["currentPage","totalPages","perPage","itemsPerPage","entriesPerPage","filesPerPage","totalMatches","totalFiles","totalEntries","totalItems","totalResults","totalReferences","reportedTotalMatches","reachableTotalMatches","totalMatchesKind","totalMatchesCapped","hasMore","nextPage","charOffset","charLength","totalChars","totalBytes","nextCharOffset"]),fE=["totalMatches","totalItems","totalFiles","totalEntries","totalResults","totalReferences","reportedTotalMatches","reachableTotalMatches"];function hE(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=e,n=Object.keys(t);return n.length===0||!n.every(r=>mE.has(r))||fE.some(r=>typeof t[r]=="number"&&t[r]>0)||t.hasMore!==!1?!1:typeof t.totalPages=="number"?t.totalPages<=1:"charOffset"in t||"nextCharOffset"in t?(t.charOffset??0)===0:!0}function ii(e,t={}){if(e==null||Number.isNaN(e))return;let{inFilesObject:n=!1,depth:r=0}=t;if(Array.isArray(e)){let o=e.map(s=>ii(s,{inFilesObject:n,depth:r+1})).filter(s=>s!==void 0),i=n&&r>=2;return o.length>0||i?o:void 0}if(typeof e=="object"&&e!==null){let o={},i=!1;for(let[s,a]of Object.entries(e)){if(s==="results"&&r===0&&Array.isArray(a)&&a.length===0){o[s]=[],i=!0;continue}if(s==="warnings"||hE(a))continue;let c=(s==="files"||s==="repositories")&&!n,l=ii(a,{inFilesObject:n||c,depth:c?0:r+1});l!==void 0&&(o[s]=l,i=!0)}return i?o:void 0}return e}import{z as Ur}from"zod";function M(e,t){return Ur.preprocess(n=>typeof n=="number"&&Number.isFinite(n)?Math.min(Math.max(n,e),t):n,Ur.number().int().min(e).max(t))}var be=M(1,1e3).optional().default(1),$r=M(0,100).optional(),Wr=M(1,1e9).optional(),at=Ur.preprocess(e=>typeof e=="number"&&Number.isFinite(e)?Math.max(e,0):e,Ur.number().nonnegative().refine(Number.isSafeInteger,"Expected a safe non-negative integer")),gE={responseCharOffset:at.optional().describe("Full-response char offset; re-call with returned value when hasMore."),responseCharLength:M(1,5e4).optional().describe("Full-response char window.")};function Z(e,t={}){let{maxQueries:n=5}=t;return Ur.object({queries:Ur.array(e).min(1).max(n).describe("Parallel queries; response rows use matching zero-based indexes."),...gE}).strict()}function yE(e){return typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&("type"in e||"status"in e||"scopesSuggestion"in e)}function N(e,t,n={}){let{extra:r}=n,o={status:"error"};if(yE(e))o.error=e;else if(Ec(e))o.error=e.message,o.errorCode=e.errorCode;else if(typeof e=="string")o.error=e;else if(e instanceof Error){let i=cm(e);o.error=i.message,o.errorCode=i.errorCode}else o.error="Unknown error occurred";if(r){let{hints:i,...s}=r;Object.assign(o,s)}return n.rawResponse===void 0?o:W(o,n.rawResponse)}function tt(e,t,n={}){let r=e.safeParse(t);if(r.success)return{ok:!0,data:r.data};let o=r.error.issues.map(s=>s.message).join("; "),i=n.prefix===!0?`Validation error: ${o}`:o;return{ok:!1,error:N(i,t,{toolName:n.toolName})}}async function jQ(e,t,n){if(e)try{await e(t,n)}catch{return}}function ge(e,t,n,r,o){let i=n?void 0:"empty",s={...i!==void 0?{status:i}:{},...t};return o?.rawResponse===void 0?s:W(s,o.rawResponse)}function oa(e,t){let n={error:e.error||"Provider error",type:"http",status:e.status,rateLimitRemaining:e.rateLimit?.remaining,rateLimitReset:e.rateLimit?.reset?e.rateLimit.reset*1e3:void 0,retryAfter:e.rateLimit?.retryAfter};return N(n,t,{rawResponse:e.rawResponseChars??e.data??(e.error?e:void 0)})}function He(e,t,n,r){let o=N(e,t,{toolName:r});return n&&typeof o.error=="string"&&(o.error=`${n}: ${o.error}`),o}async function Ct({toolName:e,query:t,execute:n,contextMessage:r}){try{return await n()}catch(o){return He(o,t,r,e)}}import{existsSync as RE,mkdirSync as xu,renameSync as CE,rmSync as xE}from"fs";import{join as ai}from"path";import{createHash as wE}from"crypto";var WQ=["NODE_OPTIONS","GITHUB_TOKEN","GH_TOKEN","OCTOCODE_TOKEN","GITHUB_PERSONAL_ACCESS_TOKEN","NPM_TOKEN","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN"],si=["PATH","TMPDIR","TMP","TEMP","SYSTEMROOT","WINDIR","COMSPEC","PATHEXT"],Vr=[...si,"HOME","USERPROFILE","APPDATA","LOCALAPPDATA"],Sg=["HTTP_PROXY","HTTPS_PROXY","NO_PROXY","http_proxy","https_proxy","no_proxy"];function ia(e={},t=si){let n={};for(let o of t){let i=process.env[o];i!==void 0&&(n[o]=i)}let r=new Set(t);for(let[o,i]of Object.entries(e))r.has(o)&&(i===void 0?delete n[o]:n[o]=i);return n}import{spawn as Ru}from"child_process";var bE=10*1024*1024,Cu=5e3;function ar(e,t,n={}){let{timeout:r=3e4,cwd:o,env:i={},allowEnvVars:s=si,maxOutputSize:a=bE}=n;return new Promise(c=>{let l={killed:!1,stdoutChunks:[],stderrChunks:[],totalOutputSize:0},u=()=>l.stdoutChunks.join(""),p=()=>l.stderrChunks.join(""),d={cwd:o,env:ia(i,s),stdio:["ignore","pipe","pipe"]},m;try{m=Ru(e,t,d)}catch(S){c({stdout:"",stderr:"",exitCode:null,success:!1,error:S instanceof Error?S:new Error(`Failed to spawn command '${e}'`)});return}let f,h=setTimeout(()=>{if(!l.killed){l.killed=!0;try{m.kill("SIGTERM")}catch{}f=setTimeout(()=>{try{m.kill("SIGKILL")}catch{}},Cu),c({stdout:u(),stderr:p(),exitCode:null,success:!1,error:new Error(`Command timeout after ${r}ms`),timedOut:!0})}},r),y=()=>{clearTimeout(h),f!==void 0&&(clearTimeout(f),f=void 0)},g=()=>{if(l.totalOutputSize>a){if(!l.killed){l.killed=!0;try{m.kill("SIGKILL")}catch{}y(),c({stdout:u(),stderr:p(),exitCode:null,success:!1,error:new Error("Output size limit exceeded"),outputLimitExceeded:!0})}return!0}return!1};m.stdout?.on("data",S=>{if(l.killed)return;let R=S.toString();l.totalOutputSize+=Buffer.byteLength(R),!g()&&l.stdoutChunks.push(R)}),m.stderr?.on("data",S=>{if(l.killed)return;let R=S.toString();l.totalOutputSize+=Buffer.byteLength(R),!g()&&l.stderrChunks.push(R)}),m.on("close",S=>{l.killed||(y(),c({stdout:u(),stderr:p(),exitCode:S,success:S===0}))}),m.on("error",S=>{l.killed||(l.killed=!0,y(),c({stdout:u(),stderr:p(),exitCode:null,success:!1,error:S}))})})}function Rg(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,{allowEnvVars:s=si}=r,a;try{a=Ru(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:ia({},s)})}catch{o(!1);return}let c,l=()=>{clearTimeout(u),c!==void 0&&(clearTimeout(c),c=void 0)},u=setTimeout(()=>{if(!i){i=!0;try{a.kill("SIGTERM")}catch{}c=setTimeout(()=>{try{a.kill("SIGKILL")}catch{}},Cu),o(!1)}},n);a.on("close",p=>{l(),i||o(p===0)}),a.on("error",()=>{l(),i||o(!1)})})}var SE=1*1024*1024;function qQ(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,s=[],a=0,{allowEnvVars:c=Vr,maxOutputSize:l=SE}=r,u;try{u=Ru(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:ia({},c)})}catch{o(null);return}let p,d=()=>{clearTimeout(m),p!==void 0&&(clearTimeout(p),p=void 0)};u.stdout?.on("data",f=>{if(i)return;let h=f.toString();if(a+=Buffer.byteLength(h),a>l){if(!i){i=!0;try{u.kill("SIGKILL")}catch{}d(),o(null)}return}s.push(h)}),u.stderr?.on("data",()=>{});let m=setTimeout(()=>{if(!i){i=!0;try{u.kill("SIGTERM")}catch{}p=setTimeout(()=>{try{u.kill("SIGKILL")}catch{}},Cu),o(null)}},n);u.on("close",f=>{if(d(),!i)if(f===0){let h=s.join("").trim();o(h||null)}else o(null)}),u.on("error",()=>{d(),i||o(null)})})}function sa(e,t=1e3){for(let n of e){if(n.includes("\0"))return{valid:!1,error:"Null bytes not allowed in arguments"};if(n.length>t)return{valid:!1,error:"Argument too long"}}return{valid:!0}}var Cg=120*1e3,PE=30*1e3,TE=300*1e3,EE=100,xg="clone-locks",AE="clone-tmp",wg=[...Vr,"GIT_TERMINAL_PROMPT"];async function Pg(e,t,n){let r=e.owner,o=e.repo,{sparsePath:i,forceRefresh:s}=e;await NE();let a=e.branch??await Be(r,o,t),c=At(),l=Qc(c,r,o,a,i);return LE(c,l,async()=>{let u=xr(l);if(!s&&u.hit&&u.meta.source==="clone")return{localPath:l,cached:!0,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}};ms(c),Pn(l);let p=ME(t,n),d=kE(c,l);ds(d);try{if(i){if(await FE(r,o,a,d,i,p),!RE(ai(d,i)))throw new Error(`sparsePath "${i}" does not exist in ${r}/${o}@${a} \u2014 nothing was checked out for it. Verify the path with ghSearch operation:"tree", then retry with the correct sparsePath (or omit it for a full clone).`)}else await vE(r,o,a,d,p);let m=wr(r,o,a,"clone",i);return Cr(d,m),IE(d,l),{localPath:l,cached:!1,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}}}catch(m){throw ds(d),m}})}async function LE(e,t,n){Pn(t);let r=_E(e,t);xu(ai(e,"tmp",xg),{recursive:!0,mode:448});let o=Date.now();for(;;)try{xu(r,{mode:448}),Uc(r);break}catch(i){if(i.code!=="EEXIST")throw i;if(ps(r))continue;if(Date.now()-o>TE)throw new Error(`Timed out waiting for clone cache lock '${r}'.`);await OE(EE)}try{return await n()}finally{xE(r,{recursive:!0,force:!0})}}function Tg(e){return wE("sha256").update(e).digest("hex").slice(0,16)}function _E(e,t){return ai(e,"tmp",xg,Tg(t))}function kE(e,t){let n=`${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`,r=ai(e,"tmp",AE);return xu(r,{recursive:!0,mode:448}),ai(r,`${Tg(t)}-${n}`)}function IE(e,t){ds(t),Pn(t),CE(e,t)}function OE(e){return new Promise(t=>setTimeout(t,e))}async function vE(e,t,n,r,o){let i=Ag(o);i.push("clone","--depth","1","--single-branch","--branch",n,"--",Eg(e,t),r),await wu(i,Cg,`full clone of ${e}/${t}`,o)}async function FE(e,t,n,r,o,i){let s=Ag(i);s.push("clone","--filter","blob:none","--sparse","--depth","1","--single-branch","--branch",n,"--",Eg(e,t),r),await wu(s,Cg,`sparse clone of ${e}/${t}`,i),await wu(["-C",r,"sparse-checkout","set","--skip-checks","--",o],PE,`sparse-checkout set ${o}`,void 0)}function Eg(e,t){return`https://github.com/${e}/${t}.git`}function Ag(e){return e?["-c",`http.extraHeader=Authorization: Bearer ${e}`]:[]}function ME(e,t){return e?.token&&typeof e.token=="string"?e.token:t}async function NE(){try{if(!(await ar("git",["--version"],{timeout:5e3,maxOutputSize:1024,allowEnvVars:wg,env:{GIT_TERMINAL_PROMPT:"0"}})).success)throw new Error("git --version returned non-zero")}catch{throw new Error("git is not installed or not on PATH. The ghCloneRepo tool requires git to be available.")}}function DE(e,t){let n=e;return t&&(n=n.replaceAll(t,"[REDACTED]")),n=n.replace(/Authorization:\s*Bearer\s+\S+/gi,"Authorization: Bearer [REDACTED]"),n=n.replace(/Authorization:\s*token\s+\S+/gi,"Authorization: token [REDACTED]"),n}async function wu(e,t,n,r){let o=await ar("git",e,{timeout:t,maxOutputSize:5242880,allowEnvVars:wg,env:{GIT_TERMINAL_PROMPT:"0"}});if(!o.success){let i=DE(o.stderr?.trim()||"",r),s=i?`: ${i}`:"";throw new Error(`git ${n} failed${s}`)}}import{existsSync as HE,readdirSync as GE,lstatSync as BE}from"node:fs";import{join as zE}from"node:path";function Lg(e){if(!HE(e))return 0;let t;try{t=GE(e)}catch{return 0}let n=0;for(let r of t){if(r===".git")continue;let o=zE(e,r);try{let i=BE(o);if(i.isSymbolicLink())continue;i.isDirectory()?n+=Io(o):i.isFile()&&(n+=i.size)}catch{}}return n}async function _g(e,t={}){if(!Array.isArray(e))throw new Error(yo.PROMISES_NOT_ARRAY.message);if(e.length===0)return[];let{timeout:n=3e4,concurrency:r=e.length,onError:o}=t;if(n<=0)throw new Error(yo.TIMEOUT_NOT_POSITIVE.message);if(r<=0)throw new Error(yo.CONCURRENCY_NOT_POSITIVE.message);let i=e.map((c,l)=>typeof c=="function"?c:()=>Promise.reject(new Error(So.NOT_A_FUNCTION.message(l))));if(r<i.length)return jE(i,r,n,o);let s=i.map((c,l)=>kg(c,l,n,o));return(await Promise.allSettled(s)).map((c,l)=>c.status==="fulfilled"?c.value:{success:!1,error:c.reason instanceof Error?c.reason:new Error(String(c.reason)),index:l})}async function kg(e,t,n,r){let o,i=()=>{o!==void 0&&(clearTimeout(o),o=void 0)};try{let s=new Promise((c,l)=>{o=setTimeout(()=>{l(new Error(So.TIMEOUT.message(t,n)))},n)}),a=await Promise.race([e(),s]);return i(),{success:!0,data:a,index:t}}catch(s){i();let a=s instanceof Error?s:new Error(String(s));if(r)try{r(a,t)}catch(c){}return{success:!1,error:a,index:t}}}async function jE(e,t,n,r){let o=new Array(e.length),i=0,s=async()=>{for(;i<e.length;){let c=i++,l=e[c];if(!l){o[c]={success:!1,error:new Error(So.FUNCTION_UNDEFINED.message),index:c};continue}try{let u=await kg(l,c,n,r);o[c]=u}catch(u){o[c]={success:!1,error:u instanceof Error?u:new Error(String(u)),index:c}}}},a=[];for(let c=0;c<Math.min(t,e.length);c++)a.push(s());return await Promise.all(a),o}var Pu=parseInt(process.env.OCTOCODE_BULK_QUERY_TIMEOUT_MS||"60000",10)||6e4,QE=parseInt(process.env.OCTOCODE_TOOL_TIMEOUT_MS||"60000",10)||6e4,UE=5e3;function Ig(e,t,n){if(e<=1)return n?Math.max(Pu,n):Pu;let r=Math.min(Math.max(t,1),e),o=Math.ceil(e/r),i=Math.floor(QE/o),s=Math.max(UE,Math.min(i,Pu));return n?Math.max(s,n):s}async function Og(e,t,n,r){let o=[],i=[];if(!e||e.length===0)return{results:o,errors:i};let s=e.map((c,l)=>async()=>{let{value:u,cacheHit:p}=await vf(()=>t(c,l));return{result:p&&u.status!=="error"?{...u,cache:1}:u,queryIndex:l,originalQuery:c}});return(await _g(s,{timeout:Ig(e.length,n,r),continueOnError:!0,concurrency:n,onError:(c,l)=>{i.push({queryIndex:l,error:c.message})}})).forEach(c=>{if(c.success&&c.data){let l=c.data.result,u=l&&Object.keys(l).some(d=>d!=="status"&&d!=="error"&&d!=="data");if(l&&l.error===void 0&&(l.data===null||l.data===void 0)&&!u&&l.status!=="error"){i.push({queryIndex:c.data.queryIndex,error:"Query resolved without a payload (possible timeout or resource exhaustion) \u2014 retry this query alone, with tighter caps if it was large"});return}o.push({result:c.data.result,queryIndex:c.data.queryIndex,originalQuery:c.data.originalQuery})}else c.success&&i.push({queryIndex:c.index,error:"Query produced no result"})}),{results:o,errors:i}}import vg from"node:path";import{fileURLToPath as $E}from"node:url";function WE(e){if(e.length===0)return"";let t=e[0]??"";for(let r=1;r<e.length;r++){let o=e[r]??"",i=0,s=Math.min(t.length,o.length);for(;i<s&&t[i]===o[i];)i++;if(t=t.slice(0,i),t==="")break}let n=t.lastIndexOf("/");return n>0?t.slice(0,n):""}var Fg=["path","uri","absolutePath"],Mg=new Set(["next","location"]);function Tu(e,t,n){if(n>8||!e||typeof e!="object")return;if(Array.isArray(e)){for(let i of e)Tu(i,t,n+1);return}let r=e,o=VE(r);o&&t.push({obj:r,abs:o});for(let[i,s]of Object.entries(r))Mg.has(i)||s&&typeof s=="object"&&Tu(s,t,n+1)}function VE(e){let t=e.absolutePath;if(typeof t=="string"&&vg.isAbsolute(t))return t;let n=e.uri;if(typeof n=="string"&&n.startsWith("file://"))try{return $E(n)}catch{return}let r=e.path;if(typeof r=="string"&&vg.isAbsolute(r))return r}function aa(e){let t=[];for(let i of e)Tu(i?.data,t,0);if(t.length===0)return;let n=WE(t.map(i=>i.abs));if(n.length<=1)return;let r=n+"/",o=r.length;for(let{obj:i,abs:s}of t)s.startsWith(r)&&(i.path=s.slice(o),delete i.absolutePath,delete i.uri);return KE(e,r),n}function KE(e,t){function n(r,o){if(o>8||!r||typeof r!="object")return;if(Array.isArray(r)){for(let s=0;s<r.length;s++){let a=r[s];if(typeof a=="string"){let c="file://"+t;a.includes(c)?r[s]=a.replaceAll(c,""):a.includes(t)&&(r[s]=a.replaceAll(t,""))}else n(a,o+1)}return}let i=r;for(let s of Object.keys(i)){if(Mg.has(s))continue;let a=i[s];typeof a=="string"?!Fg.includes(s)&&a.includes(t)&&(i[s]=a.replaceAll(t,"")):n(a,o+1)}}for(let r of e)n(r?.data,0)}function XE(e){let t=[];for(let n of e){let r=n?.data;if(!(!r||typeof r!="object")){for(let o of Object.values(r))if(Array.isArray(o))for(let i of o)i&&typeof i=="object"&&!Array.isArray(i)&&t.push(i)}}return t}function YE(e){return typeof e=="string"&&e!==""||typeof e=="number"||typeof e=="boolean"}var ZE=new Set([...Fg,"owner","repo","name","id","type","kind","reason","isPartial"]);function ca(e){let t=XE(e);if(t.length<2)return;let n=t[0],r;for(let i of Object.keys(n)){if(ZE.has(i))continue;let s=n[i];YE(s)&&t.every(a=>a[i]===s)&&((r??={})[i]=s)}if(!r)return;let o=Object.keys(r);for(let i of t)for(let s of o)delete i[s];return r}function Eu(e,t){let n=e,r=t,o=e.results;if(Array.isArray(o)){let i=o,s=aa(i);s&&(n.base=s);let a=ca(i);a&&(n.shared=a),(s||a)&&(r=[...s?["base"]:[],...a?["shared"]:[],...t])}return{text:Qr(n,[...r]),structuredContent:sn(ii(n)??{})}}function Au(e,t,n){let r=Math.min(t+n,e.length);if(r>=e.length)return e.length;let o=Math.max(1,Math.floor(n/2)),i=[e.lastIndexOf(`
|
|
41
|
-
`,r-1)+1,e.lastIndexOf("\\n",r-1)+2].filter(a=>a>t&&a<=r),s=Math.max(...i,-1);return s-t>=o?s:r}function
|
|
42
|
-
`:`# Response page ${l}/${
|
|
43
|
-
`}${p}`,pagination:{scope:"content.text",currentPage:l,totalPages:u,hasMore:c,charOffset:s,charLength:a-s,totalChars:o,...c?{nextCharOffset:a}:{}}}}function _u(e,t,n){return t?{...e,responsePagination:{...t,...t.hasMore&&n?{next:n}:{}}}:e}function ku(e,t,n,r){if(!r?.hasMore||r.nextCharOffset===void 0)return;let o=t.map(i=>{let{goal:s,reasoning:a,...c}=i;return c});return{tool:e,query:{queries:o,responseCharLength:n?.responseCharLength,responseCharOffset:r.nextCharOffset}}}function cr(e,t){if(e===null||typeof e!="object")return!1;if(Array.isArray(e))return e.some(r=>cr(r,t));let n=e;return t(n)||Object.values(n).some(r=>cr(r,t))}function la(e,t){return e===null||typeof e!="object"?!1:Array.isArray(e)?e.some(n=>la(n,t)):Object.entries(e).some(([n,r])=>{if(r!==null&&typeof r=="object"&&!Array.isArray(r)){let o=r;if(t(n.toLowerCase())&&typeof o.tool=="string"&&o.query!==null&&typeof o.query=="object")return!0}return la(r,t)})}function Ng(e){return e.truncated===!0||e.capReached===!0||e.capped===!0||e.capturesTruncated===!0||e.totalMatchesCapped===!0||e.complete===!1||e.incompleteResults===!0||e.incompleteTree===!0||e.possiblyTruncated===!0||e.truncatedByDepth===!0||e.truncatedByBudget===!0||Array.isArray(e.partialTreeFailures)&&e.partialTreeFailures.length>0}function ua(e){return cr(e,t=>t.isPartial===!0||t.hasMore===!0||Ng(t))}function Iu(e){if(!ua(e))return[];if(cr(e,a=>a.terminalLimit===!0))return["terminalLimitReached"];let t=cr(e,a=>a.hasMore===!0),n=cr(e,Ng),r=cr(e,a=>a.isPartial===!0),o=la(e,a=>a.startsWith("next")||a.startsWith("continue")),i=la(e,a=>a.startsWith("expand")||a.startsWith("retry")||a.startsWith("narrow")||a.startsWith("fallback")||a.startsWith("escalate")||a.startsWith("read")||a.includes("search")||a.includes("completeness"));return t&&!o||n&&!i||r&&!o&&!i?["continuationMissing"]:[]}var eA=3;async function he(e,t,n,r){let o=n.concurrency??eA,{results:i,errors:s}=await Og(e,t,o,n.minQueryTimeoutMs);return tA(n,i,s,e,r)}function tA(e,t,n,r,o){let i=["results","base","shared"],s=["index","status","cache","meta","evidence","diagnostics","data"],a=[...new Set([...i,...s,...e.keysPriority||[]])],c=new Array(r.length);t.forEach(y=>{let g=y.result.status,S=iA(y.result);c[y.queryIndex]={index:y.queryIndex,...g!==void 0?{status:g}:{},...y.result.cache===1?{cache:1}:{},meta:Dg(e.toolName,y.originalQuery,S,g),data:S}}),n.forEach(y=>{let g=r[y.queryIndex];g&&(c[y.queryIndex]={index:y.queryIndex,status:"error",meta:Dg(e.toolName,g,{error:y.error},"error"),data:{error:y.error}})});let l=c.filter(y=>y!==void 0);if(e.finalize){let y=e.finalize({queries:r,results:l,config:e}),g=nA(y.structuredContent,l),S=Eu(g,y.keysPriority??a),R=y.renderText?y.renderText(S.structuredContent):S.text,C=Lu(R,o),P=_u(S.structuredContent,C.pagination,ku(e.toolName,r,o,C.pagination));return Hg(e.toolName,t,n,C.text.length),{content:[{type:"text",text:C.text}],structuredContent:P,isError:y.isError??(l.length>0&&l.every(T=>T.status==="error"))}}let p=Eu({results:l},a),d=p.text,m=Lu(d,o),f=_u(p.structuredContent,m.pagination,ku(e.toolName,r,o,m.pagination));return Hg(e.toolName,t,n,m.text.length),{content:[{type:"text",text:m.text}],structuredContent:f,isError:l.length>0&&l.every(y=>y.status==="error")}}function nA(e,t){if(!Array.isArray(e.results))return e;let n=new Map(t.map(i=>[i.index,i])),r=e.shared!==null&&typeof e.shared=="object"&&!Array.isArray(e.shared)?e.shared:void 0,o=e.results.map((i,s)=>{if(i===null||typeof i!="object"||Array.isArray(i))return i;let a=i,c=(typeof a.index=="number"?n.get(a.index):void 0)??t[s];if(!c)return a;let{cache:l,...u}=a,p=a.data!==null&&typeof a.data=="object"&&!Array.isArray(a.data)?a.data:c.data,d=rA(a.meta??c.meta,r?{...r,...p}:p);return{...u,...c.cache===1?{cache:1}:{},meta:d}});return{...e,results:o}}function Dg(e,t,n,r){let o=oA(e,t),i=n.confidence,s=r==="error"||i==="low"?"low":i==="high"||i==="medium"?i:o==="provider"||o==="lexical"||o==="syntactic"?"medium":"high",a=ua(n),c=[...typeof n.errorCode=="string"?[n.errorCode]:[],...Iu(n)],l=c.length>0||a;return{evidence:{kind:o,confidence:s},...l?{diagnostics:{...c.length>0?{codes:c}:{},...a?{partial:!0}:{}}}:{}}}function rA(e,t){let{diagnostics:n,...r}=e,o=[...(n?.codes??[]).filter(a=>a!=="continuationMissing"&&a!=="terminalLimitReached"),...Iu(t)],i=ua(t),s=o.length>0||i||(n?.hints?.length??0)>0;return{...r,...s?{diagnostics:{...o.length>0?{codes:o}:{},...n?.hints?.length?{hints:n.hints}:{},...i?{partial:!0}:{}}}:{}}}function oA(e,t){if(e==="localAnalyzeGraph")return"syntactic";if(e==="lspGetSemantics")return"semantic";if(e==="local.text")return t.mode==="structural"?"structural":"lexical";if(e==="localSearch"){let n=t.operation;return n==="structural"?"structural":n==="text"?"lexical":"exact"}return e.startsWith("gh")||e.startsWith("github.")||e==="npmSearch"?"provider":"exact"}function Hg(e,t,n,r){let o=t.reduce((i,s)=>i+(ie(s.result)??B(s.result)),0)+n.reduce((i,s)=>i+B(s),0);try{ss(e,o,r)}catch{}}function iA(e){let t=new Set(["status","cache","goal","reasoning","researchSuggestions","query"]);e.status!=="error"&&t.add("error");let n={};for(let[r,o]of Object.entries(e))t.has(r)||(n[r]=o);return n}function pa(e){return e.data!==void 0&&!e.error}function sA(e){return e.error!==void 0}import{maskSensitiveData as Gg}from"@octocodeai/octocode-engine/mask";var Ou=class extends Error{providerType;constructor(t,n){super(n),this.name="ProviderInitializationError",this.providerType=t}};function aA(){return rl().provider??nl()}function cA(e){let t=rl(),n=t.provider??nl(),{baseUrl:r,token:o}=t;try{let i=Su(n,{type:n,baseUrl:r,token:o,authInfo:e});return{providerType:n,provider:i,capabilities:i.capabilities,baseUrl:r,token:o,authInfo:e}}catch(i){let s=i instanceof Error?i.message:"Unknown provider error",a=Gg(s);throw new Ou(n,`Failed to initialize ${n} provider: ${a}`)}}function $e(e){let t;return()=>t??=cA(e)}function da(e,t){return e.capabilities[t]}async function an(e,t){let n=await t();return pa(n)?{ok:!0,response:n}:{ok:!1,result:oa(n,e)}}async function Bg(e,t){let n=t??aA(),r=await Promise.all(e.map(async s=>{try{return{meta:s.meta,response:await s.operation()}}catch(a){let c=a instanceof Error?a.message:String(a);return{meta:s.meta,response:{error:Gg(c),status:500,provider:n}}}})),o=[],i=[];for(let s of r)pa(s.response)?o.push({meta:s.meta,response:s.response}):i.push({meta:s.meta,response:s.response});return{successes:o,failures:i}}import{getConfigSync as lA}from"@octocodeai/config";async function zg(e){let{queries:t,authInfo:n}=e,r=$e(n);return he(t,async(o,i)=>Ct({toolName:I.GITHUB_CLONE_REPO,query:o,contextMessage:`Clone failed for ${o.owner}/${o.repo}`,execute:async()=>{if(lA().storage.mode==="memory")return N('Clone requires persistent local storage. Set storage.mode="persistent" or OCTOCODE_STORAGE_MODE=persistent to use ghCloneRepo.',o,{extra:{errorCode:"persistentStorageDisabled"}});let s=r();if(!da(s,"cloneRepo"))return He(new Error("ghCloneRepo is only available with the GitHub provider."),o,"Provider not supported",I.GITHUB_CLONE_REPO);let a;try{a=await Pg(o,n,s.token)}catch(d){let m=d instanceof Error?d.message:String(d);return N(`Clone failed for ${o.owner}/${o.repo}: ${m}`,o)}a.cached&&tn();let c=Lg(a.localPath),l={kind:o.sparsePath?"tree":"repo",localPath:a.localPath,source:"clone",cached:a.cached,complete:!0,resolvedBranch:a.branch,...o.sparsePath?{requestedPath:o.sparsePath}:{}},u={viewStructure:{tool:"localSearch",query:{operation:"tree",path:a.localPath},why:"Browse the cloned directory before choosing a text, structural, or file-discovery operation.",confidence:"exact"}},p={owner:o.owner,repo:o.repo,totalSize:c,location:l,next:u};return ge(o,p,!0,I.GITHUB_CLONE_REPO,{rawResponse:c})}}),{toolName:I.GITHUB_CLONE_REPO,keysPriority:["totalSize","location","error"],minQueryTimeoutMs:13e4},e)}import{z as jg}from"zod";function uA(e,t){return e?.description&&!t.description?t.describe(e.description):t}function Qg(e,t){let n={};for(let[r,o]of Object.entries(t))n[r]=uA(e.shape[r],o);return n}function pA(e,t){let n=e;return n.safeExtend?n.safeExtend(t):e.extend(t)}function Ug(e,t){if(!t?.length)return e;let n=new Set(t);return jg.object(Object.fromEntries(Object.entries(e.shape).filter(([r])=>!n.has(r))))}function se(e,t={},n={}){let r=Ug(e,n.omit);return pA(r,Qg(r,t)).strict()}function pe(e,t={},n={}){let r=Ug(e,n.omit);return jg.object({...r.shape,...Qg(r,t)}).strict()}var ma=se(Bl),vu=Z(ma);import{z as mA}from"zod";import{z as Ft}from"zod";var Wg=["fullContent","matchString","matchStringIsRegex","matchStringCaseSensitive","startLine","endLine"],dA=[...Wg,"contextLines","charOffset","charLength","minify"];function Vg(e,t){let n=new Set(t);return Object.fromEntries(Object.entries(e).filter(([r])=>!n.has(r)))}function fa(e,t){return e.description?t.describe(e.description):t}function Pe(e,t){let n=e[t];if(!n)throw new TypeError(`Expected schema field: ${t}`);return n}function Te(e,t){return Pe(e,t).nonoptional()}function $g(e,t){let n=Vg(e.shape,[...Wg,...t?["type"]:[]]),r=t?{type:t}:{},o=fa(Pe(e.shape,"fullContent"),Ft.literal(!1).optional()),i=fa(Pe(e.shape,"fullContent"),Ft.literal(!0)),s=Ft.object({...n,...r,fullContent:o}).strict(),a=Ft.object({...n,...r,fullContent:i}).strict(),c=Ft.object({...n,...r,fullContent:o,matchString:Te(e.shape,"matchString"),matchStringIsRegex:Pe(e.shape,"matchStringIsRegex"),matchStringCaseSensitive:Pe(e.shape,"matchStringCaseSensitive")}).strict(),l=Ft.object({...n,...r,fullContent:o,startLine:Te(e.shape,"startLine"),endLine:Te(e.shape,"endLine")}).strict().superRefine((u,p)=>{typeof u.startLine=="number"&&typeof u.endLine=="number"&&u.endLine<u.startLine&&p.addIssue({code:"custom",path:["endLine"],message:"Set endLine greater than or equal to startLine."})});return[s,a,c,l]}function ha(e,t={}){if(!t.githubDirectoryMode)return Ft.union($g(e));let n=fa(Pe(e.shape,"type"),Ft.literal("file").optional()),r=fa(Pe(e.shape,"type"),Ft.literal("directory")),o=Vg(e.shape,[...dA,"type"]),i=Ft.object({...o,type:r}).strict();return Ft.union([...$g(e,n),i])}var fA=mA.enum(["none","standard","symbols"]).optional(),Kg={startLine:Wr,endLine:Wr,contextLines:$r,charOffset:at.optional(),charLength:M(1,5e4).optional(),minify:fA},hA=pe(Ms,Kg),ci=se(Ms,Kg),Fu=Z(ha(hA,{githubDirectoryMode:!0}));function ga(e,t){return e&&t?`${e}/${t}`:void 0}function ya(e){let t=e.lastIndexOf("/");return t<=0?{owner:"",repo:e}:{owner:e.substring(0,t),repo:e.substring(t+1)}}function ba(e){return{...typeof e?.reportedTotalMatches=="number"?{reportedTotalMatches:e.reportedTotalMatches}:{},...typeof e?.reachableTotalMatches=="number"?{reachableTotalMatches:e.reachableTotalMatches}:{},...e?.totalMatchesKind?{totalMatchesKind:e.totalMatchesKind}:{},...typeof e?.totalMatchesCapped=="boolean"?{totalMatchesCapped:e.totalMatchesCapped}:{},...typeof e?.uniqueFileCount=="number"?{uniqueFileCount:e.uniqueFileCount}:{}}}function gA(e,t=500){if(t<=0)return"";let n=[...e];return n.length<=t?e:t<=3?".".repeat(t):n.slice(0,t-3).join("")+"..."}function Xg(e){return{keywords:e.keywords??[],projectId:ga(e.owner,e.repo),owner:e.owner,path:e.path,filename:e.filename,extension:e.extension,language:e.language,match:e.match,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning}}function Yg(e,t){let n=t.match==="path",r=new Map;for(let i of e.items){let s=i.repository.name||"",{owner:a,repo:c}=ya(s),l=`${a}/${c}`,u=r.get(l);if(u||(u={id:l,owner:a,repo:c,matches:[]},r.set(l,u)),n||!i.matches?.length){u.matches.push({path:i.path,...n?{}:{pathOnly:!0}});continue}let p=!1;for(let d of i.matches){if(!d.context)continue;let m=gA(d.context),f={path:i.path,value:m};if(d.positions?.length>0){let h=d.positions.filter(([,y])=>y<=m.length);h.length>0&&(f.matchIndices=h.map(([y,g])=>({start:y,end:g,lineOffset:(d.context??"").substring(0,y).split(`
|
|
44
|
-
`).length-1})))}u.matches.push(f),p=!0}p||u.matches.push({path:i.path,pathOnly:!0})}let o={results:Array.from(r.values()),...e.nonExistentScope?{nonExistentScope:!0}:{},...e.incompleteResults?{incompleteResults:!0}:{}};return e.pagination&&e.pagination.totalPages>1&&(o.pagination={currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,totalMatches:e.pagination.totalMatches||0,...ba(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}),o}function Zg(e){let t=e;return{keywords:e.keywords,topics:e.topicsToSearch,owner:e.owner,stars:e.stars,size:t.size,created:t.created,updated:e.updated,language:e.language,archived:t.archived,visibility:t.visibility,license:t.license,forks:t.forks,goodFirstIssues:t.goodFirstIssues,match:e.match,sort:e.sort,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning}}function qg(e){return e.map(t=>{let{owner:n,repo:r}=ya(t.fullPath);return{owner:n||"",repo:r||t.name,defaultBranch:t.defaultBranch,stars:t.stars,description:t.description||"",url:t.url,createdAt:t.createdAt,updatedAt:t.updatedAt,pushedAt:t.lastActivityAt,visibility:t.visibility,topics:t.topics,forksCount:t.forks,openIssuesCount:t.openIssuesCount,...t.language&&{language:t.language}}})}function Sa(e){return e.startsWith('"')?e:/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}function Jg(e){let t=(e.keywords??[]).filter(o=>o.trim()).map(Sa),n=e.query?.trim()??"",r=[...t,...n?[n]:[]].join(" ")||void 0;return{projectId:ga(e.owner,e.repo),owner:e.owner,query:r,number:e.prNumber,state:e.state,author:e.author,assignee:e.assignee,commenter:e.commenter,mentions:e.mentions,reviewRequested:e["review-requested"],reviewedBy:e["reviewed-by"],labels:(()=>{let o=e.label;if(o)return Array.isArray(o)?o:[o]})(),baseBranch:e.base,headBranch:e.head,created:e.created,updated:e.updated,closed:e.closed,mergedAt:e["merged-at"],comments:e.comments,reactions:e.reactions,draft:e.draft,match:e.match,checks:e.checks,review:e.review,archived:e.archived,content:e.content,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.pageSize,sort:e.sort,order:e.order,limit:e.pageSize??30,page:e.page,charOffset:e.charOffset,charLength:e.charLength,goal:e.goal,reasoning:e.reasoning}}function yA(e,t){let n=[];t.some(o=>o.state==="APPROVED")&&n.push("approval"),t.some(o=>o.state==="CHANGES_REQUESTED")&&n.push("changes-requested");let r=e.filter(o=>!ir(o.author??"")).map(o=>o.body.toLowerCase());return n.length===0&&r.some(o=>/\b(lgtm|looks good|approved|ship it)\b/.test(o))&&n.push("approval"),!n.includes("changes-requested")&&r.some(o=>/\b(change|fix|concern|blocker|blocking|request changes?)\b/.test(o))&&n.push("changes-requested"),r.some(o=>o.includes("?"))&&n.push("question"),n.length>0?n:["discussion"]}function bA(e,t){if(!e||e.length===0)return;let n=Array.from(new Set(e.map(i=>i.author))),r=e.map(i=>i.updatedAt||i.createdAt).filter(Boolean).sort().at(-1),o=e.filter(i=>i.commentType==="review_inline").length;return{totalComments:e.length,inlineComments:o,discussionComments:e.length-o,commenters:n.slice(0,8),commenterCount:n.length,...n.length>8?{commentersTruncated:!0}:{},...r?{latestCommentAt:r}:{},themes:yA(e,t??[])}}function ey(e,t={}){let{includeFileChanges:n=!0}=t,r=e.items.map(i=>{let s=i.fileChanges,a=s?.length??0,c=Array.isArray(i.comments)?i.comments:void 0,l=bA(c,i.reviews);return{number:i.number,title:i.title,body:i.body??void 0,...i.bodyPagination&&{bodyPagination:i.bodyPagination},state:i.state,draft:i.draft,author:i.author,assignees:i.assignees,labels:i.labels,sourceBranch:i.sourceBranch,targetBranch:i.targetBranch,sourceSha:i.sourceSha,targetSha:i.targetSha,createdAt:i.createdAt,updatedAt:i.updatedAt,closedAt:i.closedAt,mergedAt:i.mergedAt,commentsCount:i.commentsCount,changedFilesCount:i.changedFilesCount??a,additions:i.additions,deletions:i.deletions,...Array.isArray(i.comments)&&i.comments.length>0&&{comments:i.comments.map(u=>({...u,...u.bodyPagination&&{bodyPagination:u.bodyPagination}}))},...i.reviews&&{reviews:i.reviews},...i.commits&&{commits:i.commits},...l&&{reviewSummary:l},...s&&n?{fileChanges:s}:{},...Array.isArray(i.sanitizationWarnings)&&i.sanitizationWarnings.length>0?{sanitizationWarnings:i.sanitizationWarnings}:{}}}),o=e.pagination?{currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,...typeof e.pagination.totalMatches=="number"?{totalMatches:e.pagination.totalMatches}:{},...ba(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}:void 0;return{pullRequests:r,resultData:{pullRequests:r,...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},...o?{pagination:o}:{totalCount:e.totalCount||r.length}},pagination:o}}function ty(e){let t=!!e.fullContent;return{projectId:`${e.owner}/${e.repo}`,path:String(e.path),ref:e.branch?String(e.branch):void 0,startLine:t?void 0:e.startLine,endLine:t?void 0:e.endLine,matchString:t||!e.matchString?void 0:String(e.matchString),contextLines:e.contextLines??5,fullContent:t,forceRefresh:!!e.forceRefresh,charOffset:e.charOffset,charLength:e.charLength,minify:e.minify,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,goal:e.goal,reasoning:e.reasoning}}function ny(e,t){return{path:e.path,content:e.content,...typeof e.size=="number"&&e.size>0&&{fileSize:e.size},...typeof e.totalLines=="number"&&{totalLines:e.totalLines},...typeof e.sourceChars=="number"&&{sourceChars:e.sourceChars},...typeof e.sourceBytes=="number"&&{sourceBytes:e.sourceBytes},...e.contentView&&{contentView:e.contentView},...e.isPartial&&{isPartial:e.isPartial},...e.startLine&&{startLine:e.startLine},...e.endLine&&{endLine:e.endLine},...e.matchRanges?.length&&{matchRanges:e.matchRanges},...e.matchedLines?.length&&{matchedLines:e.matchedLines},...e.lastModified&&{lastModified:e.lastModified},...e.lastModifiedBy&&{lastModifiedBy:e.lastModifiedBy},...e.pagination&&{pagination:e.pagination},...e.warnings?.length&&{warnings:e.warnings},...e.matchNotFound===!0&&{matchNotFound:!0},...e.searchedFor&&{searchedFor:e.searchedFor},...e.ref&&t.branch!==e.ref?{resolvedBranch:e.ref}:{}}}function Mu(e,t){let n=e.include??[];return{projectId:`${e.owner}/${e.repo}`,ref:t,path:e.path?String(e.path):void 0,depth:typeof e.maxDepth=="number"?e.maxDepth:void 0,itemsPerPage:e.itemsPerPage??vn.ENTRIES_PER_PAGE,page:(()=>{let r=e.page;return typeof r=="number"?r:void 0})(),includeSizes:n.includes("sizes"),includeLanguages:n.includes("languages"),includeContributors:n.includes("contributors"),includeBranches:n.includes("branches"),includeTags:n.includes("tags"),goal:e.goal,reasoning:e.reasoning}}function ry(e,t,n,r){let o=r,i=e.branch??r,s=o&&i&&o!==i&&o!=="HEAD",a=Object.entries(n).sort(([g],[S])=>g==="."?-1:S==="."?1:g.localeCompare(S)).map(([g,S])=>({dir:g,files:S.files,folders:S.folders})),c=e.fileSizeMap,l={};if(c){for(let[g,S]of Object.entries(c))if(n[g]){let R=new Set(n[g].files);for(let[C,P]of Object.entries(S))if(R.has(C)){let T=g==="."?C:`${g}/${C}`;l[T]=P}}}let u=Object.values(n).reduce((g,S)=>(g.totalFiles+=S.files.length,g.totalFolders+=S.folders.length,g),{totalFiles:0,totalFolders:0}),p=e,d=e.summary.incompleteTree===!0,m=e.partialReasons&&e.partialReasons.length>0?e.partialReasons:d?["providerTreeTruncated"]:void 0,f=e.isPartial===!0||d,h=e.terminalLimit===!0||d,y={structure:a,...Object.keys(l).length>0&&{fileSizes:l},...p.languages?{languages:p.languages,dominantLanguage:p.dominantLanguage}:{},...p.contributors?{contributors:p.contributors,totalContributors:p.contributors.length}:{},...p.branches?{branches:p.branches,totalBranches:p.branches.length}:{},...p.tags?{tags:p.tags,totalTags:p.tags.length}:{},summary:{totalFiles:u.totalFiles,totalFolders:u.totalFolders,...d?{incompleteTree:!0}:{}},...f?{isPartial:!0}:{},...h?{terminalLimit:!0}:{},...m?{partialReasons:m}:{}};return i&&(y.resolvedBranch=i),s&&(y.branchFallback={requestedBranch:o,actualBranch:i,...e.defaultBranch!==void 0&&{defaultBranch:e.defaultBranch},warning:`Branch '${o}' not found. Showing '${i}' (default branch). Re-query with the correct branch name if branch-specific results are required.`}),e.pagination&&(e.pagination.hasMore||e.pagination.totalPages>1)&&(y.pagination=e.pagination),y}function Ra(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function SA(e){if(typeof e=="string")return{message:e};if(typeof e=="object"&&e!==null){let t=e;return{message:typeof t.error=="string"&&t.error.length>0?t.error:"Provider error",status:Ra(t.status),retryAfterSeconds:Ra(t.retryAfter),rateLimitRemaining:Ra(t.rateLimitRemaining),rateLimitReset:Ra(t.rateLimitReset)}}return{message:"Provider error"}}function oy(e){let t=[];for(let n of e){if(n.status!=="error")continue;let{message:r,status:o,retryAfterSeconds:i,rateLimitRemaining:s,rateLimitReset:a}=SA(n.data.error),c=o!==void 0?`${r} (HTTP ${o})`:r;t.push({index:n.index,error:c,...o!==void 0?{status:o}:{},...i!==void 0?{retryAfterSeconds:i}:{},...s!==void 0?{rateLimitRemaining:s}:{},...a!==void 0?{rateLimitReset:a}:{}})}return t}function Kr(e,t,n){return{structuredContent:e,keysPriority:t,isError:n}}import{z as V}from"zod";var RA=V.object({currentPage:V.number(),totalPages:V.number(),hasMore:V.boolean(),nextPage:V.number().optional(),pageSize:V.number().optional(),totalItems:V.number().optional(),perPage:V.number().optional(),totalFound:V.number().optional(),returned:V.number().optional(),totalMatches:V.number().optional(),reportedTotalMatches:V.number().optional().describe("Provider-reported raw total (e.g. GitHub's match count) \u2014 may exceed what pagination can actually reach."),reachableTotalMatches:V.number().optional().describe("Matches reachable by walking pages (bounded by the provider's result window, e.g. GitHub caps at 1000); totalPages is computed from this, not from reportedTotalMatches."),totalMatchesKind:V.enum(["exact","reported","lowerBound"]).optional(),totalMatchesCapped:V.boolean().optional(),totalResults:V.number().optional(),itemsPerPage:V.number().optional()}),G1=V.object({charOffset:V.number(),charLength:V.number(),totalChars:V.number(),hasMore:V.boolean(),nextCharOffset:V.number().optional(),currentPage:V.number().optional(),totalPages:V.number().optional(),chunkMode:V.enum(["semantic","char-limit"]).optional()}),B1=V.object({tool:V.string(),query:V.record(V.string(),V.unknown()),why:V.string().optional(),confidence:V.enum(["exact","high","medium","low"]).optional()}),z1=RA.extend({filesPerPage:V.number().optional(),entriesPerPage:V.number().optional(),matchesPerPage:V.number().optional(),totalFiles:V.number().optional(),totalEntries:V.number().optional(),totalMatches:V.number().optional(),totalFilesFound:V.number().optional(),nextMatchPage:V.number().optional()}),CA=["goal","reasoning"];function xA(e){let t;for(let n of CA)n in e&&(t??={...e},delete t[n]);return t??e}function We(e,t,n="Continue to the next page of results."){return{tool:e,query:xA(t),why:n,confidence:"exact"}}function Ca(e,t,n,r){if(!n||!n.hasMore||n.nextCharOffset===void 0)return;let o=r?.includeCharLength!==!1;return{continueChars:{tool:e,query:{...t,charOffset:n.nextCharOffset,...o&&n.charLength!==void 0?{charLength:n.charLength}:{}}}}}var wA=["package.json",".yarnrc.yml","pnpm-workspace.yaml","tsconfig.json","jsconfig.json","turbo.json","lerna.json","nx.json","babel.config.js","vite.config.ts","vite.config.js","webpack.config.js","rollup.config.js","jest.config.js","vitest.config.ts","commitlint.config.js","deno.json","deno.jsonc",".npmrc",".nvmrc",".node-version",".prettierrc",".prettierignore",".eslintignore",".stylelintrc",".editorconfig",".tool-versions","requirements.txt","pyproject.toml","setup.py","setup.cfg","Pipfile","tox.ini","environment.yml",".python-version","Gemfile",".ruby-version","composer.json","Cargo.toml","go.mod","go.work","mix.exs","rebar.config","pubspec.yaml","build.sbt","deps.edn","project.clj","Package.swift","CMakeLists.txt","Makefile.am","configure.ac","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","global.json","Directory.Build.props","Directory.Build.targets","packages.config","nuget.config","Dockerfile","docker-compose.yml","docker-compose.yaml",".dockerignore","Makefile","Vagrantfile","Chart.yaml","Procfile","Brewfile","serverless.yml","netlify.toml","vercel.json","renovate.json",".gitlab-ci.yml",".travis.yml","Jenkinsfile",".gitignore",".gitattributes",".gitmodules",".env",".env.example"],PA=new Set(wA),TA=["package-lock.json","npm-shrinkwrap.json","yarn.lock","pnpm-lock.yaml","bun.lockb","bun.lock","deno.lock","Pipfile.lock","poetry.lock","uv.lock","pdm.lock","pixi.lock","Gemfile.lock","composer.lock","Cargo.lock","Cargo.toml.orig","go.sum","Gopkg.lock","glide.lock","Package.resolved","pubspec.lock","flake.lock","MODULE.bazel.lock",".terraform.lock.hcl","mise.lock"],EA=new Set(TA),AA=[/\.lock$/],LA=[/^\.eslintrc(\..+)?$/,/^\.prettierrc(\..+)?$/,/^\.babelrc(\..+)?$/,/^eslint\.config\.(c|m)?js$/,/^\.env(\..+)?$/,/^tsconfig\..+\.json$/,/^\.stylelintrc(\..+)?$/,/^\.renovaterc(\..+)?$/,/\.csproj$/,/\.fsproj$/,/\.vbproj$/,/\.sln$/,/\.gemspec$/,/\.tf(vars)?$/],_A=[".toml",".ini",".cfg",".conf",".properties"],sy=new Set(_A),kA=new Set(".md .mdx .markdown .rst .adoc .asciidoc .txt .text .rtf .org .textile .rdoc .pod .creole .wiki".split(" ")),iy=new Set(["readme","license","licence","copying","notice","changelog","changes","history","authors","contributors","contributing","code_of_conduct","codeowners","install","citation"]),ay=new Set(".js .jsx .mjs .cjs .ts .tsx .mts .cts .py .pyi .pyx .rb .rake .php .go .rs .java .kt .kts .scala .groovy .clj .cljs .cljc .c .h .cc .cpp .cxx .hpp .hh .m .mm .cs .fs .vb .swift .dart .sh .bash .zsh .fish .ps1 .bat .cmd .vue .svelte .css .scss .sass .less .html .htm .sql .graphql .gql .proto .ex .exs .erl .lua .hs .pl .pm .r .jl".split(" "));function Nu(e){let t=e.replace(/\\/g,"/"),n=t.lastIndexOf("/");return n===-1?t:t.slice(n+1)}function Du(e){let t=e.lastIndexOf(".");return t>0?e.slice(t).toLowerCase():""}function IA(e){if(!e)return!1;let t=Nu(e);if(!t)return!1;if(PA.has(t))return!0;for(let r of LA)if(r.test(t))return!0;let n=Du(t);return!!(n&&sy.has(n))}function OA(e){if(!e)return!1;let t=Nu(e);if(!t)return!1;if(EA.has(t))return!0;for(let n of AA)if(n.test(t))return!0;return!1}function vA(e){let t=Du(e);if(t&&kA.has(t))return!0;if(t&&(ay.has(t)||sy.has(t)))return!1;let n=(t?e.slice(0,e.length-t.length):e).toLowerCase().replace(/\..*$/,""),r=n.split(/[-_.]/)[0]??n;return iy.has(n)||iy.has(r)}function FA(e){let t=Du(e);return t!==""&&ay.has(t)}function xa(e){if(!e)return;let t=Nu(e);if(t){if(OA(t))return"lock";if(IA(t))return"config";if(vA(t))return"doc";if(FA(t))return"code"}}function wa(e){return typeof e=="object"&&e!==null}function xt(e){return typeof e=="string"&&e.length>0?e:void 0}function ct(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function cy(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string");return t.length>0?t:void 0}function Mt(e,t){return ct(e[t])??0}function MA(e){if(wa(e))return{nonFile:Mt(e,"nonFile"),missingDownloadUrl:Mt(e,"missingDownloadUrl"),oversized:Mt(e,"oversized"),binary:Mt(e,"binary"),fileLimit:Mt(e,"fileLimit"),fetchFailed:Mt(e,"fetchFailed"),totalSizeLimit:Mt(e,"totalSizeLimit"),pathTraversal:Mt(e,"pathTraversal")}}function NA(e){if(wa(e))return{maxDirectoryFiles:Mt(e,"maxDirectoryFiles"),maxTotalSize:Mt(e,"maxTotalSize"),maxFileSize:Mt(e,"maxFileSize")}}var DA=["charOffset","charLength","totalChars","nextCharOffset","nextBlockChar","nextPage","nextMatchPage","filesPerPage","totalFiles","entriesPerPage","totalEntries","matchesPerPage","totalMatches"];function HA(e){if(!wa(e))return;let{currentPage:t,totalPages:n,hasMore:r}=e;if(typeof t!="number"||typeof n!="number"||typeof r!="boolean")return;let o={currentPage:t,totalPages:n,hasMore:r};for(let i of DA){let s=e[i];typeof s=="number"&&Number.isFinite(s)&&(o[i]=s)}return o}function GA(e,t){let{goal:n,reasoning:r,charOffset:o,...i}=t;return Ca("ghGetFileContent",{...i,charLength:e?.charLength??t.charLength},e)}function BA(e,t){if(t.matchString!==void 0)return;let n=ct(e.startLine),r=ct(e.endLine),o=ct(e.totalLines);if(e.isPartial!==!0||n===void 0||r===void 0||o===void 0||r>=o)return;let i=Math.max(1,r-n+1),s=r+1,a=Math.min(o,r+i);return{tool:"ghGetFileContent",query:{owner:t.owner,repo:t.repo,...t.branch!==void 0?{branch:t.branch}:{},path:t.path,startLine:s,endLine:a,...t.minify!==void 0?{minify:t.minify}:{}},why:`Continue the file at lines ${s}-${a}.`,confidence:"exact"}}function zA(e){return{tool:"ghCloneRepo",query:{owner:e.owner,repo:e.repo,...e.branch!==void 0?{branch:e.branch}:{},sparsePath:e.path},why:"lspGetSemantics (definitions/references) only works on local files \u2014 clone this path locally, then run localSearch or lspGetSemantics on it",confidence:"exact"}}function ly(){try{return Wf()}catch{return!1}}function jA(e){return{tool:"ghCloneRepo",query:{owner:e.owner,repo:e.repo,...e.branch!==void 0?{branch:e.branch}:{},sparsePath:e.path},why:"Clone this directory to retrieve content omitted by remote directory-fetch limits or failures.",confidence:"exact"}}function uy(e,t){let n=HA(e.pagination),r=ly(),o=n?.hasMore===!0?void 0:BA(e,t),i={...GA(n,t),...o?{continueLines:o}:{},...r?{cloneForSemantics:zA(t)}:{}},s=xt(e.path)??String(t.path??""),a=s?xa(s):void 0;return{path:s,content:typeof e.content=="string"?e.content:"",...a?{fileType:a}:{},localPath:xt(e.localPath),repoRoot:xt(e.repoRoot),contentView:e.contentView==="none"||e.contentView==="standard"||e.contentView==="symbols"?e.contentView:void 0,totalLines:ct(e.totalLines),sourceChars:ct(e.sourceChars),resolvedBranch:xt(e.resolvedBranch),...typeof e.commitSha=="string"&&e.commitSha.length===40?{commitSha:e.commitSha}:{},pagination:n,...Object.keys(i).length>0?{next:i}:{},...e.isPartial===!0||n?.hasMore===!0?{isPartial:!0}:{},startLine:ct(e.startLine),endLine:ct(e.endLine),...Array.isArray(e.matchRanges)&&e.matchRanges.length>0?{matchRanges:e.matchRanges}:{},...Array.isArray(e.matchedLines)&&e.matchedLines.length>0?{matchedLines:e.matchedLines}:{},lastModified:xt(e.lastModified),lastModifiedBy:xt(e.lastModifiedBy),warnings:cy(e.warnings),...e.matchNotFound===!0?{matchNotFound:!0}:{},searchedFor:xt(e.searchedFor),...e.cached===!0?{cached:!0}:{}}}function py(e,t){let r=(Array.isArray(e.files)?e.files:[]).filter(wa).map(p=>({path:xt(p.path)??"",size:ct(p.size)??0,type:xt(p.type)??"file"})),o=MA(e.skipped),i=e.hasSubdirectories===!0||(o?o.nonFile>0:!1),s=o?Object.entries(o).filter(([,p])=>p>0):[],a=s.length>0?Object.fromEntries(s):void 0,c=e.complete===!1,l=c?s.length>0?s.map(([p])=>p):["providerDirectoryIncomplete"]:[],u=c&&ly();return{path:String(t.path??""),localPath:xt(e.localPath)??"",repoRoot:xt(e.repoRoot),fileCount:ct(e.fileCount)??r.length,totalSize:ct(e.totalSize)??0,complete:e.complete===!0,verified:e.verified===!0,...typeof e.commitSha=="string"&&e.commitSha.length===40?{commitSha:e.commitSha}:{},...i?{hasSubdirectories:!0}:{},...a?{skippedSummary:a}:{},directoryEntryCount:ct(e.directoryEntryCount),eligibleFileCount:ct(e.eligibleFileCount),savedFileCount:ct(e.savedFileCount),skipped:o,limits:NA(e.limits),warnings:cy(e.warnings),...r.length>0?{files:r}:{},...e.cached===!0?{cached:!0}:{},resolvedBranch:xt(e.resolvedBranch),...c?{isPartial:!0,partialReasons:l,...u?{next:{escalateToClone:jA(t)}}:{terminalLimit:!0}}:{}}}function dy(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return;let t=e;return typeof t.message=="string"?t.message:t.error===e?void 0:dy(t.error)}function QA(e,t){let n=typeof t?.owner=="string"?t.owner:void 0,r=typeof t?.repo=="string"?t.repo:void 0;if(e.status==="error"){let i=e.data.error,s=dy(i)??"File content query failed",a=/\b404\b|not found/i.test(s);return{...n?{owner:n}:{},...r?{repo:r}:{},...t?.path?{path:String(t.path)}:{},error:a&&n&&r?`${s} \u2014 verify the path (exact case, no leading slash) and branch; use ghSearch with operation:"tree", owner:"${n}", repo:"${r}"`:s}}let o={owner:n??"",repo:r??""};return t?.type==="directory"?o.directories=[py(e.data,t)]:o.files=[uy(e.data,t??{})],o}function my(){return({queries:e,results:t})=>{let n=t.map(o=>({...o,data:QA(o,e[o.index])}));return Kr({results:n},["results","index","status","meta","data","owner","repo","files","directories","path","content","fileType","totalLines","startLine","endLine","isPartial","pagination","error"],n.length>0&&n.every(o=>o.status==="error"))}}import{getConfigSync as fy}from"@octocodeai/config";async function hy(e){let{queries:t,authInfo:n}=e,r=$e(n);return he(t,async(o,i)=>{try{let s=tt(ci,o,{prefix:!1});if(s.ok===!1)return s.error;let a=s.data,c=a.minify??(a.fullContent===!0?"none":"standard"),l={...a,minify:c};if(l.type==="directory"){let p=UA(l);if(p)return p}let u=r();return l.type==="directory"?$A(l,n,u):WA(l,n,u)}catch(s){return He(s,o,void 0,I.GITHUB_FETCH_CONTENT)}},{toolName:I.GITHUB_FETCH_CONTENT,finalize:my()},e)}function UA(e){let t=fy();if(!t.local.enabled)return N('Directory fetch requires local materialization. Set ENABLE_LOCAL=true to use type: "directory".',e,{extra:{errorCode:"localToolsDisabled"},rawResponse:0});if(!t.local.enableClone)return N('Directory fetch requires clone/materialization support. Set ENABLE_CLONE=true to use type: "directory".',e,{extra:{errorCode:"cloneDisabled"},rawResponse:0});if(t.storage.mode==="memory")return N('Directory fetch requires persistent local materialization. Set storage.mode="persistent" or OCTOCODE_STORAGE_MODE=persistent to use type: "directory".',e,{extra:{errorCode:"persistentStorageDisabled"},rawResponse:0})}async function $A(e,t,n){if(!da(n,"fetchDirectoryToDisk"))return He(new Error('Directory fetch (type: "directory") is only available with the GitHub provider. Use file mode (type: "file") instead.'),e,"Provider not supported",I.GITHUB_FETCH_CONTENT);if(!e.owner||!e.repo)return N("Directory fetch requires both owner and repo.",e,{rawResponse:0});let r=e.branch??await Be(e.owner,e.repo,t),o=await Tl(e.owner,e.repo,String(e.path),r,t,!!e.forceRefresh),i=(o.skipped?.nonFile??0)>0,s=o.skipped?Object.fromEntries(Object.entries(o.skipped).filter(([,u])=>u>0)):void 0,a={kind:"directory",localPath:o.localPath,repoRoot:o.repoRoot,source:"treeFetch",cached:o.cached,complete:o.complete,verified:o.verified,...o.commitSha?{commitSha:o.commitSha}:{},...i?{hasSubdirectories:!0}:{},...s&&Object.keys(s).length>0?{skippedSummary:s}:{},owner:e.owner,repo:e.repo},c={viewStructure:{tool:"localSearch",query:{operation:"tree",path:o.localPath}},...i?{escalateToClone:{tool:"ghCloneRepo",why:"nonFile skips indicate subdirectories were not fetched; clone for full coverage",query:{owner:e.owner,repo:e.repo,...e.branch?{branch:e.branch}:{},...e.path?{sparsePath:String(e.path)}:{}}}}:{}},l={localPath:o.localPath,repoRoot:o.repoRoot,fileCount:o.fileCount,totalSize:o.totalSize,complete:o.complete,verified:o.verified,...o.commitSha?{commitSha:o.commitSha}:{},directoryEntryCount:o.directoryEntryCount,eligibleFileCount:o.eligibleFileCount,savedFileCount:o.savedFileCount,...s&&Object.keys(s).length>0?{skipped:o.skipped}:{},limits:o.limits,...o.warnings?{warnings:o.warnings}:{},files:o.files,...o.cached?{cached:!0}:{},...e.branch!==o.branch?{resolvedBranch:o.branch}:{},location:a,next:c};return ge(e,l,!0,I.GITHUB_FETCH_CONTENT,{rawResponse:o.totalSize??B(o)})}async function WA(e,t,n){let r=await an(e,()=>n.provider.getFileContent(ty(e)));if(r.ok===!1)return r.result;let o=e.fullContent===!0&&e.minify==="none"&&fy().storage.mode==="persistent"?await VA(e,t):void 0,i={...ny(r.response.data,e),...o?{localPath:o.localPath,repoRoot:o.repoRoot,cached:o.cached,commitSha:o.commitSha,...o.branch?{resolvedBranch:o.branch}:{}}:{}},s=!!(r.response.data.matchNotFound===!0||r.response.data.content&&r.response.data.content.length>0);return ge(e,i,s,I.GITHUB_FETCH_CONTENT,{rawResponse:r.response.rawResponseChars})}async function VA(e,t){if(!e.owner||!e.repo||typeof e.path!="string")return;let n=e.branch??await Be(e.owner,e.repo,t);return Xl(e.owner,e.repo,e.path,n,t,!!e.forceRefresh)}function gy(e,t){return e.some(n=>{let r=t[n.index];return typeof r?.owner=="string"&&typeof r?.repo=="string"})}function yy(e){let t=e.data;return{results:Array.isArray(t?.results)?t.results:[],pagination:t?.pagination,...t?.nonExistentScope?{nonExistentScope:!0}:{},...t?.incompleteResults?{incompleteResults:!0}:{},...t?.repoState?{repoState:t.repoState}:{}}}function KA(e){return[...e].sort((t,n)=>{let r=n.matches.length-t.matches.length;return r!==0?r:t.id.localeCompare(n.id)})}function XA(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function YA(e,t){let n=(e.path.split("/").pop()??"").toLowerCase(),r=n.replace(/\.[^.]+$/,""),o=e.value??"",i=0;for(let s of t){let a=s.trim();if(!a)continue;let c=a.toLowerCase();if(n===c||r===c)return 2;(/^[A-Za-z0-9_]+$/.test(a)?new RegExp(`\\b${XA(a)}\\b`,"i").test(o):o.toLowerCase().includes(c))&&(i=Math.max(i,1))}return i}function ZA(e,t){return{...e,matches:t}}function Hu(e,t){let n=t.filter(o=>typeof o=="string"&&o.trim());return n.length===0?KA(e):e.map(o=>{let i=o.matches.map((s,a)=>({match:s,index:a,score:YA(s,n)}));return i.sort((s,a)=>s.score!==a.score?a.score-s.score:s.index-a.index),{group:ZA(o,i.map(s=>s.match)),hasExact:i.some(s=>s.score>0)}}).sort((o,i)=>{if(o.hasExact!==i.hasExact)return o.hasExact?-1:1;let s=i.group.matches.length-o.group.matches.length;return s!==0?s:o.group.id.localeCompare(i.group.id)}).map(o=>o.group)}function Sy(e){let t=new Map;for(let{index:n,groups:r}of e)for(let o of r){let i=`${n}\0${o.id}`,s=t.get(i);if(!s){t.set(i,{id:o.id,queryIndex:n,owner:o.owner,repo:o.repo,matches:[...o.matches]});continue}s.matches.push(...o.matches)}return Array.from(t.values())}function by(e){let t=new Map;for(let n of e)for(let r of n.matches){let o=`${n.queryIndex??-1}\0${n.owner}\0${n.repo}\0${r.path}`,i=t.get(o),{path:s,...a}=r;if(i){i.matches.push(a);continue}t.set(o,{owner:n.owner,repo:n.repo,path:r.path,matches:[a]})}return Array.from(t.values())}function Ry(e,t,n){if(t.length===0)return[];if(e.length===1){let i=t[0]?.queryIndex??0,s=n.get(i);return[{index:i,data:{files:by(t),...s?{pagination:s}:{}}}]}let r=new Map,o=[];for(let i of t){let s=i.queryIndex??0,a=r.get(s);a||(a=[],r.set(s,a),o.push(s)),a.push(i)}return o.map(i=>{let s=n.get(i);return{index:i,data:{files:by(r.get(i)),...s?{pagination:s}:{}}}})}function Cy(e,t,n){let r={};for(let o of e){let i=o.data.files[0];if(!i)continue;let s=t[o.index];if(s?.match==="path")continue;let c=(Array.isArray(s?.keywords)?s.keywords.filter(u=>typeof u=="string"):[])[0]??n[0];if(!c)continue;let l=e.length===1?"getLines":`getLines:${o.index}`;r[l]={tool:"ghGetFileContent",query:{owner:i.owner,repo:i.repo,path:i.path,matchString:c},why:"GitHub code search returns no line numbers; fetch the top hit with matchString to get exact file:line anchors",confidence:"low"}}return Object.keys(r).length>0?r:void 0}function Pa(){return({queries:e,results:t})=>{let n=[],r=new Map,o=[],i=new Set,s=[];t.forEach(x=>{if(x.status==="error")return;let b=yy(x);b.repoState&&s.push({index:x.index,state:b.repoState,query:e[x.index]}),b.incompleteResults&&i.add(x.index),b.results.reduce((O,v)=>O+v.matches.length,0)===0&&o.push({index:x.index,...b.nonExistentScope?{nonExistentScope:!0}:{},...b.incompleteResults?{incompleteResults:!0}:{}});let L=b.results;n.push({index:x.index,groups:L}),b.pagination&&r.set(x.index,b.pagination)});let a=Array.from(new Set(e.flatMap(x=>{let b=x.keywords;return Array.isArray(b)?b.filter(w=>typeof w=="string"):[]}))),c=Hu(Sy(n),a),l=oy(t),u=e.some(x=>x.concise===!0),p=new Map(t.map(x=>[x.index,x])),d=Ry(e,c,r).map(x=>{let b=p.get(x.index)?.meta;return{...x,...b?{meta:b}:{}}}),m=Cy(d,e,a);if(m)for(let x of d){let b=d.length===1?"getLines":`getLines:${x.index}`,w=m[b];w&&(x.data.next={getLines:w})}if(u)for(let x of d)x.data.files=x.data.files.map(b=>`${b.owner}/${b.repo}:${b.path}`);let f=o.map(({index:x,nonExistentScope:b,incompleteResults:w})=>{let L=p.get(x)?.meta;return{index:x,status:"empty",...L?{meta:L}:{},data:{files:[],...b?{nonExistentScope:b}:{},...w?{incompleteResults:w}:{}}}}),h=l.map(({index:x,error:b})=>{let w=p.get(x)?.meta;return{index:x,status:"error",...w?{meta:w}:{},data:{error:b}}}),g={results:[...d,...f,...h].sort((x,b)=>x.index-b.index)},S=g.results,R=x=>S.find(b=>b.index===x),C=(x,b,w,L=!1)=>{let O=R(x);if(!O)return;let v=O.meta,A=v?.diagnostics;O.meta={evidence:v?.evidence??{kind:"provider",confidence:"medium"},diagnostics:{...A??{},codes:Array.from(new Set([...A?.codes??[],b])),hints:Array.from(new Set([...A?.hints??[],w])),...L||A?.partial?{partial:!0}:{}}}},P=(x,b,w)=>{let L=R(x);!L||!("files"in L.data)||(L.data.next={...L.data.next??{},[b]:w})};for(let x of i){C(x,"ghIncompleteResults","GitHub reported an incomplete search index result; retry, narrow the scope, or verify locally before concluding absence.",!0);let{goal:b,reasoning:w,...L}=e[x];P(x,"retry",{tool:"github.code",query:L,why:"Retry the same query because GitHub marked the result incomplete",confidence:"exact"})}let T=new Set(s.map(({index:x})=>x));for(let x of o){if(T.has(x.index)||!gy([x],e))continue;let b=e[x.index];C(x.index,"ghScopedZeroUnproven","No indexed matches is unproven absence; verify the repository structure and search a bounded local copy before concluding."),P(x.index,"viewStructure",{tool:"github.tree",query:{owner:b.owner,repo:b.repo,path:""},why:"Verify that the scoped repository and path exist before concluding absence",confidence:"exact"})}let E=8,k=o.filter(({index:x,nonExistentScope:b,incompleteResults:w})=>{if(b||w)return!1;let L=e[x]?.keywords;return Array.isArray(L)&&L.length>E});if(k.length>0)for(let{index:x}of k){let b=e[x],w=Array.isArray(b.keywords)?b.keywords.filter(L=>typeof L=="string").slice(0,E):[];C(x,"ghQueryPossiblyTooComplex",`The query used more than ${E} keywords; narrow it before treating zero matches as absence.`),P(x,"retryNarrow",{tool:"github.code",query:{keywords:w,...typeof b.owner=="string"?{owner:b.owner}:{},...typeof b.repo=="string"?{repo:b.repo}:{},...typeof b.path=="string"?{path:b.path}:{},...typeof b.filename=="string"?{filename:b.filename}:{},...typeof b.extension=="string"?{extension:b.extension}:{},...typeof b.language=="string"?{language:b.language}:{},...b.match==="file"||b.match==="path"?{match:b.match}:{}},why:"Retry with a bounded keyword set to avoid silent under-matching",confidence:"low"})}for(let{index:x,state:b,query:w}of s)if(b.kind==="renamed"){let[L,O]=b.fullName.split("/");C(x,"ghRepoRenamed",`The repository was renamed to ${b.fullName}; retry against the renamed repository.`);let v=w?.keywords;P(x,"retryRenamed",{tool:"github.code",query:{owner:L,repo:O,...Array.isArray(v)?{keywords:v}:{}},why:"Re-run the same search against the renamed repository",confidence:"exact"})}else if(b.kind==="archived"){C(x,"ghRepoArchived","The repository is archived, so its code-search index may lag or be incomplete; verify its structure and search locally.");let L=w;typeof L?.owner=="string"&&typeof L.repo=="string"&&P(x,"viewStructure",{tool:"github.tree",query:{owner:L.owner,repo:L.repo,path:""},why:"Inspect the archived repository outside the code-search index",confidence:"exact"})}else{C(x,"ghRepoNotFound","The repository was not found or is private to this token; verify the spelling or discover the current repository name.");let L=w;typeof L?.repo=="string"&&P(x,"findRepository",{tool:"github.repositories",query:{keywords:[L.repo]},why:"Find the repository by name in case it moved or was renamed",confidence:"low"})}return Kr(g,["results","index","status","meta","evidence","diagnostics","data","files","path","owner","repo","queryIndex","matches","value","pathOnly","matchIndices","pagination","next","tool","query","why","confidence","nonExistentScope","incompleteResults","error"],c.length===0&&l.length>0)}}function qA(e){return!!((e.keywords??[]).some(n=>n.trim().length>0)||e.owner||e.path||e.extension||e.filename||e.language)}function JA(e){if(e.repo&&!e.owner)return{error:"Repository scope requires owner. Provide both owner and repo, or omit repo for a broader search."}}async function eL(e,t,n){try{let r=await $(n),{data:o}=await r.rest.repos.get({owner:e,repo:t}),i=`${e}/${t}`.toLowerCase();return o.full_name&&o.full_name.toLowerCase()!==i?{kind:"renamed",fullName:o.full_name}:o.archived?{kind:"archived"}:void 0}catch(r){return r.status===404?{kind:"notFound"}:void 0}}async function xy(e,t,n=$e(t.authInfo)){try{let r=JA(e);if(r)return N(r.error,e);if(!qA(e))return N("At least one search term or scope filter is required.",e);let o=n(),i=await an(e,()=>o.provider.searchCode(Xg(e)));if(i.ok===!1)return i.result;let s=Yg(i.response.data,e);if(s.results.length===0&&e.owner&&e.repo){let a=await eL(String(e.owner),String(e.repo),t.authInfo);a&&(s.repoState=a)}return ge(e,s,s.results.length>0,I.GITHUB_SEARCH_CODE,{rawResponse:i.response.rawResponseChars})}catch(r){return He(r,e,void 0,I.GITHUB_SEARCH_CODE)}}async function Ta(e,t,n){try{let r=await e.rest.repos.get({owner:t,repo:n}),[o,i]=r.data.full_name?.split("/")??[];return!o||!i?{owner:t,repo:n,renamed:!1}:{owner:o,repo:i,renamed:o!==t||i!==n}}catch{return{owner:t,repo:n,renamed:!1}}}function Py(e){return!!(e.topicsToSearch&&(Array.isArray(e.topicsToSearch)?e.topicsToSearch.length>0:e.topicsToSearch))}function Ea(e){return!!(e.keywords&&e.keywords.length>0)}function Ty(e){return!!(Ea(e)||Py(e)||e.owner||e.language||e.stars||e.updated||e.created||e.size||e.forks||e.license||e.goodFirstIssues||e.visibility||e.archived!==void 0)}function wy(e,t){return e?`${e} (${t==="topics"?"topics-based search":"keywords-based search"})`:`${t.charAt(0).toUpperCase()+t.slice(1)}-based repository search`}function Ey(e){let t=Py(e),n=Ea(e);if(t&&n){let{topicsToSearch:r,keywords:o,...i}=e;return[{label:"topics",query:{...i,reasoning:wy(e.reasoning,"topics"),topicsToSearch:r}},{label:"keywords",query:{...i,reasoning:wy(e.reasoning,"keywords"),keywords:o}}]}return[{label:"combined",query:e}]}function Ay(e,t){if(!e&&!t)return 0;if(!e)return 1;if(!t)return-1;let n=Date.parse(e),r=Date.parse(t);return Number.isNaN(n)&&Number.isNaN(r)?0:Number.isNaN(n)?1:Number.isNaN(r)?-1:r-n}function _y(e){let t=new Map;for(let n of e){let r=`${n.owner}/${n.repo}`;t.has(r)||t.set(r,n)}return[...t.values()]}function ky(e,t){return[...e].sort((n,r)=>{let o=tL(n,r,t.sort);if(o!==0)return o;let i=Ly(r,t)-Ly(n,t);if(i!==0)return i;let s=(r.stars??0)-(n.stars??0);return s!==0?s:Gu(n).localeCompare(Gu(r))})}function tL(e,t,n){switch(n){case"stars":return(t.stars??0)-(e.stars??0);case"forks":return(t.forksCount??0)-(e.forksCount??0);case"help-wanted-issues":return(t.openIssuesCount??0)-(e.openIssuesCount??0);case"updated":return Ay(e.updatedAt,t.updatedAt);case"best-match":case void 0:return 0;default:return 0}}function Ly(e,t){let n=nL(t),r=Gu(e).toLowerCase(),o=e.repo.toLowerCase(),i=(e.description??"").toLowerCase(),s=(e.topics??[]).map(u=>u.toLowerCase()),a=e.language?.toLowerCase(),c=t.language?.toLowerCase();return n.reduce((u,p)=>o===p||r===p?u+80:o.includes(p)||r.includes(p)?u+40:s.includes(p)?u+35:i.includes(p)?u+10:u,0)+(c&&a===c?20:0)}function nL(e){let t=e.keywords??[],n=e.topicsToSearch??[];return[...t,...n].map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)}function Gu(e){return`${e.owner}/${e.repo}`}function Bu(e){return{currentPage:e.currentPage,...e.totalMatchesKind!=="lowerBound"&&e.totalPages!==void 0?{totalPages:e.totalPages}:{},perPage:e.entriesPerPage??10,...e.totalMatches!==void 0?{totalMatches:e.totalMatches}:{},...e.reportedTotalMatches!==void 0?{reportedTotalMatches:e.reportedTotalMatches}:{},...e.reachableTotalMatches!==void 0?{reachableTotalMatches:e.reachableTotalMatches}:{},...e.totalMatchesKind!==void 0?{totalMatchesKind:e.totalMatchesKind}:{},...e.totalMatchesCapped!==void 0?{totalMatchesCapped:e.totalMatchesCapped}:{},hasMore:e.hasMore,...e.hasMore?{nextPage:e.currentPage+1}:{}}}function zu(e){return e.length===0?void 0:[`Repository search partially failed: the ${e.map(n=>`'${n.label}'`).join(", ")} query variant(s) returned an error. Results may be incomplete \u2014 retry or narrow the query.`]}function ju(e,t){let n=e.map(r=>r.response.data.pagination).filter(r=>!!r);if(n.length!==0)return{currentPage:n[0].currentPage,hasMore:n.some(r=>r.hasMore),entriesPerPage:n[0].entriesPerPage,totalMatches:t,reachableTotalMatches:t,totalMatchesKind:"lowerBound",totalMatchesCapped:n.some(r=>r.totalMatchesCapped===!0)}}function Iy(e){return e.reduce((t,n)=>t+(n.response.rawResponseChars??B(n.response.data??n.response)),0)}function rL(e){let t=e,n={owner:t.owner??"",repo:t.repo,stars:t.stars,forks:t.forksCount,openIssuesCount:t.openIssuesCount,language:t.language,license:t.license||void 0,description:t.description&&t.description!=="No description"?t.description:void 0,homepage:t.homepage||void 0,pushedAt:t.pushedAt?t.pushedAt.slice(0,10):void 0,createdAt:t.createdAt?t.createdAt.slice(0,10):void 0,updatedAt:t.updatedAt?t.updatedAt.slice(0,10):void 0,defaultBranch:t.defaultBranch&&t.defaultBranch!=="main"&&t.defaultBranch!=="master"?t.defaultBranch:void 0,topics:t.topics?.length?t.topics:void 0,visibility:t.visibility&&t.visibility!=="public"?t.visibility:void 0};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}function oL(e,t){let n=t.concise===!0,r=e.repositories[0],o=r?.owner&&r?.repo?{viewStructure:{tool:"github.tree",query:{owner:r.owner,repo:r.repo,path:""},why:"Orient in the top-ranked repository before reading code",confidence:"low"},searchCode:{tool:"github.code",query:{owner:r.owner,repo:r.repo},why:"Scope a code search to the top-ranked repository",confidence:"low"}}:void 0;return{data:{pagination:e.pagination,repositories:n?e.repositories.map(i=>`${i.owner?`${i.owner}/`:""}${i.repo}`):e.repositories.map(rL),...o?{next:o}:{}}}}async function Oy(e,t,n=$e(t.authInfo)){let{authInfo:r}=t;try{if(!Ty(e))return N("At least one repository search term or filter is required.",e);let o=n(),i=Ey(e),{successes:s,failures:a}=await Bg(i.map(E=>({meta:{label:E.label,query:E.query},operation:()=>o.provider.searchRepos(Zg(E.query))}))),c=s.map(E=>({label:E.meta.label,query:E.meta.query,response:E.response})),l=a.map(E=>({label:E.meta.label,query:E.meta.query,response:E.response}));if(c.length===0){let E=l[0];return E?oa(E.response,e):He(new Error("Repository search produced no provider results"),e,void 0,I.GITHUB_SEARCH_REPOSITORIES)}let u=e.limit,p=ky(_y(c.flatMap(E=>qg(E.response.data.repositories))),e),d=u!=null?p.slice(0,u):p,m=c.length===1?c[0]:void 0,h=c.length>1?ju(c,p.length):m?.response.data.pagination,y=h?Bu(h):void 0,g=d.length>0,S=oL({repositories:d,pagination:y},e),R=zu(l),C;if(e.owner&&Ea(e)){let E=(Array.isArray(e.keywords)?e.keywords:[e.keywords]).filter(x=>typeof x=="string"&&x.trim().length>0).slice(0,3),k=E.some(x=>d.some(b=>b.repo?.toLowerCase()===x.toLowerCase()));if(E.length>0&&!k)try{let x=await $(r);for(let b of E){let w=await Ta(x,String(e.owner),b);if(w.renamed){C={warning:`No repositories matched under owner "${e.owner}", but "${e.owner}/${b}" now resolves to "${w.owner}/${w.repo}" \u2014 the repository may have been transferred. Retry scoped to owner:"${w.owner}" (see next.retryUnderCanonicalOwner).`,next:{retryUnderCanonicalOwner:{tool:"github.repositories",query:{...e,owner:w.owner,keywords:[w.repo]},why:"Re-run scoped to the repository's current owner after a detected transfer.",confidence:"exact"}}};break}}}catch{}}let P=[...R??[],...C?[C.warning]:[],...!g&&!C?['No repositories matched. Keywords are ANDed \u2014 try fewer or broader keywords, drop a topic/filter (topics are sparse), or add match:"readme" for full-text search.']:[]],T={...S.data,...P.length>0?{warnings:P}:{},...C?{next:C.next}:{}};return ge(e,T,g,I.GITHUB_SEARCH_REPOSITORIES,{rawResponse:Iy([...c,...l])})}catch(o){return He(o,e,void 0,I.GITHUB_SEARCH_REPOSITORIES)}}function iL(e,t){let n=e.error,r=typeof n=="object"&&n!==null?n:void 0,o=typeof r?.status=="number"?r.status:void 0,i=typeof t.path=="string"?t.path.replace(/\/+$/,""):"",s=i.includes("/")?i.slice(0,i.lastIndexOf("/")):"",a=i.split("/").pop()||t.repo,c=o===404?{retryParent:{tool:"github.tree",query:{owner:t.owner,repo:t.repo,...s?{path:s}:{},...t.branch?{branch:t.branch}:{}},why:"Retry at the parent directory \u2014 the path or branch may be wrong.",confidence:"low"},searchPath:{tool:"github.code",query:{owner:t.owner,repo:t.repo,match:"path",keywords:[a]},why:"Locate the path by name in case it moved or was renamed.",confidence:"low"}}:void 0;return{status:"error",owner:t.owner,repo:t.repo,path:t.path,branch:t.branch,error:typeof r?.error=="string"?r.error:typeof n=="string"?n:"Failed to explore repository structure",...typeof r?.status=="number"?{statusCode:r.status}:{},...typeof r?.type=="string"?{errorType:r.type}:{},...c?{next:c}:{}}}function sL(e){let t={};for(let[n,r]of Object.entries(e)){let o=n.split("/").pop()??n;if(n!==""&&n!=="."&&Bo(o))continue;let i=r.files.filter(a=>!kr(a)),s=r.folders.filter(a=>!Bo(a));(i.length>0||s.length>0)&&(t[n]={files:i,folders:s})}return t}async function vy(e,t,n=$e(t.authInfo)){try{let r=n(),o=`${e.owner}/${e.repo}`,i=e.branch,s=i??await r.provider.resolveDefaultBranch(o),a=await an(e,()=>r.provider.getRepoStructure(Mu(e,s))),c=s,l;if(a.ok===!1&&i){let g=a.result.error;if((typeof g=="object"&&g!==null?g.status:void 0)===404){let R=await r.provider.resolveDefaultBranch(o);if(R!==i){let C=await an(e,()=>r.provider.getRepoStructure(Mu(e,R)));C.ok!==!1&&(a=C,c=R,l=`Branch/ref '${i}' was not found. Showing '${R}' (default branch) instead. Re-query with the correct branch name if branch-specific results are required.`)}}}if(a.ok===!1)return iL(a.result,e);let u=sL(a.response.data.structure),p=Object.keys(u).length>0,d=ry(a.response.data,e,u,c);l&&(d.branchFallback={requestedBranch:i,actualBranch:c,warning:l});let f=d.structure?.find(g=>(g.files?.length??0)>0),h=String(e.path??"").replace(/\/+$/,""),y=f?(()=>{let g=f.dir==="."?f.files[0]:`${f.dir}/${f.files[0]}`;return h?`${h}/${g}`:g})():void 0;return d.next={...y?{fetchFile:{tool:"ghGetFileContent",query:{owner:e.owner,repo:e.repo,path:y,...c?{branch:c}:{}},why:"Read the first listed file",confidence:"low"}}:{},materialize:{tool:"ghGetFileContent",query:{owner:e.owner,repo:e.repo,path:String(e.path??""),type:"directory",...c?{branch:c}:{}},why:"Materialize this directory locally for exact line anchors, local search, or LSP",confidence:"exact"}},ge(e,d,p,I.GITHUB_VIEW_REPO_STRUCTURE,{rawResponse:a.response.rawResponseChars})}catch(r){return He(r,e,"Failed to explore repository structure",I.GITHUB_VIEW_REPO_STRUCTURE)}}var Qu=1e3,aL={"github.code":"code","github.repositories":"repositories","github.tree":"tree"};function Fy(){return({queries:e,results:t})=>{let n=e.flatMap((d,m)=>d.operation==="code"?[{query:d,originalIndex:m}]:[]),r=new Map(n.map((d,m)=>[d.originalIndex,m])),o=n.map(d=>d.originalIndex),i=n.map(({query:d})=>{let{operation:m,...f}=d;return f}),s=t.filter(d=>r.has(d.index)).map(d=>({...d,index:r.get(d.index)})),a=cL(i,s).map(d=>({...d,index:o[d.index]??d.index})),c=new Set(o),l=t.filter(d=>!c.has(d.index)),u=[...a,...l].map(d=>lL(d,e[d.index])).sort((d,m)=>d.index-m.index);return Kr({results:u},["results","index","status","meta","data","operation","files","repositories","structure","pagination","next","tool","query","why","confidence","error"],u.length>0&&u.every(d=>d.status==="error"))}}function cL(e,t){return e.length===0?[]:Pa()({queries:e,results:t,config:{toolName:"github.code"}}).structuredContent.results??[]}function lL(e,t){let n=t?.operation;if(!n||!t)return e;let r=Uu({operation:n,...e.data}),o=pL(r),i=uL(o,n,t);return{...e,data:dL(i,n,t)}}function My(e,t){let{goal:n,reasoning:r,...o}=e;return{...o,page:t}}function uL(e,t,n){if(!n)return e;let r=e.pagination;if(!r||typeof r!="object")return e;let o=r;if(o.hasMore!==!0)return e;let{nextPage:i,...s}=o,a=typeof o.perPage=="number"&&o.perPage>0?o.perPage:typeof n.pageSize=="number"&&n.pageSize>0?n.pageSize:void 0;if(o.totalMatchesCapped===!0&&typeof i=="number"&&a!==void 0&&(i-1)*a>=Qu){let l=e.next&&typeof e.next=="object"?e.next:void 0,{nextPage:u,...p}=l??{};return{...e,pagination:{...s,continuationUnavailable:{reason:"providerResultCap",maxResults:Qu}},...Object.keys(p).length>0?{next:p}:{}}}if(typeof i!="number"||!Number.isInteger(i))return{...e,terminalLimit:!0,pagination:{...s,continuationUnavailable:{reason:"missingProviderCursor"}}};if(i>1e3)return{...e,terminalLimit:!0,pagination:{...s,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}};let c=e.next&&typeof e.next=="object"?e.next:{};return{...e,next:{...c,nextPage:{tool:"ghSearch",query:My(n,i),why:`Continue ${t} results on page ${i}.`,confidence:"exact"}}}}function pL(e){let t=e.pagination;if(!t||typeof t!="object"||t.totalMatchesCapped!==!0)return e;let n=Array.isArray(e.partialReasons)?e.partialReasons.filter(r=>typeof r=="string"):[];return{...e,isPartial:!0,terminalLimit:!0,partialReasons:n.includes("providerResultCap")?n:[...n,"providerResultCap"],providerLimit:{reason:"providerResultCap",maxResults:Qu}}}function dL(e,t,n){if(e.terminalLimit===!0)return e;let r=e.incompleteResults===!0,o=Array.isArray(e.partialReasons)?e.partialReasons.filter(l=>typeof l=="string"):[],i=o.includes("partialTreeFailures");if(!r&&!i)return e;let s=[...o,...r&&!o.includes("providerIncompleteResults")?["providerIncompleteResults"]:[]],a=e.next&&typeof e.next=="object"?e.next:{},c=typeof n.page=="number"&&Number.isInteger(n.page)?n.page:1;return{...e,isPartial:!0,partialReasons:s,next:{...a,...a.retry?{}:{retry:{tool:"ghSearch",query:My(n,c),why:`Retry the same ${t} provider page because the provider reported incomplete results.`,confidence:"exact"}}}}}function Uu(e){if(Array.isArray(e))return e.map(Uu);if(!e||typeof e!="object")return e;let t=Object.fromEntries(Object.entries(e).map(([r,o])=>[r,Uu(o)])),n=typeof t.tool=="string"?aL[t.tool]:void 0;if(n&&(t.tool="ghSearch",t.query&&typeof t.query=="object")){let r={...t.query};n==="tree"?(r.pageSize=r.itemsPerPage,delete r.itemsPerPage):n==="repositories"?(r.pageSize=r.limit,delete r.limit,r.topics=r.topicsToSearch,delete r.topicsToSearch):n==="code"&&(r.pageSize=r.limit,delete r.limit),t.query={operation:n,...r}}return t}function Wu(e){return typeof e=="string"&&e.trim().length>0}function $u(e){return Array.isArray(e)&&e.some(Wu)}function mL(e){return e.operation==="code"?$u(e.keywords)||["owner","path","extension","filename","language"].some(t=>Wu(e[t])):e.operation==="repositories"?$u(e.keywords)||$u(e.topics)||["owner","language","stars","forks","goodFirstIssues","updated","created","size","visibility","license"].some(t=>Wu(e[t]))||typeof e.archived=="boolean":!0}var Xr=Dl.superRefine((e,t)=>{mL(e)||t.addIssue({code:"custom",path:["operation"],message:`${e.operation} needs at least one search term or scope filter`})}),Vu=Z(Xr,{maxQueries:5});async function Ny(e){let t=$e(e.authInfo);return he(e.queries,n=>Ct({toolName:St,query:n,contextMessage:"ghSearch execution failed",execute:async()=>{let r=Xr.safeParse(n);if(!r.success)throw r.error;return fL(r.data,e,t)}}),{toolName:St,finalize:Fy()},e)}async function fL(e,t,n){let{operation:r,...o}=e;switch(r){case"code":{let{pageSize:i,...s}=o,a={...s,limit:i};return xy(a,{...t,queries:[a]},n)}case"repositories":{let{topics:i,pageSize:s,...a}=o,c={...a,topicsToSearch:i,limit:s};return Oy(c,{...t,queries:[c]},n)}case"tree":{let{pageSize:i,...s}=o;return vy({...s,itemsPerPage:i},{...t,queries:[{...s,itemsPerPage:i}]},n)}default:throw new Error("Unsupported ghSearch operation")}}function hL(e){let t=e?.patches;return t?.mode?{mode:t.mode,...t.files?{files:t.files}:{},...t.ranges?{ranges:t.ranges}:{}}:{mode:"none"}}function gL(e){let t=e?.comments;return t?{discussion:t.discussion??!0,reviewInline:t.reviewInline??!0,includeBots:t.includeBots??!1,...t.file?{file:t.file}:{}}:!1}function yL(e){let t=e?.commits;return t?{list:!0,includeFiles:t.includeFiles??!1}:!1}function Dy(e){let{content:t}=e,n=hL(t),r=gL(t),o=yL(t);return{body:t?.body??!1,changedFiles:(t?.changedFiles??!1)||n.mode!=="none",patches:n,comments:r,reviews:t?.reviews??!1,commits:o}}function gW(e){return!!(e.body||e.changedFiles||e.patches.mode!=="none"||e.comments||e.reviews||e.commits)}function Fn(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Ku(e,t){return Fn(Object.fromEntries(t.map(n=>[n,e[n]])))}function li(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function lr(e){return e===!0?!0:void 0}function bL(e){if(!Array.isArray(e))return;let t=e.flatMap(n=>{if(!li(n)||typeof n.file!="string")return[];let r=Array.isArray(n.additions)?n.additions.filter(i=>typeof i=="number"):void 0,o=Array.isArray(n.deletions)?n.deletions.filter(i=>typeof i=="number"):void 0;return[Fn({file:n.file,...r?.length?{additions:r}:{},...o?.length?{deletions:o}:{}})]});return t.length>0?t:void 0}function Hy(e){if(!li(e))return;let t=li(e.comments)?Fn({discussion:lr(e.comments.discussion),reviewInline:lr(e.comments.reviewInline),includeBots:lr(e.comments.includeBots),file:typeof e.comments.file=="string"?e.comments.file:void 0}):void 0,n=li(e.commits)?Fn({includeFiles:lr(e.commits.includeFiles)}):void 0,r=li(e.patches)?Fn({mode:e.patches.mode==="all"||e.patches.mode==="selected"?e.patches.mode:void 0,files:Array.isArray(e.patches.files)?e.patches.files.filter(i=>typeof i=="string"):void 0,ranges:bL(e.patches.ranges)}):void 0,o=Fn({body:lr(e.body),changedFiles:lr(e.changedFiles),...r&&Object.keys(r).length>0?{patches:r}:{},...t&&Object.keys(t).length>0?{comments:t}:{},reviews:lr(e.reviews),...n&&Object.keys(n).length>0?{commits:n}:{}});return Object.keys(o).length>0?o:void 0}function Gy(e,t,n={}){let r={...e,...n},o=Hy(e.content),i=Hy(n.content),s=o||i?{...i??{},...o??{}}:void 0;return Fn({operation:"pullRequest",owner:e.owner,repo:e.repo,number:t,...Ku(r,["pageSize","filePage","commentPage","commitPage","charOffset","commentBodyOffset","charLength","matchString","minify"]),...s?{content:s}:{}})}function Xu(e,t={}){let n={...e,...t};return Fn({operation:"commit",...Ku(n,["owner","repo","ref","includeDiff","path","filePage","pageSize","charOffset","charLength"])})}var SL={pullRequests:["keywords","owner","repo","concise","state","assignee","author","commenter","mentions","review-requested","reviewed-by","label","checks","review","head","base","created","updated","closed","merged-at","comments","reactions","draft","match","sort","order","archived","minify","pageSize"],issues:["owner","repo","keywords","concise","state","author","assignee","commenter","mentions","label","created","updated","closed","comments","reactions","match","sort","order","archived","minify","pageSize"],commits:["owner","repo","path","since","until","branch","author","committer","pageSize"]};function Yu(e,t,n){return{operation:t,...Ku(e,SL[t]),page:n}}function ui(e){let t=e.matchString;if(typeof t!="string")return;let n=t.trim().toLowerCase();return n.length>0?n:void 0}function Yr(e,t){return typeof e=="string"&&e.toLowerCase().includes(t)}function pi(e,t=1,n=20){let r=Math.min(Math.max(1,n),100),o=e.length,i=Math.max(1,Math.ceil(o/r)),s=Math.min(Math.max(1,t),i),a=(s-1)*r,c=Math.min(a+r,o);return{items:e.slice(a,c),pagination:{currentPage:s,totalPages:i,itemsPerPage:r,totalItems:o,hasMore:s<i,...s<i&&s<1e3?{nextPage:s+1}:{},...s<i&&s>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}}function ur(e,t=0,n=12e3){if(typeof e!="string")return;let r=e.length,o=Math.min(Math.max(0,t),r),i=Math.min(Math.max(1,n),5e4),s=Math.min(o+i,r),a=s<r;return{content:e.slice(o,s),pagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function Aa(e,t=500){if(!(typeof e!="string"||e.length===0))return e.length<=t?e:`${e.slice(0,t-3)}...`}function By(e,t){return{operation:"pullRequest",owner:e.owner,repo:e.repo,number:t}}function di(e,t,n){return Gy(e,t,n)}function Zu(e,t,n,r,o={}){if(!(!r.hasMore||r.nextCharOffset===void 0))return di(e,t,{content:n,...o,charOffset:r.nextCharOffset,charLength:e.charLength})}function La(e,t,n,r,o){if(!(!o.hasMore||o.nextPage===void 0))return di(e,t,{content:n,[r]:o.nextPage,pageSize:e.pageSize})}function Zr(e){return typeof e=="object"&&e!==null}function _a(e){if(Zr(e)&&!(typeof e.currentPage!="number"||typeof e.totalPages!="number"||typeof e.itemsPerPage!="number"||typeof e.totalItems!="number"||typeof e.hasMore!="boolean"))return e}function ka(e){if(Zr(e)&&!(typeof e.charOffset!="number"||typeof e.charLength!="number"||typeof e.totalChars!="number"||typeof e.hasMore!="boolean"))return e}function RL(e,t){return e.filter(n=>{let r=n.commentType;return t.file&&n.path!==t.file?!1:r==="review_inline"?t.reviewInline:t.discussion})}function zy(e,t,n){if(!n.comments)return{};let r=Array.isArray(e.comments)?e.comments:[],o=RL(r,n.comments),i=ui(t),s=i?o.filter(l=>Yr(l.body,i)):o,{items:a,pagination:c}=pi(s,t.commentPage??t.page??1,t.pageSize??20);return{comments:a.map(l=>{let u=ur(typeof l.body=="string"?l.body:"",t.commentBodyOffset??0,t.charLength??12e3);return{id:l.id,author:l.author,commentType:l.commentType??"discussion",path:l.path,line:l.line,...l.in_reply_to_id!=null?{in_reply_to_id:l.in_reply_to_id}:{},...u?{body:u.content,bodyPagination:u.pagination}:{bodyPreview:Aa(typeof l.body=="string"?l.body:"")},createdAt:l.createdAt,updatedAt:l.updatedAt}}),contentPagination:{comments:c}}}function jy(e,t,n){if(!n.reviews)return{};let r=Array.isArray(e.reviews)?e.reviews:[],o=ui(t);return{reviews:(o?r.filter(s=>Yr(s.body,o)):r).map(s=>{let a=typeof s.body=="string"?s.body:"",c=ur(a||void 0,0,t.charLength??12e3);return{id:s.id,user:s.user,state:s.state,...c?{body:c.content,bodyPagination:c.pagination}:{},submittedAt:s.submittedAt??s.submitted_at,commitId:s.commitId??s.commit_id}})}}function Qy(e,t,n){if(!n.commits)return{};let r=Array.isArray(e.commits)?e.commits:[],{items:o,pagination:i}=pi(r,t.commitPage??t.page??1,t.pageSize??20);return{commits:o.map(s=>({sha:s.sha,message:s.message,author:s.author,date:s.date,...n.commits&&n.commits.includeFiles&&Array.isArray(s.files)?{files:s.files}:{}})),contentPagination:{commits:i}}}function Ia(e){return String(e.path??e.filename??"")}function CL(e,t){return{path:Ia(e),status:String(e.status??""),additions:Number(e.additions??0),deletions:Number(e.deletions??0),...t&&typeof e.patch=="string"?{patch:e.patch}:{}}}function Uy(e,t,n){let r=Array.isArray(e.fileChanges)?e.fileChanges:[],o=n.patches.files,i=o&&o.length>0?r.filter(d=>o.includes(Ia(d))):r,s=ui(t),a=s?i.filter(d=>Yr(Ia(d),s)||Yr(d.patch,s)):i,{items:c,pagination:l}=pi(a,t.filePage??t.page??1,t.pageSize??20),u=n.patches.mode!=="none",p=c.map(d=>{let m=CL(d,!1);if(!u||typeof d.patch!="string")return m;let f=ur(d.patch,t.charOffset??0,t.charLength??12e3);return{...m,patch:f?.content??"",...f?{patchPagination:f.pagination}:{}}});return n.changedFiles||n.patches.mode!=="none"?{changedFiles:p,contentPagination:{changedFiles:l}}:r.length===0?{}:{filePathsPreview:r.slice(0,20).map(Ia).filter(Boolean),contentPagination:{filePaths:{totalFiles:r.length,filesPerPage:20,hasMore:r.length>20,...r.length>20?{nextFilePage:2}:{}}}}}function Mn(e,t){return{...e,content:t}}function $y(e,t,n,r){let o=By(e,t);return{target:o,...n.body?{}:{getBody:Mn(o,{body:!0})},...n.changedFiles?{}:{getChangedFiles:Mn(o,{changedFiles:!0})},...n.patches.mode!=="none"?{}:{getSelectedPatches:Mn(o,{patches:{mode:"selected",files:[r??"path/from/changedFiles"]}}),getAllPatches:Mn(o,{patches:{mode:"all"}})},...n.comments?{}:{getComments:Mn(o,{comments:{discussion:!0,reviewInline:!0}})},...n.reviews?{}:{getReviews:Mn(o,{reviews:!0})},...n.commits?{}:{getCommits:Mn(o,{commits:{}})},fullReview:Mn(o,{body:!0,changedFiles:!0,patches:{mode:"all"},comments:{discussion:!0,reviewInline:!0},reviews:!0,commits:{}})}}function xL(e){return e.replace(/\n{3,}/g,`
|
|
45
|
-
|
|
46
|
-
`)}function wL(e){return{...e.changedFiles?{changedFiles:!0}:{},...e.patches.mode!=="none"?{patches:e.patches}:{}}}function PL(e){let t=e.changedFiles;if(Array.isArray(t))for(let n of t){if(!Zr(n))continue;let r=ka(n.patchPagination);if(r?.hasMore)return r}}function TL(e){let t=e.comments;if(Array.isArray(t))for(let n of t){if(!Zr(n))continue;let r=ka(n.bodyPagination);if(r?.hasMore)return r}}function EL(e,t,n,r,o){let i={},s=ka(t.body),a=_a(t.changedFiles),c=_a(t.comments),l=_a(t.commits),u=PL(e),p=TL(e),d=wL(r);if(s&&(i.body={...s,nextQuery:Zu(n,o,{body:!0},s)}),a){let f=La(n,o,d,"filePage",a);i.changedFiles={...a,...f?{nextQuery:f}:{}}}if(c&&r.comments){let f=La(n,o,{comments:r.comments},"commentPage",c);i.comments={...c,...f?{nextQuery:f}:{}}}if(p?.hasMore&&p.nextCharOffset!==void 0&&r.comments&&(i.commentBody={...p,nextQuery:di(n,o,{content:{comments:r.comments},...n.commentPage!==void 0?{commentPage:n.commentPage}:{},commentBodyOffset:p.nextCharOffset,charLength:n.charLength})}),l&&r.commits){let f=La(n,o,{commits:r.commits},"commitPage",l);i.commits={...l,...f?{nextQuery:f}:{}}}u&&r.patches.mode!=="none"&&(i.patches={...u,nextQuery:Zu(n,o,{patches:r.patches},u,{filePage:n.filePage??n.page})});let m=t.filePaths;return Zr(m)&&(i.filePaths={...m,hasMore:m.hasMore===!0,nextQuery:m.hasMore===!0?di(n,o,{content:{changedFiles:!0},filePage:m.nextFilePage}):void 0}),Object.keys(i).length>0?i:void 0}function Wy(e,t,n,r,o){let i=Number(e.number),s=typeof e.body=="string"?e.body:void 0,a=s&&r?xL(s):s,c=n.body?ur(a,t.charOffset??0,t.charLength??12e3):void 0,l=n.body||n.changedFiles||n.patches.mode!=="none"||!!n.comments||n.reviews||!!n.commits,u=o!==void 0?o:l,d=t.prNumber!==void 0||t.verbose===!0,{contentPagination:m={},...f}=Uy(e,t,n),{contentPagination:h={},...y}=zy(e,t,n),{contentPagination:g={},...S}=Qy(e,t,n),R=Array.isArray(f.changedFiles)?f.changedFiles.find(E=>E.path)?.path:void 0,P={...{number:e.number,title:e.title,state:e.state,...e.draft?{draft:e.draft}:{},author:e.author,...Array.isArray(e.assignees)&&e.assignees.length?{assignees:e.assignees}:{},...Array.isArray(e.labels)&&e.labels.length?{labels:e.labels}:{},targetBranch:e.targetBranch,...d?{sourceBranch:e.sourceBranch,...e.sourceSha?{sourceSha:e.sourceSha}:{}}:{},createdAt:e.createdAt,...d?{updatedAt:e.updatedAt}:{},...d||!e.mergedAt?{closedAt:e.closedAt}:{},mergedAt:e.mergedAt,...e.commentsCount?{commentsCount:e.commentsCount}:{},...e.changedFilesCount?{changedFilesCount:e.changedFilesCount}:{},...e.additions?{additions:e.additions}:{},...e.deletions?{deletions:e.deletions}:{},...d&&!c?{bodyPreview:Aa(typeof e.body=="string"?e.body:void 0)}:{},...u?{next:$y(t,i,n,R)}:{}},...n.body?c?{body:c.content}:{bodyEmpty:!0}:{},...f,...y,...jy(e,t,n),...S,...e.reviewSummary?{reviewSummary:e.reviewSummary}:{},...Array.isArray(e.sanitizationWarnings)&&e.sanitizationWarnings.length>0?{sanitizationWarnings:e.sanitizationWarnings}:{}},T=EL(P,{...c?{body:c.pagination}:{},...m,...h,...g},t,n,i);return T&&(P.contentPagination=T),P}function wt(e){if(typeof e=="string")return e;if(Array.isArray(e)&&typeof e[0]=="string")return e[0]}function qu(e){let t=(e.keywordsToSearch??[]).filter(o=>o.trim()).map(Sa),n=e.query?.trim()??"";return[...t,...n?[n]:[]].join(" ")||void 0}function Vy(e,t,n){if(!n&&!t)return{text:e};let r=e.length,o=Math.min(Math.max(0,t??0),r),i=Math.max(1,n??r),s=Math.min(o+i,r),a=s<r;return{text:e.slice(o,s),pagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function Oa(e){return e.pull_request!=null}function AL(e){return e?e.map(t=>typeof t=="string"?t:t.name??"").filter(Boolean):[]}function va(e){return{number:e.number,title:e.title??"",state:e.state??"open",author:e.user?.login??"unknown",labels:AL(e.labels),createdAt:e.created_at??"",updatedAt:e.updated_at??"",...e.closed_at?{closedAt:e.closed_at}:{}}}function qr(e,t=[]){return{error:e,type:"http",...t.length>0?{hints:t}:{}}}function Ju(e,t,n="anon"){return xe("gh-api-issues",{owner:e.owner,repo:e.repo,issueNumber:e.issueNumber,query:qu(e),state:e.state,author:e.author,assignee:e.assignee,mentions:e.mentions,commenter:e.commenter,label:e.label,milestone:e.milestone,created:e.created,updated:e.updated,closed:e.closed,comments:e.comments,reactions:e.reactions,locked:e.locked,visibility:e.visibility,archived:e.archived,match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,charOffset:e.charOffset,charLength:e.charLength,commentPage:e.commentPage,itemsPerPage:e.itemsPerPage,concise:e.concise,auth:n},t)}import{ContentSanitizer as Ky}from"@octocodeai/octocode-engine/contentSanitizer";async function Xy(e,t){let n=wt(e.owner),r=wt(e.repo),o=e.issueNumber;if(!n||!r||o==null)return qr("owner, repo, and issueNumber are required for issue detail mode.");let i=await $(t),s=await i.rest.issues.get({owner:n,repo:r,issue_number:o});if(Oa(s.data))return qr(`Issue #${o} is a pull request; use ghGetHistoryItem operation:"pullRequest" with number:${o}.`,[`Retry with ghGetHistoryItem { operation: "pullRequest", owner: "${n}", repo: "${r}", number: ${o} }.`]);let a=e.content?.body!==!1,c=e.content?.comments?.discussion===!0,l=e.content?.comments?.includeBots===!0,u=va(s.data),p={};if(a){let d=Ky.sanitizeContent(s.data.body??"").content,m=Vy(d,e.charOffset,e.charLength);u.body=m.text,m.pagination&&(p.body=m.pagination)}if(c){let d=Math.max(1,e.commentPage??1),m=Math.max(1,e.itemsPerPage??30),f=await i.rest.issues.listComments({owner:n,repo:r,issue_number:o,per_page:m,page:d}),h=l?f.data:f.data.filter(g=>!ir(g.user?.login??""));u.comments=h.map(g=>({id:String(g.id),user:g.user?.login??"unknown",body:Ky.sanitizeContent(g.body??"").content,createdAt:g.created_at??"",updatedAt:g.updated_at??"",commentType:"discussion"}));let y=qs(f.headers.link);p.comments={currentPage:d,itemsPerPage:m,totalComments:u.comments.length,hasMore:y,...y&&d<1e3?{nextCommentPage:d+1}:{},...y&&d>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}return Object.keys(p).length>0&&(u.contentPagination=p),{data:{type:"issues",owner:n,repo:r,issues:[u],totalCount:1},status:200}}async function Yy(e,t,n){let r=wt(t.owner)??"",o=wt(t.repo)??"",i=await $(n),s=[],a=e;if(r&&o){let g=await Ta(i,r,o);g.renamed&&(s.push(`Repository ${r}/${o} was renamed to ${g.owner}/${g.repo} \u2014 GitHub search does not follow renames, so the canonical name was searched instead.`),a={...e,owner:g.owner,repo:g.repo})}let c=bl(a),l=Math.min(t.limit??30,100),u=t.page??1,p=t.sort&&t.sort!=="best-match"?t.sort:void 0,d=await i.rest.search.issuesAndPullRequests({q:c,sort:p,order:t.order||"desc",per_page:l,page:u}),m=ch(d.headers);m&&s.push(m);let f=(d.data.items??[]).filter(g=>!Oa(g)).map(g=>va(g)),h=d.data.total_count??f.length,y=u*l<h&&f.length===l;return{data:{type:"issues",owner:r,repo:o,issues:t.concise?f.map(g=>`#${g.number} ${g.title}`):f,totalCount:h,effectiveQuery:c,...s.length?{warnings:s}:{},...d.data.incomplete_results?{incompleteResults:!0}:{},pagination:{currentPage:u,perPage:l,hasMore:y,...y?{nextPage:u+1}:{},...h>1e3?{totalMatchesCapped:!0}:{}}},status:200}}async function Zy(e,t){let n=wt(e.owner),r=wt(e.repo);if(!n||!r)return qr("owner and repo are required for issues mode.");let o=await $(t),i=Math.min(e.limit??30,100),s=e.page??1,a=e.state==="open"||e.state==="closed"?e.state:"all",c=await o.rest.issues.listForRepo({owner:n,repo:r,state:a,per_page:i,page:s,...e.assignee?{assignee:e.assignee}:{},...e.author?{creator:e.author}:{},...e.mentions?{mentioned:e.mentions}:{},...e.milestone?{milestone:e.milestone}:{},...e.sort==="created"||e.sort==="updated"||e.sort==="comments"?{sort:e.sort}:{},...e.order?{direction:e.order}:{},...typeof e.label=="string"?{labels:e.label}:Array.isArray(e.label)?{labels:e.label.join(",")}:{}}),l=c.data.filter(m=>!Oa(m)).map(m=>va(m)),u=qs(c.headers.link),p=!u&&s===1,d=[];return l.length===0&&u&&d.push("This page contained only pull requests (the GitHub issues endpoint returns both; PRs are filtered out) \u2014 follow pagination.nextPage, later pages may contain issues."),{data:{type:"issues",owner:n,repo:r,issues:e.concise?l.map(m=>`#${m.number} ${m.title}`):l,...p?{totalCount:l.length}:{},...d.length?{warnings:d}:{},pagination:{currentPage:s,perPage:i,hasMore:u,...u?{nextPage:s+1}:{}}},status:200}}async function ep(e,t,n){let r=await ke(t),o=Ju(e,n,r);return De(o,()=>LL(e,t),{shouldCache:i=>"data"in i&&!("error"in i)})}async function LL(e,t){try{if(e.state==="merged"){let r={owner:wt(e.owner)??"",repo:wt(e.repo)??"",state:"merged"};return qr('state:"merged" is not valid for issues \u2014 use "open" or "closed".',[`Use ghSearchHistory with ${JSON.stringify({operation:"pullRequests",...r})}.`])}if(e.issueNumber!=null)return await Xy(e,t);let n={...e,query:qu(e)};return Sl(n)?await Yy(n,e,t):await Zy(e,t)}catch(n){return Qt(n)?{data:{type:"issues",owner:wt(e.owner)??"",repo:wt(e.repo)??"",issues:[],totalCount:0,pagination:{currentPage:e.page??1,perPage:Math.min(e.limit??30,100),hasMore:!1}},status:200}:J(n)}}async function mi(e,t,n,r=le){let o=t;if(!o.owner||!o.repo)return N("owner and repo are required for issues mode.",e);let i=o.issueNumber??o.prNumber,s=await ep({owner:o.owner,repo:o.repo,...i!=null?{issueNumber:i}:{},keywordsToSearch:o.keywords,query:o.query,state:o.state,author:o.author,assignee:o.assignee,mentions:o.mentions,commenter:o.commenter,label:o.label,milestone:o.milestone,created:o.created,updated:o.updated,closed:o.closed,comments:o.comments,reactions:o.reactions,locked:o.locked,visibility:o.visibility,match:o.match,archived:o.archived,sort:o.sort,order:o.order,limit:o.pageSize,page:Number(o.page)||1,concise:o.concise,content:o.content,charOffset:o.charOffset,charLength:o.charLength,commentPage:o.commentPage,itemsPerPage:o.pageSize},n);if(Rt(s))return N(s,e,{toolName:r});if(i!=null&&Array.isArray(s.data.issues)){let d=s.data.issues[0];if(d&&typeof d=="object"&&d.contentPagination){let m=d.contentPagination,f={operation:"issue",owner:o.owner,repo:o.repo,number:i,content:o.content,...o.commentPage===void 0?{}:{commentPage:o.commentPage},...o.charLength===void 0?{}:{charLength:o.charLength}},h=m.body;typeof h?.nextCharOffset=="number"&&(h.nextQuery={...f,charOffset:h.nextCharOffset});let y=m.comments;typeof y?.nextCommentPage=="number"&&(y.nextQuery={...f,commentPage:y.nextCommentPage})}}let a=Array.isArray(s.data.issues)?s.data.issues.length>0:!1,c=!a&&s.data.warnings?.length?{hints:s.data.warnings}:{},l=s.data.issues,u=(()=>{if(!Array.isArray(l)||l.length===0)return;let d=l[0];if(typeof d=="number")return d;if(typeof d=="string"){let m=d.match(/^#(\d+)\b/);return m?Number(m[1]):void 0}if(d&&typeof d=="object"&&typeof d.number=="number")return d.number})(),p={};return i==null&&u!=null&&(p.readIssue={tool:"ghGetHistoryItem",query:{operation:"issue",owner:o.owner,repo:o.repo,number:u,content:{body:!0}},why:`Read issue #${u} body/discussion from this list`,confidence:"low"}),p.searchRepositoryCode={tool:"ghSearch",query:{operation:"code",owner:o.owner,repo:o.repo},why:"Search code in this repository for symbols mentioned in the issue(s)",confidence:"low"},ge(e,{...s.data,...c,next:p},a,r,{rawResponse:s.rawResponseChars})}async function qy(e,t){try{let o=(await(await $(t)).rest.repos.compareCommitsWithBasehead({owner:e.owner,repo:e.repo,basehead:`${e.base}...${e.head}`})).data,i=(o.commits??[]).map(l=>({sha:l.sha,messageHeadline:(l.commit.message??"").split(`
|
|
47
|
-
`)[0]??"",author:l.commit.author?.name??l.author?.login??"unknown",date:l.commit.author?.date??""})),s=o.files??[],a=e.path?s.filter(l=>l.filename===e.path):s,c;if(e.includeDiff){let l=sr(a,{filePage:e.filePage,itemsPerPage:e.itemsPerPage,charOffset:e.charOffset,charLength:e.charLength});c={files:l.files,filesPagination:l.filesPagination}}else c={changedFiles:a.length};return{data:{type:"compare",owner:e.owner,repo:e.repo,base:e.base,head:e.head,status:o.status,aheadBy:o.ahead_by,behindBy:o.behind_by,totalCommits:o.total_commits,commits:i,...c},status:200}}catch(n){return J(n)}}async function fi(e,t,n,r=le){let o=t;if(!o.owner||!o.repo)return N("owner and repo are required for commits mode.",e);if(o.base&&o.head){let m=await qy({owner:o.owner,repo:o.repo,base:o.base,head:o.head,includeDiff:!!o.includeDiff,path:o.path,filePage:typeof o.filePage=="number"?o.filePage:void 0,itemsPerPage:o.pageSize,charOffset:typeof o.charOffset=="number"?o.charOffset:void 0,charLength:typeof o.charLength=="number"?o.charLength:void 0},n);if(Rt(m))return N(m,e,{toolName:r});let f=m.data,h=m.data.filesPagination,y=m.data.files?.find(R=>typeof R.patchPagination?.nextCharOffset=="number"),g={},S={operation:"compare",owner:o.owner,repo:o.repo,base:o.base,head:o.head,...o.includeDiff?{includeDiff:!0}:{},...o.path?{path:o.path}:{},...o.filePage===void 0?{}:{filePage:o.filePage},...o.pageSize===void 0?{}:{pageSize:o.pageSize},...o.charOffset===void 0?{}:{charOffset:o.charOffset},...o.charLength===void 0?{}:{charLength:o.charLength}};return typeof h?.nextFilePage=="number"&&(g.nextFilePage={tool:"ghGetHistoryItem",query:{...S,filePage:h.nextFilePage},why:"Continue the changed-file list.",confidence:"exact"}),typeof y?.patchPagination?.nextCharOffset=="number"&&(g.continuePatch={tool:"ghGetHistoryItem",query:{...S,charOffset:y.patchPagination.nextCharOffset},why:"Continue the current patch window.",confidence:"exact"}),ge(e,Object.keys(g).length>0?{...f,next:g}:f,m.data.totalCommits>0||m.data.status!=="identical",r)}let i=o.path,s=i&&!i.endsWith("/")?"file":"repo";if(s==="file"&&!i)return N("path is required when querying a specific file in commits mode.",e);let a=await qh({type:s,owner:o.owner,repo:o.repo,path:i,branch:o.branch,since:o.since,until:o.until,author:o.author,committer:o.committer,page:Number(o.page)||1,perPage:Number(o.pageSize)||30,filePage:typeof o.filePage=="number"?o.filePage:void 0,itemsPerPage:typeof o.pageSize=="number"?o.pageSize:void 0,includeDiff:!!o.includeDiff,charOffset:typeof o.charOffset=="number"?o.charOffset:void 0,charLength:typeof o.charLength=="number"?o.charLength:void 0},n);if(Rt(a))return N(a,e,{toolName:r});let{commits:c}=a.data,l=c.length>0,u=c.map(m=>m.messageHeadline?.match(/\(#(\d+)\)/)?.[1]).find(Boolean),p=!l&&a.data.warnings?.length?{hints:a.data.warnings}:{},d={...a.data,...p,...u?{next:{prDetail:{tool:"ghGetHistoryItem",query:{operation:"pullRequest",owner:o.owner,repo:o.repo,number:Number(u)},why:`Open PR #${u} referenced by the first commit for review context`,confidence:"low"}}}:{}};return ge(e,d,l,r,{rawResponse:a.rawResponseChars})}async function hi(e,t,n,r=le){let o=n(),i={...t},s=Dy(i),a=i.prNumber!==void 0;a||(i.content=void 0);let c=await an(i,()=>o.provider.searchPullRequests(Jg(i)));if(c.ok===!1)return c.result;let l=a?s.changedFiles||s.patches.mode!=="none":!1,{pullRequests:u,resultData:p}=ey(c.response.data,{includeFileChanges:l});i.prNumber!==void 0&&delete p.pagination;let d=!a&&!!e.content,m={...s,body:!1,changedFiles:!1,patches:{mode:"none"},comments:!1,commits:!1},f=i.minify==="standard",h=a,y=u.map(S=>Wy(S,i,d?m:s,f,h));p.pullRequests=y,!a&&i.concise===!0&&(p.pullRequests=y.map(S=>{let R=S;return`#${R.number} ${R.title}`}));let g=y.length>0;if(!a&&g){let S=y[0].number,R=i.owner,C=i.repo;S!=null&&R&&C&&(p.next={readPr:{tool:"ghGetHistoryItem",query:{operation:"pullRequest",owner:R,repo:C,number:S,content:{body:!0,changedFiles:!0,comments:{discussion:!0}}},why:"Read any PR from this list \u2014 swap number for the # you want.",confidence:"low"}})}return ge(i,p,g,r,{rawResponse:c.response.rawResponseChars})}import{z as tp}from"zod";var Jy={type:tp.enum(["prs","commits","issues"]).optional(),prNumber:M(1,1e9).optional(),issueNumber:M(1,1e9).optional(),pageSize:M(1,100).optional().default(30),match:tp.array(tp.enum(["title","body","comments"])).optional(),page:be.default(1),filePage:M(1,1e3).optional(),commentPage:M(1,1e3).optional(),commitPage:M(1,1e3).optional(),charOffset:at.optional(),commentBodyOffset:at.optional(),charLength:M(1,5e4).optional()},_L=pe(Ns,Jy),gi=se(Ns,Jy),kL=Z(_L);async function Fa(e){let{queries:t,authInfo:n}=e,r=$e(n);return he(t,async(o,i)=>{try{let s=tt(gi,o);if(s.ok===!1)return s.error;let a=s.data.type;return a==="issues"?await mi(o,s.data,n):a==="commits"?await fi(o,s.data,n):await hi(o,s.data,r)}catch(s){return He(s,o,void 0,le)}},{toolName:le,keysPriority:["pullRequests","issues","pagination","totalCount","error"]},e)}import{z as nt}from"zod";function eo(e,t,n){let r=e.safeParse(t);if(!r.success)for(let o of r.error.issues)n.addIssue({code:"custom",message:o.message,path:o.path})}function eb(e){let t=e;for(;t instanceof nt.ZodOptional||t instanceof nt.ZodDefault;)t=t.unwrap();if(!(t instanceof nt.ZodObject))throw new TypeError("Expected an object schema");return t}function tb(e){let t=e;for(;t instanceof nt.ZodOptional||t instanceof nt.ZodDefault;)t=t.unwrap();if(!(t instanceof nt.ZodArray))throw new TypeError("Expected an array schema");return t}function to(e,t){return e.description?t.describe(e.description):t}var nb={pageSize:M(1,100).optional().default(30),page:M(1,1e3).optional()},rb={...nb,filePage:M(1,1e3).optional(),commentPage:M(1,1e3).optional(),commitPage:M(1,1e3).optional(),charOffset:at.optional(),commentBodyOffset:at.optional(),charLength:M(1,1e5).optional()},XV=se(tr,rb).superRefine((e,t)=>eo(tr,e,t)),Jr=pe(tr,rb),ob=Pe(Jr.shape,"content"),ib=eb(ob),sb=Pe(ib.shape,"patches"),Nn=eb(sb),ab=to(Pe(Nn.shape,"mode"),nt.literal("selected")),IL=to(Pe(Nn.shape,"mode"),nt.literal("all")),OL=to(Pe(Nn.shape,"files"),tb(Pe(Nn.shape,"files")).min(1)),vL=to(Pe(Nn.shape,"ranges"),tb(Pe(Nn.shape,"ranges")).min(1)),FL=nt.object({mode:ab,files:OL,ranges:Pe(Nn.shape,"ranges")}).strict(),ML=nt.object({mode:ab,files:Pe(Nn.shape,"files"),ranges:vL}).strict(),NL=nt.object({mode:IL}).strict(),DL=ib.extend({patches:to(sb,nt.union([FL,ML,NL]).optional())}),rp=Jr.omit({prNumber:!0,filePage:!0,commentPage:!0,commitPage:!0,content:!0,matchString:!0,commentBodyOffset:!0,charOffset:!0,charLength:!0}),HL=rp.superRefine((e,t)=>eo(tr,e,t)),Na=Jr.omit({keywords:!0,concise:!0,state:!0,assignee:!0,author:!0,commenter:!0,mentions:!0,"review-requested":!0,"reviewed-by":!0,label:!0,checks:!0,review:!0,head:!0,base:!0,created:!0,updated:!0,closed:!0,"merged-at":!0,comments:!0,reactions:!0,draft:!0,match:!0,sort:!0,order:!0,page:!0,archived:!0}).extend({owner:Te(Jr.shape,"owner"),repo:Te(Jr.shape,"repo"),prNumber:Te(Jr.shape,"prNumber"),content:to(ob,DL.optional())}),GL=Na.superRefine((e,t)=>eo(tr,e,t)),YV=Z(nt.union([HL,GL])),cb={...nb,commentPage:M(1,1e3).optional(),charOffset:at.optional(),commentBodyOffset:at.optional(),charLength:M(1,1e5).optional()},ZV=se(nr,cb).superRefine((e,t)=>eo(nr,e,t)),np=pe(nr,cb),yi=np.omit({issueNumber:!0,commentPage:!0,content:!0,matchString:!0,commentBodyOffset:!0,charOffset:!0,charLength:!0}),BL=yi.superRefine((e,t)=>eo(nr,e,t)),Da=np.omit({keywords:!0,concise:!0,state:!0,assignee:!0,author:!0,commenter:!0,mentions:!0,label:!0,created:!0,updated:!0,closed:!0,comments:!0,reactions:!0,match:!0,sort:!0,order:!0,page:!0,archived:!0}).extend({issueNumber:Te(np.shape,"issueNumber")}),zL=Da.superRefine((e,t)=>eo(nr,e,t)),qV=Z(nt.union([BL,zL])),lb={page:be.default(1),pageSize:M(1,100).optional().default(30),filePage:be.optional(),charOffset:at.optional(),charLength:M(1,1e5).optional()};function jL(e,t){(e.base&&!e.head||e.head&&!e.base)&&t.addIssue({code:"custom",path:[e.base?"head":"base"],message:"compare mode requires base and head together"})}var JV=se(Ds,lb).superRefine(jL),Ma=pe(Ds,lb),op=Ma.omit({base:!0,head:!0}),QL=op,no=Ma.omit({branch:!0,since:!0,until:!0,author:!0,committer:!0,page:!0}).extend({base:Te(Ma.shape,"base"),head:Te(Ma.shape,"head")}),UL=no,e2=Z(nt.union([QL,UL]));function ip(e,t){return{...e,queries:e.queries.map(n=>({...n,type:t}))}}function r2(e){return Fa(ip(e,"prs"))}function o2(e){return Fa(ip(e,"issues"))}function i2(e){return Fa(ip(e,"commits"))}import{ContentSanitizer as t_}from"@octocodeai/octocode-engine/contentSanitizer";import Ha from"path";import{pathValidator as Ga}from"@octocodeai/octocode-engine/pathValidator";import{getConfigSync as ub,getOctocodeHome as $L}from"@octocodeai/config";function WL(e=ub().local.allowedPaths){for(let t of e)typeof t=="string"&&t.trim()!==""&&Ga.addAllowedRoot(t)}function VL(){let e=$L(process.env);Ga.addAllowedRoot(Ha.join(e,"tmp","clone")),Ga.addAllowedRoot(Ha.join(e,"tmp","tree"))}function lt(e,t){if(!e.path?.trim()){let s=Xe.pathValidationFailed("","path is required");return{isValid:!1,errorResult:N(s,e,{toolName:t})}}WL(),VL();let n=process.env.WORKSPACE_ROOT?.trim()||ub().local.workspaceRoot||process.cwd(),r=e.path.replace(/^file:\/\//,""),o=Ha.isAbsolute(r)?r:Ha.resolve(n,r),i=Ga.validate(o);if(!i.isValid){let s=Xe.pathValidationFailed(e.path,i.error);return{isValid:!1,errorResult:N(s,e,{toolName:t,extra:{cwd:n,resolvedPath:o}})}}return{isValid:!0,sanitizedPath:i.sanitizedPath??o}}function d2(e,t,n={}){let{threshold:r=100,itemType:o="item",detailed:i=!1}=n;return t?{shouldBlock:!1}:e>r?{shouldBlock:!0,errorCode:Xe.outputTooLarge(e,r).errorCode,hints:[`Found ${e} ${o}${e===1?"":"s"} - exceeds safe limit of ${r}`,"Use charLength to paginate through results",i?"Detailed results increase size - consider using charLength for pagination":"Consider using charLength to paginate large result sets"]}:{shouldBlock:!1}}import{open as KL,readFile as XL,stat as YL}from"fs/promises";var f2={COMMAND_TIMEOUT:3e4,MAX_OUTPUT_SIZE:10485760,MAX_RESULTS:100,CONTEXT_LINES:5},Kt={MCP_MAX_TOKENS:25e3,CHARS_PER_TOKEN:4,MAX_FETCH_CONTENT_CHARS:5e4,MAX_OUTPUT_SIZE_BYTES:10*1024*1024,LARGE_FILE_THRESHOLD_KB:100,MAX_ENTRIES_BEFORE_PAGINATION:100,MAX_FILES_DEFAULT:1e3,DEFAULT_ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200,MAX_LIST_ITEMS_DETAILED:100,MAX_LIST_ITEMS_SIMPLE:200,MAX_ARCHIVE_ENTRIES_PER_PAGE:100,MAX_DIR_ENTRIES_PER_PAGE:100,MAX_DIR_ENTRIES_TREE:1e3,DEFAULT_EXEC_TIMEOUT_MS:3e4,DEFAULT_MAX_MATCHES_PER_FILE:3,DEFAULT_CONTEXT_LINES:5,DEFAULT_MATCH_CONTENT_LENGTH:500,MAX_MATCH_CONTENT_LENGTH:800,DEFAULT_MATCHES_PER_PAGE:10,MAX_MATCHES_PER_PAGE:100,DEFAULT_FILES_PER_PAGE:20,MAX_FILES_PER_PAGE:50,MAX_RIPGREP_DIRECTORY_SIZE_MB:100,MAX_FILE_COUNT_FOR_SEARCH:1e3,ESTIMATED_AVG_FILE_SIZE_BYTES:50*1024,LARGE_RESULT_BYTES_HINT:1.5*1024*1024,BINARY_MAX_BYTES:10*1024,BINARY_DEFAULT_HEX_LINES:20,BINARY_DEFAULT_MIN_STRING_LENGTH:6,MAX_ARCHIVE_FILES:1e3,DEFAULT_ARCHIVE_MAX_FILES:200,GLOBAL_MEMORY_LIMIT_BYTES:100*1024*1024,PER_OPERATION_MEMORY_LIMIT_BYTES:10*1024*1024,MEMORY_RESERVATION_TIMEOUT_MS:300*1e3,TOKEN_CRITICAL_THRESHOLD:5e4,TOKEN_HIGH_THRESHOLD:25e3,TOKEN_MODERATE_THRESHOLD:1e4,TOKEN_NOTICE_THRESHOLD:2500};function g2(e){return t=>{}}function pb(e,t){return n=>t}function sp(e,t){let n=Math.abs(t-e);return n>=50&&n/e>=.02?{sourceChars:e,sourceBytes:t}:{sourceChars:e}}function ap(e,t,n){return{...e,...sp(t,n)}}function db(e){let t=e.fullContent===!0,n=e.matchString!==void 0,r=e.startLine!==void 0||e.endLine!==void 0;if(e.minify==="symbols"&&(n||r))return{status:"error",error:'minify:"symbols" returns a whole-file signature skeleton and cannot be combined with matchString/startLine/endLine \u2014 remove the line/match constraints, or use minify:"standard" (or "none") to extract a specific range.'};if(t&&n)return{status:"error",error:"Cannot use fullContent with matchString \u2014 these are mutually exclusive extraction methods. Choose ONE: fullContent=true to read the entire file, OR matchString to extract matching sections, OR startLine+endLine for a known line range."};if(t&&r)return{status:"error",error:"Cannot use fullContent with startLine/endLine \u2014 these are mutually exclusive extraction methods. Choose ONE: fullContent=true to read the entire file, OR startLine+endLine for a known line range, OR matchString to extract matching sections."};if(n&&r)return{status:"error",error:"Cannot use matchString with startLine/endLine \u2014 these are mutually exclusive extraction methods. Choose ONE: matchString to extract matching sections, OR startLine+endLine for a known line range, OR fullContent=true to read the entire file."};let o=e.startLine!==void 0,i=e.endLine!==void 0;return o&&!i?{status:"error",error:`startLine=${e.startLine} provided without endLine \u2014 both are required for line-range extraction.`}:i&&!o?{status:"error",error:`endLine=${e.endLine} provided without startLine \u2014 both are required for line-range extraction.`}:null}async function mb(e,t){try{return{fileStats:await YL(t)}}catch(n){let r=Xe.fileAccessFailed(e.path,n instanceof Error?n:void 0);return{errorResult:N(r,e,{toolName:I.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function fb(e){let t=e.startLine!==void 0&&e.endLine!==void 0;return e.minify??(e.fullContent===!0||t?"none":"standard")}function hb(e,t,n){return n!=="none"?!1:t>Kt.LARGE_FILE_THRESHOLD_KB&&!e.matchString&&!e.startLine&&!e.charLength}function gb(e,t,n){let r=Xe.fileTooLarge(e.path,n,Kt.LARGE_FILE_THRESHOLD_KB);return N(r,e,{toolName:I.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}function yb(e,t){let n=Xe.binaryFileUnsupported(e.path);return N(n,e,{toolName:I.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}async function bb(e){let n=Buffer.alloc(8192),r;try{r=await KL(e,"r");let{bytesRead:o}=await r.read(n,0,8192,0);if(o===0)return!1;let i=n.subarray(0,o);if(i.includes(0))return!0;try{new TextDecoder("utf-8",{fatal:!0}).decode(i,{stream:!0})}catch{return!0}let s=0,a=0,c=0;for(;c<i.length;){let l=i[c];if(l===27&&c+1<i.length&&i[c+1]===91){for(c+=2;c<i.length&&(i[c]<64||i[c]>126);)c+=1;c+=1;continue}s+=1;let u=l===9||l===10||l===13;l<32&&!u&&(a+=1),c+=1}return s>0&&a/s>.05}catch{return!1}finally{await r?.close().catch(pb("binary sample handle close",void 0))}}async function Sb(e,t){try{return{content:await XL(t,"utf-8")}}catch(n){let r=n instanceof Error?n:void 0,i=r?.code==="EISDIR"?Xe.fileAccessFailed(e.path,r):Xe.fileReadFailed(e.path,r);return{errorResult:N(i,e,{toolName:I.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function Rb(e,t){return{status:"empty",errorCode:j.NO_MATCHES,totalLines:t}}function ZL(e,t,n){let r=zs(t,e.matchString,e.contextLines??5,e.matchStringIsRegex??!1,e.matchStringCaseSensitive??!1);if(r.lines.length===0)return{isPartial:!1,earlyResult:Rb(e,n)};let o=r.lines.join(`
|
|
48
|
-
|
|
49
|
-
`)}function e_(e,t,n){let r=e.startLine,o=e.endLine,i=Math.max(1,r),s=Math.min(o,n);if(o<r)return{isPartial:!1,earlyResult:{status:"empty",totalLines:n,errorCode:j.NO_MATCHES,warnings:[`startLine ${r} is greater than endLine ${o} \u2014 startLine must be \u2264 endLine`,`Use startLine=1 to ${n} with startLine \u2264 endLine for a valid range`]}};if(i>n)return{isPartial:!1,earlyResult:{status:"empty",totalLines:n,errorCode:j.NO_MATCHES,warnings:[`Requested startLine ${r} exceeds file length (${n} lines)`,`Use startLine=1 to ${n} for valid range`]}};let a=[];return o>n&&a.push(`Requested endLine ${o} adjusted to ${n} (file end)`),{resultContent:JL(t,i,s),isPartial:s<n,actualStartLine:i,actualEndLine:s,warnings:a}}function Cb(e,t,n){let r=t.split(`
|
|
50
|
-
`),
|
|
27
|
+
`):e.structuredContent!==void 0?JSON.stringify(e.structuredContent,null,2):JSON.stringify(e,null,2)}function _o(e,t){let n=fs(e)??{},r=Mn(n),o=wI(),i="results"in r?["results","index","status","cache","meta","data"]:["instructions","status","data"];return o==="json"?JSON.stringify(Xc(r,t||i),null,2):U.jsonToYamlString(r,{keysPriority:t||i})}function Xc(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(o=>Xc(o,t));if(typeof e!="object")return e;let n=e,r={};for(let o of t)o in n&&(r[o]=Xc(n[o],t));for(let o of Object.keys(n))o in r||(r[o]=Xc(n[o],t));return r}function EI(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=e,n=Object.keys(t);return n.length===0||!n.every(r=>PI.has(r))||TI.some(r=>typeof t[r]=="number"&&t[r]>0)||t.hasMore!==!1?!1:typeof t.totalPages=="number"?t.totalPages<=1:"charOffset"in t||"nextCharOffset"in t?(t.charOffset??0)===0:!0}function fs(e,t={}){if(e==null||Number.isNaN(e))return;let{inFilesObject:n=!1,depth:r=0}=t;if(Array.isArray(e)){let o=e.map(s=>fs(s,{inFilesObject:n,depth:r+1})).filter(s=>s!==void 0),i=n&&r>=2;return o.length>0||i?o:void 0}if(typeof e=="object"&&e!==null){let o={},i=!1;for(let[s,a]of Object.entries(e)){if(s==="query"&&typeof e.tool=="string"&&a!==null&&typeof a=="object"&&!Array.isArray(a)){o[s]=a,i=!0;continue}if(s==="results"&&r===0&&Array.isArray(a)&&a.length===0){o[s]=[],i=!0;continue}if(s==="warnings"||EI(a))continue;let c=(s==="files"||s==="repositories")&&!n,l=fs(a,{inFilesObject:n||c,depth:c?0:r+1});l!==void 0&&(o[s]=l,i=!0)}return i?o:void 0}return e}var PI,TI,hs=b(()=>{"use strict";We();PI=new Set(["currentPage","totalPages","perPage","itemsPerPage","entriesPerPage","filesPerPage","totalMatches","totalFiles","totalEntries","totalItems","totalResults","totalReferences","reportedTotalMatches","reachableTotalMatches","totalMatchesKind","totalMatchesCapped","hasMore","nextPage","charOffset","charLength","totalChars","totalBytes","nextCharOffset"]),TI=["totalMatches","totalItems","totalFiles","totalEntries","totalResults","totalReferences","reportedTotalMatches","reachableTotalMatches"]});import{z as vo}from"zod";function J(e,t){return vo.preprocess(n=>typeof n=="number"&&Number.isFinite(n)?Math.min(Math.max(n,e),t):n,vo.number().int().min(e).max(t))}function ge(e,t={}){let{maxQueries:n=5}=t;return vo.object({queries:vo.array(e).min(1).max(n).describe("Parallel queries; response rows use matching zero-based indexes."),...AI}).strict()}var Bt,Io,Oo,wt,AI,Pt=b(()=>{"use strict";ce();Bt=J(1,1e3).optional().default(1),Io=J(0,100).optional(),Oo=J(1,1e9).optional(),wt=vo.preprocess(e=>typeof e=="number"&&Number.isFinite(e)?Math.max(e,0):e,vo.number().nonnegative().refine(Number.isSafeInteger,"Expected a safe non-negative integer")),AI={responseCharOffset:wt.optional().describe("Full-response char offset; re-call with returned value when hasMore."),responseCharLength:J(1,5e4).optional().describe("Full-response char window.")}});function LI(e){return typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&("type"in e||"status"in e||"scopesSuggestion"in e)}function D(e,t,n={}){let{extra:r}=n,o={status:"error"};if(LI(e))o.error=e;else if(Vu(e))o.error=e.message,o.errorCode=e.errorCode;else if(typeof e=="string")o.error=e;else if(e instanceof Error){let i=kg(e);o.error=i.message,o.errorCode=i.errorCode}else o.error="Unknown error occurred";if(r){let{hints:i,...s}=r;Object.assign(o,s)}return n.rawResponse===void 0?o:ee(o,n.rawResponse)}function Ze(e,t,n={}){let r=e.safeParse(t);if(r.success)return{ok:!0,data:r.data};let o=r.error.issues.map(s=>s.message).join("; "),i=n.prefix===!0?`Validation error: ${o}`:o;return{ok:!1,error:D(i,t,{toolName:n.toolName})}}var Yc=b(()=>{"use strict";Pi();ue()});async function XV(e,t,n){if(e)try{await e(t,n)}catch{return}}function Se(e,t,n,r,o){let i=n?void 0:"empty",s={...i!==void 0?{status:i}:{},...t};return o?.rawResponse===void 0?s:ee(s,o.rawResponse)}function eS(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 D(n,t,{rawResponse:e.rawResponseChars??e.data??(e.error?e:void 0)})}function qe(e,t,n,r){let o=D(e,t,{toolName:r});return n&&typeof o.error=="string"&&(o.error=`${n}: ${o.error}`),o}var Be=b(()=>{"use strict";Yc();ue()});async function zt({toolName:e,query:t,execute:n,contextMessage:r}){try{return await n()}catch(o){return qe(o,t,r,e)}}var or=b(()=>{"use strict";Be()});function Jc(e={},t=gs){let n={};for(let o of t){let i=process.env[o];i!==void 0&&(n[o]=i)}let r=new Set(t);for(let[o,i]of Object.entries(e))r.has(o)&&(i===void 0?delete n[o]:n[o]=i);return n}var qV,gs,Fo,tS,ys=b(()=>{"use strict";qV=["NODE_OPTIONS","GITHUB_TOKEN","GH_TOKEN","OCTOCODE_TOKEN","GITHUB_PERSONAL_ACCESS_TOKEN","NPM_TOKEN","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN"],gs=["PATH","TMPDIR","TMP","TEMP","SYSTEMROOT","WINDIR","COMSPEC","PATHEXT"],Fo=[...gs,"HOME","USERPROFILE","APPDATA","LOCALAPPDATA"],tS=["HTTP_PROXY","HTTPS_PROXY","NO_PROXY","http_proxy","https_proxy","no_proxy"]});import{spawn as lm}from"child_process";function Hr(e,t,n={}){let{timeout:r=3e4,cwd:o,env:i={},allowEnvVars:s=gs,maxOutputSize:a=kI}=n;return new Promise(c=>{let l={killed:!1,stdoutChunks:[],stderrChunks:[],totalOutputSize:0},d=()=>l.stdoutChunks.join(""),u=()=>l.stderrChunks.join(""),p={cwd:o,env:Jc(i,s),stdio:["ignore","pipe","pipe"]},f;try{f=lm(e,t,p)}catch(R){c({stdout:"",stderr:"",exitCode:null,success:!1,error:R instanceof Error?R:new Error(`Failed to spawn command '${e}'`)});return}let m,h=setTimeout(()=>{if(!l.killed){l.killed=!0;try{f.kill("SIGTERM")}catch{}m=setTimeout(()=>{try{f.kill("SIGKILL")}catch{}},um),c({stdout:d(),stderr:u(),exitCode:null,success:!1,error:new Error(`Command timeout after ${r}ms`),timedOut:!0})}},r),y=()=>{clearTimeout(h),m!==void 0&&(clearTimeout(m),m=void 0)},g=()=>{if(l.totalOutputSize>a){if(!l.killed){l.killed=!0;try{f.kill("SIGKILL")}catch{}y(),c({stdout:d(),stderr:u(),exitCode:null,success:!1,error:new Error("Output size limit exceeded"),outputLimitExceeded:!0})}return!0}return!1};f.stdout?.on("data",R=>{if(l.killed)return;let S=R.toString();l.totalOutputSize+=Buffer.byteLength(S),!g()&&l.stdoutChunks.push(S)}),f.stderr?.on("data",R=>{if(l.killed)return;let S=R.toString();l.totalOutputSize+=Buffer.byteLength(S),!g()&&l.stderrChunks.push(S)}),f.on("close",R=>{l.killed||(y(),c({stdout:d(),stderr:u(),exitCode:R,success:R===0}))}),f.on("error",R=>{l.killed||(l.killed=!0,y(),c({stdout:d(),stderr:u(),exitCode:null,success:!1,error:R}))})})}function nS(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,{allowEnvVars:s=gs}=r,a;try{a=lm(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:Jc({},s)})}catch{o(!1);return}let c,l=()=>{clearTimeout(d),c!==void 0&&(clearTimeout(c),c=void 0)},d=setTimeout(()=>{if(!i){i=!0;try{a.kill("SIGTERM")}catch{}c=setTimeout(()=>{try{a.kill("SIGKILL")}catch{}},um),o(!1)}},n);a.on("close",u=>{l(),i||o(u===0)}),a.on("error",()=>{l(),i||o(!1)})})}function i2(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,s=[],a=0,{allowEnvVars:c=Fo,maxOutputSize:l=_I}=r,d;try{d=lm(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:Jc({},c)})}catch{o(null);return}let u,p=()=>{clearTimeout(f),u!==void 0&&(clearTimeout(u),u=void 0)};d.stdout?.on("data",m=>{if(i)return;let h=m.toString();if(a+=Buffer.byteLength(h),a>l){if(!i){i=!0;try{d.kill("SIGKILL")}catch{}p(),o(null)}return}s.push(h)}),d.stderr?.on("data",()=>{});let f=setTimeout(()=>{if(!i){i=!0;try{d.kill("SIGTERM")}catch{}u=setTimeout(()=>{try{d.kill("SIGKILL")}catch{}},um),o(null)}},n);d.on("close",m=>{if(p(),!i)if(m===0){let h=s.join("").trim();o(h||null)}else o(null)}),d.on("error",()=>{p(),i||o(null)})})}function Zc(e,t=1e3){for(let n of e){if(n.includes("\0"))return{valid:!1,error:"Null bytes not allowed in arguments"};if(n.length>t)return{valid:!1,error:"Argument too long"}}return{valid:!0}}var kI,um,_I,bs=b(()=>{"use strict";ys();kI=10*1024*1024,um=5e3;_I=1*1024*1024});async function pm(e){let t=(await Jt(["-C",e,"rev-parse","--verify","HEAD^{commit}"],5e3,"read checkout HEAD")).trim().toLowerCase();if(!/^[a-f0-9]{40}$/.test(t))throw new Error("Git returned an invalid checkout HEAD commit SHA.");return t}async function oS(e,t,n,r,o){await Jt(["init","--",t],Mo,"initialize commit checkout",o);let i=[...el(r,o),"-C",t];await Jt([...i,"remote","add","origin",r],Mo,"configure commit remote",o),n&&(await Jt([...i,"config","remote.origin.promisor","true"],qc,"configure sparse promisor",o),await Jt([...i,"config","remote.origin.partialclonefilter","blob:none"],qc,"configure sparse filter",o)),await Jt([...i,"fetch","--depth","1",...n?["--filter","blob:none"]:[],"--","origin",e],Mo,"fetch requested commit",o),n&&await Jt([...i,"sparse-checkout","set","--cone","--skip-checks","--",n],qc,"set sparse commit paths",o),await Jt([...i,"checkout","--detach","FETCH_HEAD","--"],Mo,"check out requested commit",o)}async function iS(e,t,n,r,o,i){let s=el(o,i);s.push("clone","--depth","1","--single-branch","--branch",n,"--",o,r),await Jt(s,Mo,`full clone of ${e}/${t}`,i)}async function sS(e,t,n,r,o,i,s){let a=el(i,s);a.push("clone","--filter","blob:none","--sparse","--depth","1","--single-branch","--branch",n,"--",i,r),await Jt(a,Mo,`sparse clone of ${e}/${t}`,s);let c=[...el(i,s),"-C",r,"sparse-checkout","set","--skip-checks","--",o];await Jt(c,qc,`sparse-checkout set ${o}`,s)}function el(e,t){return t?["-c",`http.${e}.extraHeader=Authorization: Bearer ${t}`]:[]}async function aS(){try{if(!(await Hr("git",["--version"],{timeout:5e3,maxOutputSize:1024,allowEnvVars:rS,env:{GIT_TERMINAL_PROMPT:"0"}})).success)throw new Error("git --version returned non-zero")}catch{throw new Error("git is not installed or not on PATH. The ghCloneRepo tool requires git to be available.")}}function vI(e,t){let n=e;return t&&(n=n.replaceAll(t,"[REDACTED]")),n=n.replace(/Authorization:\s*Bearer\s+\S+/gi,"Authorization: Bearer [REDACTED]"),n=n.replace(/Authorization:\s*token\s+\S+/gi,"Authorization: token [REDACTED]"),n}async function Jt(e,t,n,r){let o=await Hr("git",e,{timeout:t,maxOutputSize:5242880,allowEnvVars:rS,env:{GIT_TERMINAL_PROMPT:"0"}});if(!o.success){let i=vI(o.stderr?.trim()||"",r),s=i?`: ${i}`:"";throw new Error(`git ${n} failed${s}`)}return o.stdout??""}var Mo,qc,rS,cS=b(()=>{"use strict";bs();ys();Mo=120*1e3,qc=30*1e3,rS=[...Fo,"GIT_TERMINAL_PROMPT"]});import{existsSync as lS,mkdirSync as fm,renameSync as dm,rmSync as II}from"fs";import{basename as OI,dirname as FI,join as hm}from"path";async function uS(e,t,n){let r=e.owner,o=e.repo,{sparsePath:i,forceRefresh:s}=e,a=jI(r,o);await aS();let c=e.branch??await pt(r,o,t),l=/^[a-f0-9]{40}$/i.test(c)?c.toLowerCase():void 0,d=Kt(),u=ap(d,r,o,c,i,a);return HI(d,u,async()=>{let p=io(u);if(!s&&p.hit&&p.meta.source==="clone"){let h;try{h=await pm(u)}catch{}if(h&&(!l||h===l))return{localPath:u,cached:!0,commitSha:h,verified:!1,owner:r,repo:o,branch:c,...i?{sparsePath:i}:{}}}Ba(d),Ha(u);let f=UI(t,n),m=GI(d,u);Ga(m);try{if(l?await oS(l,m,i,a,f):i?await sS(r,o,c,m,i,a,f):await iS(r,o,c,m,a,f),i&&!lS(hm(m,i)))throw new Error(`sparsePath "${i}" does not exist in ${r}/${o}@${c} \u2014 nothing was checked out for it. Verify the path with ghSearch operation:"tree", then retry with the correct sparsePath (or omit it for a full clone).`);let h=await pm(m);if(l&&h!==l)throw new Error(`Checkout HEAD ${h} does not match requested commit ${c}.`);let y=so(r,o,c,"clone",i);return y.commitSha=h,py(m,y),BI(m,u),{localPath:u,cached:!1,commitSha:h,verified:!0,owner:r,repo:o,branch:c,...i?{sparsePath:i}:{}}}catch(h){throw Ga(m),h}})}async function HI(e,t,n){Ha(t);let r=_i(e,t);fm(FI(r),{recursive:!0,mode:448});let o=Date.now();for(;;)try{fm(r,{mode:448}),no(r);break}catch(i){if(i.code!=="EEXIST")throw i;if(ro(r))continue;if(Date.now()-o>MI)throw new Error(`Timed out waiting for clone cache lock '${r}'.`,{cause:i});await zI(NI)}try{return await n()}finally{II(r,{recursive:!0,force:!0})}}function GI(e,t){let n=`${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`,r=hm(e,"tmp",DI);return fm(r,{recursive:!0,mode:448}),hm(r,`${OI(_i(e,t))}-${n}`)}function BI(e,t){Ha(t);let n=`${e}.previous`,r=lS(t);r&&dm(t,n);try{dm(e,t)}catch(o){if(r)try{dm(n,t)}catch(i){throw new AggregateError([o,i],`Clone publication failed; the previous checkout is preserved at ${n}.`,{cause:i})}throw o}r&&Ga(n)}function zI(e){return new Promise(t=>setTimeout(t,e))}function jI(e,t){let n=Er().githubApiUrl||"https://api.github.com",r;try{r=new URL(n)}catch{throw mm()}if(r.protocol!=="https:"||r.username||r.password||r.search||r.hash)throw mm();let o=r.pathname.replace(/\/$/,"");if(r.origin==="https://api.github.com"&&!o)return`https://github.com/${e}/${t}.git`;if(!o.endsWith("/api/v3"))throw mm();return`${r.origin}${o.slice(0,-7)}/${e}/${t}.git`}function mm(){return new Error("ghCloneRepo requires an HTTPS GitHub API endpoint: https://api.github.com or a GitHub Enterprise endpoint ending in /api/v3, without credentials or query parameters. Use ghGetFileContent for other API proxies.")}function UI(e,t){return e?.token&&typeof e.token=="string"?e.token:t}var MI,NI,DI,gm=b(()=>{"use strict";pn();de();Xn();wr();cS();Tr();oo();MI=300*1e3,NI=100,DI="clone-tmp"});import{existsSync as $I,readdirSync as QI,lstatSync as WI}from"node:fs";import{join as VI}from"node:path";function pS(e){if(!$I(e))return 0;let t;try{t=QI(e)}catch{return 0}let n=0;for(let r of t){if(r===".git")continue;let o=VI(e,r);try{let i=WI(o);if(i.isSymbolicLink())continue;i.isDirectory()?n+=Li(o):i.isFile()&&(n+=i.size)}catch{}}return n}var dS=b(()=>{"use strict";Oa()});import mS from"node:path";import{fileURLToPath as KI}from"node:url";function XI(e){if(e.length===0)return"";let t=e[0]??"";for(let r=1;r<e.length;r++){let o=e[r]??"",i=0,s=Math.min(t.length,o.length);for(;i<s&&t[i]===o[i];)i++;if(t=t.slice(0,i),t==="")break}let n=t.lastIndexOf("/");return n>0?t.slice(0,n):""}function ym(e,t,n){if(n>8||!e||typeof e!="object")return;if(Array.isArray(e)){for(let i of e)ym(i,t,n+1);return}let r=e,o=YI(r);o&&t.push({obj:r,abs:o});for(let[i,s]of Object.entries(r))hS.has(i)||s&&typeof s=="object"&&ym(s,t,n+1)}function YI(e){let t=e.absolutePath;if(typeof t=="string"&&mS.isAbsolute(t))return t;let n=e.uri;if(typeof n=="string"&&n.startsWith("file://"))try{return KI(n)}catch{return}let r=e.path;if(typeof r=="string"&&mS.isAbsolute(r))return r}function tl(e){let t=[];for(let i of e)ym(i?.data,t,0);if(t.length===0)return;let n=XI(t.map(i=>i.abs));if(n.length<=1)return;let r=n+"/",o=r.length;for(let{obj:i,abs:s}of t)s.startsWith(r)&&(i.path=s.slice(o),delete i.absolutePath,delete i.uri);return JI(e,r),n}function JI(e,t){function n(r,o){if(o>8||!r||typeof r!="object")return;if(Array.isArray(r)){for(let s=0;s<r.length;s++){let a=r[s];if(typeof a=="string"){let c="file://"+t;a.includes(c)?r[s]=a.replaceAll(c,""):a.includes(t)&&(r[s]=a.replaceAll(t,""))}else n(a,o+1)}return}let i=r;for(let s of Object.keys(i)){if(hS.has(s))continue;let a=i[s];typeof a=="string"?!fS.includes(s)&&a.includes(t)&&(i[s]=a.replaceAll(t,"")):n(a,o+1)}}for(let r of e)n(r?.data,0)}function ZI(e){let t=[];for(let n of e){let r=n?.data;if(!(!r||typeof r!="object")){for(let o of Object.values(r))if(Array.isArray(o))for(let i of o)i&&typeof i=="object"&&!Array.isArray(i)&&t.push(i)}}return t}function qI(e){return typeof e=="string"&&e!==""||typeof e=="number"||typeof e=="boolean"}function nl(e){let t=ZI(e);if(t.length<2)return;let n=t[0],r;for(let i of Object.keys(n)){if(eO.has(i))continue;let s=n[i];qI(s)&&t.every(a=>a[i]===s)&&((r??={})[i]=s)}if(!r)return;let o=Object.keys(r);for(let i of t)for(let s of o)delete i[s];return r}var fS,hS,eO,rl=b(()=>{"use strict";fS=["path","uri","absolutePath"],hS=new Set(["next","location"]);eO=new Set([...fS,"owner","repo","name","id","type","kind","reason","isPartial"])});function bm(e,t){let n=e,r=t,o=e.results;if(Array.isArray(o)){let i=o,s=tl(i);s&&(n.base=s);let a=nl(i);a&&(n.shared=a),(s||a)&&(r=[...s?["base"]:[],...a?["shared"]:[],...t])}return{text:_o(n,[...r]),structuredContent:Mn(fs(n)??{})}}var gS=b(()=>{"use strict";hs();rl()});function Rm(e,t,n){let r=Math.min(t+n,e.length);if(r>=e.length)return e.length;let o=Math.max(1,Math.floor(n/2)),i=[e.lastIndexOf(`
|
|
28
|
+
`,r-1)+1,e.lastIndexOf("\\n",r-1)+2].filter(a=>a>t&&a<=r),s=Math.max(...i,-1);return s-t>=o?s:r}function tO(e,t,n){let r=1,o=0;for(;o<t&&o<e.length;){let i=Rm(e,o,n);if(i<=o)break;o=i,r+=1}return o===t?r:Math.floor(t/n)+1}function nO(e,t){if(e.length===0)return 1;let n=0,r=0;for(;r<e.length;){let o=Rm(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 Sm(e,t){let n=t?.responseCharLength,r=t?.responseCharOffset??0;if(n===void 0)return{text:e};let o=e.length,i=Math.max(1,n),s=Math.min(Math.max(0,r),o),a=Rm(e,s,i),c=a<o,l=tO(e,s,i),d=nO(e,i),u=e.slice(s,a);return{text:`${c?`# Response page ${l}/${d}. Next: responseCharOffset=${a}
|
|
29
|
+
`:`# Response page ${l}/${d}.
|
|
30
|
+
`}${u}`,pagination:{scope:"content.text",currentPage:l,totalPages:d,hasMore:c,charOffset:s,charLength:a-s,totalChars:o,...c?{nextCharOffset:a}:{}}}}function Cm(e,t,n){return t?{...e,responsePagination:{...t,...t.hasMore&&n?{next:n}:{}}}:e}function xm(e,t,n,r){if(!r?.hasMore||r.nextCharOffset===void 0)return;let o=t.map(i=>{let{goal:s,reasoning:a,...c}=i;return c});return{tool:e,query:{queries:o,responseCharLength:n?.responseCharLength,responseCharOffset:r.nextCharOffset}}}var yS=b(()=>{"use strict"});function Gr(e,t){if(e===null||typeof e!="object")return!1;if(Array.isArray(e))return e.some(r=>Gr(r,t));let n=e;return t(n)||Object.values(n).some(r=>Gr(r,t))}function ol(e,t){return e===null||typeof e!="object"?!1:Array.isArray(e)?e.some(n=>ol(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 ol(r,t)})}function bS(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 il(e){return Gr(e,t=>t.isPartial===!0||t.hasMore===!0||bS(t))}function wm(e){if(!il(e))return[];if(Gr(e,a=>a.terminalLimit===!0))return["terminalLimitReached"];let t=Gr(e,a=>a.hasMore===!0),n=Gr(e,bS),r=Gr(e,a=>a.isPartial===!0),o=ol(e,a=>a.startsWith("next")||a.startsWith("continue")),i=ol(e,a=>a.startsWith("expand")||a.startsWith("retry")||a.startsWith("narrow")||a.startsWith("fallback")||a.startsWith("escalate")||a.startsWith("read")||a.includes("search")||a.includes("completeness"));return t&&!o||n&&!i||r&&!o&&!i?["continuationMissing"]:[]}var RS=b(()=>{"use strict"});async function SS(e,t={}){if(!Array.isArray(e))throw new Error(Ci.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(Ci.TIMEOUT_NOT_POSITIVE.message);if(r<=0)throw new Error(Ci.CONCURRENCY_NOT_POSITIVE.message);let i=e.map((c,l)=>typeof c=="function"?c:()=>Promise.reject(new Error(wi.NOT_A_FUNCTION.message(l))));if(r<i.length)return rO(i,r,n,o);let s=i.map((c,l)=>CS(c,l,n,o));return(await Promise.allSettled(s)).map((c,l)=>c.status==="fulfilled"?c.value:{success:!1,error:c.reason instanceof Error?c.reason:new Error(String(c.reason)),index:l})}async function CS(e,t,n,r){let o,i=()=>{o!==void 0&&(clearTimeout(o),o=void 0)};try{let s=new Promise((c,l)=>{o=setTimeout(()=>{l(new Error(wi.TIMEOUT.message(t,n)))},n)}),a=await Promise.race([e(),s]);return i(),{success:!0,data:a,index:t}}catch(s){i();let a=s instanceof Error?s:new Error(String(s));if(r)try{r(a,t)}catch(c){}return{success:!1,error:a,index:t}}}async function rO(e,t,n,r){let o=new Array(e.length),i=0,s=async()=>{for(;i<e.length;){let c=i++,l=e[c];if(!l){o[c]={success:!1,error:new Error(wi.FUNCTION_UNDEFINED.message),index:c};continue}try{let d=await CS(l,c,n,r);o[c]=d}catch(d){o[c]={success:!1,error:d instanceof Error?d:new Error(String(d)),index:c}}}},a=[];for(let c=0;c<Math.min(t,e.length);c++)a.push(s());return await Promise.all(a),o}var Pm=b(()=>{"use strict";kt()});function xS(e,t,n){if(e<=1)return n?Math.max(Tm,n):Tm;let r=Math.min(Math.max(t,1),e),o=Math.ceil(e/r),i=Math.floor(oO/o),s=Math.max(iO,Math.min(i,Tm));return n?Math.max(s,n):s}async function wS(e,t,n,r){let o=[],i=[];if(!e||e.length===0)return{results:o,errors:i};let s=e.map((c,l)=>async()=>{let{value:d,cacheHit:u}=await Lb(()=>t(c,l));return{result:u&&d.status!=="error"?{...d,cache:1}:d,queryIndex:l,originalQuery:c}});return(await SS(s,{timeout:xS(e.length,n,r),continueOnError:!0,concurrency:n,onError:(c,l)=>{i.push({queryIndex:l,error:c.message})}})).forEach(c=>{if(c.success&&c.data){let l=c.data.result,d=l&&Object.keys(l).some(p=>p!=="status"&&p!=="error"&&p!=="data");if(l&&l.error===void 0&&(l.data===null||l.data===void 0)&&!d&&l.status!=="error"){i.push({queryIndex:c.data.queryIndex,error:"Query resolved without a payload (possible timeout or resource exhaustion) \u2014 retry this query alone, with tighter caps if it was large"});return}o.push({result:c.data.result,queryIndex:c.data.queryIndex,originalQuery:c.data.originalQuery})}else c.success&&i.push({queryIndex:c.index,error:"Query produced no result"})}),{results:o,errors:i}}var Tm,oO,iO,Em=b(()=>{"use strict";Pm();Wi();Tm=parseInt(process.env.OCTOCODE_BULK_QUERY_TIMEOUT_MS||"60000",10)||6e4,oO=parseInt(process.env.OCTOCODE_TOOL_TIMEOUT_MS||"60000",10)||6e4,iO=5e3});async function Ce(e,t,n,r){let o=n.concurrency??sO,{results:i,errors:s}=await wS(e,t,o,n.minQueryTimeoutMs);return aO(n,i,s,e,r)}function aO(e,t,n,r,o){let i=["results","base","shared"],s=["index","status","cache","meta","evidence","diagnostics","data"],a=[...new Set([...i,...s,...e.keysPriority||[]])],c=new Array(r.length);t.forEach(y=>{let g=y.result.status,R=pO(y.result);c[y.queryIndex]={index:y.queryIndex,...g!==void 0?{status:g}:{},...y.result.cache===1?{cache:1}:{},meta:PS(e.toolName,y.originalQuery,R,g),data:R}}),n.forEach(y=>{let g=r[y.queryIndex];g&&(c[y.queryIndex]={index:y.queryIndex,status:"error",meta:PS(e.toolName,g,{error:y.error},"error"),data:{error:y.error}})});let l=c.filter(y=>y!==void 0);if(e.finalize){let y=e.finalize({queries:r,results:l,config:e}),g=cO(y.structuredContent,l),R=bm(g,y.keysPriority??a),S=y.renderText?y.renderText(R.structuredContent):R.text,C=Sm(S,o),w=Cm(R.structuredContent,C.pagination,xm(e.toolName,r,o,C.pagination));return TS(e.toolName,t,n,C.text.length),{content:[{type:"text",text:C.text}],structuredContent:w,isError:y.isError??(l.length>0&&l.every(T=>T.status==="error"))}}let u=bm({results:l},a),p=u.text,f=Sm(p,o),m=Cm(u.structuredContent,f.pagination,xm(e.toolName,r,o,f.pagination));return TS(e.toolName,t,n,f.text.length),{content:[{type:"text",text:f.text}],structuredContent:m,isError:l.length>0&&l.every(y=>y.status==="error")}}function cO(e,t){if(!Array.isArray(e.results))return e;let n=new Map(t.map(i=>[i.index,i])),r=e.shared!==null&&typeof e.shared=="object"&&!Array.isArray(e.shared)?e.shared:void 0,o=e.results.map((i,s)=>{if(i===null||typeof i!="object"||Array.isArray(i))return i;let a=i,c=(typeof a.index=="number"?n.get(a.index):void 0)??t[s];if(!c)return a;let{cache:l,...d}=a,u=a.data!==null&&typeof a.data=="object"&&!Array.isArray(a.data)?a.data:c.data,p=lO(a.meta??c.meta,r?{...r,...u}:u);return{...d,...c.cache===1?{cache:1}:{},meta:p}});return{...e,results:o}}function PS(e,t,n,r){let o=uO(e,t,n),i=n.confidence,s=r==="error"||i==="low"?"low":i==="high"||i==="medium"?i:o==="provider"||o==="lexical"||o==="syntactic"?"medium":"high",a=il(n),c=[...typeof n.errorCode=="string"?[n.errorCode]:[],...wm(n)],l=c.length>0||a;return{evidence:{kind:o,confidence:s},...l?{diagnostics:{...c.length>0?{codes:c}:{},...a?{partial:!0}:{}}}:{}}}function lO(e,t){let{diagnostics:n,...r}=e,o=[...(n?.codes??[]).filter(a=>a!=="continuationMissing"&&a!=="terminalLimitReached"),...wm(t)],i=il(t),s=o.length>0||i||(n?.hints?.length??0)>0;return{...r,...s?{diagnostics:{...o.length>0?{codes:o}:{},...n?.hints?.length?{hints:n.hints}:{},...i?{partial:!0}:{}}}:{}}}function uO(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 TS(e,t,n,r){let o=t.reduce((i,s)=>i+(me(s.result)??j(s.result)),0)+n.reduce((i,s)=>i+j(s),0);try{Za(e,o,r)}catch{}}function pO(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 sO,ht=b(()=>{"use strict";Ui();ue();gS();yS();RS();Em();sO=3});function sl(e){return e.data!==void 0&&!e.error}function dO(e){return e.error!==void 0}var Am=b(()=>{"use strict"});import{maskSensitiveData as ES}from"@octocodeai/octocode-engine/mask";function mO(){return Sp().provider??Rp()}function fO(e){let t=Sp(),n=t.provider??Rp(),{baseUrl:r,token:o}=t;try{let i=cm(n,{type:n,baseUrl:r,token:o,authInfo:e});return{providerType:n,provider:i,capabilities:i.capabilities,baseUrl:r,token:o,authInfo:e}}catch(i){let s=i instanceof Error?i.message:"Unknown provider error",a=ES(s);throw new Lm(n,`Failed to initialize ${n} provider: ${a}`)}}function ot(e){let t;return()=>t??=fO(e)}function al(e,t){return e.capabilities[t]}async function Zt(e,t){let n=await t();return sl(n)?{ok:!0,response:n}:{ok:!1,result:eS(n,e)}}async function Y2(e,t){let n=t??mO(),r=await Promise.all(e.map(async s=>{try{return{meta:s.meta,response:await s.operation()}}catch(a){let c=a instanceof Error?a.message:String(a);return{meta:s.meta,response:{error:ES(c),status:500,provider:n}}}})),o=[],i=[];for(let s of r)sl(s.response)?o.push({meta:s.meta,response:s.response}):i.push({meta:s.meta,response:s.response});return{successes:o,failures:i}}var Lm,qt=b(()=>{"use strict";Kc();Am();Xn();Be();Lm=class extends Error{providerType;constructor(t,n){super(n),this.name="ProviderInitializationError",this.providerType=t}}});var AS={};Pn(AS,{executeCloneRepo:()=>gO});import{getConfigSync as hO}from"@octocodeai/config";async function gO(e){let{queries:t,authInfo:n}=e,r=ot(n);return Ce(t,async(o,i)=>zt({toolName:N.GITHUB_CLONE_REPO,query:o,contextMessage:`Clone failed for ${o.owner}/${o.repo}`,execute:async()=>{if(hO().storage.mode==="memory")return D('Clone requires persistent local storage. Set storage.mode="persistent" or OCTOCODE_STORAGE_MODE=persistent to use ghCloneRepo.',o,{extra:{errorCode:"persistentStorageDisabled"}});let s=r();if(!al(s,"cloneRepo"))return qe(new Error("ghCloneRepo is only available with the GitHub provider."),o,"Provider not supported",N.GITHUB_CLONE_REPO);let a;try{a=await uS(o,n,s.token)}catch(p){let f=p instanceof Error?p.message:String(p);return D(`Clone failed for ${o.owner}/${o.repo}: ${f}`,o)}a.cached&&vn();let c=pS(a.localPath),l={kind:o.sparsePath?"tree":"repo",localPath:a.localPath,source:"clone",cached:a.cached,commitSha:a.commitSha,verified:a.verified,complete:!0,resolvedBranch:a.branch,...o.sparsePath?{requestedPath:o.sparsePath}:{}},d={viewStructure:{tool:"localSearch",query:{operation:"tree",path:a.localPath},why:"Browse the cloned directory before choosing a text, structural, or file-discovery operation.",confidence:"exact"}},u={owner:o.owner,repo:o.repo,totalSize:c,location:l,next:d};return Se(o,u,!0,N.GITHUB_CLONE_REPO,{rawResponse:c})}}),{toolName:N.GITHUB_CLONE_REPO,keysPriority:["totalSize","location","error"],minQueryTimeoutMs:13e4},e)}var km=b(()=>{"use strict";dS();Ke();ht();Wi();Be();or();qt();gm()});var Ae,ir=b(()=>{"use strict";Ae={ghSearch:'Discover GitHub code with operation:"code", repositories with "repositories", or a known repository tree with "tree". Code search covers the default branch; tree accepts branch. Read known paths with ghGetFileContent. Empty or incomplete search results do not prove absence.',ghGetFileContent:'Read a known GitHub path. branch is honored when supplied; omission uses the default branch. A path-only call returns bounded, standard-minified content; optionally select fullContent, matchString, or startLine+endLine. minify:"none" preserves text; "symbols" returns an outline. Run returned continuations for partial content. matchedLines are exact source-line anchors. type:"directory" materializes localPath with persistent local access; use ghSearch operation:"tree" to browse remotely.',ghSearchHistory:'Discover history metadata with operation:"pullRequests", "issues", or "commits". Pull requests may be searched globally; issues and commits require owner+repo. Commit keywords search messages on the default branch; omit keywords to walk history by path/ref/date. Retrieve a known number or commit ref with ghGetHistoryItem.',ghGetHistoryItem:'Read known history with owner+repo: operation:"pullRequest" or "issue" takes number, "commit" takes ref, and "compare" takes base+head. PR/issue content selectors request bodies, comments, or review/change details; commit/compare includeDiff requests patches. Follow returned continuations for each partial surface.',npmSearch:"Look up npm package metadata with packageName, or discover npm packages with keywords. Uses npm configuration and registry-scoped credentials; exact scoped names honor scope mappings. Optional registry overrides routing. Keyword search targets one registry and supports page; follow returned continuations. Use returned repository links for source-code research.",ghCloneRepo:"Create a cached, shallow checkout for repeated reads, local AST/regex, or LSP. Optional sparsePath scopes a file/subtree; complete refers to that scope. branch selects a branch, tag, or full commit SHA; omission uses the default branch. location.commitSha identifies HEAD; cached working-tree contents are not reverified. forceRefresh renews the checkout. Requires git and persistent local storage. Pass results[].data.location.localPath to local tools; ghGetFileContent also supports individual remote reads.",localSearch:'Choose operation:"text" for lexical anchors, "structural" for AST matches, "files" for path or metadata discovery, and "tree" for directory orientation. Each operation has a strict branch, so do not mix fields across operations. Files/tree prune common generated and vendor directories by default; pass excludeDir:[] to prune nothing. Read exact hits with localGetFileContent and prove symbol identity with lspGetSemantics.',localAnalyzeGraph:"Map file topology, not symbol identity. dependencies/dependents need file; path needs file+target; deadCode/reachability accept roots; cycles needs no selector. Import edges and dead-code results are candidates\u2014verify changes and deletions with exact reads plus LSP.",localGetFileContent:`Read a known local path after search, find, or structure discovery. A path-only call returns a bounded standard-minified view. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
|
|
31
|
+
Optionally choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; run the returned continuation. matchedLines are LSP anchors; match ranges and character offsets are not. Report fetched bytes only.`,lspGetSemantics:`Use a real search/read line anchor for semantic proof. references finds usages; callers incoming calls; callees outgoing calls; callHierarchy both. Fall back to references if call hierarchy is unavailable.
|
|
32
|
+
documentSymbols/diagnostic need uri; workspaceSymbol needs symbolName; other operations need uri+symbolName+lineHint. orderHint resolves same-line names. format:"compact" saves tokens. Empty/unavailable results call for a new anchor or text search.`}});import{z as kS}from"zod";function bO(e,t){return e?.description&&!t.description?t.describe(e.description):t}function _S(e,t){let n={};for(let[r,o]of Object.entries(t))n[r]=bO(e.shape[r],o);return n}function RO(e,t){let n=e;return n.safeExtend?n.safeExtend(t):e.extend(t)}function vS(e,t){if(!t?.length)return e;let n=new Set(t);return kS.object(Object.fromEntries(Object.entries(e.shape).filter(([r])=>!n.has(r))))}function Xe(e,t={},n={}){let r=vS(e,n.omit);return RO(r,_S(r,t)).strict()}function it(e,t={},n={}){let r=vS(e,n.omit);return kS.object({...r.shape,..._S(r,t)}).strict()}var Nn=b(()=>{"use strict"});import{z as en}from"zod";var SO,vm,OS=b(()=>{"use strict";ir();Me();SO=rt({name:"ghGetFileContent",type:"Github",shortDescription:"Read a file or a specific region from a GitHub repository.",instructions:Ae.ghGetFileContent,schema:{branch:"Exact branch, tag, or commit ref; defaults to the repository default branch.",startLine:"Requires endLine; exclusive with fullContent/matchString.",endLine:"Requires startLine; must be >= startLine.",fullContent:"Whole file, default minify:none; only explicit character windows paginate. Exclusive with range/match.",matchString:"Anchor returning padded matchRanges and exact matchedLines; preserves matched text without minification.",matchStringIsRegex:"Makes matchString a regex.",matchStringCaseSensitive:"Case-sensitive matchString.",type:'"file" reads; "directory" materializes localPath when clone/local access is enabled\u2014otherwise use ghSearch operation:"tree".',forceRefresh:"Bypass the 24h fetch cache and re-read from GitHub.",charOffset:"Character continuation offset; copy the complete returned next query.",minify:'"symbols" paginated outline (no range/match selectors), "standard" compact source, "none" unminified. Security redaction applies. Default none for fullContent, standard otherwise; matches force none.'}}),vm=V(SO.schema,{...se,owner:en.string(),repo:en.string(),branch:en.string().optional(),path:en.string(),startLine:ko(),endLine:ko(),fullContent:en.boolean().optional(),matchString:en.string().optional(),matchStringIsRegex:en.boolean().optional(),matchStringCaseSensitive:en.boolean().optional(),forceRefresh:en.boolean().optional(),type:en.enum(["file","directory"]).default("file"),contextLines:z(0,ms).default(5),charOffset:ft(),charLength:Gt(),minify:en.enum(["none","standard","symbols"]).default("standard")}).superRefine(Wc)});import{z as tn}from"zod";function NS(e,t){let n=new Set(t);return Object.fromEntries(Object.entries(e).filter(([r])=>!n.has(r)))}function cl(e,t){return e.description?t.describe(e.description):t}function Le(e,t){let n=e[t];if(!n)throw new TypeError(`Expected schema field: ${t}`);return n}function _e(e,t){return Le(e,t).nonoptional()}function FS(e,t){let n=NS(e.shape,[...MS,...t?["type"]:[]]),r=t?{type:t}:{},o=cl(Le(e.shape,"fullContent"),tn.literal(!1).optional()),i=cl(Le(e.shape,"fullContent"),tn.literal(!0)),s=tn.object({...n,...r,fullContent:o}).strict(),a=tn.object({...n,...r,fullContent:i}).strict(),c=tn.object({...n,...r,fullContent:o,matchString:_e(e.shape,"matchString"),matchStringIsRegex:Le(e.shape,"matchStringIsRegex"),matchStringCaseSensitive:Le(e.shape,"matchStringCaseSensitive")}).strict(),l=tn.object({...n,...r,fullContent:o,startLine:_e(e.shape,"startLine"),endLine:_e(e.shape,"endLine")}).strict().superRefine((d,u)=>{typeof d.startLine=="number"&&typeof d.endLine=="number"&&d.endLine<d.startLine&&u.addIssue({code:"custom",path:["endLine"],message:"Set endLine greater than or equal to startLine."})});return[s,a,c,l]}function ll(e,t={}){let n=(a,c)=>{a.minify==="symbols"&&(a.matchString!==void 0||a.startLine!==void 0||a.endLine!==void 0)&&c.addIssue({code:"custom",path:["minify"],message:'minify:"symbols" cannot be combined with matchString or startLine/endLine. Read the outline, then request a source slice.'})};if(!t.githubDirectoryMode)return tn.union(FS(e)).superRefine(n);let r=cl(Le(e.shape,"type"),tn.literal("file").optional()),o=cl(Le(e.shape,"type"),tn.literal("directory")),i=NS(e.shape,[...CO,"type"]),s=tn.object({...i,type:o}).strict();return tn.union([...FS(e,r),s]).superRefine(n)}var MS,CO,Br=b(()=>{"use strict";MS=["fullContent","matchString","matchStringIsRegex","matchStringCaseSensitive","startLine","endLine"],CO=[...MS,"contextLines","charOffset","charLength","minify"]});import{z as xO}from"zod";var wO,DS,PO,ul,HS,pl=b(()=>{"use strict";OS();ce();Pt();Nn();Br();wO=xO.enum(["none","standard","symbols"]).optional(),DS={startLine:Oo,endLine:Oo,contextLines:Io,charOffset:wt.optional(),charLength:J(1,5e4).optional(),minify:wO},PO=it(vm,DS),ul=Xe(vm,DS),HS=ge(ll(PO,{githubDirectoryMode:!0}))});function GS(e){let t=!!e.fullContent;return{projectId:`${e.owner}/${e.repo}`,path:String(e.path),ref:e.branch?String(e.branch):void 0,startLine:t?void 0:e.startLine,endLine:t?void 0:e.endLine,matchString:t||!e.matchString?void 0:String(e.matchString),contextLines:e.contextLines??5,fullContent:t,forceRefresh:!!e.forceRefresh,charOffset:e.charOffset,charLength:e.charLength,minify:e.minify,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,goal:e.goal,reasoning:e.reasoning}}function BS(e,t){return{path:e.path,content:e.content,...typeof e.size=="number"&&e.size>0&&{fileSize:e.size},...typeof e.totalLines=="number"&&{totalLines:e.totalLines},...typeof e.sourceChars=="number"&&{sourceChars:e.sourceChars},...typeof e.sourceBytes=="number"&&{sourceBytes:e.sourceBytes},...e.contentView&&{contentView:e.contentView},...e.isPartial&&{isPartial:e.isPartial},...e.errorCode&&{errorCode:e.errorCode},...e.terminalLimit&&{terminalLimit:e.terminalLimit},...e.partialReasons?.length&&{partialReasons:e.partialReasons},...e.startLine&&{startLine:e.startLine},...e.endLine&&{endLine:e.endLine},...e.matchRanges?.length&&{matchRanges:e.matchRanges},...e.matchedLines?.length&&{matchedLines:e.matchedLines},...e.lastModified&&{lastModified:e.lastModified},...e.lastModifiedBy&&{lastModifiedBy:e.lastModifiedBy},...e.pagination&&{pagination:e.pagination},...e.warnings?.length&&{warnings:e.warnings},...e.matchNotFound===!0&&{matchNotFound:!0},...e.searchedFor&&{searchedFor:e.searchedFor},...e.ref&&t.branch!==e.ref?{resolvedBranch:e.ref}:{}}}var Im=b(()=>{"use strict"});function dl(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function TO(e){if(typeof e=="string")return{message:e};if(typeof e=="object"&&e!==null){let t=e;return{message:typeof t.error=="string"&&t.error.length>0?t.error:"Provider error",status:dl(t.status),retryAfterSeconds:dl(t.retryAfter),rateLimitRemaining:dl(t.rateLimitRemaining),rateLimitReset:dl(t.rateLimitReset)}}return{message:"Provider error"}}function zS(e){let t=[];for(let n of e){if(n.status!=="error")continue;let{message:r,status:o,retryAfterSeconds:i,rateLimitRemaining:s,rateLimitReset:a}=TO(n.data.error),c=o!==void 0?`${r} (HTTP ${o})`:r;t.push({index:n.index,error:c,...o!==void 0?{status:o}:{},...i!==void 0?{retryAfterSeconds:i}:{},...s!==void 0?{rateLimitRemaining:s}:{},...a!==void 0?{rateLimitReset:a}:{}})}return t}function No(e,t,n){return{structuredContent:e,keysPriority:t,isError:n}}var Ss=b(()=>{"use strict"});import{z as X}from"zod";function LO(e){let t;for(let n of AO)n in e&&(t??={...e},delete t[n]);return t??e}function ke(e,t,n="Continue to the next page of results."){return{tool:e,query:LO(t),why:n,confidence:"exact"}}function ml(e,t,n,r){if(!n||!n.hasMore||n.nextCharOffset===void 0)return;let o=r?.includeCharLength!==!1;return{continueChars:{tool:e,query:{...t,charOffset:n.nextCharOffset,...o&&n.charLength!==void 0?{charLength:t.charLength??n.charLength}:{}}}}}var EO,FK,MK,NK,AO,sr=b(()=>{"use strict";EO=X.object({currentPage:X.number(),totalPages:X.number(),hasMore:X.boolean(),nextPage:X.number().optional(),pageSize:X.number().optional(),totalItems:X.number().optional(),perPage:X.number().optional(),totalFound:X.number().optional(),returned:X.number().optional(),totalMatches:X.number().optional(),reportedTotalMatches:X.number().optional().describe("Provider-reported raw total (e.g. GitHub's match count) \u2014 may exceed what pagination can actually reach."),reachableTotalMatches:X.number().optional().describe("Matches reachable by walking pages (bounded by the provider's result window, e.g. GitHub caps at 1000); totalPages is computed from this, not from reportedTotalMatches."),totalMatchesKind:X.enum(["exact","reported","lowerBound"]).optional(),totalMatchesCapped:X.boolean().optional(),totalResults:X.number().optional(),itemsPerPage:X.number().optional()}),FK=X.object({charOffset:X.number(),charLength:X.number(),totalChars:X.number(),hasMore:X.boolean(),nextCharOffset:X.number().optional(),currentPage:X.number().optional(),totalPages:X.number().optional(),chunkMode:X.enum(["semantic","char-limit"]).optional(),pageCountsKind:X.literal("estimated").optional()}),MK=X.object({tool:X.string(),query:X.record(X.string(),X.unknown()),why:X.string().optional(),confidence:X.enum(["exact","high","medium","low"]).optional()}),NK=EO.extend({filesPerPage:X.number().optional(),entriesPerPage:X.number().optional(),matchesPerPage:X.number().optional(),totalFiles:X.number().optional(),totalEntries:X.number().optional(),totalMatches:X.number().optional(),totalFilesFound:X.number().optional(),nextMatchPage:X.number().optional()}),AO=["goal","reasoning"]});function Om(e){let t=e.replace(/\\/g,"/"),n=t.lastIndexOf("/");return n===-1?t:t.slice(n+1)}function Fm(e){let t=e.lastIndexOf(".");return t>0?e.slice(t).toLowerCase():""}function DO(e){if(!e)return!1;let t=Om(e);if(!t)return!1;if(_O.has(t))return!0;for(let r of FO)if(r.test(t))return!0;let n=Fm(t);return!!(n&&US.has(n))}function HO(e){if(!e)return!1;let t=Om(e);if(!t)return!1;if(IO.has(t))return!0;for(let n of OO)if(n.test(t))return!0;return!1}function GO(e){let t=Fm(e);if(t&&NO.has(t))return!0;if(t&&($S.has(t)||US.has(t)))return!1;let n=(t?e.slice(0,e.length-t.length):e).toLowerCase().replace(/\..*$/,""),r=n.split(/[-_.]/)[0]??n;return jS.has(n)||jS.has(r)}function BO(e){let t=Fm(e);return t!==""&&$S.has(t)}function fl(e){if(!e)return;let t=Om(e);if(t){if(HO(t))return"lock";if(DO(t))return"config";if(GO(t))return"doc";if(BO(t))return"code"}}var kO,_O,vO,IO,OO,FO,MO,US,NO,jS,$S,Mm=b(()=>{"use strict";kO=["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"],_O=new Set(kO),vO=["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"],IO=new Set(vO),OO=[/\.lock$/],FO=[/^\.eslintrc(\..+)?$/,/^\.prettierrc(\..+)?$/,/^\.babelrc(\..+)?$/,/^eslint\.config\.(c|m)?js$/,/^\.env(\..+)?$/,/^tsconfig\..+\.json$/,/^\.stylelintrc(\..+)?$/,/^\.renovaterc(\..+)?$/,/\.csproj$/,/\.fsproj$/,/\.vbproj$/,/\.sln$/,/\.gemspec$/,/\.tf(vars)?$/],MO=[".toml",".ini",".cfg",".conf",".properties"],US=new Set(MO),NO=new Set(".md .mdx .markdown .rst .adoc .asciidoc .txt .text .rtf .org .textile .rdoc .pod .creole .wiki".split(" ")),jS=new Set(["readme","license","licence","copying","notice","changelog","changes","history","authors","contributors","contributing","code_of_conduct","codeowners","install","citation"]),$S=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 hl(e){return typeof e=="object"&&e!==null}function jt(e){return typeof e=="string"&&e.length>0?e:void 0}function gt(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function QS(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string");return t.length>0?t:void 0}function Sn(e,t){return gt(e[t])??0}function zO(e){if(hl(e))return{nonFile:Sn(e,"nonFile"),oversized:Sn(e,"oversized"),binary:Sn(e,"binary"),fileLimit:Sn(e,"fileLimit"),fetchFailed:Sn(e,"fetchFailed"),totalSizeLimit:Sn(e,"totalSizeLimit"),pathTraversal:Sn(e,"pathTraversal")}}function jO(e){if(hl(e))return{maxDirectoryFiles:Sn(e,"maxDirectoryFiles"),maxTotalSize:Sn(e,"maxTotalSize"),maxFileSize:Sn(e,"maxFileSize")}}function $O(e){if(!hl(e))return;let{currentPage:t,totalPages:n,hasMore:r}=e;if(typeof t!="number"||typeof n!="number"||typeof r!="boolean")return;let o={currentPage:t,totalPages:n,hasMore:r};e.pageCountsKind==="estimated"&&(o.pageCountsKind="estimated"),(e.chunkMode==="semantic"||e.chunkMode==="char-limit")&&(o.chunkMode=e.chunkMode);for(let i of UO){let s=e[i];typeof s=="number"&&Number.isFinite(s)&&(o[i]=s)}return o}function QO(e,t){let{goal:n,reasoning:r,charOffset:o,...i}=t;return ml("ghGetFileContent",{...i,charLength:t.charLength??e?.charLength},e)}function WO(e,t){if(t.matchString!==void 0)return;let n=gt(e.startLine),r=gt(e.endLine),o=gt(e.totalLines);if(e.isPartial!==!0||n===void 0||r===void 0||o===void 0||r>=o)return;let i=Math.max(1,r-n+1),s=r+1,a=Math.min(o,r+i);return{tool:"ghGetFileContent",query:{owner:t.owner,repo:t.repo,...t.branch!==void 0?{branch:t.branch}:{},path:t.path,startLine:s,endLine:a,...t.minify!==void 0?{minify:t.minify}:{}},why:`Continue the file at lines ${s}-${a}.`,confidence:"exact"}}function VO(e){return{tool:"ghCloneRepo",query:{owner:e.owner,repo:e.repo,...e.branch!==void 0?{branch:e.branch}:{},sparsePath:e.path},why:"lspGetSemantics (definitions/references) only works on local files \u2014 clone this path locally, then run localSearch or lspGetSemantics on it",confidence:"exact"}}function WS(){try{return Gy()}catch{return!1}}function KO(e){return{tool:"ghCloneRepo",query:{owner:e.owner,repo:e.repo,...e.branch!==void 0?{branch:e.branch}:{},sparsePath:e.path},why:"Clone this directory to retrieve content omitted by remote directory-fetch limits or failures.",confidence:"exact"}}function VS(e,t){let n=$O(e.pagination),r=WS(),o=n?.hasMore===!0?void 0:WO(e,t),i={...QO(n,t),...o?{continueLines:o}:{},...r?{cloneForSemantics:VO(t)}:{}};if(e.errorCode==="contentSecurityLimit"&&(gt(e.totalLines)??0)>1&&(t.startLine===void 0||t.startLine!==t.endLine)){let c=t.startLine??1;i.readBoundedLines={tool:"ghGetFileContent",query:{owner:t.owner,repo:t.repo,path:t.path,...t.branch!==void 0?{branch:t.branch}:{},startLine:c,endLine:c,minify:"none"},why:"The selected view is too large to scan safely. Read one source line; this starts a different source-line view, not a continuation of the rejected character view.",confidence:"exact"}}let s=jt(e.path)??String(t.path??""),a=s?fl(s):void 0;return{path:s,content:typeof e.content=="string"?e.content:"",...e.errorCode==="contentSecurityLimit"?{errorCode:"contentSecurityLimit",terminalLimit:!0,partialReasons:["security-selected-view-size-limit"]}:{},...a?{fileType:a}:{},localPath:jt(e.localPath),repoRoot:jt(e.repoRoot),contentView:e.contentView==="none"||e.contentView==="standard"||e.contentView==="symbols"?e.contentView:void 0,totalLines:gt(e.totalLines),sourceChars:gt(e.sourceChars),resolvedBranch:jt(e.resolvedBranch),...typeof e.commitSha=="string"&&e.commitSha.length===40?{commitSha:e.commitSha}:{},pagination:n,...Object.keys(i).length>0?{next:i}:{},...e.isPartial===!0||n?.hasMore===!0?{isPartial:!0}:{},startLine:gt(e.startLine),endLine:gt(e.endLine),...Array.isArray(e.matchRanges)&&e.matchRanges.length>0?{matchRanges:e.matchRanges}:{},...Array.isArray(e.matchedLines)&&e.matchedLines.length>0?{matchedLines:e.matchedLines}:{},lastModified:jt(e.lastModified),lastModifiedBy:jt(e.lastModifiedBy),warnings:QS(e.warnings),...e.matchNotFound===!0?{matchNotFound:!0}:{},searchedFor:jt(e.searchedFor),...e.cached===!0?{cached:!0}:{}}}function KS(e,t){let r=(Array.isArray(e.files)?e.files:[]).filter(hl).map(u=>({path:jt(u.path)??"",size:gt(u.size)??0,type:jt(u.type)??"file"})),o=zO(e.skipped),i=e.hasSubdirectories===!0||(o?o.nonFile>0:!1),s=o?Object.entries(o).filter(([,u])=>u>0):[],a=s.length>0?Object.fromEntries(s):void 0,c=e.complete===!1,l=c?s.length>0?s.map(([u])=>u):["providerDirectoryIncomplete"]:[],d=c&&WS();return{path:String(t.path??""),localPath:jt(e.localPath)??"",repoRoot:jt(e.repoRoot),fileCount:gt(e.fileCount)??r.length,totalSize:gt(e.totalSize)??0,complete:e.complete===!0,verified:e.verified===!0,...typeof e.commitSha=="string"&&e.commitSha.length===40?{commitSha:e.commitSha}:{},...i?{hasSubdirectories:!0}:{},...a?{skippedSummary:a}:{},directoryEntryCount:gt(e.directoryEntryCount),eligibleFileCount:gt(e.eligibleFileCount),savedFileCount:gt(e.savedFileCount),skipped:o,limits:jO(e.limits),warnings:QS(e.warnings),...r.length>0?{files:r}:{},...e.cached===!0?{cached:!0}:{},resolvedBranch:jt(e.resolvedBranch),...c?{isPartial:!0,partialReasons:l,...d?{next:{escalateToClone:KO(t)}}:{terminalLimit:!0}}:{}}}var UO,XS=b(()=>{"use strict";sr();Xn();Mm();UO=["charOffset","charLength","totalChars","nextCharOffset","nextBlockChar","nextPage","nextMatchPage","filesPerPage","totalFiles","entriesPerPage","totalEntries","matchesPerPage","totalMatches"]});function YS(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return;let t=e;return typeof t.message=="string"?t.message:t.error===e?void 0:YS(t.error)}function XO(e,t){let n=typeof t?.owner=="string"?t.owner:void 0,r=typeof t?.repo=="string"?t.repo:void 0;if(e.status==="error"){let i=e.data.error,s=YS(i)??"File content query failed",a=/\b404\b|not found/i.test(s);return{...n?{owner:n}:{},...r?{repo:r}:{},...t?.path?{path:String(t.path)}:{},error:a&&n&&r?`${s} \u2014 verify the path (exact case, no leading slash) and branch; use ghSearch with operation:"tree", owner:"${n}", repo:"${r}"`:s}}let o={owner:n??"",repo:r??""};return t?.type==="directory"?o.directories=[KS(e.data,t)]:o.files=[VS(e.data,t??{})],o}function JS(){return({queries:e,results:t})=>{let n=t.map(o=>({...o,data:XO(o,e[o.index])}));return No({results:n},["results","index","status","meta","data","owner","repo","files","directories","path","content","fileType","totalLines","startLine","endLine","isPartial","pagination","error"],n.length>0&&n.every(o=>o.status==="error"))}}var Nm=b(()=>{"use strict";Ss();XS()});var qS={};Pn(qS,{fetchMultipleGitHubFileContents:()=>YO});import{getConfigSync as ZS}from"@octocodeai/config";async function YO(e){let{queries:t,authInfo:n}=e,r=ot(n);return Ce(t,async(o,i)=>{try{let s=Ze(ul,o,{prefix:!1});if(s.ok===!1)return s.error;let a=s.data,c=a.minify??(a.fullContent===!0?"none":"standard"),l={...a,minify:c};if(l.type==="directory"){let u=JO(l);if(u)return u}let d=r();return l.type==="directory"?ZO(l,n,d):qO(l,n,d)}catch(s){return qe(s,o,void 0,N.GITHUB_FETCH_CONTENT)}},{toolName:N.GITHUB_FETCH_CONTENT,finalize:JS()},e)}function JO(e){let t=ZS();if(!t.local.enabled)return D('Directory fetch requires local materialization. Set ENABLE_LOCAL=true to use type: "directory".',e,{extra:{errorCode:"localToolsDisabled"},rawResponse:0});if(!t.local.enableClone)return D('Directory fetch requires clone/materialization support. Set ENABLE_CLONE=true to use type: "directory".',e,{extra:{errorCode:"cloneDisabled"},rawResponse:0});if(t.storage.mode==="memory")return D('Directory fetch requires persistent local materialization. Set storage.mode="persistent" or OCTOCODE_STORAGE_MODE=persistent to use type: "directory".',e,{extra:{errorCode:"persistentStorageDisabled"},rawResponse:0})}async function ZO(e,t,n){if(!al(n,"fetchDirectoryToDisk"))return qe(new Error('Directory fetch (type: "directory") is only available with the GitHub provider. Use file mode (type: "file") instead.'),e,"Provider not supported",N.GITHUB_FETCH_CONTENT);if(!e.owner||!e.repo)return D("Directory fetch requires both owner and repo.",e,{rawResponse:0});let r=e.branch??await pt(e.owner,e.repo,t),o=await td(e.owner,e.repo,String(e.path),r,t,!!e.forceRefresh),i=o.skipped?Object.fromEntries(Object.entries(o.skipped).filter(([,a])=>a>0)):void 0,s={localPath:o.localPath,repoRoot:o.repoRoot,fileCount:o.fileCount,totalSize:o.totalSize,complete:o.complete,verified:o.verified,...o.commitSha?{commitSha:o.commitSha}:{},directoryEntryCount:o.directoryEntryCount,eligibleFileCount:o.eligibleFileCount,savedFileCount:o.savedFileCount,...i&&Object.keys(i).length>0?{skipped:o.skipped}:{},limits:o.limits,...o.warnings?{warnings:o.warnings}:{},files:o.files,...o.cached?{cached:!0}:{},...e.branch!==o.branch?{resolvedBranch:o.branch}:{}};return Se(e,s,!0,N.GITHUB_FETCH_CONTENT,{rawResponse:o.totalSize??j(o)})}async function qO(e,t,n){let r=ZS(),i=e.fullContent===!0&&e.minify==="none"&&r.local.enabled&&r.local.enableClone&&r.storage.mode==="persistent"&&n.provider.type==="github"?await rr(e.owner,e.repo,e.branch??await pt(e.owner,e.repo,t),t,e.forceRefresh===!0):void 0,s=i?{...e,branch:i.commitSha}:e,a=await Zt(e,()=>n.provider.getFileContent(GS(s)));if(a.ok===!1)return a.result;let c=i?await od(e.owner,e.repo,e.path,i.commitSha,t,e.forceRefresh===!0):void 0,l={...BS(a.response.data,s),...c?{localPath:c.localPath,repoRoot:c.repoRoot,cached:c.cached,commitSha:c.commitSha,...i?{resolvedBranch:i.resolvedRef}:{}}:{}},d=!!(a.response.data.matchNotFound===!0||a.response.data.content&&a.response.data.content.length>0);return Se(e,l,d,N.GITHUB_FETCH_CONTENT,{rawResponse:a.response.rawResponseChars})}var Dm=b(()=>{"use strict";Ke();ht();Be();pl();nd();id();de();Zi();ue();Im();qt();Nm()});function gl(e,t){return e&&t?`${e}/${t}`:void 0}function yl(e){let t=e.lastIndexOf("/");return t<=0?{owner:"",repo:e}:{owner:e.substring(0,t),repo:e.substring(t+1)}}function bl(e){return{...typeof e?.reportedTotalMatches=="number"?{reportedTotalMatches:e.reportedTotalMatches}:{},...typeof e?.reachableTotalMatches=="number"?{reachableTotalMatches:e.reachableTotalMatches}:{},...e?.totalMatchesKind?{totalMatchesKind:e.totalMatchesKind}:{},...typeof e?.totalMatchesCapped=="boolean"?{totalMatchesCapped:e.totalMatchesCapped}:{},...typeof e?.uniqueFileCount=="number"?{uniqueFileCount:e.uniqueFileCount}:{}}}var Rl=b(()=>{"use strict"});function eC(e){return{keywords:e.keywords??[],projectId:gl(e.owner,e.repo),owner:e.owner,path:e.path,filename:e.filename,extension:e.extension,language:e.language,match:e.match,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning}}function tC(e,t){let n=t.match==="path",r=new Map;for(let i of e.items){let s=i.repository.name||"",{owner:a,repo:c}=yl(s),l=`${a}/${c}`,d=r.get(l);if(d||(d={id:l,owner:a,repo:c,matches:[]},r.set(l,d)),n||!i.matches?.length){d.matches.push({path:i.path,...n?{}:{pathOnly:!0}});continue}let u=!1;for(let p of i.matches){if(!p.context)continue;let f=p.context,m={path:i.path,value:f};if(p.positions?.length>0){let h=p.positions.filter(([y,g])=>y>=0&&g>y&&g<=f.length);h.length>0&&(m.matchIndices=h.map(([y,g])=>({start:y,end:g,lineOffset:(p.context??"").substring(0,y).split(`
|
|
33
|
+
`).length-1})))}d.matches.push(m),u=!0}u||d.matches.push({path:i.path,pathOnly:!0})}let o={results:Array.from(r.values()),...e.nonExistentScope?{nonExistentScope:!0}:{},...e.incompleteResults?{incompleteResults:!0}:{}};return e.pagination&&e.pagination.totalPages>1&&(o.pagination={currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,totalMatches:e.pagination.totalMatches||0,...bl(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}),o}var Hm=b(()=>{"use strict";Rl()});function nC(e,t){return e.some(n=>{let r=t[n.index];return typeof r?.owner=="string"&&typeof r?.repo=="string"})}function rC(e){let t=e.data;return{results:Array.isArray(t?.results)?t.results:[],pagination:t?.pagination,...t?.nonExistentScope?{nonExistentScope:!0}:{},...t?.incompleteResults?{incompleteResults:!0}:{},...t?.repoState?{repoState:t.repoState}:{}}}function e0(e){return[...e].sort((t,n)=>{let r=n.matches.length-t.matches.length;return r!==0?r:t.id.localeCompare(n.id)})}function t0(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function n0(e,t){let n=(e.path.split("/").pop()??"").toLowerCase(),r=n.replace(/\.[^.]+$/,""),o=e.value??"",i=0;for(let s of t){let a=s.trim();if(!a)continue;let c=a.toLowerCase();if(n===c||r===c)return 2;(/^[A-Za-z0-9_]+$/.test(a)?new RegExp(`\\b${t0(a)}\\b`,"i").test(o):o.toLowerCase().includes(c))&&(i=Math.max(i,1))}return i}function r0(e,t){return{...e,matches:t}}function oC(e,t){let n=t.filter(o=>typeof o=="string"&&o.trim());return n.length===0?e0(e):e.map(o=>{let i=o.matches.map((s,a)=>({match:s,index:a,score:n0(s,n)}));return i.sort((s,a)=>s.score!==a.score?a.score-s.score:s.index-a.index),{group:r0(o,i.map(s=>s.match)),hasExact:i.some(s=>s.score>0)}}).sort((o,i)=>{if(o.hasExact!==i.hasExact)return o.hasExact?-1:1;let s=i.group.matches.length-o.group.matches.length;return s!==0?s:o.group.id.localeCompare(i.group.id)}).map(o=>o.group)}var iC=b(()=>{"use strict"});function aC(e){let t=new Map;for(let{index:n,groups:r}of e)for(let o of r){let i=`${n}\0${o.id}`,s=t.get(i);if(!s){t.set(i,{id:o.id,queryIndex:n,owner:o.owner,repo:o.repo,matches:[...o.matches]});continue}s.matches.push(...o.matches)}return Array.from(t.values())}function sC(e){let t=new Map;for(let n of e)for(let r of n.matches){let o=`${n.queryIndex??-1}\0${n.owner}\0${n.repo}\0${r.path}`,i=t.get(o),{path:s,...a}=r;if(i){i.matches.push(a);continue}t.set(o,{owner:n.owner,repo:n.repo,path:r.path,matches:[a]})}return Array.from(t.values())}function cC(e,t,n){if(t.length===0)return[];if(e.length===1){let i=t[0]?.queryIndex??0,s=n.get(i);return[{index:i,data:{files:sC(t),...s?{pagination:s}:{}}}]}let r=new Map,o=[];for(let i of t){let s=i.queryIndex??0,a=r.get(s);a||(a=[],r.set(s,a),o.push(s)),a.push(i)}return o.map(i=>{let s=n.get(i);return{index:i,data:{files:sC(r.get(i)),...s?{pagination:s}:{}}}})}function lC(e,t,n){let r={};for(let o of e){let i=o.data.files[0];if(!i)continue;let s=t[o.index];if(s?.match==="path")continue;let c=(Array.isArray(s?.keywords)?s.keywords.filter(d=>typeof d=="string"):[])[0]??n[0];if(!c)continue;let l=e.length===1?"getLines":`getLines:${o.index}`;r[l]={tool:"ghGetFileContent",query:{owner:i.owner,repo:i.repo,path:i.path,matchString:c},why:"GitHub code search returns no line numbers; fetch the top hit with matchString to get exact file:line anchors",confidence:"low"}}return Object.keys(r).length>0?r:void 0}var uC=b(()=>{"use strict"});function Gm(){return({queries:e,results:t})=>{let n=[],r=new Map,o=[],i=new Set,s=[];t.forEach(P=>{if(P.status==="error")return;let x=rC(P);x.repoState&&s.push({index:P.index,state:x.repoState,query:e[P.index]}),x.incompleteResults&&i.add(P.index),x.results.reduce((A,I)=>A+I.matches.length,0)===0&&o.push({index:P.index,...x.nonExistentScope?{nonExistentScope:!0}:{},...x.incompleteResults?{incompleteResults:!0}:{}});let v=x.results;n.push({index:P.index,groups:v}),x.pagination&&r.set(P.index,x.pagination)});let a=Array.from(new Set(e.flatMap(P=>{let x=P.keywords;return Array.isArray(x)?x.filter(_=>typeof _=="string"):[]}))),c=oC(aC(n),a),l=zS(t),d=e.some(P=>P.concise===!0),u=new Map(t.map(P=>[P.index,P])),p=cC(e,c,r).map(P=>{let x=u.get(P.index)?.meta;return{...P,...x?{meta:x}:{}}}),f=lC(p,e,a);if(f)for(let P of p){let x=p.length===1?"getLines":`getLines:${P.index}`,_=f[x];_&&(P.data.next={getLines:_})}if(d)for(let P of p)P.data.files=P.data.files.map(x=>`${x.owner}/${x.repo}:${x.path}`);let m=o.map(({index:P,nonExistentScope:x,incompleteResults:_})=>{let v=u.get(P)?.meta;return{index:P,status:"empty",...v?{meta:v}:{},data:{files:[],pagination:r.get(P),...x?{nonExistentScope:x}:{},..._?{incompleteResults:_}:{}}}}),h=l.map(({index:P,error:x})=>{let _=u.get(P)?.meta;return{index:P,status:"error",..._?{meta:_}:{},data:{error:x}}}),g={results:[...p,...m,...h].sort((P,x)=>P.index-x.index)},R=g.results,S=P=>R.find(x=>x.index===P),C=(P,x,_,v=!1)=>{let A=S(P);if(!A)return;let I=A.meta,L=I?.diagnostics;A.meta={evidence:I?.evidence??{kind:"provider",confidence:"medium"},diagnostics:{...L??{},codes:Array.from(new Set([...L?.codes??[],x])),hints:Array.from(new Set([...L?.hints??[],_])),...v||L?.partial?{partial:!0}:{}}}},w=(P,x,_)=>{let v=S(P);!v||!("files"in v.data)||(v.data.next={...v.data.next??{},[x]:_})};for(let P of i){C(P,"ghIncompleteResults","GitHub reported an incomplete search index result; retry, narrow the scope, or verify locally before concluding absence.",!0);let{goal:x,reasoning:_,...v}=e[P];w(P,"retry",{tool:"github.code",query:v,why:"Retry the same query because GitHub marked the result incomplete",confidence:"exact"})}let T=new Set(s.map(({index:P})=>P));for(let P of o){if(T.has(P.index)||!nC([P],e))continue;let x=e[P.index];C(P.index,"ghScopedZeroUnproven","No indexed matches is unproven absence; verify the repository structure and search a bounded local copy before concluding."),w(P.index,"viewStructure",{tool:"github.tree",query:{owner:x.owner,repo:x.repo,path:""},why:"Verify that the scoped repository and path exist before concluding absence",confidence:"exact"})}let k=8,F=o.filter(({index:P,nonExistentScope:x,incompleteResults:_})=>{if(x||_)return!1;let v=e[P]?.keywords;return Array.isArray(v)&&v.length>k});if(F.length>0)for(let{index:P}of F){let x=e[P],_=Array.isArray(x.keywords)?x.keywords.filter(v=>typeof v=="string").slice(0,k):[];C(P,"ghQueryPossiblyTooComplex",`The query used more than ${k} keywords; narrow it before treating zero matches as absence.`),w(P,"retryNarrow",{tool:"github.code",query:{keywords:_,...typeof x.owner=="string"?{owner:x.owner}:{},...typeof x.repo=="string"?{repo:x.repo}:{},...typeof x.path=="string"?{path:x.path}:{},...typeof x.filename=="string"?{filename:x.filename}:{},...typeof x.extension=="string"?{extension:x.extension}:{},...typeof x.language=="string"?{language:x.language}:{},...x.match==="file"||x.match==="path"?{match:x.match}:{}},why:"Retry with a bounded keyword set to avoid silent under-matching",confidence:"low"})}for(let{index:P,state:x,query:_}of s)if(x.kind==="renamed"){let[v,A]=x.fullName.split("/");C(P,"ghRepoRenamed",`The repository was renamed to ${x.fullName}; retry against the renamed repository.`);let I=_?.keywords;w(P,"retryRenamed",{tool:"github.code",query:{owner:v,repo:A,...Array.isArray(I)?{keywords:I}:{}},why:"Re-run the same search against the renamed repository",confidence:"exact"})}else if(x.kind==="archived"){C(P,"ghRepoArchived","The repository is archived, so its code-search index may lag or be incomplete; verify its structure and search locally.");let v=_;typeof v?.owner=="string"&&typeof v.repo=="string"&&w(P,"viewStructure",{tool:"github.tree",query:{owner:v.owner,repo:v.repo,path:""},why:"Inspect the archived repository outside the code-search index",confidence:"exact"})}else{C(P,"ghRepoNotFound","The repository was not found or is private to this token; verify the spelling or discover the current repository name.");let v=_;typeof v?.repo=="string"&&w(P,"findRepository",{tool:"github.repositories",query:{keywords:[v.repo]},why:"Find the repository by name in case it moved or was renamed",confidence:"low"})}return No(g,["results","index","status","meta","evidence","diagnostics","data","files","path","owner","repo","queryIndex","matches","value","pathOnly","matchIndices","pagination","next","tool","query","why","confidence","nonExistentScope","incompleteResults","error"],c.length===0&&l.length>0)}}var Bm=b(()=>{"use strict";Ss();iC();uC()});function o0(e){return!!((e.keywords??[]).some(n=>n.trim().length>0)||e.owner||e.path||e.extension||e.filename||e.language)}function i0(e){if(e.repo&&!e.owner)return{error:"Repository scope requires owner. Provide both owner and repo, or omit repo for a broader search."}}async function s0(e,t,n){try{let r=await Y(n),{data:o}=await r.rest.repos.get({owner:e,repo:t}),i=`${e}/${t}`.toLowerCase();return o.full_name&&o.full_name.toLowerCase()!==i?{kind:"renamed",fullName:o.full_name}:o.archived?{kind:"archived"}:void 0}catch(r){return r.status===404?{kind:"notFound"}:void 0}}async function pC(e,t,n=ot(t.authInfo)){try{let r=i0(e);if(r)return D(r.error,e);if(!o0(e))return D("At least one search term or scope filter is required.",e);let o=n(),i=await Zt(e,()=>o.provider.searchCode(eC(e)));if(i.ok===!1)return i.result;let s=tC(i.response.data,e);if(s.results.length===0&&e.owner&&e.repo){let a=await s0(String(e.owner),String(e.repo),t.authInfo);a&&(s.repoState=a)}return Se(e,s,s.results.length>0,N.GITHUB_SEARCH_CODE,{rawResponse:i.response.rawResponseChars})}catch(r){return qe(r,e,void 0,N.GITHUB_SEARCH_CODE)}}var dC=b(()=>{"use strict";Ke();ht();de();Be();Hm();qt();Bm()});async function Sl(e,t,n,r){try{let o=await re(r),i=await oe(q("gh-canonical-repo",{owner:t,repo:n,auth:o}),()=>e.rest.repos.get({owner:t,repo:n}),{cacheRole:"helper",ttl:300,shouldCache:l=>{let[d,u]=l.data.full_name?.split("/")??[];return!!(d&&u)}}),[s,a]=i.data.full_name?.split("/")??[];return!s||!a?{owner:t,repo:n,renamed:!1}:{owner:s,repo:a,renamed:s!==t||a!==n}}catch{return{owner:t,repo:n,renamed:!1}}}var zm=b(()=>{"use strict";de();Ve();Oe()});function mC(e){let t=e;return{keywords:e.keywords,topics:e.topicsToSearch,owner:e.owner,stars:e.stars,size:t.size,created:t.created,updated:e.updated,language:e.language,archived:t.archived,visibility:t.visibility,license:t.license,forks:t.forks,goodFirstIssues:t.goodFirstIssues,match:e.match,sort:e.sort,limit:e.limit,page:e.page,goal:e.goal,reasoning:e.reasoning}}function fC(e){return e.map(t=>{let{owner:n,repo:r}=yl(t.fullPath);return{owner:n||"",repo:r||t.name,defaultBranch:t.defaultBranch,stars:t.stars,description:t.description||"",url:t.url,createdAt:t.createdAt,updatedAt:t.updatedAt,pushedAt:t.lastActivityAt,visibility:t.visibility,topics:t.topics,forksCount:t.forks,openIssuesCount:t.openIssuesCount,...t.language&&{language:t.language},...t.license&&{license:t.license},...t.homepage&&{homepage:t.homepage}}})}var jm=b(()=>{"use strict";Rl()});function a0(e){return!!(e.topicsToSearch&&(Array.isArray(e.topicsToSearch)?e.topicsToSearch.length>0:e.topicsToSearch))}function Um(e){return!!(e.keywords&&e.keywords.length>0)}function hC(e){return!!(Um(e)||a0(e)||e.owner||e.language||e.stars||e.updated||e.created||e.size||e.forks||e.license||e.goodFirstIssues||e.visibility||e.archived!==void 0)}var gC=b(()=>{"use strict"});function yC(e){return{currentPage:e.currentPage,...e.totalMatchesKind!=="lowerBound"&&e.totalPages!==void 0?{totalPages:e.totalPages}:{},perPage:e.entriesPerPage??10,...e.totalMatches!==void 0?{totalMatches:e.totalMatches}:{},...e.reportedTotalMatches!==void 0?{reportedTotalMatches:e.reportedTotalMatches}:{},...e.reachableTotalMatches!==void 0?{reachableTotalMatches:e.reachableTotalMatches}:{},...e.totalMatchesKind!==void 0?{totalMatchesKind:e.totalMatchesKind}:{},...e.totalMatchesCapped!==void 0?{totalMatchesCapped:e.totalMatchesCapped}:{},hasMore:e.hasMore,...e.hasMore?{nextPage:e.currentPage+1}:{}}}var bC=b(()=>{"use strict"});function c0(e){let t=e,n={owner:t.owner??"",repo:t.repo,stars:t.stars,forks:t.forksCount,openIssuesCount:t.openIssuesCount,language:t.language,license:t.license||void 0,description:t.description&&t.description!=="No description"?t.description:void 0,homepage:t.homepage||void 0,pushedAt:t.pushedAt?t.pushedAt.slice(0,10):void 0,createdAt:t.createdAt?t.createdAt.slice(0,10):void 0,updatedAt:t.updatedAt?t.updatedAt.slice(0,10):void 0,defaultBranch:t.defaultBranch&&t.defaultBranch!=="main"&&t.defaultBranch!=="master"?t.defaultBranch:void 0,topics:t.topics?.length?t.topics:void 0,visibility:t.visibility&&t.visibility!=="public"?t.visibility:void 0};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}function l0(e,t){let n=t.concise===!0,r=e.repositories[0],o=r?.owner&&r?.repo?{viewStructure:{tool:"github.tree",query:{owner:r.owner,repo:r.repo,path:""},why:"Orient in the top-ranked repository before reading code",confidence:"low"},searchCode:{tool:"github.code",query:{owner:r.owner,repo:r.repo},why:"Scope a code search to the top-ranked repository",confidence:"low"}}:void 0;return{data:{pagination:e.pagination,repositories:n?e.repositories.map(i=>`${i.owner?`${i.owner}/`:""}${i.repo}`):e.repositories.map(c0),...o?{next:o}:{}}}}async function RC(e,t,n=ot(t.authInfo)){let{authInfo:r}=t;try{if(!hC(e))return D("At least one repository search term or filter is required.",e);let o=n(),i=await Zt(e,()=>o.provider.searchRepos(mC(e)));if(i.ok===!1)return i.result;let{response:s}=i,a=fC(s.data.repositories),c=s.data.pagination,l=c?yC(c):void 0,d=a.length>0,u=l0({repositories:a,pagination:l},e),p;if(e.owner&&Um(e)&&(e.page??1)===1){let h=(Array.isArray(e.keywords)?e.keywords:[e.keywords]).filter(g=>typeof g=="string"&&/^[A-Za-z0-9_.-]+$/.test(g)).slice(0,3),y=h.some(g=>a.some(R=>R.repo?.toLowerCase()===g.toLowerCase()));if(h.length>0&&!y)try{let g=await Y(r);for(let R of h){let S=await Sl(g,String(e.owner),R,r);if(S.renamed){p={warning:`Repository "${e.owner}/${R}" now resolves to "${S.owner}/${S.repo}" \u2014 the repository may have been transferred. Retry scoped to owner:"${S.owner}" (see next.retryUnderCanonicalOwner).`,next:{retryUnderCanonicalOwner:{tool:"github.repositories",query:{...e,owner:S.owner,keywords:[S.repo]},why:"Re-run scoped to the repository's current owner after a detected transfer.",confidence:"exact"}}};break}}}catch{}}let f=[...p?[p.warning]:[],...!d&&!p?['No repositories matched. Keywords are ANDed \u2014 try fewer or broader keywords, drop a topic/filter (topics are sparse), or add match:"readme" for full-text search.']:[]],m={...u.data,...s.data.incompleteResults?{incompleteResults:!0}:{},...f.length>0?{warnings:f}:{},...p?{next:p.next}:{}};return Se(e,m,d,N.GITHUB_SEARCH_REPOSITORIES,{rawResponse:s.rawResponseChars??j(s.data)})}catch(o){return qe(o,e,void 0,N.GITHUB_SEARCH_REPOSITORIES)}}var SC=b(()=>{"use strict";Ke();ht();de();zm();Be();jm();qt();gC();bC();ue()});function $m(e,t){let n=e.include??[];return{projectId:`${e.owner}/${e.repo}`,ref:t,path:e.path?String(e.path):void 0,depth:typeof e.maxDepth=="number"?e.maxDepth:void 0,itemsPerPage:e.itemsPerPage??On.ENTRIES_PER_PAGE,page:(()=>{let r=e.page;return typeof r=="number"?r:void 0})(),includeSizes:n.includes("sizes"),includeLanguages:n.includes("languages"),includeContributors:n.includes("contributors"),includeBranches:n.includes("branches"),includeTags:n.includes("tags"),metadataPage:e.metadataPage,goal:e.goal,reasoning:e.reasoning}}function CC(e,t,n,r){let o=r,i=e.branch??r,s=o&&i&&o!==i&&o!=="HEAD",a=Object.entries(n).sort(([g],[R])=>g==="."?-1:R==="."?1:g.localeCompare(R)).map(([g,R])=>({dir:g,files:R.files,folders:R.folders})),c=e.fileSizeMap,l={};if(c){for(let[g,R]of Object.entries(c))if(n[g]){let S=new Set(n[g].files);for(let[C,w]of Object.entries(R))if(S.has(C)){let T=g==="."?C:`${g}/${C}`;l[T]=w}}}let d=Object.values(n).reduce((g,R)=>(g.totalFiles+=R.files.length,g.totalFolders+=R.folders.length,g),{totalFiles:0,totalFolders:0}),u=e,p=e.summary.incompleteTree===!0,f=e.partialReasons&&e.partialReasons.length>0?e.partialReasons:p?["providerTreeTruncated"]:void 0,m=e.isPartial===!0||p,h=e.terminalLimit===!0||p,y={structure:a,...Object.keys(l).length>0&&{fileSizes:l},...u.languages?{languages:u.languages,dominantLanguage:u.dominantLanguage}:{},...u.contributors?{contributors:u.contributors,returnedContributors:u.contributors.length}:{},...u.branches?{branches:u.branches,returnedBranches:u.branches.length}:{},...u.tags?{tags:u.tags,returnedTags:u.tags.length}:{},summary:{totalFiles:d.totalFiles,totalFolders:d.totalFolders,...p?{incompleteTree:!0}:{}},...m?{isPartial:!0}:{},...h?{terminalLimit:!0}:{},...f?{partialReasons:f}:{}};if(e.metadataPagination){y.metadataPagination=e.metadataPagination;let g={};for(let[R,S]of Object.entries(e.metadataPagination))!S.hasMore&&!S.failed||S.terminalLimit||(g[R]=ke("ghSearch",{operation:"tree",owner:t.owner,repo:t.repo,branch:i,...t.path!==void 0?{path:t.path}:{},...t.maxDepth!==void 0?{maxDepth:t.maxDepth}:{},page:t.page??1,pageSize:t.itemsPerPage??On.ENTRIES_PER_PAGE,include:[R],metadataPage:S.currentPage+(S.failed?0:1)},S.failed?`Retry the failed ${R} page.`:`Continue the ${R} list.`));Object.keys(g).length>0&&(y.next=g)}return i&&(y.resolvedBranch=i),s&&(y.branchFallback={requestedBranch:o,actualBranch:i,...e.defaultBranch!==void 0&&{defaultBranch:e.defaultBranch},warning:`Branch '${o}' not found. Showing '${i}' (default branch). Re-query with the correct branch name if branch-specific results are required.`}),e.pagination&&(e.pagination.hasMore||e.pagination.totalPages>1)&&(y.pagination=e.pagination),y}var Qm=b(()=>{"use strict";ls();sr()});import{shouldIgnoreDiscoveryFile as u0,shouldIgnoreDiscoveryDir as xC}from"@octocodeai/octocode-engine/security";function p0(e,t){let n=e.error,r=typeof n=="object"&&n!==null?n:void 0,o=typeof r?.status=="number"?r.status:void 0,i=typeof t.path=="string"?t.path.replace(/\/+$/,""):"",s=i.includes("/")?i.slice(0,i.lastIndexOf("/")):"",a=i.split("/").pop()||t.repo,c=o===404?{retryParent:{tool:"github.tree",query:{owner:t.owner,repo:t.repo,...s?{path:s}:{},...t.branch?{branch:t.branch}:{}},why:"Retry at the parent directory \u2014 the path or branch may be wrong.",confidence:"low"},searchPath:{tool:"github.code",query:{owner:t.owner,repo:t.repo,match:"path",keywords:[a]},why:"Locate the path by name in case it moved or was renamed.",confidence:"low"}}:void 0;return{status:"error",owner:t.owner,repo:t.repo,path:t.path,branch:t.branch,error:typeof r?.error=="string"?r.error:typeof n=="string"?n:"Failed to explore repository structure",...typeof r?.status=="number"?{statusCode:r.status}:{},...typeof r?.type=="string"?{errorType:r.type}:{},...c?{next:c}:{}}}function d0(e){let t={};for(let[n,r]of Object.entries(e)){let o=n.split("/").pop()??n;if(n!==""&&n!=="."&&xC(o))continue;let i=r.files.filter(a=>!u0(a)),s=r.folders.filter(a=>!xC(a));(i.length>0||s.length>0)&&(t[n]={files:i,folders:s})}return t}async function wC(e,t,n=ot(t.authInfo)){try{let r=n(),o=`${e.owner}/${e.repo}`,i=e.branch,s=i??await r.provider.resolveDefaultBranch(o),a=await Zt(e,()=>r.provider.getRepoStructure($m(e,s))),c=s,l;if(a.ok===!1&&i){let g=a.result.error;if((typeof g=="object"&&g!==null?g.status:void 0)===404){let S=await r.provider.resolveDefaultBranch(o);if(S!==i){let C=await Zt(e,()=>r.provider.getRepoStructure($m(e,S)));C.ok!==!1&&(a=C,c=S,l=`Branch/ref '${i}' was not found. Showing '${S}' (default branch) instead. Re-query with the correct branch name if branch-specific results are required.`)}}}if(a.ok===!1)return p0(a.result,e);let d=d0(a.response.data.structure),u=CC(a.response.data,e,d,c),p=Object.keys(d).length>0||u.isPartial===!0||u.languages!==void 0||["contributors","branches","tags"].some(g=>Array.isArray(u[g])&&u[g].length>0);l&&(u.branchFallback={requestedBranch:i,actualBranch:c,warning:l});let m=u.structure?.find(g=>(g.files?.length??0)>0),h=String(e.path??"").replace(/\/+$/,""),y=m?(()=>{let g=m.dir==="."?m.files[0]:`${m.dir}/${m.files[0]}`;return h?`${h}/${g}`:g})():void 0;return u.next={...u.next,...y?{fetchFile:{tool:"ghGetFileContent",query:{owner:e.owner,repo:e.repo,path:y,...c?{branch:c}:{}},why:"Read the first listed file",confidence:"low"}}:{},materialize:{tool:"ghGetFileContent",query:{owner:e.owner,repo:e.repo,path:String(e.path??""),type:"directory",...c?{branch:c}:{}},why:"Materialize this directory locally for exact line anchors, local search, or LSP",confidence:"exact"}},Se(e,u,p,N.GITHUB_VIEW_REPO_STRUCTURE,{rawResponse:a.response.rawResponseChars})}catch(r){return qe(r,e,"Failed to explore repository structure",N.GITHUB_VIEW_REPO_STRUCTURE)}}var PC=b(()=>{"use strict";Ke();ht();Be();Qm();qt()});function TC(){return({queries:e,results:t})=>{let n=e.flatMap((p,f)=>p.operation==="code"?[{query:p,originalIndex:f}]:[]),r=new Map(n.map((p,f)=>[p.originalIndex,f])),o=n.map(p=>p.originalIndex),i=n.map(({query:p})=>{let{operation:f,...m}=p;return m}),s=t.filter(p=>r.has(p.index)).map(p=>({...p,index:r.get(p.index)})),a=f0(i,s).map(p=>({...p,index:o[p.index]??p.index})),c=new Set(o),l=t.filter(p=>!c.has(p.index)),d=[...a,...l].map(p=>h0(p,e[p.index])).sort((p,f)=>p.index-f.index);return No({results:d},["results","index","status","meta","data","operation","files","repositories","structure","pagination","next","tool","query","why","confidence","error"],d.length>0&&d.every(p=>p.status==="error"))}}function f0(e,t){return e.length===0?[]:Gm()({queries:e,results:t,config:{toolName:"github.code"}}).structuredContent.results??[]}function h0(e,t){let n=t?.operation;if(!n||!t)return e;let r=Vm({operation:n,...e.data}),o=y0(r),i=g0(o,n,t);return{...e,data:b0(i,n,t)}}function EC(e,t){let{goal:n,reasoning:r,...o}=e;return{...o,page:t}}function g0(e,t,n){if(!n)return e;let r=e.pagination;if(!r||typeof r!="object")return e;let o=r;if(o.hasMore!==!0)return e;let{nextPage:i,...s}=o,a=typeof o.perPage=="number"&&o.perPage>0?o.perPage:typeof n.pageSize=="number"&&n.pageSize>0?n.pageSize:void 0;if(o.totalMatchesCapped===!0&&typeof i=="number"&&a!==void 0&&(i-1)*a>=Wm){let l=e.next&&typeof e.next=="object"?e.next:void 0,{nextPage:d,...u}=l??{};return{...e,pagination:{...s,continuationUnavailable:{reason:"providerResultCap",maxResults:Wm}},...Object.keys(u).length>0?{next:u}:{}}}if(typeof i!="number"||!Number.isInteger(i))return{...e,terminalLimit:!0,pagination:{...s,continuationUnavailable:{reason:"missingProviderCursor"}}};if(i>1e3)return{...e,terminalLimit:!0,pagination:{...s,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}};let c=e.next&&typeof e.next=="object"?e.next:{};return{...e,next:{...c,nextPage:{tool:"ghSearch",query:EC(n,i),why:`Continue ${t} results on page ${i}.`,confidence:"exact"}}}}function y0(e){let t=e.pagination;if(!t||typeof t!="object"||t.totalMatchesCapped!==!0)return e;let n=Array.isArray(e.partialReasons)?e.partialReasons.filter(r=>typeof r=="string"):[];return{...e,isPartial:!0,terminalLimit:!0,partialReasons:n.includes("providerResultCap")?n:[...n,"providerResultCap"],providerLimit:{reason:"providerResultCap",maxResults:Wm}}}function b0(e,t,n){let r=e.incompleteResults===!0,o=Array.isArray(e.partialReasons)?e.partialReasons.filter(l=>typeof l=="string"):[],i=o.includes("partialTreeFailures");if(!r&&!i)return e;let s=[...o,...r&&!o.includes("providerIncompleteResults")?["providerIncompleteResults"]:[]],a=e.next&&typeof e.next=="object"?e.next:{},c=typeof n.page=="number"&&Number.isInteger(n.page)?n.page:1;return{...e,isPartial:!0,partialReasons:s,next:{...a,...a.retry?{}:{retry:{tool:"ghSearch",query:EC(n,c),why:`Retry the same ${t} provider page because the provider reported incomplete results.`,confidence:"exact"}}}}}function Vm(e){if(Array.isArray(e))return e.map(Vm);if(!e||typeof e!="object")return e;let t=Object.fromEntries(Object.entries(e).map(([r,o])=>[r,Vm(o)])),n=typeof t.tool=="string"?m0[t.tool]:void 0;if(n&&(t.tool="ghSearch",t.query&&typeof t.query=="object")){let r={...t.query};n==="tree"?(r.itemsPerPage!==void 0&&(r.pageSize=r.itemsPerPage),delete r.itemsPerPage):n==="repositories"?(r.limit!==void 0&&(r.pageSize=r.limit),delete r.limit,r.topicsToSearch!==void 0&&(r.topics=r.topicsToSearch),delete r.topicsToSearch):n==="code"&&(r.limit!==void 0&&(r.pageSize=r.limit),delete r.limit),t.query={operation:n,...r}}return t}var Wm,m0,AC=b(()=>{"use strict";ce();Ss();Bm();Wm=1e3,m0={"github.code":"code","github.repositories":"repositories","github.tree":"tree"}});import{z as ar}from"zod";var R0,Cl,LC=b(()=>{"use strict";Me();R0={keywords:"ANDed; keep a phrase as one item; alternatives need separate queries.",path:"Repo path prefix, not a full file path.",match:'For ghSearch operation:"code": "file" returns snippets and character matchIndices; "path" returns paths only. Operation:"repositories" uses text-field names.',extension:'File extension filter, e.g. "ts" (no dot).',filename:"Exact filename filter.",language:'GitHub language filter, e.g. "typescript".',concise:'Flat "owner/repo:path" rows.',limit:"Results per page (paginate with page)."},Cl=V(R0,{...se,keywords:Fe,owner:ar.string().optional(),repo:ar.string().optional(),extension:ar.string().optional(),filename:ar.string().optional(),path:ar.string().optional(),language:ar.string().optional(),match:ar.enum(["file","path"]).default("file"),limit:z(1,bn).default(Rn),page:He(),concise:ar.boolean().optional()})});import{z as yt}from"zod";var S0,Cs,kC=b(()=>{"use strict";Me();S0={keywords:"ANDed; keep a phrase as one item; alternatives need separate queries.",topicsToSearch:"ANDed topic filters; metadata can be sparse.",match:'For ghSearch operation:"repositories": text fields to search are name, description, and readme; readme is broader and slower. Operation:"code" uses "file" or "path".',sort:"stars, forks, updated, help-wanted-issues, best-match.",language:'Primary language filter, e.g. "rust".',stars:'Star range: ">100", "10..50".',forks:'Fork range: ">50", "10..100".',goodFirstIssues:'Good-first-issue count range, e.g. ">5".',updated:'Last push date: ">2024-01-01" or "a..b".',created:'Creation date: ">2023-01-01" or "a..b".',size:'Repo size in KB: ">1000", "50..500".',license:'SPDX id, e.g. "mit".',archived:"true = archived only; default excludes archived.",visibility:'"public" or "private" (private needs token scope).',concise:'Flat "owner/repo" rows for triage.',limit:"Results per page (paginate with page)."},Cs=V(S0,{...se,keywords:Fe,topicsToSearch:Fe,language:yt.string().optional(),owner:yt.string().optional(),stars:yt.string().optional(),forks:yt.string().optional(),goodFirstIssues:yt.string().optional(),updated:yt.string().optional(),created:yt.string().optional(),size:yt.string().optional(),match:yt.array(yt.enum(["name","description","readme"])).optional(),sort:yt.enum(["stars","forks","help-wanted-issues","updated","best-match"]).default("best-match"),limit:z(1,bn).default(Rn),page:He(),archived:yt.boolean().optional(),visibility:yt.enum(["public","private"]).optional(),license:yt.string().optional(),concise:yt.boolean().optional()})});import{z as Do}from"zod";var C0,Km,_C=b(()=>{"use strict";Me();C0={path:'Repo-relative directory; ""/"." for root.',branch:"Ref; fallback warning means default branch was used.",maxDepth:"Tree recursion depth.",page:"Advance only on hasMore.",metadataPage:"Page of the requested contributors, branches, or tags; follow next for each list independently.",include:"Optional sizes, languages, contributors, branches, or tags; each adds an API call."},Km=V(C0,{...se,owner:Do.string(),repo:Do.string(),branch:Do.string().optional(),path:Do.string().optional(),maxDepth:z(0,XR).optional(),page:He(),metadataPage:He().optional(),itemsPerPage:z(1,jR).default(UR),include:Do.array(Do.enum(["sizes","languages","contributors","branches","tags"])).optional()})});import{z as xl}from"zod";var yY,x0,w0,P0,vC,IC=b(()=>{"use strict";ir();Me();LC();kC();_C();yY=rt({name:"ghSearch",type:"Github",shortDescription:"Search GitHub code or repositories, or browse a repository tree.",instructions:Ae.ghSearch,schema:{operation:'Required: "code", "repositories", or "tree".'}}),x0=Cl.omit({limit:!0}).extend({match:Cl.shape.match.describe('For operation:"code": "file" returns snippets; "path" returns paths only.'),pageSize:Cl.shape.limit.describe("Results returned per page."),operation:xl.literal("code").describe("Search code contents or file paths.")}).strict(),w0=Cs.omit({topicsToSearch:!0,limit:!0}).extend({topics:Cs.shape.topicsToSearch.describe("Repository topics; all must match."),pageSize:Cs.shape.limit.describe("Results returned per page."),match:Cs.shape.match.describe('For operation:"repositories": fields to search: name, description, or readme.'),operation:xl.literal("repositories").describe("Discover repositories by keywords and repository filters.")}).strict(),P0=Km.omit({itemsPerPage:!0}).extend({operation:xl.literal("tree").describe("Browse the tree of a known repository."),pageSize:Km.shape.itemsPerPage.describe("Tree entries returned per page.")}).strict(),vC=xl.discriminatedUnion("operation",[x0,w0,P0])});function Ym(e){return typeof e=="string"&&e.trim().length>0}function Xm(e){return Array.isArray(e)&&e.some(Ym)}function T0(e){return e.operation==="code"?Xm(e.keywords)||["owner","path","extension","filename","language"].some(t=>Ym(e[t])):e.operation==="repositories"?Xm(e.keywords)||Xm(e.topics)||["owner","language","stars","forks","goodFirstIssues","updated","created","size","visibility","license"].some(t=>Ym(e[t]))||typeof e.archived=="boolean":!0}var xs,OC,wl=b(()=>{"use strict";IC();Pt();xs=vC.superRefine((e,t)=>{T0(e)||t.addIssue({code:"custom",path:["operation"],message:`${e.operation} needs at least one search term or scope filter`})}),OC=ge(xs,{maxQueries:5})});var FC={};Pn(FC,{executeGitHubSearch:()=>E0});async function E0(e){let t=ot(e.authInfo);return Ce(e.queries,n=>zt({toolName:Dt,query:n,contextMessage:"ghSearch execution failed",execute:async()=>{let r=xs.safeParse(n);if(!r.success)throw r.error;return A0(r.data,e,t)}}),{toolName:Dt,finalize:TC()},e)}async function A0(e,t,n){let{operation:r,...o}=e;switch(r){case"code":{let{pageSize:i,...s}=o,a={...s,limit:i};return pC(a,{...t,queries:[a]},n)}case"repositories":{let{topics:i,pageSize:s,...a}=o,c={...a,topicsToSearch:i,limit:s};return RC(c,{...t,queries:[c]},n)}case"tree":{let{pageSize:i,...s}=o;return wC({...s,itemsPerPage:i},{...t,queries:[{...s,itemsPerPage:i}]},n)}default:throw new Error("Unsupported ghSearch operation")}}var Jm=b(()=>{"use strict";ht();qt();dC();SC();PC();or();he();AC();wl()});function L0(e){let t=e?.patches;return t?.mode?{mode:t.mode,...t.files?{files:t.files}:{},...t.ranges?{ranges:t.ranges}:{}}:{mode:"none"}}function k0(e){let t=e?.comments;return t?{discussion:t.discussion===!0,reviewInline:t.reviewInline===!0,includeBots:t.includeBots??!1,...t.file?{file:t.file}:{}}:!1}function _0(e){let t=e?.commits;return t?{list:!0,includeFiles:t.includeFiles??!1}:!1}function MC(e){let{content:t}=e,n=L0(t),r=k0(t),o=_0(t);return{body:t?.body??!1,changedFiles:(t?.changedFiles??!1)||n.mode!=="none",patches:n,comments:r,reviews:t?.reviews??!1,commits:o}}function vY(e){return!!(e.body||e.changedFiles||e.patches.mode!=="none"||e.comments||e.reviews||e.commits)}var Zm=b(()=>{"use strict"});function cr(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function qm(e,t){return cr(Object.fromEntries(t.map(n=>[n,e[n]])))}function ws(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function zr(e){return e===!0?!0:void 0}function v0(e){if(!Array.isArray(e))return;let t=e.flatMap(n=>{if(!ws(n)||typeof n.file!="string")return[];let r=Array.isArray(n.additions)?n.additions.filter(i=>typeof i=="number"):void 0,o=Array.isArray(n.deletions)?n.deletions.filter(i=>typeof i=="number"):void 0;return[cr({file:n.file,...r?.length?{additions:r}:{},...o?.length?{deletions:o}:{}})]});return t.length>0?t:void 0}function Ho(e){if(!ws(e))return;let t=ws(e.comments)?cr({discussion:zr(e.comments.discussion),reviewInline:zr(e.comments.reviewInline),includeBots:zr(e.comments.includeBots),file:typeof e.comments.file=="string"?e.comments.file:void 0}):void 0,n=ws(e.commits)?cr({includeFiles:zr(e.commits.includeFiles)}):void 0,r=ws(e.patches)?cr({mode:e.patches.mode==="all"||e.patches.mode==="selected"?e.patches.mode:void 0,files:Array.isArray(e.patches.files)?e.patches.files.filter(i=>typeof i=="string"):void 0,ranges:v0(e.patches.ranges)}):void 0,o=cr({body:zr(e.body),changedFiles:zr(e.changedFiles),...r&&Object.keys(r).length>0?{patches:r}:{},...t&&Object.keys(t).length>0?{comments:t}:{},reviews:zr(e.reviews),...n?{commits:n}:{}});return Object.keys(o).length>0?o:void 0}function NC(e,t,n={}){let r={...e,...n},o=Ho(e.content),i=Ho(n.content),s=o||i?{...i??{},...o??{}}:void 0;return cr({operation:"pullRequest",owner:e.owner,repo:e.repo,number:t,...qm(r,["pageSize","filePage","commentPage","commitPage","reviewPage","collectionPages","charOffset","commentBodyOffset","charLength","matchString","minify"]),...s?{content:s}:{}})}function DC(e,t={}){let n={...e,...t};return cr({operation:"commit",...qm(n,["owner","repo","ref","includeDiff","fileBatch","path","filePage","pageSize","charOffset","charLength"])})}function ef(e,t,n){return{operation:t,...qm(e,I0[t]),page:n}}var I0,Ps=b(()=>{"use strict";I0={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 Go(e,t){let n=e.filesPagination,r=e.pagination,i=(Array.isArray(e.files)?e.files:[]).find(l=>typeof l?.patchPagination?.nextCharOffset=="number"),s={},a=t.operation==="commit"?DC(t,typeof e.sha=="string"?{ref:e.sha}:{}):t.operation==="compare"&&typeof e.base=="string"&&typeof e.head=="string"?{...t,base:e.base,head:e.head}:t,c=(l,d)=>({tool:Ee,query:Object.fromEntries(Object.entries({...a,...l}).filter(([,u])=>u!==void 0)),why:d,confidence:"exact"});return typeof r?.nextPage=="number"&&(s.nextPage=c({page:r.nextPage},"Continue the comparison commit list. Changed files are returned on page 1.")),typeof n?.nextFilePage=="number"&&(s.nextFilePage=c({filePage:n.nextFilePage,...n.nextFileBatch?{fileBatch:n.nextFileBatch}:{},...t.operation==="commit"?{includeDiff:!0}:{},charOffset:void 0},"Continue the changed-file list from the beginning of each new patch.")),typeof i?.patchPagination?.nextCharOffset=="number"&&(s.continuePatch=c({charOffset:i.patchPagination.nextCharOffset},"Continue the current patch window.")),Object.keys(s).length>0?{...e,next:s}:e}var Pl=b(()=>{"use strict";he();Ps()});function Ts(e,t){return t.minify!=="standard"||t.matchString?e:U.minifyMarkdownCore(e)}function HC(e,t){return t.minify!=="standard"||t.matchString?e:lR(e)}var Tl=b(()=>{"use strict";We();Lc()});function Es(e){let t=e.matchString;if(typeof t!="string")return;let n=t.trim().toLowerCase();return n.length>0?n:void 0}function Bo(e,t){return typeof e=="string"&&e.toLowerCase().includes(t)}function O0(e,t=1,n=20){let r=Math.min(Math.max(1,n),100),o=e.length,i=Math.max(1,Math.ceil(o/r)),s=Math.min(Math.max(1,t),i),a=(s-1)*r,c=Math.min(a+r,o);return{items:e.slice(a,c),pagination:{currentPage:s,totalPages:i,itemsPerPage:r,totalItems:o,hasMore:s<i,...s<i&&s<1e3?{nextPage:s+1}:{},...s<i&&s>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}}function zo(e,t,n,r,o=1){let i=O0(e,o,t.pageSize),s=n.collectionStates;if(!s)return i;let a=r==="comments"?["discussion","inline"]:[r];if(i.pagination.countScope="providerBatch",i.pagination.collectionPages=t.collectionPages,!i.pagination.hasMore&&a.some(c=>s[c]?.hasMore)){i.pagination.hasMore=!0,i.pagination.nextPage=1,i.pagination.nextCollectionPages={...t.collectionPages};for(let c of a){let l=s[c];i.pagination.nextCollectionPages[c]=l?.hasMore?l.page+1:0}}return i}function jr(e,t=0,n=12e3){if(typeof e!="string")return;let r=e.length,o=Math.min(Math.max(0,t),r),i=Math.min(Math.max(1,n),5e4),s=Math.min(o+i,r),a=s<r;return{content:e.slice(o,s),pagination:{charOffset:o,charLength:s-o,totalChars:r,hasMore:a,...a?{nextCharOffset:s}:{}}}}function El(e,t=500){if(!(typeof e!="string"||e.length===0))return e.length<=t?e:`${e.slice(0,t-3)}...`}function GC(e,t){return{operation:"pullRequest",owner:e.owner,repo:e.repo,number:t}}function As(e,t,n){return NC(e,t,n)}function Al(e,t,n,r,o={}){if(!(!r.hasMore||r.nextCharOffset===void 0))return As(e,t,{content:n,...o,charOffset:r.nextCharOffset,charLength:e.charLength})}function Ls(e,t,n,r,o){if(!(!o.hasMore||o.nextPage===void 0))return As(e,t,{content:n,[r]:o.nextPage,...o.nextCollectionPages?{collectionPages:o.nextCollectionPages}:{},...r==="commentPage"?{commentBodyOffset:void 0}:{},...r==="filePage"||r==="reviewPage"?{charOffset:void 0}:{},pageSize:e.pageSize})}function jo(e){return typeof e=="object"&&e!==null}function ks(e){if(jo(e)&&!(typeof e.currentPage!="number"||typeof e.totalPages!="number"||typeof e.itemsPerPage!="number"||typeof e.totalItems!="number"||typeof e.hasMore!="boolean"))return e}function Ll(e){if(jo(e)&&!(typeof e.charOffset!="number"||typeof e.charLength!="number"||typeof e.totalChars!="number"||typeof e.hasMore!="boolean"))return e}var _s=b(()=>{"use strict";ce();Ps()});function F0(e,t){return e.filter(n=>{let r=n.commentType;return t.file&&n.path!==t.file?!1:r==="review_inline"?t.reviewInline:t.discussion})}function BC(e,t,n){if(!n.comments)return{};let r=Array.isArray(e.comments)?e.comments:[],o=F0(r,n.comments),i=Es(t),s=i?o.filter(l=>Bo(l.body,i)):o,{items:a,pagination:c}=zo(s,t,e,"comments",t.commentPage??t.page??1);return{comments:a.map(l=>{let d=jr(Ts(typeof l.body=="string"?l.body:"",t),t.commentBodyOffset??0,t.charLength??12e3);return{id:l.id,author:l.author,commentType:l.commentType??"discussion",path:l.path,line:l.line,...l.in_reply_to_id!=null?{in_reply_to_id:l.in_reply_to_id}:{},...d?{body:d.content,bodyPagination:d.pagination}:{bodyPreview:El(typeof l.body=="string"?l.body:"")},createdAt:l.createdAt,updatedAt:l.updatedAt}}),contentPagination:{comments:c}}}function zC(e,t,n){if(!n.reviews)return{};let r=Array.isArray(e.reviews)?e.reviews:[],o=Es(t),i=o?r.filter(c=>Bo(c.body,o)):r,{items:s,pagination:a}=zo(i,t,e,"reviews",t.reviewPage??1);return{contentPagination:{reviews:a},reviews:s.map(c=>{let l=typeof c.body=="string"?c.body:"",d=jr(l?Ts(l,t):void 0,t.charOffset??0,t.charLength??12e3);return{id:c.id,user:c.user,state:c.state,...d?{body:d.content,bodyPagination:d.pagination}:{},submittedAt:c.submittedAt??c.submitted_at,commitId:c.commitId??c.commit_id}})}}function jC(e,t,n){if(!n.commits)return{};let r=Array.isArray(e.commits)?e.commits:[],{items:o,pagination:i}=zo(r,t,e,"commits",t.commitPage??t.page??1);return{commits:o.map(s=>({sha:s.sha,message:s.message,author:s.author,date:s.date,...n.commits&&n.commits.includeFiles&&Array.isArray(s.files)?M0(s,t):{}})),contentPagination:{commits:i}}}function M0(e,t){let n=In(e.files,{itemsPerPage:t.pageSize,charLength:t.charLength??12e3}),r=e.filesCollectionState,o={...n.filesPagination,countScope:"providerBatch",...!n.filesPagination.hasMore&&r?.hasMore?{hasMore:!0,nextFilePage:1,nextFileBatch:r.page+1}:{}};return Go({files:n.files,filesPagination:o},{operation:"commit",owner:t.owner,repo:t.repo,ref:e.sha,includeDiff:!0,pageSize:t.pageSize,charLength:t.charLength})}var UC=b(()=>{"use strict";Ao();Pl();Tl();_s()});function kl(e){return String(e.path??e.filename??"")}function N0(e,t){return{path:kl(e),status:String(e.status??""),additions:Number(e.additions??0),deletions:Number(e.deletions??0),...t?Bd(e.patch):{},...t&&typeof e.patch=="string"?{patch:e.patch}:{}}}function $C(e,t,n){let r=Array.isArray(e.fileChanges)?e.fileChanges:[],o=n.patches.files,i=o&&o.length>0?r.filter(p=>o.includes(kl(p))):r,s=Es(t),a=s?i.filter(p=>Bo(kl(p),s)||Bo(p.patch,s)):i,{items:c,pagination:l}=zo(a,t,e,"changedFiles",t.filePage??t.page??1),d=n.patches.mode!=="none",u=c.map(p=>{let f=N0(p,d);if(!d||typeof p.patch!="string")return f;let m=jr(HC(p.patch,t),t.charOffset??0,t.charLength??12e3);return{...f,patch:m?.content??"",...m?{patchPagination:m.pagination}:{}}});return n.changedFiles||n.patches.mode!=="none"?{changedFiles:u,contentPagination:{changedFiles:l}}:r.length===0?{}:{filePathsPreview:r.slice(0,20).map(kl).filter(Boolean),contentPagination:{filePaths:{totalFiles:r.length,filesPerPage:20,hasMore:r.length>20,...r.length>20?{nextFilePage:2}:{}}}}}var QC=b(()=>{"use strict";Ao();Tl();_s()});function lr(e,t){return{tool:"ghGetHistoryItem",query:{...e,content:t},confidence:"exact"}}function WC(e,t,n,r){let o=GC(e,t);return{...n.body?{}:{getBody:lr(o,{body:!0})},...n.changedFiles?{}:{getChangedFiles:lr(o,{changedFiles:!0})},...n.patches.mode!=="none"?{}:{...r?{getSelectedPatches:lr(o,{patches:{mode:"selected",files:[r]}})}:{},getAllPatches:lr(o,{patches:{mode:"all"}})},...n.comments?{}:{getComments:lr(o,{comments:{discussion:!0,reviewInline:!0}})},...n.reviews?{}:{getReviews:lr(o,{reviews:!0})},...n.commits?{}:{getCommits:lr(o,{commits:{}})},fullReview:lr(o,{body:!0,changedFiles:!0,patches:{mode:"all"},comments:{discussion:!0,reviewInline:!0},reviews:!0,commits:{}})}}var VC=b(()=>{"use strict";_s()});function D0(e){return{...e.changedFiles?{changedFiles:!0}:{},...e.patches.mode!=="none"?{patches:e.patches}:{}}}function H0(e){let t=e.changedFiles;if(Array.isArray(t))for(let n of t){if(!jo(n))continue;let r=Ll(n.patchPagination);if(r?.hasMore)return r}}function KC(e,t="comments"){let n=e[t];if(Array.isArray(n))for(let r of n){if(!jo(r))continue;let o=Ll(r.bodyPagination);if(o?.hasMore)return o}}function G0(e,t,n,r,o){let i={},s=Ll(t.body),a=ks(t.changedFiles),c=ks(t.comments),l=ks(t.reviews),d=ks(t.commits),u=H0(e),p=KC(e),f=KC(e,"reviews"),m=D0(r);if(f&&r.reviews&&(i.reviewBody={...f,nextQuery:Al(n,o,{reviews:!0},f)}),l&&r.reviews&&(i.reviews={...l,nextQuery:Ls(n,o,{reviews:!0},"reviewPage",l)}),s&&(i.body={...s,nextQuery:Al(n,o,{body:!0},s)}),a){let y=Ls(n,o,m,"filePage",a);i.changedFiles={...a,...y?{nextQuery:y}:{}}}if(c&&r.comments){let y=Ls(n,o,{comments:r.comments},"commentPage",c);i.comments={...c,...y?{nextQuery:y}:{}}}if(p?.hasMore&&p.nextCharOffset!==void 0&&r.comments&&(i.commentBody={...p,nextQuery:As(n,o,{content:{comments:r.comments},...n.commentPage!==void 0?{commentPage:n.commentPage}:{},commentBodyOffset:p.nextCharOffset,charLength:n.charLength})}),d&&r.commits){let y=Ls(n,o,{commits:r.commits},"commitPage",d);i.commits={...d,...y?{nextQuery:y}:{}}}u&&r.patches.mode!=="none"&&(i.patches={...u,nextQuery:Al(n,o,{patches:r.patches},u,{filePage:n.filePage??n.page})});let h=t.filePaths;return jo(h)&&(i.filePaths={...h,hasMore:h.hasMore===!0,nextQuery:h.hasMore===!0?As(n,o,{content:{changedFiles:!0},filePage:h.nextFilePage}):void 0}),Object.keys(i).length>0?i:void 0}function XC(e,t,n,r,o){let i=Number(e.number),s=typeof e.body=="string"?e.body:void 0,a=s&&r?Ts(s,t):s,c=n.body?jr(a,t.charOffset??0,t.charLength??12e3):void 0,l=n.body||n.changedFiles||n.patches.mode!=="none"||!!n.comments||n.reviews||!!n.commits,d=o!==void 0?o:l,p=t.prNumber!==void 0||t.verbose===!0,{contentPagination:f={},...m}=$C(e,t,n),{contentPagination:h={},...y}=BC(e,t,n),{contentPagination:g={},...R}=zC(e,t,n),{contentPagination:S={},...C}=jC(e,t,n),w=Array.isArray(m.changedFiles)?m.changedFiles.find(P=>P.path)?.path:void 0,k={...{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}:{},...p?{...e.sourceBranch?{sourceBranch:e.sourceBranch}:{},...e.sourceSha?{sourceSha:e.sourceSha}:{}}:{},createdAt:e.createdAt,...p?{updatedAt:e.updatedAt}:{},...p||!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}:{},...p&&!c?{bodyPreview:El(typeof e.body=="string"?e.body:void 0)}:{},...d?{next:WC(t,i,n,w)}:{}},...Array.isArray(e.providerLimits)&&e.providerLimits.length?{providerLimits:e.providerLimits}:{},...n.body?c?{body:c.content}:{bodyEmpty:!0}:{},...m,...y,...R,...C,...e.reviewSummary?{reviewSummary:e.reviewSummary}:{},...Array.isArray(e.sanitizationWarnings)&&e.sanitizationWarnings.length>0?{sanitizationWarnings:e.sanitizationWarnings}:{}},F=G0(k,{...c?{body:c.pagination}:{},...f,...h,...S,...g},t,n,i);return F&&(k.contentPagination=F),k}var tf=b(()=>{"use strict";UC();QC();VC();Tl();_s()});function _l(e){return e.startsWith('"')?e:/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}var nf=b(()=>{"use strict"});function Ut(e){if(typeof e=="string")return e;if(Array.isArray(e)&&typeof e[0]=="string")return e[0]}function rf(e){let t=(e.keywordsToSearch??[]).filter(o=>o.trim()).map(_l),n=e.query?.trim()??"";return[...t,...n?[n]:[]].join(" ")||void 0}function of(e,t,n){let r=n??12e3;if(n===void 0&&!t&&e.length<=r)return{text:e};let o=e.length,i=Math.min(Math.max(0,t??0),o),s=Math.max(1,r),a=Math.min(i+s,o),c=a<o;return{text:e.slice(i,a),pagination:{charOffset:i,charLength:a-i,totalChars:o,hasMore:c,...c?{nextCharOffset:a}:{}}}}function vl(e){return e.pull_request!=null}function B0(e){return e?e.map(t=>typeof t=="string"?t:t.name??"").filter(Boolean):[]}function Il(e){return{number:e.number,title:e.title??"",state:e.state??"open",author:e.user?.login??"unknown",labels:B0(e.labels),createdAt:e.created_at??"",updatedAt:e.updated_at??"",...e.closed_at?{closedAt:e.closed_at}:{}}}function Uo(e,t=[]){return{error:e,type:"http",...t.length>0?{hints:t}:{}}}function YC(e,t,n="anon"){return q("gh-api-issues",{owner:e.owner,repo:e.repo,issueNumber:e.issueNumber,query:rf(e),state:e.state,author:e.author,assignee:e.assignee,mentions:e.mentions,commenter:e.commenter,label:e.label,milestone:e.milestone,created:e.created,updated:e.updated,closed:e.closed,comments:e.comments,reactions:e.reactions,locked:e.locked,visibility:e.visibility,archived:e.archived,match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,charOffset:e.charOffset,charLength:e.charLength,commentPage:e.commentPage,itemsPerPage:e.itemsPerPage,concise:e.concise,auth:n},t)}var sf=b(()=>{"use strict";nf();Oe()});import{ContentSanitizer as JC}from"@octocodeai/octocode-engine/contentSanitizer";async function ZC(e,t){let n=Ut(e.owner),r=Ut(e.repo),o=e.issueNumber;if(!n||!r||o==null)return Uo("owner, repo, and issueNumber are required for issue detail mode.");let i=await Y(t),s=await re(t),a={owner:n,repo:r,issue_number:o},c=await oe(q("gh-issue-detail",{...a,auth:s}),()=>i.rest.issues.get(a),{cacheRole:"helper"});if(vl(c.data))return Uo(`Issue #${o} is a pull request; use ghGetHistoryItem operation:"pullRequest" with number:${o}.`,[`Retry with ghGetHistoryItem { operation: "pullRequest", owner: "${n}", repo: "${r}", number: ${o} }.`]);let l=e.content?e.content.body===!0:!0,d=e.content?.comments?.discussion===!0,u=e.content?.comments?.includeBots===!0,p=Il(c.data),f={};if(l){let m=JC.sanitizeContent(c.data.body??"").content,h=of(m,e.charOffset,e.charLength);p.body=h.text,h.pagination&&(f.body=h.pagination)}if(d){let m=Math.max(1,e.commentPage??1),h=Math.max(1,e.itemsPerPage??30),y={...a,per_page:h,page:m},g=await oe(q("gh-issue-comments-page",{...y,auth:s}),()=>i.rest.issues.listComments(y),{cacheRole:"helper"}),R=u?g.data:g.data.filter(w=>!Or(w.user?.login??""));p.comments=R.map(w=>{let T=of(JC.sanitizeContent(w.body??"").content,e.charOffset,e.charLength);return{id:String(w.id),user:w.user?.login??"unknown",body:T.text,...T.pagination?{bodyPagination:T.pagination}:{},createdAt:w.created_at??"",updatedAt:w.updated_at??"",commentType:"discussion"}});let S=p.comments.find(w=>w.bodyPagination?.hasMore)?.bodyPagination;S&&(f.commentBody={...S});let C=Mc(g.headers.link);f.comments={currentPage:m,itemsPerPage:h,totalComments:p.comments.length,hasMore:C,...C&&m<1e3?{nextCommentPage:m+1}:{},...C&&m>=1e3?{terminalLimit:!0,continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}return Object.keys(f).length>0&&(p.contentPagination=f),{data:{type:"issues",owner:n,repo:r,issues:[p],totalCount:1},status:200}}async function qC(e,t,n){let r=Ut(t.owner)??"",o=Ut(t.repo)??"",i=await Y(n),s=[],a=e;if(r&&o){let g=await Sl(i,r,o,n);g.renamed&&(s.push(`Repository ${r}/${o} was renamed to ${g.owner}/${g.repo} \u2014 GitHub search does not follow renames, so the canonical name was searched instead.`),a={...e,owner:g.owner,repo:g.repo})}let c=Ud(a),l=Math.min(t.limit??30,100),d=t.page??1,u=t.sort&&t.sort!=="best-match"?t.sort:void 0,p=await i.rest.search.issuesAndPullRequests({q:c,sort:u,order:t.order||"desc",per_page:l,page:d}),f=vb(p.headers);f&&s.push(f);let m=(p.data.items??[]).filter(g=>!vl(g)).map(g=>Il(g)),h=p.data.total_count??m.length,y=d*l<Math.min(h,1e3);return{data:{type:"issues",owner:r,repo:o,issues:t.concise?m.map(g=>`#${g.number} ${g.title}`):m,totalCount:h,effectiveQuery:c,...s.length?{warnings:s}:{},...p.data.incomplete_results?{incompleteResults:!0}:{},pagination:{currentPage:d,perPage:l,hasMore:y,...y?{nextPage:d+1}:{},...h>1e3?{totalMatchesCapped:!0}:{}}},status:200}}async function ex(e,t){let n=Ut(e.owner),r=Ut(e.repo);if(!n||!r)return Uo("owner and repo are required for issues mode.");let o=await Y(t),i=Math.min(e.limit??30,100),s=e.page??1,a=e.state==="open"||e.state==="closed"?e.state:"all",c=await o.rest.issues.listForRepo({owner:n,repo:r,state:a,per_page:i,page:s,...e.assignee?{assignee:e.assignee}:{},...e.author?{creator:e.author}:{},...e.mentions?{mentioned:e.mentions}:{},...e.milestone?{milestone:e.milestone}:{},...e.sort==="created"||e.sort==="updated"||e.sort==="comments"?{sort:e.sort}:{},...e.order?{direction:e.order}:{},...typeof e.label=="string"?{labels:e.label}:Array.isArray(e.label)?{labels:e.label.join(",")}:{}}),l=c.data.filter(f=>!vl(f)).map(f=>Il(f)),d=Mc(c.headers.link),u=!d&&s===1,p=[];return l.length===0&&d&&p.push("This page contained only pull requests (the GitHub issues endpoint returns both; PRs are filtered out) \u2014 follow pagination.nextPage, later pages may contain issues."),{data:{type:"issues",owner:n,repo:r,issues:e.concise?l.map(f=>`#${f.number} ${f.title}`):l,...u?{totalCount:l.length}:{},...p.length?{warnings:p}:{},pagination:{currentPage:s,perPage:i,hasMore:d,...d?{nextPage:s+1}:{}}},status:200}}var tx=b(()=>{"use strict";de();Ve();Oe();zm();tr();Oc();Nc();Dc();ce();sf()});async function nx(e,t,n){let r=await re(t),o=YC(e,n,r);return oe(o,()=>z0(e,t),{shouldCache:i=>"data"in i&&!("error"in i)&&!i.data?.incompleteResults})}async function z0(e,t){try{if(e.state==="merged"){let r={owner:Ut(e.owner)??"",repo:Ut(e.repo)??"",state:"merged"};return Uo('state:"merged" is not valid for issues \u2014 use "open" or "closed".',[`Use ghSearchHistory with ${JSON.stringify({operation:"pullRequests",...r})}.`])}if(e.issueNumber!=null)return await ZC(e,t);let n={...e,query:rf(e)};return $d(n)?await qC(n,e,t):await ex(e,t)}catch(n){return hn(n)?{data:{type:"issues",owner:Ut(e.owner)??"",repo:Ut(e.repo)??"",issues:[],totalCount:0,pagination:{currentPage:e.page??1,perPage:Math.min(e.limit??30,100),hasMore:!1}},status:200}:ne(n)}}var rx=b(()=>{"use strict";de();tt();Dc();Ve();ce();sf();tx()});async function vs(e,t,n,r=fe){let o=t;if(!o.owner||!o.repo)return D("owner and repo are required for issues mode.",e);let i=o.issueNumber??o.prNumber,s=await nx({owner:o.owner,repo:o.repo,...i!=null?{issueNumber:i}:{},keywordsToSearch:o.keywords,query:o.query,state:o.state,author:o.author,assignee:o.assignee,mentions:o.mentions,commenter:o.commenter,label:o.label,milestone:o.milestone,created:o.created,updated:o.updated,closed:o.closed,comments:o.comments,reactions:o.reactions,locked:o.locked,visibility:o.visibility,match:o.match,archived:o.archived,sort:o.sort,order:o.order,limit:o.pageSize,page:Number(o.page)||1,concise:o.concise,content:o.content,charOffset:o.charOffset,charLength:o.charLength,commentPage:o.commentPage,itemsPerPage:o.pageSize},n);if(vt(s))return D(s,e,{toolName:r});if(i!=null&&Array.isArray(s.data.issues)){let p=s.data.issues[0];if(p&&typeof p=="object"&&p.contentPagination){let f=p.contentPagination,m={operation:"issue",owner:o.owner,repo:o.repo,number:i,content:Ho(o.content),...o.pageSize===void 0?{}:{pageSize:o.pageSize},...o.charOffset===void 0?{}:{charOffset:o.charOffset},...o.commentPage===void 0?{}:{commentPage:o.commentPage},...o.charLength===void 0?{}:{charLength:o.charLength}},h=f.body;typeof h?.nextCharOffset=="number"&&(h.nextQuery={...m,content:{body:!0},charOffset:h.nextCharOffset});let y=f.commentBody;typeof y?.nextCharOffset=="number"&&(y.nextQuery={...m,content:Ho({comments:o.content?.comments}),charOffset:y.nextCharOffset});let g=f.comments;typeof g?.nextCommentPage=="number"&&(g.nextQuery={...m,content:Ho({comments:o.content?.comments}),commentPage:g.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}:{},l=s.data.issues,d=(()=>{if(!Array.isArray(l)||l.length===0)return;let p=l[0];if(typeof p=="number")return p;if(typeof p=="string"){let f=p.match(/^#(\d+)\b/);return f?Number(f[1]):void 0}if(p&&typeof p=="object"&&typeof p.number=="number")return p.number})(),u={};return i==null&&d!=null&&(u.readIssue={tool:"ghGetHistoryItem",query:{operation:"issue",owner:o.owner,repo:o.repo,number:d,content:{body:!0}},why:`Read issue #${d} body/discussion from this list`,confidence:"low"}),u.searchRepositoryCode={tool:"ghSearch",query:{operation:"code",owner:o.owner,repo:o.repo},why:"Search code in this repository for symbols mentioned in the issue(s)",confidence:"low"},Se(e,{...s.data,...c,next:u},a,r,{rawResponse:s.rawResponseChars})}var af=b(()=>{"use strict";he();Be();rx();Mr();Ps()});async function ox(e,t){try{let{owner:n,repo:r,page:o,perPage:i}=e;if(!/^[\w.-]+$/.test(n)||!/^[\w.-]+$/.test(r))return{error:"Commit search requires one repository owner and name.",type:"http",status:400};if((o-1)*i>=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?Eo(e.since):void 0,a=e.until?Eo(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(R=>JSON.stringify(R)),`repo:${n}/${r}`];for(let R of["author","committer"]){let S=e[R];S&&c.push(`${R}${S.includes("@")?"-email":""}:${JSON.stringify(S)}`)}if(s?.value||a?.value){let R=s?.value&&a?.value?`${s.value}..${a.value}`:s?.value?`>=${s.value}`:`<=${a.value}`;c.push(`committer-date:${R}`)}let l=await Y(t),d={q:c.join(" "),page:o,per_page:i,sort:"committer-date",order:"desc"},u=await re(t),p=await oe(q("gh-commit-search",{...d,auth:u}),()=>l.rest.search.commits(d),{shouldCache:R=>!R.data.incomplete_results}),{items:f,total_count:m,incomplete_results:h}=p.data,y=f.map(R=>{let S=R.commit.message.split(`
|
|
34
|
+
`)[0]??"",C=R.commit.message.slice(S.length).trim();return{sha:R.sha,url:R.html_url,messageHeadline:S,...C?{message:`${S}
|
|
35
|
+
${C.slice(0,500)}`}:{},...C.length>500?{messageTruncated:!0}:{},date:R.commit.committer?.date??R.commit.author?.date??"",author:{name:R.commit.author?.name??"unknown",email:R.commit.author?.email??"",...R.author?.login?{login:R.author.login}:{}}}}),g=o*i<Math.min(m,1e3);return{status:200,rawResponseChars:j(p.data),data:{type:"commits",owner:n,repo:r,scope:"defaultBranch",commits:y,totalCount:m,incompleteResults:h,pagination:{page:o,perPage:i,hasMore:g,...g?{nextPage:o+1}:{},totalMatchesCapped:m>1e3}}}}catch(n){return ne(n)}}var ix=b(()=>{"use strict";de();Ve();Oe();Gd();tt();ue()});async function j0(e,t,n){let r=null;if(e.permalink_url)try{r=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(!r)return{base:t.base,head:t.head};let o=[...new Set([e.base_commit?.sha,...(e.commits??[]).map(c=>c.sha),t.base.split(":").at(-1),t.head.split(":").at(-1)].filter(c=>typeof c=="string"&&/^[a-f\d]{40}$/i.test(c)).map(c=>c.toLowerCase()))],i=async c=>{let l=c.split(":").at(-1).toLowerCase(),d=c.slice(0,-l.length);if(l.length===40)return d+l;let u=o.filter(f=>f.startsWith(l)),p=u.length===1?u[0]:(await rr(t.owner,t.repo,l,n)).commitSha;return d+p},[s,a]=await Promise.all([i(r[1]),i(r[2])]);return{base:s,head:a}}async function sx(e,t){try{let n=await Y(t),r=e.page??1,o=Math.min(100,Math.max(1,e.itemsPerPage??30)),i={owner:e.owner,repo:e.repo,basehead:`${e.base}...${e.head}`,per_page:o,page:r},s=await re(t),a=q("gh-compare-page",{...i,auth:s}),c=await oe(a,()=>n.rest.repos.compareCommitsWithBasehead(i)),l=c.data,d=await j0(l,e,t),u=(l.commits??[]).map(R=>({sha:R.sha,messageHeadline:(R.commit.message??"").split(`
|
|
36
|
+
`)[0]??"",author:R.commit.author?.name??R.author?.login??"unknown",date:R.commit.author?.date??""})),p=l.files??[],f=c.headers?.link?.includes('rel="next"')===!0||r*o<l.total_commits,m=p.length>=300,h=f&&r>=1e3,y=e.path?p.filter(R=>R.filename===e.path):p,g;if(e.includeDiff&&r===1){let R=In(y,{filePage:e.filePage,itemsPerPage:e.itemsPerPage,charOffset:e.charOffset,charLength:e.charLength});g={files:R.files,filesPagination:R.filesPagination}}else g=r===1?{changedFiles:y.length}:{};return{data:{type:"compare",owner:e.owner,repo:e.repo,...d,status:l.status,aheadBy:l.ahead_by,behindBy:l.behind_by,totalCommits:l.total_commits,commits:u,pagination:{currentPage:r,perPage:o,hasMore:f,...f&&!h?{nextPage:r+1}:{}},...f||m?{isPartial:!0}:{},...m||h?{terminalLimit:!0,partialReasons:[...m?["providerFileLimit"]:[],...h?["schemaPageLimit"]:[]],providerLimit:{reason:m?"providerFileLimit":"schemaPageLimit",...m?{maxFiles:300}:{},...h?{maxPage:1e3}:{}}}:{},...g},status:200}}catch(n){return ne(n)}}var ax=b(()=>{"use strict";de();tt();Ao();ce();Oe();Ve();Zi()});async function Is(e,t,n,r=fe){let o=t;if(!o.owner||!o.repo)return D("owner and repo are required for commits mode.",e);if(o.keywords?.length){if(o.path!==void 0||o.branch!==void 0||o.base||o.head||o.includeDiff)return D("Commit-message keywords cannot be combined with path, branch, compare, or diffs; search covers the default branch.",e);let f=await ox({owner:o.owner,repo:o.repo,keywords:o.keywords,author:o.author,committer:o.committer,since:o.since,until:o.until,page:o.page??1,perPage:o.pageSize??30},n);return vt(f)?D(f,e,{toolName:r}):Se(e,f.data,f.data.commits.length>0,r,{rawResponse:f.rawResponseChars})}if(o.base&&o.head){let f=await sx({owner:o.owner,repo:o.repo,base:o.base,head:o.head,page:o.page,includeDiff:!!o.includeDiff,path:o.path,filePage:typeof o.filePage=="number"?o.filePage:void 0,itemsPerPage:o.pageSize,charOffset:typeof o.charOffset=="number"?o.charOffset:void 0,charLength:typeof o.charLength=="number"?o.charLength:void 0},n);if(vt(f))return D(f,e,{toolName:r});let m=f.data,h={operation:"compare",owner:o.owner,repo:o.repo,base:o.base,head:o.head,...o.page===void 0?{}:{page:o.page},...o.includeDiff?{includeDiff:!0}:{},...o.path?{path:o.path}:{},...o.filePage===void 0?{}:{filePage:o.filePage},...o.pageSize===void 0?{}:{pageSize:o.pageSize},...o.charOffset===void 0?{}:{charOffset:o.charOffset},...o.charLength===void 0?{}:{charLength:o.charLength}};return Se(e,Go(m,h),f.data.totalCommits>0||f.data.status!=="identical",r)}let i=o.path,s=i&&!i.endsWith("/")?"file":"repo";if(s==="file"&&!i)return D("path is required when querying a specific file in commits mode.",e);let a=await CR({type:s,owner:o.owner,repo:o.repo,path:i,branch:o.branch,since:o.since,until:o.until,author:o.author,committer:o.committer,page:Number(o.page)||1,perPage:Number(o.pageSize)||30,filePage:typeof o.filePage=="number"?o.filePage:void 0,itemsPerPage:typeof o.pageSize=="number"?o.pageSize:void 0,includeDiff:!!o.includeDiff,charOffset:typeof o.charOffset=="number"?o.charOffset:void 0,charLength:typeof o.charLength=="number"?o.charLength:void 0},n);if(vt(a))return D(a,e,{toolName:r});let{commits:c}=a.data,l=c.length>0,d=c.map(f=>f.messageHeadline?.match(/\(#(\d+)\)/)?.[1]).find(Boolean),u=!l&&a.data.warnings?.length?{hints:a.data.warnings}:{},p={...a.data,...u,...d?{next:{prDetail:{tool:"ghGetHistoryItem",query:{operation:"pullRequest",owner:o.owner,repo:o.repo,number:Number(d)},why:`Open PR #${d} referenced by the first commit for review context`,confidence:"low"}}}:{}};return Se(e,p,l,r,{rawResponse:a.rawResponseChars})}var cf=b(()=>{"use strict";he();Be();Nc();ix();ax();Pl();Mr()});function cx(e){let t=(e.keywords??[]).filter(o=>o.trim()).map(_l),n=e.query?.trim()??"",r=[...t,...n?[n]:[]].join(" ")||void 0;return{projectId:gl(e.owner,e.repo),owner:e.owner,query:r,number:e.prNumber,state:e.state,author:e.author,assignee:e.assignee,commenter:e.commenter,mentions:e.mentions,reviewRequested:e["review-requested"],reviewedBy:e["reviewed-by"],labels:(()=>{let o=e.label;if(o)return Array.isArray(o)?o:[o]})(),baseBranch:e.base,headBranch:e.head,created:e.created,updated:e.updated,closed:e.closed,mergedAt:e["merged-at"],comments:e.comments,reactions:e.reactions,draft:e.draft,match:e.match,checks:e.checks,review:e.review,archived:e.archived,content:e.content,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,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 U0(e,t){let n=[];t.some(o=>o.state==="APPROVED")&&n.push("approval"),t.some(o=>o.state==="CHANGES_REQUESTED")&&n.push("changes-requested");let r=e.filter(o=>!Or(o.author??"")).map(o=>o.body.toLowerCase());return n.length===0&&r.some(o=>/\b(lgtm|looks good|approved|ship it)\b/.test(o))&&n.push("approval"),!n.includes("changes-requested")&&r.some(o=>/\b(change|fix|concern|blocker|blocking|request changes?)\b/.test(o))&&n.push("changes-requested"),r.some(o=>o.includes("?"))&&n.push("question"),n.length>0?n:["discussion"]}function $0(e,t){if(!e||e.length===0)return;let n=Array.from(new Set(e.map(i=>i.author))),r=e.map(i=>i.updatedAt||i.createdAt).filter(Boolean).sort().at(-1),o=e.filter(i=>i.commentType==="review_inline").length;return{totalComments:e.length,inlineComments:o,discussionComments:e.length-o,commenters:n.slice(0,8),commenterCount:n.length,...n.length>8?{commentersTruncated:!0}:{},...r?{latestCommentAt:r}:{},themes:U0(e,t??[])}}function lx(e,t={}){let{includeFileChanges:n=!0}=t,r=e.items.map(i=>{let s=i.fileChanges,a=s?.length??0,c=Array.isArray(i.comments)?i.comments:void 0,l=$0(c,i.reviews);return{number:i.number,...i.collectionStates?{collectionStates:i.collectionStates}:{},...i.providerLimits?.length?{providerLimits:i.providerLimits}:{},title:i.title,body:i.body??void 0,...i.bodyPagination&&{bodyPagination:i.bodyPagination},state:i.state,draft:i.draft,author:i.author,assignees:i.assignees,labels:i.labels,sourceBranch:i.sourceBranch,targetBranch:i.targetBranch,sourceSha:i.sourceSha,targetSha:i.targetSha,createdAt:i.createdAt,updatedAt:i.updatedAt,closedAt:i.closedAt,mergedAt:i.mergedAt,commentsCount:i.commentsCount,changedFilesCount:i.changedFilesCount??a,additions:i.additions,deletions:i.deletions,...Array.isArray(i.comments)&&i.comments.length>0&&{comments:i.comments.map(d=>({...d,...d.bodyPagination&&{bodyPagination:d.bodyPagination}}))},...i.reviews&&{reviews:i.reviews},...i.commits&&{commits:i.commits},...l&&{reviewSummary:{...l,...i.collectionStates?{countScope:"providerBatch"}:{}}},...s&&n?{fileChanges:s}:{},...Array.isArray(i.sanitizationWarnings)&&i.sanitizationWarnings.length>0?{sanitizationWarnings:i.sanitizationWarnings}:{}}}),o=e.pagination?{currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,...typeof e.pagination.totalMatches=="number"?{totalMatches:e.pagination.totalMatches}:{},...bl(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}:void 0;return{pullRequests:r,resultData:{pullRequests:r,...e.incompleteResults?{incompleteResults:!0}:{},...e.items.some(i=>i.providerLimits?.length)?{isPartial:!0,terminalLimit:!0,partialReasons:["providerResultCap"]}:{},...e.effectiveQuery?{effectiveQuery:e.effectiveQuery}:{},...o?{pagination:o}:{totalCount:e.totalCount||r.length}},pagination:o}}var lf=b(()=>{"use strict";ce();nf();Oc();Rl()});async function Os(e,t,n,r=fe){let o=n(),i={...t},s=MC(i),a=i.prNumber!==void 0;a||(i.content=void 0);let c=await Zt(i,()=>o.provider.searchPullRequests(cx(i)));if(c.ok===!1)return c.result;let l=a?s.changedFiles||s.patches.mode!=="none":!1,{pullRequests:d,resultData:u}=lx(c.response.data,{includeFileChanges:l});i.prNumber!==void 0&&delete u.pagination;let p=!a&&!!e.content,f={...s,body:!1,changedFiles:!1,patches:{mode:"none"},comments:!1,commits:!1},m=i.minify==="standard",h=a,y=d.map(R=>XC(R,i,p?f:s,m,h));u.pullRequests=y,!a&&i.concise===!0&&(u.pullRequests=y.map(R=>{let S=R;return`#${S.number} ${S.title}`}));let g=y.length>0;if(!a&&g){let R=y[0].number,S=i.owner,C=i.repo;R!=null&&S&&C&&(u.next={readPr:{tool:"ghGetHistoryItem",query:{operation:"pullRequest",owner:S,repo:C,number:R,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 Se(i,u,g,r,{rawResponse:c.response.rawResponseChars})}var uf=b(()=>{"use strict";he();Be();lf();qt();Zm();tf()});import{z as $}from"zod";var $o,Dn,pf=b(()=>{"use strict";Me();$o={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."},Dn=V($o,{...se,keywords:$.array($.string()).optional(),prNumber:z(1,xt).optional(),owner:$.string().optional(),repo:$.string().optional(),concise:$.boolean().optional(),state:$.enum(["open","closed","merged"]).optional(),assignee:$.string().optional(),author:$.string().optional(),commenter:$.string().optional(),mentions:$.string().optional(),"review-requested":$.string().optional(),"reviewed-by":$.string().optional(),label:$.array($.string()).optional(),checks:$.enum(["success","failure","pending"]).optional(),review:$.enum(["approved","changes_requested","required","none"]).optional(),head:$.string().optional(),base:$.string().optional(),created:$.string().optional(),updated:$.string().optional(),closed:$.string().optional(),"merged-at":$.string().optional(),comments:$.string().optional(),reactions:$.string().optional(),draft:$.boolean().optional(),match:$.array($.enum(["title","body","comments"])).optional(),sort:$.enum(["created","updated","best-match","comments","reactions"]).optional(),order:$.enum(["asc","desc"]).optional(),pageSize:z(1,bn).default(Rn),page:Ge(),archived:$.boolean().optional(),filePage:Ge(),commentPage:Ge(),commitPage:Ge(),reviewPage:Ge(),collectionPages:$.object({changedFiles:$.number().int().min(0).max(30).optional(),discussion:$.number().int().min(0).max(Number.MAX_SAFE_INTEGER).optional(),inline:$.number().int().min(0).max(Number.MAX_SAFE_INTEGER).optional(),reviews:$.number().int().min(0).max(Number.MAX_SAFE_INTEGER).optional(),commits:$.number().int().min(0).max(5).optional()}).strict().optional(),content:V($o,{body:$.literal(!0).optional(),changedFiles:$.literal(!0).optional(),patches:V($o,{mode:$.enum(["selected","all"]),files:Fe,ranges:$.array(V($o,{file:$.string(),additions:$.array(z(1,xt)).optional(),deletions:$.array(z(1,xt)).optional()},"content.patches.ranges")).optional()},"content.patches").optional(),comments:V($o,{discussion:$.literal(!0).optional(),reviewInline:$.literal(!0).optional(),includeBots:$.literal(!0).optional(),file:$.string().optional()},"content.comments").refine(e=>e.discussion===!0||e.reviewInline===!0,{message:"content.comments needs discussion:true and/or reviewInline:true."}).optional(),reviews:$.literal(!0).optional(),commits:V($o,{includeFiles:$.literal(!0).optional()},"content.commits").optional()},"content").optional(),matchString:$.string().optional(),commentBodyOffset:ft(),charOffset:ft(),charLength:Gt(),minify:$.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let n=["content","filePage","commentPage","commitPage","reviewPage","collectionPages","matchString","commentBodyOffset","charOffset","charLength"],r=["keywords","concise","state","assignee","author","commenter","mentions","review-requested","reviewed-by","label","checks","review","head","base","created","updated","closed","merged-at","comments","reactions","draft","match","sort","order","page","archived"];if(e.prNumber===void 0)for(let c of n)e[c]!==void 0&&t.addIssue({code:"custom",message:`${c} requires prNumber detail mode.`,path:[c]});else{e.owner?.trim()||t.addIssue({code:"custom",message:"owner is required with prNumber.",path:["owner"]}),e.repo?.trim()||t.addIssue({code:"custom",message:"repo is required with prNumber.",path:["repo"]});for(let c of r)e[c]!==void 0&&t.addIssue({code:"custom",message:`${c} is only available in list mode.`,path:[c]})}e.content&&Object.keys(e.content).length===0&&t.addIssue({code:"custom",message:"content needs at least one selector.",path:["content"]});let o=e.content?.patches;if(!o)return;let i=(o.files?.length??0)>0,s=(o.ranges?.length??0)>0,a=i||s;o.mode==="selected"&&!a&&t.addIssue({code:"custom",message:'content.patches.mode="selected" requires non-empty files or ranges.',path:["content","patches","files"]}),o.mode!=="selected"&&a&&t.addIssue({code:"custom",message:'content.patches.files and content.patches.ranges require mode="selected".',path:["content","patches","mode"]})})});import{z as H}from"zod";var Qo,df,ux=b(()=>{"use strict";pf();Me();Qo={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.'},df=V(Qo,{...se,type:H.enum(["prs","commits"]).default("prs"),since:H.string().optional(),until:H.string().optional(),path:H.string().optional(),branch:H.string().optional(),includeDiff:H.boolean().optional().default(!1),includeAssets:H.boolean().optional(),keywords:H.array(H.string()).optional(),prNumber:z(1,xt).optional(),issueNumber:z(1,xt).optional(),owner:H.string().optional(),repo:H.string().optional(),concise:H.boolean().optional(),state:H.enum(["open","closed","merged"]).optional(),assignee:H.string().optional(),author:H.string().optional(),committer:H.string().optional(),commenter:H.string().optional(),mentions:H.string().optional(),"review-requested":H.string().optional(),"reviewed-by":H.string().optional(),label:H.union([H.string(),H.array(H.string())]).optional(),checks:H.enum(["success","failure","pending"]).optional(),review:H.enum(["approved","changes_requested","required","none"]).optional(),head:H.string().optional(),base:H.string().optional(),created:H.string().optional(),updated:H.string().optional(),closed:H.string().optional(),"merged-at":H.string().optional(),comments:H.string().optional(),reactions:H.string().optional(),draft:H.boolean().optional(),match:H.array(H.enum(["title","body","comments"])).optional(),sort:H.enum(["created","updated","best-match","comments","reactions"]).optional(),order:H.enum(["asc","desc"]).optional(),limit:z(1,bn).default(Rn),page:He(),archived:H.boolean().optional(),filePage:Ge(),commentPage:Ge(),commitPage:Ge(),reviewPage:Dn.shape.reviewPage,collectionPages:Dn.shape.collectionPages,reviewMode:H.literal("full").optional(),content:V(Qo,{metadata:H.boolean().optional(),body:H.boolean().optional(),changedFiles:H.boolean().optional(),patches:V(Qo,{mode:H.enum(["none","selected","all"]).default("none"),files:Fe,ranges:H.array(V(Qo,{file:H.string(),additions:H.array(z(1,xt)).optional(),deletions:H.array(z(1,xt)).optional()},"content.patches.ranges")).optional()},"content.patches").optional(),comments:V(Qo,{discussion:H.boolean().optional(),reviewInline:H.boolean().optional(),includeBots:H.boolean().default(!1),file:H.string().optional()},"content.comments").optional(),reviews:H.boolean().optional(),commits:V(Qo,{list:H.boolean().optional(),includeFiles:H.boolean().optional()},"content.commits").optional()},"content").optional(),matchString:H.string().optional(),commentBodyOffset:ft(),charOffset:ft(),charLength:Gt(),minify:H.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let n=e.content?.patches;if(!n)return;let r=(n.files?.length??0)>0,o=(n.ranges?.length??0)>0,i=r||o;n.mode==="selected"&&!i&&t.addIssue({code:"custom",message:'content.patches.mode="selected" requires non-empty files or ranges.',path:["content","patches","files"]}),n.mode!=="selected"&&i&&t.addIssue({code:"custom",message:'content.patches.files and content.patches.ranges require mode="selected".',path:["content","patches","mode"]})})});import{z as mf}from"zod";var px,Q0,Ol,_5,Fl=b(()=>{"use strict";ux();ce();Pt();Nn();px={type:mf.enum(["prs","commits","issues"]).optional(),prNumber:J(1,1e9).optional(),issueNumber:J(1,1e9).optional(),pageSize:J(1,100).optional().default(30),match:mf.array(mf.enum(["title","body","comments"])).optional(),page:Bt.default(1),filePage:J(1,1e3).optional(),commentPage:J(1,1e3).optional(),commitPage:J(1,1e3).optional(),charOffset:wt.optional(),commentBodyOffset:wt.optional(),charLength:J(1,5e4).optional()},Q0=it(df,px),Ol=Xe(df,px),_5=ge(Q0)});import{z as ye}from"zod";var ff,Wo,dx=b(()=>{"use strict";Me();ff={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."},Wo=V(ff,{...se,owner:ye.string(),repo:ye.string(),keywords:ye.array(ye.string()).optional(),issueNumber:z(1,xt).optional(),concise:ye.boolean().optional(),state:ye.enum(["open","closed"]).optional(),assignee:ye.string().optional(),author:ye.string().optional(),commenter:ye.string().optional(),mentions:ye.string().optional(),label:ye.array(ye.string()).optional(),created:ye.string().optional(),updated:ye.string().optional(),closed:ye.string().optional(),comments:ye.string().optional(),reactions:ye.string().optional(),match:ye.array(ye.enum(["title","body","comments"])).optional(),sort:ye.enum(["created","updated","best-match","comments","reactions"]).optional(),order:ye.enum(["asc","desc"]).optional(),pageSize:z(1,bn).default(Rn),page:Ge(),archived:ye.boolean().optional(),commentPage:Ge(),content:V(ff,{body:ye.literal(!0).optional(),comments:V(ff,{discussion:ye.literal(!0).optional(),includeBots:ye.literal(!0).optional()},"content.comments").optional()},"content").optional(),matchString:ye.string().optional(),commentBodyOffset:ft(),charOffset:ft(),charLength:Gt(),minify:ye.enum(["none","standard"]).default("standard")}).superRefine((e,t)=>{let n=["content","commentPage","matchString","commentBodyOffset","charOffset","charLength"],r=["keywords","concise","state","assignee","author","commenter","mentions","label","created","updated","closed","comments","reactions","match","sort","order","page","archived"];if(e.issueNumber===void 0)for(let o of n)e[o]!==void 0&&t.addIssue({code:"custom",message:`${o} requires issueNumber detail mode.`,path:[o]});else{e.owner?.trim()||t.addIssue({code:"custom",message:"owner is required with issueNumber.",path:["owner"]}),e.repo?.trim()||t.addIssue({code:"custom",message:"repo is required with issueNumber.",path:["repo"]});for(let o of r)e[o]!==void 0&&t.addIssue({code:"custom",message:`${o} is only available in list mode.`,path:[o]})}e.content&&Object.keys(e.content).length===0&&t.addIssue({code:"custom",message:"content needs at least one selector.",path:["content"]})})});import{z as It}from"zod";function Vo(e,t){if(e.keywords?.length)for(let n of["path","branch","base","head","includeDiff"])e[n]!==void 0&&e[n]!==!1&&t.addIssue({code:"custom",path:[n],message:`Commit-message keywords cannot be combined with ${n}; search covers the default branch. Use history without keywords for path/ref filters and ghGetHistoryItem for diffs.`})}var W0,hf,gf=b(()=>{"use strict";Me();W0={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."},hf=V(W0,{...se,owner:It.string(),repo:It.string(),keywords:It.array(It.string().trim().min(1)).min(1).optional(),path:It.string().optional(),since:It.string().optional(),until:It.string().optional(),branch:It.string().optional(),author:It.string().optional(),committer:It.string().optional(),base:It.string().optional(),head:It.string().optional(),pageSize:z(1,100).optional().default(30),includeDiff:It.boolean().optional().default(!1),page:He(),filePage:Ge(),charOffset:ft(),charLength:Gt()}).superRefine((e,t)=>{Vo(e,t),(e.base&&!e.head||e.head&&!e.base)&&t.addIssue({code:"custom",path:[e.base?"head":"base"],message:"Set base and head together for compare mode."})})});import{z as bt}from"zod";function Xo(e,t,n){let r=e.safeParse(t);if(!r.success)for(let o of r.error.issues)n.addIssue({code:"custom",message:o.message,path:o.path})}function mx(e){let t=e;for(;t instanceof bt.ZodOptional||t instanceof bt.ZodDefault;)t=t.unwrap();if(!(t instanceof bt.ZodObject))throw new TypeError("Expected an object schema");return t}function fx(e){let t=e;for(;t instanceof bt.ZodOptional||t instanceof bt.ZodDefault;)t=t.unwrap();if(!(t instanceof bt.ZodArray))throw new TypeError("Expected an array schema");return t}function Yo(e,t){return e.description?t.describe(e.description):t}function oF(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 hx,gx,tJ,Ko,yx,bx,Rx,ur,Sx,V0,K0,X0,Y0,J0,Z0,q0,bf,eF,Dl,tF,nJ,Cx,rJ,yf,Fs,nF,Hl,rF,oJ,xx,iJ,Nl,Rf,iF,Jo,sF,sJ,Sf=b(()=>{"use strict";pf();dx();gf();ce();Pt();Nn();Br();hx={pageSize:J(1,100).optional().default(30),page:J(1,1e3).optional()},gx={...hx,filePage:J(1,1e3).optional(),commentPage:J(1,1e3).optional(),commitPage:J(1,1e3).optional(),charOffset:wt.optional(),commentBodyOffset:wt.optional(),charLength:J(1,1e5).optional()},tJ=Xe(Dn,gx).superRefine((e,t)=>Xo(Dn,e,t)),Ko=it(Dn,gx),yx=Le(Ko.shape,"content"),bx=mx(yx),Rx=Le(bx.shape,"patches"),ur=mx(Rx),Sx=Yo(Le(ur.shape,"mode"),bt.literal("selected")),V0=Yo(Le(ur.shape,"mode"),bt.literal("all")),K0=Yo(Le(ur.shape,"files"),fx(Le(ur.shape,"files")).min(1)),X0=Yo(Le(ur.shape,"ranges"),fx(Le(ur.shape,"ranges")).min(1)),Y0=bt.object({mode:Sx,files:K0,ranges:Le(ur.shape,"ranges")}).strict(),J0=bt.object({mode:Sx,files:Le(ur.shape,"files"),ranges:X0}).strict(),Z0=bt.object({mode:V0}).strict(),q0=bx.extend({patches:Yo(Rx,bt.union([Y0,J0,Z0]).optional())}),bf=Ko.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}),eF=bf.superRefine((e,t)=>Xo(Dn,e,t)),Dl=Ko.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:_e(Ko.shape,"owner"),repo:_e(Ko.shape,"repo"),prNumber:_e(Ko.shape,"prNumber"),content:Yo(yx,q0.optional())}),tF=Dl.superRefine((e,t)=>Xo(Dn,e,t)),nJ=ge(bt.union([eF,tF])),Cx={...hx,commentPage:J(1,1e3).optional(),charOffset:wt.optional(),commentBodyOffset:wt.optional(),charLength:J(1,1e5).optional()},rJ=Xe(Wo,Cx).superRefine((e,t)=>Xo(Wo,e,t)),yf=it(Wo,Cx),Fs=yf.omit({minify:!0,issueNumber:!0,commentPage:!0,content:!0,matchString:!0,commentBodyOffset:!0,charOffset:!0,charLength:!0}),nF=Fs.superRefine((e,t)=>Xo(Wo,e,t)),Hl=yf.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:_e(yf.shape,"issueNumber")}),rF=Hl.superRefine((e,t)=>Xo(Wo,e,t)),oJ=ge(bt.union([nF,rF])),xx={page:Bt.default(1),pageSize:J(1,100).optional().default(30),filePage:Bt.optional(),charOffset:wt.optional(),charLength:J(1,1e5).optional()};iJ=Xe(hf,xx).superRefine(oF).superRefine(Vo),Nl=it(hf,xx),Rf=Nl.omit({base:!0,head:!0}),iF=Rf.superRefine(Vo),Jo=Nl.omit({keywords:!0,branch:!0,since:!0,until:!0,author:!0,committer:!0}).extend({base:_e(Nl.shape,"base"),head:_e(Nl.shape,"head")}),sF=Jo,sJ=ge(bt.union([iF,sF]))});import Gl from"path";import{pathValidator as Bl}from"@octocodeai/octocode-engine/pathValidator";import{getConfigSync as wx,getOctocodeHome as aF}from"@octocodeai/config";function cF(e=wx().local.allowedPaths){for(let t of e)typeof t=="string"&&t.trim()!==""&&Bl.addAllowedRoot(t)}function lF(){let e=aF(process.env);Bl.addAllowedRoot(Gl.join(e,"tmp","clone")),Bl.addAllowedRoot(Gl.join(e,"tmp","tree"))}function Tt(e,t){if(!e.path?.trim()){let s=lt.pathValidationFailed("","path is required");return{isValid:!1,errorResult:D(s,e,{toolName:t})}}cF(),lF();let n=process.env.WORKSPACE_ROOT?.trim()||wx().local.workspaceRoot||process.cwd(),r=e.path.replace(/^file:\/\//,""),o=Gl.isAbsolute(r)?r:Gl.resolve(n,r),i=Bl.validate(o);if(!i.isValid){let s=lt.pathValidationFailed(e.path,i.error);return{isValid:!1,errorResult:D(s,e,{toolName:t,extra:{cwd:n,resolvedPath:o}})}}return{isValid:!0,sanitizedPath:i.sanitizedPath??o}}function bJ(e,t,n={}){let{threshold:r=100,itemType:o="item",detailed:i=!1}=n;return t?{shouldBlock:!1}:e>r?{shouldBlock:!0,errorCode:lt.outputTooLarge(e,r).errorCode,hints:[`Found ${e} ${o}${e===1?"":"s"} - exceeds safe limit of ${r}`,"Use charLength to paginate through results",i?"Detailed results increase size - consider using charLength for pagination":"Consider using charLength to paginate large result sets"]}:{shouldBlock:!1}}var nn=b(()=>{"use strict";Zr();Yc()});var SJ,rn,Zo=b(()=>{"use strict";SJ={COMMAND_TIMEOUT:3e4,MAX_OUTPUT_SIZE:10485760,MAX_RESULTS:100,CONTEXT_LINES:5},rn={MCP_MAX_TOKENS:25e3,CHARS_PER_TOKEN:4,MAX_FETCH_CONTENT_CHARS:5e4,MAX_OUTPUT_SIZE_BYTES:10*1024*1024,LARGE_FILE_THRESHOLD_KB:100,MAX_ENTRIES_BEFORE_PAGINATION:100,MAX_FILES_DEFAULT:1e3,DEFAULT_ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200,MAX_LIST_ITEMS_DETAILED:100,MAX_LIST_ITEMS_SIMPLE:200,MAX_ARCHIVE_ENTRIES_PER_PAGE:100,MAX_DIR_ENTRIES_PER_PAGE:100,MAX_DIR_ENTRIES_TREE:1e3,DEFAULT_EXEC_TIMEOUT_MS:3e4,DEFAULT_MAX_MATCHES_PER_FILE:3,DEFAULT_CONTEXT_LINES:5,DEFAULT_MATCH_CONTENT_LENGTH:500,MAX_MATCH_CONTENT_LENGTH:800,DEFAULT_MATCHES_PER_PAGE:10,MAX_MATCHES_PER_PAGE:100,DEFAULT_FILES_PER_PAGE:20,MAX_FILES_PER_PAGE:50,MAX_RIPGREP_DIRECTORY_SIZE_MB:100,MAX_FILE_COUNT_FOR_SEARCH:1e3,ESTIMATED_AVG_FILE_SIZE_BYTES:50*1024,LARGE_RESULT_BYTES_HINT:1.5*1024*1024,BINARY_MAX_BYTES:10*1024,BINARY_DEFAULT_HEX_LINES:20,BINARY_DEFAULT_MIN_STRING_LENGTH:6,MAX_ARCHIVE_FILES:1e3,DEFAULT_ARCHIVE_MAX_FILES:200,GLOBAL_MEMORY_LIMIT_BYTES:100*1024*1024,PER_OPERATION_MEMORY_LIMIT_BYTES:10*1024*1024,MEMORY_RESERVATION_TIMEOUT_MS:300*1e3,TOKEN_CRITICAL_THRESHOLD:5e4,TOKEN_HIGH_THRESHOLD:25e3,TOKEN_MODERATE_THRESHOLD:1e4,TOKEN_NOTICE_THRESHOLD:2500}});function xJ(e){return t=>{}}function Px(e,t){return n=>t}var xf=b(()=>{"use strict"});import{open as uF,readFile as pF,stat as dF}from"fs/promises";function wf(e,t){let n=Math.abs(t-e);return n>=50&&n/e>=.02?{sourceChars:e,sourceBytes:t}:{sourceChars:e}}function Ms(e,t,n){return{...e,...wf(t,n)}}function Tx(e){let t=e.fullContent===!0,n=e.matchString!==void 0,r=e.startLine!==void 0||e.endLine!==void 0;if(e.minify==="symbols"&&(n||r))return{status:"error",error:'minify:"symbols" returns a whole-file signature skeleton and cannot be combined with matchString/startLine/endLine \u2014 remove the line/match constraints, or use minify:"standard" (or "none") to extract a specific range.'};if(t&&n)return{status:"error",error:"Cannot use fullContent with matchString \u2014 these are mutually exclusive extraction methods. Choose ONE: fullContent=true to read the entire file, OR matchString to extract matching sections, OR startLine+endLine for a known line range."};if(t&&r)return{status:"error",error:"Cannot use fullContent with startLine/endLine \u2014 these are mutually exclusive extraction methods. Choose ONE: fullContent=true to read the entire file, OR startLine+endLine for a known line range, OR matchString to extract matching sections."};if(n&&r)return{status:"error",error:"Cannot use matchString with startLine/endLine \u2014 these are mutually exclusive extraction methods. Choose ONE: matchString to extract matching sections, OR startLine+endLine for a known line range, OR fullContent=true to read the entire file."};let o=e.startLine!==void 0,i=e.endLine!==void 0;return o&&!i?{status:"error",error:`startLine=${e.startLine} provided without endLine \u2014 both are required for line-range extraction.`}:i&&!o?{status:"error",error:`endLine=${e.endLine} provided without startLine \u2014 both are required for line-range extraction.`}:null}async function Ex(e,t){try{return{fileStats:await dF(t)}}catch(n){let r=lt.fileAccessFailed(e.path,n instanceof Error?n:void 0);return{errorResult:D(r,e,{toolName:N.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function Ax(e){let t=e.startLine!==void 0&&e.endLine!==void 0;return e.minify??(e.fullContent===!0||t?"none":"standard")}function Lx(e,t,n){return n!=="none"?!1:t>rn.LARGE_FILE_THRESHOLD_KB&&!e.matchString&&!e.startLine&&!e.charLength}function kx(e,t,n){let r=lt.fileTooLarge(e.path,n,rn.LARGE_FILE_THRESHOLD_KB);return D(r,e,{toolName:N.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}function _x(e,t){let n=lt.binaryFileUnsupported(e.path);return D(n,e,{toolName:N.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}async function vx(e){let n=Buffer.alloc(8192),r;try{r=await uF(e,"r");let{bytesRead:o}=await r.read(n,0,8192,0);if(o===0)return!1;let i=n.subarray(0,o);if(i.includes(0))return!0;try{new TextDecoder("utf-8",{fatal:!0}).decode(i,{stream:!0})}catch{return!0}let s=0,a=0,c=0;for(;c<i.length;){let l=i[c];if(l===27&&c+1<i.length&&i[c+1]===91){for(c+=2;c<i.length&&(i[c]<64||i[c]>126);)c+=1;c+=1;continue}s+=1;let d=l===9||l===10||l===13;l<32&&!d&&(a+=1),c+=1}return s>0&&a/s>.05}catch{return!1}finally{await r?.close().catch(Px("binary sample handle close",void 0))}}async function Ix(e,t){try{return{content:await pF(t,"utf-8")}}catch(n){let r=n instanceof Error?n:void 0,i=r?.code==="EISDIR"?lt.fileAccessFailed(e.path,r):lt.fileReadFailed(e.path,r);return{errorResult:D(i,e,{toolName:N.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function Ox(e,t){return{status:"empty",errorCode:W.NO_MATCHES,totalLines:t}}var zl=b(()=>{"use strict";Zo();Ke();nn();Zr();jn();xf()});function mF(e,t,n){let r=Pc(t,e.matchString,e.contextLines??5,e.matchStringIsRegex??!1,e.matchStringCaseSensitive??!1);if(r.lines.length===0)return{isPartial:!1,earlyResult:Ox(e,n)};let o=r.lines.join(`
|
|
37
|
+
`),i=e.contextLines??5,s=r.matchingLines.slice(0,10).join(", "),a=r.matchingLines.length>10?` (+${r.matchingLines.length-10} more)`:"",c=`Found ${r.matchCount} occurrence${r.matchCount===1?"":"s"} of "${e.matchString}" on line${r.matchingLines.length===1?"":"s"} ${s}${a} \u2014 all shown as ${r.matchRanges.length} slice${r.matchRanges.length===1?"":"s"}, \xB1${i} lines of context each; these lines are lineHint anchors for lspGetSemantics.`,l,d,u;if(r.matchRanges.length>0){let p=r.matchRanges[0],f=r.matchRanges[r.matchRanges.length-1];p&&f&&(l=p.start,d=f.end,u=r.matchRanges)}return{resultContent:o,isPartial:!1,actualStartLine:l,actualEndLine:d,matchRanges:u,matchedLines:r.matchingLines,warnings:[c]}}function fF(e){return e.startLine!==void 0&&e.endLine!==void 0}function hF(e,t,n){let r=String(n).length;return e.slice(t-1,n).map((o,i)=>`${String(t+i).padStart(r," ")}\u2192 ${o}`).join(`
|
|
38
|
+
`)}function gF(e,t,n){let r=e.startLine,o=e.endLine,i=Math.max(1,r),s=Math.min(o,n);if(o<r)return{isPartial:!1,earlyResult:{status:"empty",totalLines:n,errorCode:W.NO_MATCHES,warnings:[`startLine ${r} is greater than endLine ${o} \u2014 startLine must be \u2264 endLine`,`Use startLine=1 to ${n} with startLine \u2264 endLine for a valid range`]}};if(i>n)return{isPartial:!1,earlyResult:{status:"empty",totalLines:n,errorCode:W.NO_MATCHES,warnings:[`Requested startLine ${r} exceeds file length (${n} lines)`,`Use startLine=1 to ${n} for valid range`]}};let a=[];return o>n&&a.push(`Requested endLine ${o} adjusted to ${n} (file end)`),{resultContent:hF(t,i,s),isPartial:s<n,actualStartLine:i,actualEndLine:s,warnings:a}}function Fx(e,t,n){let r=t.split(`
|
|
39
|
+
`),o=Ht(t);return e.matchString?mF(e,r,o):fF(e)?gF(e,r,o):{resultContent:t,isPartial:!1}}var Mx=b(()=>{"use strict";Tc();Ir();jn();zl()});import{ContentSanitizer as yF}from"@octocodeai/octocode-engine/contentSanitizer";function Ns(e,t){let n=yF.sanitizeContent(e,t);return{text:n.content,limited:n.secretsDetected.includes("content-size-exceeded"),warning:n.hasSecrets?`Secrets detected and redacted: ${n.secretsDetected.join(", ")}`:void 0}}function jl(e,t,n=e.startLine??1){let r=t>1&&(e.startLine===void 0||e.startLine!==e.endLine);return{path:e.path,status:"error",errorCode:"contentSecurityLimit",error:"The selected content view exceeds the secret scanner size limit. Character windows cannot safely split unscanned content. Select a smaller source-line range.",totalLines:t,isPartial:!0,terminalLimit:!0,partialReasons:["security-selected-view-size-limit"],...r&&{next:{readBoundedLines:ke("localGetFileContent",{path:e.path,startLine:n,endLine:n,minify:"none"},"The selected view is too large to scan safely. Read one source line; this starts a different source-line view, not a continuation of the rejected character view.")}}}}async function Nx(e,t,n){let r=String(t.path),o=t.charLength,i=t.charOffset??0,s=o,a=!1,c,l=i;s===void 0&&!t.fullContent&&e.length>n&&(s=n,a=!0,c=`Auto-paginated: Content (${e.length} chars) exceeds ${n} char limit`);let d="char-limit",u=s;if(s!==void 0){let S=await xc(e,l,s,r);d=S.chunkMode,u=S.length}let p=ts(e,l,u,s!==void 0?{pageSize:s}:void 0);p.pageCountsKind="estimated";let f;if(p.hasMore&&d==="char-limit"&&ns(p.paginatedContent)){let S=p.charOffset+p.charLength;f=await rs(e,S,r)}let{goal:m,reasoning:h,charOffset:y,...g}=t,R=ml("localGetFileContent",{...g,path:r,charLength:s??p.charLength},p);return{windowedContent:p.paginatedContent,pagination:p,effectiveCharLength:s,explicitCharOffset:i,autoPaginated:a,autoPaginateWarning:c,chunkMode:d,nextBlockChar:f,next:R,showPagination:s!==void 0||i>0||a}}async function Dx(e,t,n,r,o,i=!0,s=i?"standard":"none"){if(!t.resultContent||t.resultContent.trim().length===0)return{status:"empty",totalLines:r};let a=[...t.warnings??[]],c=String(e.path),l=i?U.applyContentViewMinification(t.resultContent,c):t.resultContent,d=Ns(l,c);if(d.limited)return jl(e,r,t.actualStartLine);d.warning&&a.push(d.warning);let u=await Nx(d.text,e,o);u.autoPaginateWarning&&a.push(u.autoPaginateWarning);let p=t.isPartial||u.pagination.hasMore,f=t.actualStartLine!==void 0&&t.actualEndLine!==void 0?t.actualEndLine-t.actualStartLine+1:void 0,m=t.isPartial&&!u.pagination.hasMore&&t.actualEndLine!==void 0&&f!==void 0?ke("localGetFileContent",{path:c,startLine:t.actualEndLine+1,endLine:Math.min(r,t.actualEndLine+f),...e.minify!==void 0?{minify:e.minify}:{}},"Continue with the next source-line window."):void 0,h={...u.next??{},...m?{continueLines:m}:{}};return{path:c,content:u.windowedContent,contentView:s,returnedChars:u.windowedContent.length,...p&&{isPartial:p},totalLines:r,...t.actualStartLine!==void 0&&t.actualEndLine!==void 0&&{startLine:t.actualStartLine,endLine:t.actualEndLine,...t.matchRanges!==void 0&&{matchRanges:t.matchRanges},...t.matchedLines!==void 0&&{matchedLines:t.matchedLines}},...n.mtime&&{modified:n.mtime.toISOString()},...u.showPagination&&{pagination:{...cd(u.pagination),chunkMode:u.chunkMode,...u.nextBlockChar!==void 0&&{nextBlockChar:u.nextBlockChar}}},...Object.keys(h).length>0?{next:h}:{},...a.length>0&&{warnings:a}}}async function Pf(e,t,n,r,o,i,s){let a=await Nx(t,e,s),c=[...a.autoPaginateWarning?[a.autoPaginateWarning]:[],...i?[i]:[]];return{path:e.path,content:a.windowedContent,contentView:"symbols",returnedChars:a.windowedContent.length,...a.pagination.hasMore&&{isPartial:!0},totalLines:n,...wf(r,o),...a.showPagination&&{pagination:{...cd(a.pagination),chunkMode:a.chunkMode,...a.nextBlockChar!==void 0&&{nextBlockChar:a.nextBlockChar}}},...a.next?{next:a.next}:{},...c.length>0&&{warnings:c}}}function Hx(e,t){return typeof e.content!="string"?e:{...e,contentView:t}}var Gx=b(()=>{"use strict";We();Cc();wc();sr();zl()});async function Bx(e){let t=vr();try{let n=Tt(e,N.LOCAL_FETCH_CONTENT);if(!n.isValid)return n.errorResult;let r=Tx(e);if(r)return r;let o=n.sanitizedPath,i=String(e.path),{fileStats:s,errorResult:a}=await Ex(e,o);if(a||!s)return a;let c=typeof s.size=="bigint"?Number(s.size):s.size,l=c/1024;if(await vx(o))return ee(_x(e,o),c);let d=Ax(e);if(Lx(e,l,d))return ee(kx(e,o,l),c);let{content:u,errorResult:p}=await Ix(e,o);if(p||u===void 0)return p;let f=u.length,m=Buffer.byteLength(u,"utf-8"),h=u,y=e.matchString!==void 0&&d!=="none",g=y?"none":d,R=y&&e.minify!==void 0?`minify:"${e.minify}" is not applied to matchString extractions \u2014 matched slices are returned verbatim so the content always contains the matched text.`:void 0,S=g==="standard"||g==="symbols",C=S?"standard":"none",w;if(g==="symbols"){let x=U.extractSignatures(h,i);if(x===null){let _=Ec(h,i);if(_!==null){let v=Ns(_,i);return v.limited?Ms(jl(e,Ht(h)),f,m):ee(await Pf(e,v.text,Ht(h),f,m,v.warning,t),f)}w=`No smaller outline is available for ${i}; using the standard content view. The outline may be unsupported, oversized, or unavailable for this source.`}if(x!==null){let _=Ht(h),v=U.applyContentViewMinification(x,i),A=Ns(v,i);return A.limited?Ms(jl(e,_),f,m):ee(await Pf(e,A.text,_,f,m,A.warning,t),f)}}let T=Ht(h),k=Fx(e,h,t),F=x=>{let _=x.content;if(typeof _!="string")return x;let v=Ns(_,i),A=[...w?[w]:[],...R?[R]:[],...v.warning?[v.warning]:[]],I=x.warnings??[];return{...x,content:v.text,returnedChars:v.text.length,...A.length>0&&{warnings:[...I,...A]}}};if(k.earlyResult){let x=k.earlyResult.content,_=S&&typeof x=="string"?{...k.earlyResult,content:U.applyContentViewMinification(x,i)}:k.earlyResult;return ee(Ms(F(Hx(_,C)),f,m),f)}let P=await Dx(e,k,s,T,t,S,C);return ee(Ms({...P,...(w||R)&&{warnings:[...P.warnings??[],...w?[w]:[],...R?[R]:[]]}},f,m),f)}catch(n){return D(n,e,{toolName:N.LOCAL_FETCH_CONTENT})}}var Tf=b(()=>{"use strict";We();Ir();es();Ke();nn();ue();Ac();zl();Mx();Gx()});import{z as qo}from"zod";var bF,Ef,zx=b(()=>{"use strict";Me();bF=rt({name:"localGetFileContent",type:"Local",shortDescription:"Read a local file or a specific region.",instructions:`Read a known local path after search, find, or structure discovery. For large files, get a symbols outline, then an exact range or match. Read small config files whole with minify:"none".
|
|
40
|
+
Choose fullContent, matchString, or startLine+endLine. Partial content cannot prove absence; continue with the returned charOffset. matchedLines are LSP anchors; match ranges and character offsets are not. Report fetched bytes only.`,schema:{fullContent:"Whole file; small files only; exclusive with range/match.",matchString:"Anchor returning padded matchRanges and exact matchedLines.",matchStringIsRegex:"Makes matchString a regex.",matchStringCaseSensitive:"Case-sensitive matchString.",startLine:"Requires endLine; exclusive with fullContent/matchString.",endLine:"Requires startLine; must be >= startLine.",charOffset:"Copy the complete returned next query; semantic windows may expand beyond charLength.",minify:'"symbols" paginated outline (no range/match selectors), "standard" compact source, "none" unminified. Security redaction applies. Default none for fullContent/ranges, standard otherwise; matches force none.'}}),Ef=V(bF.schema,{...se,path:qo.string(),fullContent:qo.boolean().optional(),matchString:qo.string().optional(),matchStringIsRegex:qo.boolean().optional(),matchStringCaseSensitive:qo.boolean().optional(),startLine:ko(),endLine:ko(),contextLines:z(0,ms).default(5),charOffset:ft(),charLength:Gt(),minify:qo.enum(["none","standard","symbols"]).default("standard")}).superRefine(Wc)});import{z as RF}from"zod";var SF,jx,CF,Ul,Ux,$l=b(()=>{"use strict";zx();ce();Pt();Nn();Br();SF=RF.enum(["none","standard","symbols"]).optional(),jx={startLine:Oo,endLine:Oo,contextLines:Io.default(5),charOffset:wt.optional(),charLength:J(1,5e4).optional(),minify:SF},CF=it(Ef,jx),Ul=Xe(Ef,jx),Ux=ge(ll(CF),{maxQueries:5})});var $x={};Pn($x,{executeFetchContent:()=>xF});async function xF(e){let{queries:t}=e;return Ce(t||[],async n=>zt({toolName:N.LOCAL_FETCH_CONTENT,query:n,contextMessage:"localGetFileContent execution failed",execute:async()=>{let r=Ze(Ul,n);return r.ok===!1?r.error:await Bx(r.data)}}),{toolName:N.LOCAL_FETCH_CONTENT,finalize:wF()},e)}function wF(){return({results:e})=>{let t={results:PF(e)},n=tl(t.results);n&&(t.base=n);let r=nl(t.results);return r&&(t.shared=r),{structuredContent:Mn(t),renderText:o=>TF(o),isError:t.results.length>0&&t.results.every(o=>o.status==="error")}}}function PF(e){return e.map(t=>{let n=structuredClone(t.data),r=typeof n.path=="string"?n.path:void 0;if(t.status!=="error"&&r){let o=fl(r);o&&(n.fileType=o)}return{...t,data:n}})}function TF(e){let t=[];e.base&&t.push(`base: ${e.base}`,"");for(let n of e.results){let r=n.data,o=typeof r.content=="string"?r.content:void 0,i={...r};delete i.content,t.push(`result: ${n.index}${n.status?` (${n.status})`:""}`);let s=_o({data:i},["data","path","resolvedPath","contentView","startLine","endLine","totalLines","isPartial","pagination","sourceChars","sourceBytes","returnedChars","fileType","warnings","error"]).trimEnd();s&&t.push(s),o!==void 0&&t.push("content (copy-safe):",o),t.push("")}return e.shared&&t.push(_o({shared:e.shared},["shared"]).trimEnd()),t.join(`
|
|
51
41
|
`).trimEnd()+`
|
|
52
|
-
`}import{posix as kb}from"node:path";var c_=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","import","in","instanceof","new","null","return","super","switch","this","throw","true","try","typeof","var","void","while","with","yield","let","static","async","await"]);function Ba(e){return e?!c_.has(e):!1}import{posix as za}from"node:path";var pp=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],l_={".js":".ts",".jsx":".tsx",".mjs":".mts",".cjs":".cts"};function Lb(e){return e.split("\\").join("/")}function Si(e,t,n,r=new Map){let o=Lb(e);if(!o.startsWith(".")&&!o.startsWith("/"))return r.get(o)??null;let i=za.dirname(Lb(t)),s=o.startsWith("/")?o.slice(1):za.normalize(za.join(i,o)),a=[];if(pp.some(l=>s.endsWith(l))){a.push(s);for(let[l,u]of Object.entries(l_))if(s.endsWith(l)){a.push(s.slice(0,-l.length)+u);break}}else{a.push(s);for(let l of pp)a.push(`${s}${l}`);for(let l of pp)a.push(za.join(s,`index${l}`))}for(let l of a)if(n.has(l))return l;return null}import{readFileSync as u_}from"node:fs";import{join as p_,posix as ja}from"node:path";var d_=new Set(["dist","out","lib","build"]),m_={".js":[".ts",".tsx"],".jsx":[".tsx"],".mjs":[".mts",".ts"],".cjs":[".cts",".ts"],".d.ts":[".ts"]};function dp(e){if(typeof e=="string")return e;if(Array.isArray(e)){for(let n of e){let r=dp(n);if(r)return r}return null}if(!e||typeof e!="object")return null;let t=e;for(let n of["import","default","node","require","types"]){let r=dp(t[n]);if(r)return r}return null}function f_(e,t){if(!t.startsWith("./"))return[];let n=t.slice(2).split("/"),r=[n];d_.has(n[0]??"")&&r.push(["src",...n.slice(1)]);let o=new Set;for(let i of r){let s=ja.normalize(ja.join(e,...i));o.add(s);for(let[a,c]of Object.entries(m_))if(s.endsWith(a))for(let l of c)o.add(s.slice(0,-a.length)+l)}return[...o]}function _b(e,t){let n=new Set(["."]);for(let o of t){let i=ja.dirname(o);for(;i!==".";)n.add(i),i=ja.dirname(i)}let r=new Map;for(let o of n){let i;try{i=JSON.parse(u_(p_(e,o,"package.json"),"utf8"))}catch{continue}if(typeof i.name!="string")continue;let s=[];i.exports&&typeof i.exports=="object"&&!Array.isArray(i.exports)&&Object.keys(i.exports).some(a=>a.startsWith("."))?s.push(...Object.entries(i.exports)):i.exports!==void 0&&s.push([".",i.exports]);for(let[a,c]of s){if(a!=="."&&!a.startsWith("./"))continue;let l=dp(c);if(!l)continue;let u=f_(o,l).find(d=>t.has(d));if(!u)continue;let p=a==="."?i.name:`${i.name}/${a.slice(2)}`;r.set(p,u)}}return r}var h_=["node_modules","dist","build","out","coverage",".git","target",".next",".cache"];function Qa(e){return[...new Set([...h_,...e??[]])]}async function ro(e,t,n){let r=await D.scanGraphFacts({path:e,excludeDir:t,maxFiles:n,maxFileBytes:1e6}),o=r.entries,i=r.truncated,s=new Set(r.candidatePaths.map(f=>kb.normalize(f.split("\\").join("/")))),a=_b(e,s),c=new Map,l=new Map,u=new Set,p=new Set,d=new Map,m=r.filesSkipped;for(let f of o){let h=kb.normalize(f.relativePath.split("\\").join("/")),y;try{y=JSON.parse(f.factsJson)}catch{m++;continue}let g=(y.declarations??[]).filter(b=>Ba(b.name)).map(b=>({id:b.id,name:b.name,kind:b.kind,line:b.line,exported:b.exported??!1})),S=new Map(f.referenceCounts.map(({name:b,count:w})=>[b,w])),R=(y.exports??[]).filter(b=>b.source&&b.name!=="*").map(b=>({specifier:b.source,localName:b.localName??b.name,importedName:b.name,line:b.line,importKind:"value",resolvedTarget:Si(b.source,h,s,a)})),C=(y.calls??[]).filter(b=>b.kind==="dynamic-import").map(b=>b.callee),P={relativePath:h,declarations:g,imports:(y.imports??[]).map(b=>({specifier:b.specifier,localName:b.localName,importedName:b.importedName,line:b.line,importKind:b.importKind==="type"?"type":"value",resolvedTarget:Si(b.specifier,h,s,a)})),namedReexports:R,calls:(y.calls??[]).filter(b=>b.kind!=="dynamic-import").map(b=>({caller:b.caller,callee:b.callee})),referenceCounts:S};c.set(h,P);let T=new Set,E=new Set,k=new Map,x=(b,w)=>{T.add(b);let L=k.get(b)??new Set;L.add(w),k.set(b,L)};for(let b of P.imports){let w=b.resolvedTarget;w&&x(w,b.importKind==="type"?"type-import":"static-import")}for(let b of P.namedReexports){let w=b.resolvedTarget;w&&x(w,"named-reexport")}for(let b of C){let w=Si(b,h,s,a);w&&(x(w,"dynamic-import"),p.add(w))}for(let b of y.exports??[]){if(!b.source||b.name!=="*")continue;let w=Si(b.source,h,s,a);if(w){x(w,"star-reexport"),u.add(w);let L=d.get(w)??[];L.push(h),d.set(w,L)}}for(let[b,w]of k)w.size===1&&w.has("dynamic-import")&&E.add(b);l.set(h,{relativePath:h,importsFiles:T,dynamicImportsFiles:E,edgeKinds:k})}return{facts:c,fileGraph:l,filesScanned:c.size,filesSkipped:m,truncated:i,starReexportTargets:u,dynamicImportTargets:p,starReexporters:d}}import{readFileSync as g_}from"node:fs";import{posix as mp}from"node:path";var y_=/(\.(test|spec)\.[^/]+$)|(^|\/)(__tests__|tests?)\//i;function hp(e){return y_.test(e)}var b_=/\.(mjs|cjs|jsx?|tsx?)$/i;function S_(e){let t=[];for(let n of e.split(/\s+/)){let r=n.includes("=")?[n,n.slice(n.indexOf("=")+1)]:[n];for(let o of r){let i=o.replace(/^["']|["']$/g,"");b_.test(i)&&!i.startsWith("-")&&t.push(i)}}return t}function fp(e){return e.split("\\").join("/")}function Ib(e){return e.replace(/^\.\//,"")}var Ob=["dist","build","out"],R_={".js":".ts",".jsx":".tsx",".mjs":".mts",".cjs":".cts"};function vb(e){for(let[t,n]of Object.entries(R_))if(e.endsWith(t))return e.slice(0,-t.length)+n}function C_(e,t){let n=[],r=vb(e);r&&n.push(r);for(let o of Ob){let i=`${o}/`;if(!e.startsWith(i))continue;let a=`src/${e.slice(i.length)}`;n.push(a);let c=vb(a);c&&n.push(c)}return Ob.some(o=>e.startsWith(`${o}/`))&&t.has("src/index.ts")&&n.push("src/index.ts"),n.find(o=>t.has(o))}function Ri(e,t){if(typeof e=="string"){t.push(e);return}if(Array.isArray(e)){for(let n of e)Ri(n,t);return}if(e&&typeof e=="object")for(let n of Object.values(e))Ri(n,t)}function Ua(e,t,n,r){let o=[],i=new Set,s=!1;if(t&&t.length>0){let a=fp(e).replace(/\/$/,"");for(let c of t){let l=Ib(fp(c));l.startsWith(a+"/")&&(l=l.slice(a.length+1)),l=mp.normalize(l),r.has(l)?i.add(l):o.push(`entrypoint not found in scan: ${c} \u2014 pass it relative to the scanned path (e.g. "src/index.ts"), or as an absolute path under it`)}}else{let a;try{let c=mp.join(e,"package.json");a=JSON.parse(g_(c,"utf-8"))}catch{}if(a){let c=[];if(Ri(a.main,c),Ri(a.exports,c),Ri(a.bin,c),a.scripts&&typeof a.scripts=="object")for(let l of Object.values(a.scripts))typeof l=="string"&&c.push(...S_(l));for(let l of c){let u=mp.normalize(Ib(fp(l))),p=r.has(u)?u:C_(u,r);p&&i.add(p)}}i.size===0&&(o.push("no entrypoints resolved from package.json \u2014 pass `entrypoints` explicitly, or every export in a reachable file will read as unreachable"),s=!0)}if(n)for(let a of r)hp(a)&&i.add(a);return{entrypoints:[...i],warnings:o,lowConfidence:s}}function Ci(e,t){let n=new Set,r=[];for(let o of t)n.has(o)||(n.add(o),r.push(o));for(;r.length>0;){let o=r.pop(),i=e.get(o);if(i)for(let s of i.importsFiles)n.has(s)||(n.add(s),r.push(s))}return n}function $a(e){let t=0,n=new Map,r=new Map,o=new Set,i=[],s=[],a=[];for(let c of e.keys())if(!n.has(c))for(a.push({node:c,iterator:(e.get(c)?.importsFiles??new Set).values()}),n.set(c,t),r.set(c,t),t++,i.push(c),o.add(c);a.length>0;){let l=a[a.length-1],u=l.iterator.next();if(!u.done){let p=u.value;if(!n.has(p))n.set(p,t),r.set(p,t),t++,i.push(p),o.add(p),a.push({node:p,iterator:(e.get(p)?.importsFiles??new Set).values()});else if(o.has(p)){let d=r.get(l.node),m=n.get(p);r.set(l.node,Math.min(d,m))}continue}if(a.pop(),a.length>0){let p=a[a.length-1],d=r.get(p.node),m=r.get(l.node);r.set(p.node,Math.min(d,m))}if(r.get(l.node)===n.get(l.node)){let p=[],d;do d=i.pop(),o.delete(d),p.push(d);while(d!==l.node);(p.length>1||(e.get(p[0])?.importsFiles.has(p[0])??!1))&&s.push({files:p})}}return s}function xi(e,t){return`${e}::${t}`}function x_(e,t,n,r,o,i){let s=new Set,a=[{file:e,name:t}];for(;a.length>0;){let c=a.pop(),l=xi(c.file,c.name);if(!s.has(l)){if(s.add(l),n.has(c.file)||r.has(l))return!0;for(let u of o.get(l)??[])a.push({file:u.file,name:u.localName});for(let u of i.get(c.file)??[])a.push({file:u,name:c.name})}}return!1}function Fb(e,t,n,r,o,i){let s=new Set(t.declarations.filter(d=>d.exported).map(d=>d.name)),a=new Set;for(let d of s)x_(e,d,n,r,o,i)&&a.add(d);let c=new Map,l=new Map;for(let d of t.calls){let m=c.get(d.caller)??[];m.push(d.callee),c.set(d.caller,m),s.has(d.caller)&&l.set(d.callee,(l.get(d.callee)??0)+1)}let u=[...a],p=d=>{!s.has(d)||a.has(d)||(a.add(d),u.push(d))};for(let[d,m]of c)if(!s.has(d))for(let f of m)p(f);for(let d of s)(t.referenceCounts.get(d)??0)-(l.get(d)??0)>1&&p(d);for(let d=0;d<u.length;d++){let m=u[d];for(let f of c.get(m)??[])f!==m&&p(f)}return a}async function Mb(e,t,n){let r=Qa(t.excludeDir),o=t.maxFiles??2e4,{facts:i,fileGraph:s,filesScanned:a,filesSkipped:c,truncated:l,dynamicImportTargets:u,starReexporters:p}=n??await ro(e,r,o),d=new Set(i.keys()),{entrypoints:m,warnings:f,lowConfidence:h}=Ua(e,t.entrypoints,t.includeTests??!0,d);l&&f.push(`scan stopped at maxFiles (${o}) \u2014 results are partial, not a full-repo verdict`),c>0&&f.push(`${c} file(s) could not be read or parsed within the native graph bounds \u2014 results are partial, not a full-repo verdict`);let y=m.filter(X=>{let re=i.get(X);return(s.get(X)?.importsFiles.size??0)===0&&(re?.declarations.length??0)===0&&(re?.namedReexports.length??0)===0}),g=y.length>0;g&&f.push(`${y.length} entrypoint file(s) parsed to no imports/exports (likely an extractor parse failure on that file) \u2014 reachability from them is unreliable, so "unreachable-file" results here are low-confidence and may be false positives: ${y.join(", ")}`);let S=Ci(s,m),R=new Set(m),C=new Set([...R,...u]),P=X=>t.includeTests!==!1||!hp(X),T=new Map([...s].map(([X,re])=>[X,{relativePath:re.relativePath,importsFiles:new Set([...re.importsFiles].filter(de=>!re.dynamicImportsFiles.has(de))),dynamicImportsFiles:new Set,edgeKinds:new Map([...re.edgeKinds].map(([de,Ee])=>[de,new Set([...Ee].filter(Se=>Se!=="dynamic-import"))]).filter(([,de])=>de.size>0))}])),E=Ci(T,m),k=[...S].filter(X=>!E.has(X)).sort();k.length>0&&f.push(`${k.length} file(s) reachable only through a dynamic import() \u2014 lower confidence than static analysis, verify with lspGetSemantics before treating as proof: ${k.join(", ")}`);let x=new Set,b=new Map;for(let X of S){let re=i.get(X);if(re){for(let de of re.imports){let Ee=de.resolvedTarget;Ee&&x.add(xi(Ee,de.importedName))}for(let de of re.namedReexports){let Ee=de.resolvedTarget;if(!Ee)continue;let Se=xi(Ee,de.importedName),pt=b.get(Se)??[];pt.push({file:X,localName:de.localName}),b.set(Se,pt)}}}let w=new Map;for(let[X,re]of p){let de=re.filter(Ee=>S.has(Ee));de.length>0&&w.set(X,de)}let L=new Set(w.keys()),O=[],v=$a(s),A=new Map,q=[],ne=0;for(let X of v){let re=X.files.filter(P);if(re.length===0||!re.every(Se=>!S.has(Se)))continue;let Ee=ne++;for(let Se of re)A.set(Se,Ee);q.push({id:Ee,files:re,reason:"mutually-referencing cluster with no path from any entrypoint \u2014 each file looks locally referenced by the others, but the cluster as a whole is unreachable"})}let Me=new Map;for(let[X,re]of i){if(!P(X))continue;let de=R.has(X),Ee=S.has(X);for(let Se of re.declarations){if(!Se.exported)continue;if(!Ee){let zi=A.get(X);O.push({file:X,name:Se.name,kind:Se.kind,line:Se.line,reason:zi!==void 0?"dead-cluster":"unreachable-file",...zi!==void 0?{clusterId:zi}:{}});continue}if(de||L.has(X)||u.has(X))continue;let pt=Me.get(X);pt||(pt=Fb(X,re,C,x,b,w),Me.set(X,pt)),pt.has(Se.name)||O.push({file:X,name:Se.name,kind:Se.kind,line:Se.line,reason:"unreferenced-export",viaHeuristic:b.has(xi(X,Se.name))?"reexport-chain":"lexical-count"})}}return{filesScanned:a,filesSkipped:c,entrypointsResolved:m,deadExports:O,deadClusters:q,warnings:f,...h||g?{confidence:"low"}:{}}}import{posix as w_}from"node:path";function Wa(e){return w_.normalize(e.split("\\").join("/")).replace(/^\.\//,"")}function Va(e,t){return[...e?.edgeKinds.get(t)??["static-import"]].sort()}function gp(e,t){let n=new Set(t),r=new Set;for(let o of t){let i=e.get(o);for(let s of i?.importsFiles??[])if(n.has(s))for(let a of Va(i,s))r.add(a)}return[...r].sort()}function Nb(e,t,n){let r=[],o=new Set([t]),i=[{file:t,distance:0}];for(let s=0;s<i.length;s++){let a=i[s];if(a.distance>=n)continue;let c=e.get(a.file),l=[...c?.importsFiles??[]].sort();for(let u of l){if(o.has(u))continue;o.add(u);let p=a.distance+1;i.push({file:u,distance:p}),r.push({file:u,distance:p,via:a.file,edgeKinds:Va(c,u),confidence:"syntactic"})}}return r}function Db(e){let t=new Map;for(let n of e.keys())t.set(n,{relativePath:n,importsFiles:new Set,dynamicImportsFiles:new Set,edgeKinds:new Map});for(let[n,r]of e)for(let o of r.importsFiles){let i=t.get(o);if(!i)continue;i.importsFiles.add(n);let s=new Set(Va(r,o));i.edgeKinds.set(n,s),s.size===1&&s.has("dynamic-import")&&i.dynamicImportsFiles.add(n)}return t}function Hb(e,t,n){let r=new Map,o=new Set([t]),i=[t];for(let c=0;c<i.length;c++){let l=i[c];if(l===n)break;for(let u of[...e.get(l)?.importsFiles??[]].sort())o.has(u)||(o.add(u),r.set(u,l),i.push(u))}if(!o.has(n))return{found:!1,files:[],edges:[]};let s=[n];for(;s[0]!==t;)s.unshift(r.get(s[0]));let a=s.slice(0,-1).map((c,l)=>{let u=s[l+1];return{from:c,to:u,edgeKinds:Va(e.get(c),u),confidence:"syntactic"}});return{found:!0,files:s,edges:a,length:s.length,complete:!0,confidence:"syntactic"}}function Gb(e){return new Map([...e].map(([t,n])=>{let r=[...n.importsFiles].filter(o=>{let i=n.edgeKinds.get(o);return!i||i.size>1||!i.has("type-import")});return[t,{relativePath:t,importsFiles:new Set(r),dynamicImportsFiles:new Set(r.filter(o=>n.dynamicImportsFiles.has(o))),edgeKinds:new Map(r.map(o=>[o,new Set(n.edgeKinds.get(o)??["static-import"])]))}]}))}function yp(e){let t=0,n=new Map,r=new Map,o=[],i=new Set,s=[];for(let m of[...e.keys()].sort()){if(n.has(m))continue;let f=[{node:m,successors:[...e.get(m)?.importsFiles??[]].sort(),offset:0}];for(n.set(m,t),r.set(m,t++),o.push(m),i.add(m);f.length>0;){let h=f[f.length-1],y=h.successors[h.offset++];if(y!==void 0){n.has(y)?i.has(y)&&r.set(h.node,Math.min(r.get(h.node),n.get(y))):(n.set(y,t),r.set(y,t++),o.push(y),i.add(y),f.push({node:y,successors:[...e.get(y)?.importsFiles??[]].sort(),offset:0}));continue}f.pop();let g=f[f.length-1];if(g&&r.set(g.node,Math.min(r.get(g.node),r.get(h.node))),r.get(h.node)!==n.get(h.node))continue;let S=[],R;do R=o.pop(),i.delete(R),S.push(R);while(R!==h.node);s.push(S.sort())}}s.sort((m,f)=>(m[0]??"").localeCompare(f[0]??""));let a=new Map;s.forEach((m,f)=>{for(let h of m)a.set(h,f)});let c=new Map,l=new Map;s.forEach((m,f)=>{c.set(f,new Set),l.set(f,new Set)});for(let[m,f]of e){let h=a.get(m);for(let y of f.importsFiles){let g=a.get(y);g===void 0||g===h||(c.get(h)?.add(g),l.get(g)?.add(h))}}let u=new Map(s.map((m,f)=>[f,l.get(f)?.size??0])),p=[],d=[...u].filter(([,m])=>m===0).map(([m])=>m).sort((m,f)=>m-f);for(;d.length>0;){p.push(d);let m=[];for(let f of d)for(let h of[...c.get(f)??[]].sort((y,g)=>y-g)){let y=u.get(h)-1;u.set(h,y),y===0&&m.push(h)}d=m.sort((f,h)=>f-h)}return{components:s,componentOf:a,edges:c,reverseEdges:l,layers:p}}function bp(e){let t=new Set;for(let[n,r]of e)for(let o of r){let i=new Set([n]),s=[...r].filter(a=>a!==o);for(;s.length>0;){let a=s.pop();if(a===o){t.add(`${n}:${o}`);break}i.has(a)||(i.add(a),s.push(...e.get(a)??[]))}}return t}function Bb(e,t){let n=new Set,r=[],o=[{node:t,successors:[...e.get(t)?.importsFiles??[]].sort(),offset:0}];for(n.add(t);o.length>0;){let d=o[o.length-1],m=d.successors[d.offset++];if(m!==void 0){if(n.has(m))continue;n.add(m),o.push({node:m,successors:[...e.get(m)?.importsFiles??[]].sort(),offset:0});continue}o.pop(),r.push(d.node)}let i=r.reverse(),s=new Map(i.map((d,m)=>[d,m])),a=new Map(i.map(d=>[d,new Set]));for(let d of i)for(let m of e.get(d)?.importsFiles??[])a.get(m)?.add(d);let c=new Map([[t,t]]),l=(d,m)=>{let f=d,h=m;for(;f!==h;){for(;s.get(f)>s.get(h);)f=c.get(f);for(;s.get(h)>s.get(f);)h=c.get(h)}return f},u=!0;for(;u;){u=!1;for(let d of i.slice(1)){let m=[...a.get(d)??[]].filter(h=>c.has(h));if(m.length===0)continue;let f=m[0];for(let h of m.slice(1))f=l(h,f);c.get(d)!==f&&(c.set(d,f),u=!0)}}let p=new Map([[t,null]]);for(let d of i.slice(1))p.set(d,c.get(d)??null);return p}function P_(e,t){let n=new Map,r=new Map;for(let o of[...t].sort()){if(!e.has(o)||n.has(o))continue;n.set(o,"visiting");let i=[{node:o,successors:[...e.get(o)?.importsFiles??[]].filter(s=>t.has(s)).sort(),offset:0}];for(;i.length>0;){let s=i[i.length-1],a=s.successors[s.offset++];if(a===void 0){n.set(s.node,"done"),i.pop();continue}let c=n.get(a);if(!c){r.set(a,s.node),n.set(a,"visiting"),i.push({node:a,successors:[...e.get(a)?.importsFiles??[]].filter(p=>t.has(p)).sort(),offset:0});continue}if(c!=="visiting")continue;let l=[s.node];for(;l[l.length-1]!==a;){let p=r.get(l[l.length-1]);if(!p)return[];l.push(p)}l.reverse();let u=[];for(let p=0;p<l.length-1;p++)u.push({from:l[p],to:l[p+1]});return u.push({from:s.node,to:a}),u}}return[]}function Sp(e,t){return P_(e,t).map(({from:n,to:r})=>({from:n,to:r,edgeKinds:[...e.get(n)?.edgeKinds.get(r)??new Set(["static-import"])].sort()}))}function Rp(e){let t=new Map;return e.forEach((n,r)=>{for(let o of n)t.set(o,r)}),t}var T_=50,Cp=2e4,xp=5e4,wp=5e3;function oo(e,t){let n=t.limit?e.slice(0,t.limit):e,r=n.length<e.length,o=t.pageSize??T_,i=t.page??1,s=Math.max(1,Math.ceil(n.length/o)),a=Math.min(Math.max(1,i),s),c=(a-1)*o;return{results:n.slice(c,c+o),pagination:{currentPage:a,totalPages:s,entriesPerPage:o,totalEntries:n.length,hasMore:a<s,...i>s?{outOfRange:!0}:{}},...r?{truncated:!0,partialReasons:["limit"],totalAvailable:e.length}:{}}}function E_(e,t){let n=(e.filesSkipped??0)>0;return!t&&!n?e:{...e,truncated:!0,partialReasons:[...new Set([...e.partialReasons??[],...t?["maxFiles"]:[],...n?["filesSkipped"]:[]])]}}function A_(e,t){let n=e.partialReasons?.includes("maxFiles")===!0&&(t.maxFiles??Cp)>=xp,r=e.partialReasons?.includes("limit")===!0&&t.limit!==void 0&&t.limit>=wp,o=e.pagination?.hasMore===!0&&e.pagination.currentPage>=1e3,i=e.partialReasons?.includes("filesSkipped")===!0;return n||r||o||i?{...e,terminalLimit:!0}:e}function L_(e,t,n){e.pagination?.outOfRange&&(e={...e,warnings:[...e.warnings??[],`page:${t.page} is out of range (only ${e.pagination.totalPages} page(s)) \u2014 returned page ${e.pagination.currentPage} instead.`]});let r={};if(e.pagination?.hasMore&&e.pagination.currentPage<1e3&&(r.nextPage=We("localAnalyzeGraph",{...t,page:e.pagination.currentPage+1},n)),e.partialReasons?.includes("maxFiles")&&(t.maxFiles??Cp)<xp){let o=t.maxFiles??Cp;r.expandScan=We("localAnalyzeGraph",{...t,maxFiles:Math.min(xp,Math.max(o+1,o*2)),page:1},"Re-run with a larger file-scan bound because this graph is partial.")}if(e.partialReasons?.includes("limit")&&t.limit!==void 0&&t.limit<wp&&(r.expandLimit=We("localAnalyzeGraph",{...t,limit:Math.min(wp,Math.max(t.limit+1,t.limit*2)),page:1},"Re-run with a larger result limit because additional graph results exist.")),t.operation==="deadCode"){let o=e.results[0];if(o&&typeof o.file=="string"&&typeof o.name=="string"&&typeof o.line=="number"){let i=t.path.replace(/\/+$/,"");r.verifyReferences={tool:we,query:{type:"references",uri:`${i}/${o.file}`,symbolName:o.name,lineHint:o.line,includeDeclaration:!1,groupByFile:!0},why:`Verify candidate "${o.name}" before deletion; repeat for each result, prioritizing viaHeuristic:"reexport-chain".`,confidence:"high"}}}return Object.keys(r).length>0?{...e,next:r}:e}function zb(e,t,n,r){return L_(A_(E_(e,n),t),t,r)}var __=2e4,jb=1;function Pp(e){return{entrypointsResolved:e,entrypointsResolvedCount:e.length}}function Ka(e,t){return{status:"error",error:t,errorCode:"invalidGraphQuery",operation:e.operation,path:e.path,results:[]}}async function Qb(e,t={}){let n=Qa(e.excludeDir),r=e.maxFiles??__,o=await(t.getGraph?.(e.path,n,r)??ro(e.path,n,r)),i=(d,m)=>zb(d,e,o.truncated,m);if(e.operation==="deadCode"){let d=await Mb(e.path,e,o),m=oo(d.deadExports,e),f=new Set(m.results.map(h=>h.clusterId).filter(h=>typeof h=="number"));return i({operation:e.operation,path:e.path,filesScanned:d.filesScanned,filesSkipped:d.filesSkipped,...m,summary:{...Pp(d.entrypointsResolved),deadClusters:d.deadClusters.filter(h=>f.has(h.id)).map(h=>({...h,files:h.files,size:h.files.length,edgeKinds:gp(o.fileGraph,h.files),confidence:"syntactic"})),deadClusterCount:d.deadClusters.length,deadExportCount:d.deadExports.length},...d.warnings.length>0?{warnings:d.warnings}:{},...d.confidence?{confidence:d.confidence}:{}},"Continue dead-code candidates.")}let s=[...o.truncated?[`scan stopped at maxFiles (${r}) \u2014 graph results are partial`]:[],...o.filesSkipped>0?[`${o.filesSkipped} file(s) could not be read or parsed within the native graph bounds \u2014 graph results are partial`]:[]],a={operation:e.operation,path:e.path,filesScanned:o.filesScanned,filesSkipped:o.filesSkipped};if(e.operation==="cycles"){let d=yp(o.fileGraph),m=Rp(d.layers),f=bp(d.edges),h=Gb(o.fileGraph),y=$a(h).map(R=>[...R.files].sort()),S=d.components.filter(R=>R.length>1||(o.fileGraph.get(R[0])?.importsFiles.has(R[0])??!1)).map(R=>{let C=d.componentOf.get(R[0]),P=new Set(R),T=y.filter(b=>b.every(w=>P.has(w))),E=Sp(o.fileGraph,P),k=Sp(h,P),x=C===void 0?[]:[...d.edges.get(C)??[]].sort((b,w)=>b-w);return{files:R,size:R.length,edgeKinds:gp(o.fileGraph,R),runtimeCycle:T.length>0,runtimeCycles:T,runtimeCycleCount:T.length,cycleEdges:E,runtimeCycleEdges:k,componentId:C,topologicalLayer:C===void 0?void 0:m.get(C),outgoingComponents:x,outgoingComponentCount:x.length,confidence:"syntactic"}}).sort((R,C)=>(R.files[0]??"").localeCompare(C.files[0]??""));return i({...a,...oo(S,e),summary:{cycleCount:S.length,runtimeCycleCount:S.filter(R=>R.runtimeCycle).length,condensationComponentCount:d.components.length,condensationEdgeCount:[...d.edges.values()].reduce((R,C)=>R+C.size,0),topologicalLayerCount:d.layers.length,transitiveEdgeCount:f.size},...s.length>0?{warnings:s}:{}},"Continue cycle components.")}if(e.operation==="dependencies"||e.operation==="dependents"){if(!e.file)return i(Ka(e,`${e.operation} requires file`),`Retry ${e.operation} after expanding the graph scan.`);let d=Wa(e.file);if(!o.fileGraph.has(d))return i(Ka(e,`file is not in the scanned graph: ${d}`),`Retry ${e.operation} after expanding the graph scan.`);let m=e.operation==="dependencies"?o.fileGraph:Db(o.fileGraph),f=yp(m),h=Rp(f.layers),y=bp(f.edges),g=Bb(m,d),S=Nb(m,d,e.depth??jb).map(R=>{let C=R.file,P=R.via,T=f.componentOf.get(P),E=f.componentOf.get(C);return{...R,immediateDominator:g.get(C)??null,topologicalLayer:E===void 0?void 0:h.get(E),transitiveEdge:T!==void 0&&E!==void 0?y.has(`${T}:${E}`):!1}});return i({...a,...oo(S,e),summary:{source:d,depth:e.depth??jb,condensationComponentCount:f.components.length,topologicalLayerCount:f.layers.length,transitiveEdgeCount:y.size},...s.length>0?{warnings:s}:{}},`Continue ${e.operation}.`)}if(e.operation==="path"){if(!e.file||!e.target)return i(Ka(e,"path requires file and target"),"Retry the path query after expanding the graph scan.");let d=Wa(e.file),m=Wa(e.target);return!o.fileGraph.has(d)||!o.fileGraph.has(m)?i(Ka(e,"file and target must both be in the scanned graph"),"Retry the path query after expanding the graph scan."):i({...a,...oo([Hb(o.fileGraph,d,m)],e),summary:{source:d,target:m},...s.length>0?{warnings:s}:{}},"Continue path results.")}let c=new Set(o.facts.keys()),l=Ua(e.path,e.entrypoints,e.includeTests??!0,c);if(l.lowConfidence&&l.entrypoints.length===0)return i({...a,status:"empty",results:[],summary:{...Pp(l.entrypoints),classifiedCount:0,unclassifiedCount:o.fileGraph.size},warnings:[...s,...l.warnings],confidence:"low"},"Retry reachability after expanding the graph scan.");let u=Ci(o.fileGraph,l.entrypoints),p=[...o.fileGraph.keys()].sort().map(d=>({file:d,reachable:u.has(d),confidence:"syntactic"}));return i({...a,...oo(p,e),summary:{...Pp(l.entrypoints),reachableCount:u.size,unreachableCount:p.length-u.size},...s.length+l.warnings.length>0?{warnings:[...s,...l.warnings]}:{},...l.lowConfidence?{confidence:"low"}:{}},"Continue reachability classifications.")}var Tp=Z(On,{maxQueries:5});async function Ub(e){let t=new Map,n=(r,o,i)=>{let s=JSON.stringify([r,[...o].sort(),i]),a=t.get(s);if(a)return a;let c=ro(r,o,i);return t.set(s,c),c};return he(e.queries||[],async r=>Ct({toolName:I.LOCAL_ANALYZE_GRAPH,query:r,contextMessage:"localAnalyzeGraph execution failed",execute:async()=>{let o=tt(On,r);if(o.ok===!1)return o.error;let i=lt(o.data,I.LOCAL_ANALYZE_GRAPH);return i.isValid?Qb({...o.data,path:i.sanitizedPath},{getGraph:n}):N(i.errorResult,o.data,{toolName:I.LOCAL_ANALYZE_GRAPH})}}),{toolName:I.LOCAL_ANALYZE_GRAPH},e)}import{access as eI}from"node:fs/promises";function io(e){return e===0?"0.0B":e<1024?`${e}.0B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)}MB`:e<1024*1024*1024*1024?`${(e/(1024*1024*1024)).toFixed(1)}GB`:`${(e/(1024*1024*1024*1024)).toFixed(1)}TB`}function wi(e){let t=e.trim();if(/^\d+$/.test(t))return parseInt(t,10);let n=t.match(/^(\d+(?:\.\d+)?)(B|KB|MB|GB|TB)$/i);if(n&&n[1]&&n[2]){let s=parseFloat(n[1]);switch(n[2].toUpperCase()){case"B":return Math.round(s);case"KB":return Math.round(s*1024);case"MB":return Math.round(s*1024*1024);case"GB":return Math.round(s*1024*1024*1024);case"TB":return Math.round(s*1024*1024*1024*1024)}}let r=t.match(/^(\d+(?:\.\d+)?)([KMGT])$/i);if(!r||!r[1]||!r[2])throw new Error(`Invalid size format: ${e}`);let o=parseFloat(r[1]);switch(r[2].toUpperCase()){case"K":return Math.round(o*1024);case"M":return Math.round(o*1024*1024);case"G":return Math.round(o*1024*1024*1024);default:return Math.round(o*1024*1024*1024*1024)}}function Ep(e){let t=e.filter(o=>o.type==="file").length,n=e.filter(o=>o.type==="directory").length,r=e.reduce((o,i)=>i.type==="file"&&i.size?o+wi(i.size):o,0);return`${e.length} entries (${t} files, ${n} dirs, ${io(r)})`}function Ap(e,t){let n=e.length,r=t.itemsPerPage||20,o=Math.max(1,Math.ceil(n/r)),i=t.page||1,s=Math.min(i,o),a=i>o,c=(s-1)*r,l=Math.min(c+r,n),u=s<o;return{paginatedEntries:e.slice(c,l),endIdx:l,pagination:{currentPage:s,totalPages:o,entriesPerPage:r,totalEntries:n,hasMore:u,...u&&s<1e3?{nextPage:s+1}:{},...a?{outOfRange:!0}:{}}}}function k_(e,t,n,r){if(!n.hasMore||n.currentPage>=1e3)return[];let o=e.slice(r,r+3).map(i=>i.name).join(", ");return[`Page ${n.currentPage}/${n.totalPages} (showing ${t} of ${n.totalEntries}). Next: page=${n.currentPage+1}${o?` (starts with: ${o}...)`:""}`]}function Pi(e){if(e.skipped<=0)return[];let t=e.skipped-e.permissionDenied;return e.permissionDenied>0&&t>0?[`${e.skipped} entries skipped (${e.permissionDenied} permission denied, ${t} other errors)`]:e.permissionDenied>0?[`${e.permissionDenied} ${e.permissionDenied===1?"entry":"entries"} skipped due to permission denied`]:[`${e.skipped} ${e.skipped===1?"entry":"entries"} skipped due to access errors`]}function $b(e){let t=e.find(r=>r.type==="file");if(t)return{fetch:{tool:"localGetFileContent",query:{path:t.path,minify:"standard"},why:'Read the first matched file (minify:"symbols" for a skeleton, minify:"none" for exact bytes).',confidence:"exact"}};let n=e.find(r=>r.type==="directory");if(n)return{viewStructure:{tool:"local.tree",query:{path:n.path},why:"Orient inside the first matched directory before reading files.",confidence:"exact"}}}var I_=["node_modules",".git","dist","build","out","coverage","target",".next",".cache"];function O_(e,t){let n=t??I_,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}async function Wb(e){let t=e.detail==="full",n=e.detail==="modified"||t,r=n||(e.sortBy||"modified")==="modified";try{let o=lt(e,I.LOCAL_FIND_FILES);if(!o.isValid)return o.errorResult;let i={...e,path:o.sanitizedPath},s={...i,excludeDir:O_(i.path,i.excludeDir)},{warnings:a,query:c}=D_(s),l=e.limit??1e4,u={path:c.path,recursive:!0,includeRoot:!0,showHidden:!0,maxDepth:c.maxDepth,minDepth:c.minDepth,names:c.names,extensions:c.extensions,regex:c.regex,entryType:c.entryType,empty:c.empty,modifiedWithin:c.time?.modifiedWithin,modifiedBefore:c.time?.modifiedBefore,accessedWithin:c.time?.accessedWithin,sizeGreater:c.size?.greater,sizeLess:c.size?.less,permissions:c.permissions,executable:c.access==="executable",readable:c.access==="readable",writable:c.access==="writable",excludeDir:c.excludeDir,limit:1e4},p=await D.queryFileSystem({...u,pathPattern:c.pathPattern}),d=p.totalDiscovered,m=p.wasCapped,f=p.entries.map(de=>v_(de,r)),h=e.sortBy||"modified";F_(f,h,r);let y=f.slice(0,l),g=y.length<f.length,S=m,R=M_(y,t,n),C=R.length,P=e.itemsPerPage||20,T=e.page||1,E=Math.max(1,Math.ceil(C/P)),k=(T-1)*P,x=Math.min(k+P,C),b=R.slice(k,x),w=C>0&&k>=C,L=b,O=[...p.warnings,...Pi(p),...m?[`results capped at ${1e4} during the walk before sorting \u2014 sortBy:"${h}" only orders that partial set, not the true top-N across the whole tree`]:[],...w?[`page:${T} is out of range (only ${E} page(s), ${C} total file(s)) \u2014 returned 0 files. Use page:1..${E}.`]:[]],v=[...a,...O],A=T<E,q=g&&l<1e4,ne=A&&T>=1e3||(g||S)&&!q,X={...$b(L)??{},...A&&!ne?{nextPage:We(I.LOCAL_FIND_FILES,{...i,page:T+1},"Continue to the next page of matched files.")}:{},...q?{expandLimit:We(I.LOCAL_FIND_FILES,{...i,limit:Math.min(1e4,Math.max(l+1,l*2)),page:1},"Re-run with a larger file limit because matched files remain.")}:{}},re={...C===0?{status:"empty"}:{},path:i.path,files:L,pagination:{currentPage:T,totalPages:E,filesPerPage:P,totalFiles:C,hasMore:A,...A&&!ne?{nextPage:T+1}:{},...m||d>C?{totalFilesFound:d}:{},...w?{outOfRange:!0}:{}},...ne?{terminalLimit:!0}:{},...g||S?{truncated:!0,partialReasons:[...g?["limit"]:[],...S?["walkLimit"]:[]],totalAvailable:Math.max(d,f.length)}:{},...Object.keys(X).length>0?{next:X}:{},...v.length>0&&{warnings:v}};return W(re,p.entries.reduce((de,Ee)=>de+Ee.path.length,0))}catch(o){return N(o,e,{toolName:I.LOCAL_FIND_FILES})}}function v_(e,t){let n={path:e.path,type:e.entryType==="directory"?"directory":e.entryType==="symlink"?"symlink":"file",...e.size!==void 0?{size:e.size}:{},...e.permissions?{permissions:e.permissions}:{}};return t&&e.modifiedMs!==void 0&&(n.modified=new Date(e.modifiedMs).toISOString()),n}function F_(e,t,n){e.sort((r,o)=>{switch(t){case"size":return(o.size??0)-(r.size??0);case"name":return(r.path.split("/").pop()||"").localeCompare(o.path.split("/").pop()||"");case"path":return r.path.localeCompare(o.path);default:return n&&r.modified&&o.modified?new Date(o.modified).getTime()-new Date(r.modified).getTime():r.path.localeCompare(o.path)}})}function M_(e,t,n){return e.map(r=>{let o={path:r.path,type:r.type};return r.size!==void 0&&r.type!=="directory"&&(t?o.size=r.size:o.sizeFormatted=io(r.size)),t&&r.permissions&&(o.permissions=r.permissions),r.modified&&(o.modified=r.modified),o})}var N_=/^\d+[hdwm]$/;function D_(e){let t=[],n=e.time;if(!n)return{warnings:t,query:e};let r={...n},o=[{key:"modifiedBefore",value:n.modifiedBefore},{key:"modifiedWithin",value:n.modifiedWithin},{key:"accessedWithin",value:n.accessedWithin}];for(let{key:i,value:s}of o)s&&!N_.test(s)&&(t.push(`time.${i}="${s}" has an unsupported format \u2014 filter was skipped. Use a relative duration like "7d", "2h", "1w", or "3m".`),delete r[i]);return{warnings:t,query:{...e,time:r}}}function Vb(e){let t=[],n=[];return!e||typeof e!="object"?(t.push("Query must be an object"),{isValid:!1,errors:t,warnings:n}):(e.mode!=="structural"&&(!e.searchText||typeof e.searchText!="string")&&t.push("`searchText` is required"),e.matchWindow!==void 0&&e.output!=="matchOnly"&&t.push('`matchWindow` requires output:"matchOnly"'),(e.unique==="list"||e.unique==="count")&&e.output!=="matchOnly"&&t.push('`unique` requires output:"matchOnly"'),{isValid:t.length===0,errors:t,warnings:n})}import{z as Dn}from"zod";var H_=["paginated","discovery","detailed","structural"],G_=["semanticRanking"],Kb={mode:Dn.enum(H_).optional().default("paginated"),searchText:Dn.string().optional(),output:Dn.enum(["content","files","filesWithout","countLines","countMatches","matchOnly"]).optional().default("content"),pattern:Dn.string().optional(),maxDepth:M(0,20).optional(),rule:Dn.string().optional(),captureText:Dn.boolean().optional(),contextLines:$r,matchContentLength:M(1,1e5).optional().default(500),maxMatchesPerFile:M(1,1e5).optional(),maxFiles:M(1,1e5).optional(),matchPage:be.optional(),itemsPerPage:M(1,1e3).optional(),page:be.default(1),unique:Dn.enum(["off","list","count"]).optional().default("off")},B_={...Kb,semanticRanking:Dn.unknown().optional().superRefine((e,t)=>{e!==void 0&&t.addIssue({code:"custom",message:'semanticRanking is disabled in this build \u2014 sort:"relevance" already includes declaration/export/AST signals; remove this field.'})}).describe('DISABLED in this build \u2014 do not pass. sort:"relevance" already includes declaration/export/AST signals.')},z_=pe(ft,B_),j_=se(ft,Kb,{strict:!0,omit:G_}),so=j_.superRefine((e,t)=>{if(e.mode==="structural"){!e.pattern&&!e.rule&&t.addIssue({code:"custom",message:'mode:"structural" requires `pattern` or `rule`.',path:["pattern"]}),e.pattern&&e.rule&&t.addIssue({code:"custom",message:"`pattern` and `rule` are mutually exclusive.",path:["rule"]}),e.wholeWord&&t.addIssue({code:"custom",message:'`wholeWord` is not valid with mode:"structural".',path:["wholeWord"]}),e.invertMatch&&t.addIssue({code:"custom",message:'`invertMatch` is not valid with mode:"structural".',path:["invertMatch"]}),e.regex&&e.regex!=="smart"&&t.addIssue({code:"custom",message:'`regex` is not valid with mode:"structural".',path:["regex"]}),e.caseMode&&e.caseMode!=="smart"&&t.addIssue({code:"custom",message:'`caseMode` is not valid with mode:"structural".',path:["caseMode"]}),e.multiline&&e.multiline!=="off"&&t.addIssue({code:"custom",message:'`multiline` is not valid with mode:"structural".',path:["multiline"]}),e.output&&e.output!=="content"&&e.output!=="countMatches"&&e.output!=="files"&&t.addIssue({code:"custom",message:'With mode:"structural", `output` supports only "content" (default), "countMatches" (per-file counts, no match content \u2014 cheapest for counting), or "files" (paths only).',path:["output"]}),e.unique&&e.unique!=="off"&&t.addIssue({code:"custom",message:'`unique` is not valid with mode:"structural".',path:["unique"]});let n=e.pattern&&!["php","bash","sh","zsh"].includes(e.langType??"")?/(?<!\$)\$\$(?!\$)[A-Z_][A-Z0-9_]*/.exec(e.pattern):null;if(n){let r=n[0].slice(2);t.addIssue({code:"custom",message:`\`${n[0]}\` is not a metavariable and matches nothing \u2014 use \`$${r}\` for one node or \`$$$${r}\` for a list of nodes.`,path:["pattern"]})}return}(e.pattern||e.rule)&&t.addIssue({code:"custom",message:'`pattern`/`rule` require mode:"structural".',path:[e.pattern?"pattern":"rule"]}),e.searchText||t.addIssue({code:"custom",message:'`searchText` is required unless mode:"structural".',path:["searchText"]}),e.matchWindow!==void 0&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'matchWindow requires output:"matchOnly".',path:["matchWindow"]}),(e.unique==="list"||e.unique==="count")&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'unique requires output:"matchOnly".',path:["unique"]})}),Q_=Z(z_,{maxQueries:5});var Lp=["typescript","javascript","rust","python","go","java","scala","markdown","json","yaml","generic"],ae={exactWholeWord:6,exactCaseInsensitive:3,substring:1,declarationLine:8,exportLine:4,importLine:3,configKeyLine:4,headingLine:4,commentOrStringPenalty:-2,pathUnderQuery:4,pathSegmentToken:3,extMatchesLangType:2,sourceDir:1.5,lowSignalPathPenalty:-5,testPathPenalty:-3.5,rareQueryTokenScale:2,rareQueryTokenCap:3,matchCountScale:1.5,matchCountCap:6},_p=2e3,kp=/^\s*(\/\/|#|\*|\/\*|<!--|--)/,Xb={declaration:[/\b(function|class|interface|type|enum|const|let|var)\s+\w/,/\b\w+\s*[:=]\s*(async\s+)?(function|\()/],export:[/\bexport\b/,/\bmodule\.exports\b/,/\bexport\s+default\b/],import:[/\b(import|require)\b/,/\bfrom\s+['"]/]},Ti={typescript:{id:"typescript",extensions:["ts","tsx","mts","cts"],...Xb},javascript:{id:"javascript",extensions:["js","jsx","mjs","cjs"],...Xb},rust:{id:"rust",extensions:["rs"],declaration:[/\b(fn|struct|enum|trait|impl|mod|type|const|static|macro_rules!)\b/],export:[/\bpub(\s*\([^)]*\))?\s+(fn|struct|enum|trait|mod|type|const|static)\b/],import:[/\buse\s+/,/\bextern\s+crate\b/]},python:{id:"python",extensions:["py","pyi"],declaration:[/^\s*(async\s+)?def\s+\w/,/^\s*class\s+\w/,/^\s*@\w/],export:[/^\s*__all__\s*=/],import:[/^\s*(import|from)\s+/]},go:{id:"go",extensions:["go"],declaration:[/\b(func|type|struct|interface)\b/,/^\s*(const|var)\s+/],export:[/\b(func|type)\s+[A-Z]\w*/],import:[/^\s*import\s+/,/^\s*"[^"]+"\s*$/]},java:{id:"java",extensions:["java"],declaration:[/\b(class|interface|enum|record)\s+\w/,/\b\w+\s*\([^)]*\)\s*\{/],export:[/\b(public|protected)\b/,/^\s*@\w/],import:[/^\s*import\s+/]},scala:{id:"scala",extensions:["scala","sc"],declaration:[/\b(class|object|trait|def|val|var|type|case\s+class)\s+\w/],export:[/\b(export|implicit)\b/,/^\s*@\w/],import:[/^\s*import\s+/]},markdown:{id:"markdown",extensions:["md","markdown","mdx"],declaration:[],export:[],import:[/^\s*\[[^\]]+\]\([^)]+\)/]},json:{id:"json",extensions:["json","jsonc","json5"],declaration:[],export:[],import:[]},yaml:{id:"yaml",extensions:["yaml","yml"],declaration:[],export:[],import:[]},generic:{id:"generic",extensions:[],declaration:[/\b(function|def|fn|func|class|struct|interface|type)\b/],export:[/\b(export|public|pub)\b/],import:[/\b(import|require|use|include)\b/]}},Ip=/^\s*#{1,6}\s/,Ei=/(^|\/)(dist|build|out|coverage|node_modules|vendor|\.next|__snapshots__)(\/|$)/,U_=/(\.min\.|\.bundle\.|\.generated\.|\.d\.ts$|-lock\.)/,$_=/(^|\/)(tests?|__tests__|spec|e2e)(\/|$)|\.(test|spec)\./,W_=/(^|\/)(fixtures?|__fixtures__|snapshots?)(\/|$)/,V_=/(^|\/)(docs?|examples?)(\/|$)|\.(md|markdown|mdx|rst|txt)$/i,K_=/(^|\/)(config|\.github)(\/|$)|\.(json|ya?ml|toml|ini|cfg|conf|env)$|(^|\/)[^/]*\.config\.[jt]s$/i,X_=/(^|\/)(src|lib|app|packages|internal|pkg|cmd|crates|include|sources?)(\/|$)/,Y_=new Set(["typescript","javascript","rust","python","go","java","scala"]),Xa=/\.([a-z0-9]+)$/i;function Ai(e){return Xa.exec(e)?.[1]?.toLowerCase()??""}function Z_(e){let t=Ai(e);if(!t)return!1;for(let n of Y_)if(Ti[n].extensions.includes(t))return!0;return!1}function Op(e,t,n){if(n&&n!=="auto")return Ti[n];let r=Ai(e),o=(t??"").toLowerCase();for(let i of Lp){let s=Ti[i];if(i!=="generic"&&o&&(i===o||s.extensions.includes(o)))return s}for(let i of Lp){let s=Ti[i];if(i!=="generic"&&s.extensions.includes(r))return s}return Ti.generic}function Ya(e){return U_.test(e)?"generated":W_.test(e)?"fixture":$_.test(e)?"test":K_.test(e)?"config":V_.test(e)?"docs":!Ei.test(e)&&(X_.test(e)||Z_(e))?"source":"unknown"}function vp(e){if(!e)return!1;if(Ei.test(e))return!0;let t=Ya(e);return t==="test"||t==="docs"||t==="fixture"||t==="generated"}function Li(e,t){for(let n of e)if(n.test(t))return!0;return!1}function Za(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Fp(e){return!!e&&/^[A-Za-z_$][\w$]*$/.test(e.trim())}function Mp(e,t,n){if(e.indexOf(`
|
|
42
|
+
`}var Af=b(()=>{"use strict";Ke();ht();hs();rl();Tf();$l();Be();or();Mm()});function Ql(e){return e?!EF.has(e):!1}var EF,Lf=b(()=>{"use strict";EF=new Set(["break","case","catch","class","const","continue","debugger","default","delete","do","else","enum","export","extends","false","finally","for","function","if","import","in","instanceof","new","null","return","super","switch","this","throw","true","try","typeof","var","void","while","with","yield","let","static","async","await"])});import{posix as Et}from"node:path";function Wx(e,t,n,r=new Map,o=new Map){let i=new Map,s=new Map,a=new Map;for(let[p,f]of e)for(let m of f.imports??[]){if(m.importKind==="module")continue;let h=ei(p,m.moduleScope??[]),y=a.get(h)??[];y.push(m),a.set(h,y)}let c=[],l=Math.max(64,t.size*8),d=!1,u=p=>{let f=Cn(p.root,p.path);if(!e.has(p.file)||e.get(p.file)?.rustRootUnsupported){i.set(f,null);return}if(i.has(f)){i.set(f,null);return}if(p.depth>64||c.length>=l){i.set(f,null),d=!0;return}i.set(f,p);let m=ei(p.file,p.scope),h=s.get(m)??[];h.push(p),s.set(m,h),c.push(p)};for(let p of new Set(n))t.has(p)&&u({root:p,path:[],file:p,scope:[],directory:Et.dirname(p),attributeDirectory:Et.dirname(p),depth:0});for(let p=0;p<c.length;p++){let f=c[p];if(i.get(Cn(f.root,f.path))===f)for(let m of e.get(f.file)?.modules??[]){if(ei(f.file,m.scope)!==ei(f.file,f.scope))continue;let h=[...f.path,m.name],y=Cn(f.root,h);if(m.unsupported||m.path!==void 0&&Et.isAbsolute(m.path)||m.path?.includes("\\")||m.path?.includes("\0")){i.set(y,null);continue}if(m.inline){let T=m.path===void 0?Et.join(f.directory,m.name):Et.normalize(Et.join(f.attributeDirectory,m.path));u({...f,path:h,scope:[...f.scope,m.name],directory:T,attributeDirectory:T,depth:f.depth+1});continue}let R=(m.path===void 0?[Et.join(f.directory,`${m.name}.rs`),Et.join(f.directory,m.name,"mod.rs")]:[Et.normalize(Et.join(f.attributeDirectory,m.path))]).filter(T=>t.has(T)&&!Et.isAbsolute(T)&&T!==".."&&!T.startsWith("../"));if(R.length!==1){i.set(y,null);continue}let S=R[0],C=Et.dirname(S),w=m.path!==void 0||Et.basename(S)==="mod.rs"?C:Et.join(C,m.name);u({root:f.root,path:h,file:S,scope:[],directory:w,attributeDirectory:C,depth:f.depth+1})}}return(p,f,m=[],h=!1,y)=>{let g=(F,P,x)=>(a.get(ei(F,P))??[]).some(_=>!(F===f&&_.line===y&&_.specifier===p)&&(_.localName===x||_.importedName==="*")),R=p.split("::");if(R.some(F=>!/^(?:[\p{L}_][\p{L}\p{N}_]*|\*)$/u.test(F)))return Ot();let S=R[0],C=["std","core","alloc"].includes(S),w=s.get(ei(f,m));if(!w?.length)return C&&!g(f,m,S)&&!e.get(f)?.modules?.some(F=>F.name===S)?{target:null,status:"external"}:Ot();let T=w.map(F=>{if(i.get(Cn(F.root,F.path))!==F)return Ot();let P=F.root,x=[...F.path],_=[...R];if(S==="crate")x=[],_.shift();else if(S==="self")_.shift();else if(S==="super")for(;_[0]==="super";){if(!x.length)return Qx();x.pop(),_.shift()}else{let A=o.get(P),I=["2018","2021","2024"].includes(A??"");if(x.length>0&&!I&&A!=="2015"&&(i.has(Cn(P,[...x,S]))||i.has(Cn(P,[S]))))return Ot();if(A==="2015"&&(x=[]),!i.has(Cn(P,[...x,S]))){let L=i.get(Cn(P,x));if(L&&g(L.file,L.scope,S))return Ot();let M=r.get(P)?.get(S);if(!M)return C?{target:null,status:"external"}:Ot();if(A==="2015")return Ot();if(M.external)return{target:null,status:"external"};if(!M.root)return Ot();P=M.root,x=[],_.shift()}}let v=i.get(Cn(P,x));if(!v)return Ot();for(let A=0;A<_.length;A++){let I=_[A];if(I==="*"&&A===_.length-1)break;let L=Cn(P,[...x,I]);if(!i.has(L)){if(A<_.length-1&&g(v.file,v.scope,I))return Ot();if(A===_.length-1&&!h)break;return d?Ot():Qx()}let M=i.get(L);if(!M)return Ot();v=M,x.push(I)}return{target:v.file,status:"resolved"}}),k=T[0];return T.every(F=>F.target===k.target&&F.status===k.status)?k:Ot()}}var Ot,Qx,Cn,ei,Vx=b(()=>{"use strict";Ot=()=>({target:null,status:"unsupported"}),Qx=()=>({target:null,status:"unresolvedInternal"}),Cn=(e,t)=>JSON.stringify([e,t]),ei=(e,t)=>JSON.stringify([e,t])});import{execFile as AF}from"node:child_process";import{access as Kx,realpath as Wl,stat as kf}from"node:fs/promises";import{constants as Xx}from"node:fs";import{homedir as LF}from"node:os";import{basename as Yx,delimiter as Jx,dirname as Zx,isAbsolute as _f,join as vf,relative as kF,resolve as _F,sep as vF}from"node:path";function pr(e,t){let n=kF(e,t);return n===""||!n.startsWith(`..${vF}`)&&n!==".."&&!_f(n)}function xn(e){let t=e-Date.now();if(t<=0)throw new ze("cargo-metadata-limit","Cargo metadata exceeded its five-second execution budget.");return t}function If(e,t,n,r,o){return new Promise((i,s)=>{AF(e,t,{cwd:n,env:r,encoding:"utf8",shell:!1,timeout:xn(o),maxBuffer:Vl},(a,c)=>{if(a){let l=a.killed||a.code==="ERR_CHILD_PROCESS_STDIO_MAXBUFFER";s(new ze(l?"cargo-metadata-limit":a.code==="ENOENT"?"cargo-unavailable":"cargo-metadata-failed",l?"Cargo metadata exceeded its time or output budget.":"The host Cargo command could not provide offline, locked workspace metadata."))}else Buffer.byteLength(c,"utf8")>Vl?s(new ze("cargo-metadata-limit","Cargo metadata exceeded its output budget.")):i(c)})})}async function ew(e,t){let n=[];for(let s of(process.env.PATH??"").split(Jx))if(_f(s)){try{let a=await Wl(s);pr(e,a)||n.push(a)}catch{}xn(t)}let r=LF(),o={PATH:[...new Set(n)].join(Jx),HOME:r,USERPROFILE:r,RUSTUP_AUTO_INSTALL:"0",CARGO_NET_OFFLINE:"true"};for(let s of["SystemRoot","SYSTEMROOT","WINDIR","TEMP","TMP","LANG","LC_ALL"])process.env[s]&&(o[s]=process.env[s]);let i=process.platform==="win32"?"cargo.exe":"cargo";for(let s of n){let a=vf(s,i);try{await Kx(a,Xx.X_OK);let c=await Wl(a);if(pr(e,c))continue;let l=vf(s,process.platform==="win32"?"rustup.exe":"rustup"),d=/^rustup(?:\.exe)?$/i.test(Yx(c));if(!d)try{let[m,h]=await Promise.all([kf(a),kf(l)]);d=m.dev===h.dev&&m.ino===h.ino}catch{}if(!d)return{executable:a,env:o};let u=/^rustup(?:\.exe)?$/i.test(Yx(c))?c:l,p=(await If(u,["which","cargo"],r,o,t)).trim();if(!_f(p))throw new ze("cargo-unavailable","Rustup did not identify an absolute host Cargo executable.");let f=await Wl(p);if(pr(e,f))throw new ze("cargo-unavailable","The selected Cargo executable is inside the scanned repository.");return await Kx(f,Xx.X_OK),{executable:f,env:o}}catch(c){if(c instanceof ze)throw c}xn(t)}throw new ze("cargo-unavailable","No trusted host Cargo executable is available on the absolute PATH.")}async function tw(e,t,n){let r=new Map;async function o(a){if(xn(n),r.has(a))return r.get(a)??null;if(r.size>=IF)throw new ze("cargo-metadata-limit","Cargo manifest discovery exceeded 64 ancestor-directory probes.");r.set(a,null);let c=vf(a,"Cargo.toml");try{let l=await Wl(c);if(!pr(e,l))throw new ze("cargo-manifest-outside-root","A Cargo manifest symlink leaves the scanned root.");return(await kf(l)).isFile()?(r.set(a,l),l):null}catch(l){if(l instanceof ze)throw l;return null}}let i=await o(e);if(i)return[i];let s=new Set;for(let a of[...t].sort()){if(!a.endsWith(".rs"))continue;let c=Zx(_F(e,a));for(;pr(e,c);){let l=await o(c);if(l){s.add(l);break}if(c===e)break;c=Zx(c)}}if(!s.size)throw new ze("cargo-manifest-missing","No Cargo.toml was found at the scan root or known Rust-file ancestors.");return[...s]}var qx,Vl,IF,ze,nw=b(()=>{"use strict";qx=5e3,Vl=1048576,IF=64,ze=class extends Error{constructor(n,r){super(r);this.code=n}code}});import{realpath as Hs}from"node:fs/promises";import{dirname as Ff,isAbsolute as Of,relative as rw,resolve as ti,sep as ow}from"node:path";import{z as xe}from"zod";async function NF(e,t,n,r,o){let i=[],s=new Map;for(let a of n){if(xn(o),!Of(a.manifest_path))throw new ze("cargo-metadata-invalid","Cargo package manifests must use absolute paths.");let c=await Hs(Ff(a.manifest_path)).catch(()=>ti(Ff(a.manifest_path)));s.set(c,[...s.get(c)??[],a]);for(let l of a.targets){xn(o);let d=Of(l.src_path)?ti(l.src_path):"",u=d?await Hs(d).catch(()=>""):"",p=u?rw(e,u).split(ow).join("/"):"";if(!d||!u||!pr(e,u)||!t.has(p)){r.push({code:"cargo-target-outside-scan",message:`Cargo target ${a.name}/${l.name} is outside the scanned file set; its crate context is unsupported.`});continue}i.push({id:JSON.stringify([a.id,l.name,l.kind,d]),packageId:a.id,packageName:a.name,crateName:l.name.replaceAll("-","_"),kind:l.kind,...l.edition!==void 0?{edition:l.edition}:{},srcPath:p,dependencyAliases:[]})}}for(let a of i){let c=n.find(d=>d.id===a.packageId),l=a.kind.includes("custom-build");for(let d of c.dependencies){if(xn(o),l!==(d.kind==="build"))continue;let u=d.optional||!!d.target||d.kind==="dev",p=d.path&&Of(d.path)?await Hs(d.path).catch(()=>ti(d.path)):void 0,f=p?s.get(p)??[]:[],m=p!==void 0&&pr(e,p),h=f.length===1?f[0].targets.filter(S=>S.kind.some(C=>Ds.has(C))):[],y=(d.rename??(h.length===1?h[0].name:d.name)).replaceAll("-","_"),g=f.length===1?i.filter(S=>S.packageId===f[0].id&&S.kind.some(C=>Ds.has(C))):[],R=!u&&g.length===1?g[0]:void 0;a.dependencyAliases.push({alias:y,packageName:d.name,...R?{targetId:R.id}:{},external:f.length===0&&!m,conditional:u}),u?r.push({code:"cargo-conditional-dependency",message:`Dependency ${y} of ${c.name} is conditional; metadata without dependency resolution does not establish an active import.`}):(f.length||m)&&!R&&r.push({code:"cargo-workspace-dependency-unresolved",message:`Local dependency ${y} of ${c.name} has no unique workspace library target in this scan.`})}if(!l&&!a.kind.some(d=>Ds.has(d))){let d=i.filter(u=>u.packageId===c.id&&u.kind.some(p=>Ds.has(p)));for(let u of c.targets.filter(p=>p.kind.some(f=>Ds.has(f)))){let p=d.length===1?d[0]:void 0;a.dependencyAliases.push({alias:u.name.replaceAll("-","_"),packageName:c.name,...p?{targetId:p.id}:{},external:!1,conditional:!1})}}}return i}async function iw(e){let t=Date.now()+qx,n=[],r=[];try{let o=await Hs(ti(e.root)),i=new Set(e.files.map(u=>rw(o,ti(o,u)).split(ow).join("/"))),s=await tw(o,e.files,t),a=await ew(o,t),c=new Set,l=new Set,d=0;for(let u of s){if(xn(t),l.has(u))continue;let p=await If(a.executable,["metadata","--no-deps","--offline","--locked","--format-version=1","--manifest-path",u],Ff(u),a.env,t);if(d+=Buffer.byteLength(p,"utf8"),d>Vl)throw new ze("cargo-metadata-limit","Combined Cargo metadata output exceeded one MiB.");let f;try{f=JSON.parse(p)}catch{throw new ze("cargo-metadata-invalid","Cargo returned malformed metadata JSON.")}let m=MF.safeParse(f);if(!m.success)throw new ze("cargo-metadata-invalid","Cargo metadata does not satisfy format version 1 workspace requirements.");let h=new Set(m.data.workspace_members),y=m.data.packages.filter(R=>h.has(R.id)),g=await NF(o,i,y,n,t);r.push(...g.filter(R=>!c.has(R.packageId)));for(let R of y)c.add(R.id),l.add(await Hs(R.manifest_path).catch(()=>ti(R.manifest_path)));xn(t)}!r.length&&!n.length&&n.push({code:"cargo-target-outside-scan",message:"Cargo metadata contained no workspace targets within this scan."})}catch(o){n.push(o instanceof ze?{code:o.code,message:o.message}:{code:"cargo-metadata-failed",message:"Cargo workspace metadata could not be inspected within the scanned root."})}return{status:r.length?"ok":"unsupported",targets:r,diagnostics:n}}var Ds,OF,FF,MF,sw=b(()=>{"use strict";nw();Ds=new Set(["lib","rlib","dylib","cdylib","staticlib","proc-macro"]),OF=xe.object({name:xe.string(),rename:xe.string().nullable().optional(),path:xe.string().optional(),optional:xe.boolean().default(!1),kind:xe.string().nullable().optional(),target:xe.string().nullable().optional()}),FF=xe.object({id:xe.string(),name:xe.string(),manifest_path:xe.string(),targets:xe.array(xe.object({name:xe.string(),kind:xe.array(xe.string()).min(1),src_path:xe.string(),edition:xe.string().optional()})).min(1),dependencies:xe.array(OF)}),MF=xe.object({version:xe.literal(1),workspace_members:xe.array(xe.string()).min(1),packages:xe.array(FF).min(1)})});import{posix as DF}from"node:path";async function aw(e,t,n,r,o){let i=new Map(n.filter(l=>l.relativePath.endsWith(".rs")).map(l=>[l.relativePath,l.parsed])),s=[...i.keys()].filter(l=>["lib.rs","main.rs"].includes(DF.basename(l))&&!/(^|\/)(bin|tests|benches|examples)\//.test(l)),a=new Map,c=new Map;if(r==="cargo"&&i.size>0){let l=await iw({root:e,files:[...t]}),d=new Map,u=new Set;for(let m of l.targets){let h=JSON.stringify([m.edition,m.dependencyAliases.map(y=>[y.alias,y.targetId,y.external,y.conditional]).sort((y,g)=>String(y[0]).localeCompare(String(g[0])))]);d.has(m.srcPath)&&d.get(m.srcPath)!==h&&u.add(m.srcPath),d.set(m.srcPath,h)}let p=l.targets.filter(m=>!u.has(m.srcPath));s=p.map(m=>m.srcPath),c=new Map(p.filter(m=>m.edition!==void 0).map(m=>[m.srcPath,m.edition]));for(let m of u)o.diagnostics.push({file:m,code:"unsupported-linking",message:"Cargo targets share a source file but disagree on edition or dependency context; root resolution is ambiguous."});let f=new Map(l.targets.map(m=>[m.id,m.srcPath]));a=new Map(p.map(m=>{let h=new Map,y=new Map;for(let g of m.dependencyAliases){let R=JSON.stringify([g.packageName,g.targetId,g.external,g.conditional]);y.has(g.alias)&&y.get(g.alias)!==R?(h.set(g.alias,{external:!1}),y.set(g.alias,"ambiguous"),o.diagnostics.push({file:m.srcPath,code:"unsupported-linking",message:`Cargo dependency alias ${g.alias} has conflicting contexts; import resolution is ambiguous.`})):(y.set(g.alias,R),h.set(g.alias,{root:g.conditional?void 0:f.get(g.targetId??""),external:!g.conditional&&g.external}))}return[m.srcPath,h]}));for(let m of l.diagnostics)o.diagnostics.push({file:".",code:"unsupported-linking",message:`Cargo metadata ${m.code}: ${m.message}`})}return Wx(i,t,s,a,c)}var cw=b(()=>{"use strict";Vx();sw()});function lw(e){return/[%\\?#]/.test(e)||e.split("/").some(t=>!t||t==="."||t===".."||t.toLowerCase()==="node_modules")}function Mf(e,t,n,r,o=0){if(--r.remaining<0||o>32)return{kind:"unsupported"};if(e===null)return{kind:"blocked"};if(typeof e=="string")return!e.startsWith("./")||lw(e.slice(2))?{kind:"invalid"}:n!==void 0&&lw(n)?{kind:"invalid"}:{kind:"target",target:n===void 0?e:e.replaceAll("*",n)};if(Array.isArray(e)){if(e.length===0)return{kind:"blocked"};let s={kind:"unmatched"};for(let a of e){let c=Mf(a,t,n,r,o+1);if(c.kind==="target"||c.kind==="unsupported")return c;c.kind!=="unmatched"&&(s=c)}return s}if(!e||typeof e!="object")return{kind:"invalid"};let i=Object.entries(e);if(i.some(([s])=>s.startsWith(".")||/^(0|[1-9]\d*)$/.test(s)))return{kind:"invalid"};for(let[s,a]of i){let c=t.startsWith("types");if(s==="default"||s==="node"||s==="types"&&c||s===(t==="require"||t==="types-require"?"require":"import")){let u=Mf(a,t,n,r,o+1);if(u.kind!=="unmatched")return u}else if(!["import","require","types"].includes(s)&&!(s.startsWith("types@")&&!c))return{kind:"unsupported"}}return{kind:"unmatched"}}function Kl(e,t,n){if(t.endsWith("/"))return{kind:"blocked"};if(n==="types"||n==="static"){let i=Kl(e,t,n==="types"?"types-import":"import"),s=Kl(e,t,n==="types"?"types-require":"require");return JSON.stringify(i)===JSON.stringify(s)?i:{kind:"unsupported"}}let r=e,o;if(e&&typeof e=="object"&&!Array.isArray(e)){let i=Object.entries(e);if(i.some(([s])=>s.startsWith("."))){if(i.some(([a])=>a!=="."&&!a.startsWith("./")))return{kind:"invalid"};let s=i.find(([a])=>a===t&&!a.includes("*"));if(s)r=s[1];else{let c=i.filter(([p])=>p.split("*").length===2).sort(([p],[f])=>f.indexOf("*")-p.indexOf("*")||f.length-p.length).find(([p])=>{let[f,m]=p.split("*");return t.startsWith(f)&&t.endsWith(m)&&t.length>=p.length});if(!c)return{kind:"blocked"};let[l,d]=c,u=l.indexOf("*");o=t.slice(u,t.length-(l.length-u-1)),r=d}}else if(t!==".")return{kind:"blocked"}}else if(t!==".")return{kind:"blocked"};return Mf(r,n,o,{remaining:2048})}var uw=b(()=>{"use strict"});import{readFileSync as HF}from"node:fs";import{join as GF,posix as Xl}from"node:path";function jF(e,t){if(!t.startsWith("./"))return[];let n=t.slice(2).split("/"),r=[n];BF.has(n[0]??"")&&r.push(["src",...n.slice(1)]);let o=new Set;for(let i of r){let s=Xl.normalize(Xl.join(e,...i));o.add(s);for(let[a,c]of Object.entries(zF))if(s.endsWith(a))for(let l of c)o.add(s.slice(0,-a.length)+l)}return[...o]}function pw(e,t){let n=new Set(["."]);for(let i of t){let s=Xl.dirname(i);for(;s!==".";)n.add(s),s=Xl.dirname(s)}let r=new Map;for(let i of n){let s;try{s=JSON.parse(HF(GF(e,i,"package.json"),"utf8"))}catch{continue}!s||typeof s.name!="string"||r.set(s.name,r.has(s.name)?null:{directory:i,exports:s.exports})}let o=new Map;return{resolve(i,s){let a=i.split("/"),c=i.startsWith("@")?2:1,l=a.slice(0,c).join("/");if(!r.has(l))return;let d=`${s}\0${i}`,u=o.get(d);if(u)return u;let p=r.get(l),f=a.slice(c).join("/"),m=p?Kl(p.exports,a.length>c?`./${f}`:".",s):{kind:"unsupported"},h=m.kind==="target"&&p?jF(p.directory,m.target).find(g=>t.has(g)):void 0,y=h?{target:h,status:"resolved"}:{target:null,status:m.kind==="invalid"||m.kind==="unsupported"?"unsupported":"unresolvedInternal",reason:p?p.exports===void 0?"package-exports-unavailable":m.kind==="target"?"package-export-target-unavailable":m.kind==="invalid"?"invalid-package-exports":m.kind==="unsupported"?"package-export-context-unavailable":"package-subpath-not-exported":"ambiguous-workspace-package"};return o.set(d,y),y}}}var BF,zF,dw=b(()=>{"use strict";uw();BF=new Set(["dist","out","lib","build"]),zF={".js":[".ts",".tsx"],".jsx":[".tsx"],".mjs":[".mts",".ts"],".cjs":[".cts",".ts"],".d.ts":[".ts"]}});import{lstatSync as mw,readFileSync as UF,realpathSync as fw}from"node:fs";import{basename as $F,dirname as hw,isAbsolute as QF,relative as WF,resolve as Nf,sep as Df}from"node:path";function gw(e,t,n,r){let o=new Set,i=new Map,s=Nf(e),a=!1,c,l=()=>{if(a)return;a=!0,s=fw(e);let u=s;for(let p=0;p<32;p++){let f=Nf(u,"package.json");try{if(mw(f).isFile()){c=f;break}}catch{}let m=hw(u);if(m===u)break;u=m}},d=!1;return{targets:o,truncated:()=>d,resolve(u,p){if(!u.startsWith(".")||$F(u)!=="package.json")return;l();let f=Nf(s,hw(p),u),m=i.get(f);if(m)return m;let h={target:null,status:"unresolvedInternal"},y=WF(s,f),g=y!==".."&&!y.startsWith(`..${Df}`)&&!QF(y);if(!g&&f!==c||g&&y.split(Df).some(R=>n.includes(R)))h={target:null,status:"unsupported"};else try{let R=mw(f);if(!R.isFile()||R.size>VF||fw(f)!==f)h={target:null,status:"unsupported"};else if(t.size>=r&&!t.has(y))d=!0;else{let S=JSON.parse(UF(f,"utf8"));if(S===null||typeof S!="object"||Array.isArray(S))h={target:null,status:"unsupported"};else{let C=y.split(Df).join("/");o.add(C),t.add(C),h={target:C,status:"resolved"}}}}catch{}return i.set(f,h),h}}}var VF,yw=b(()=>{"use strict";VF=64*1024});function bw(e,t,n){for(let r of n??[])r.callee!=="require"&&r.callee!=="module.require"||(e.imports.unsupported++,e.diagnostics.push({file:t,...r.line!==void 0?{line:r.line}:{},code:"unsupported-linking",message:"CommonJS require calls are not linked: native call facts do not establish module arguments or binding identity. Verify dependencies with LSP."}))}function Rw(e){let t=new Map;for(let r of e){let o=JSON.stringify([r.file,r.line??null,r.code,r.message]);t.has(o)||t.set(o,r)}let n=(r,o)=>r<o?-1:r>o?1:0;return[...t.values()].sort((r,o)=>n(r.file,o.file)||(r.line??-1)-(o.line??-1)||n(r.code,o.code)||n(r.message,o.message))}var Hf=b(()=>{"use strict"});import{createHash as KF}from"node:crypto";function Yl(e){let t=Sw.get(e);if(t)return t;let n=Rw(e).map(s=>Object.freeze({...s}));Object.freeze(n);let r=KF("sha256").update(JSON.stringify(n.map(s=>[s.file,s.line??null,s.code,s.message]))).digest("hex"),o={};for(let s of n)o[s.code]=(o[s.code]??0)+1;let i=Object.freeze({diagnostics:n,resultId:r,diagnosticCounts:Object.freeze(o)});return Sw.set(n,i),i}var Sw,Gf=b(()=>{"use strict";Hf();Sw=new WeakMap});import{posix as Jl}from"node:path";function Cw(e){return e.split("\\").join("/")}function xw(e,t,n){let r=Cw(e);if(r.startsWith("/")||!r.startsWith("."))return null;let o=Jl.dirname(Cw(t)),i=Jl.normalize(Jl.join(o,r)),s=[];if(Bf.some(c=>i.endsWith(c))){s.push(i);for(let[c,l]of Object.entries(XF))if(i.endsWith(c)){s.push(i.slice(0,-c.length)+l);break}}else{s.push(i);for(let c of Bf)s.push(`${i}${c}`);for(let c of Bf)s.push(Jl.join(i,`index${c}`))}for(let c of s)if(n.has(c))return c;return null}var Bf,XF,ww=b(()=>{"use strict";Bf=[".ts",".tsx",".js",".jsx",".mjs",".cjs"],XF={".js":".ts",".jsx":".tsx",".mjs":".mts",".cjs":".cts"}});import{posix as Rt}from"node:path";function Tw(e,t,n,r){if(n!=="c-relative"||Rt.isAbsolute(e))return dr;let o=Rt.normalize(Rt.join(Rt.dirname(t),e));return o===".."||o.startsWith("../")?dr:r.has(o)?{target:o,status:"resolved"}:{target:null,status:"unresolvedInternal"}}function Ew(e,t,n,r,o){if(r!=="python-relative"&&r!=="python-absolute")return dr;let i=0;for(;e[i]===".";)i++;let s=i?Rt.dirname(t):".",a=new Set;for(let f=0;f<i;f++){let m=Zl(s,o);if(m.length!==1)return dr;if(m[0]!==t&&a.add(m[0]),f+1<i){if(s==="."||s===".."||s.startsWith("../"))return dr;s=Rt.dirname(s)}}let c=e.slice(i).split(".").filter(Boolean).join("/"),l=Rt.normalize(Rt.join(s,c));if(Rt.isAbsolute(l)||l===".."||l.startsWith("../"))return dr;let d=!c&&i?Zl(l,o):Pw(l,o);if(!i&&["sys","builtins"].includes(c)&&d.length||d.length>1)return dr;if(!d.length){let f=`${l}/`;return{target:null,status:[...o].some(h=>h.startsWith(f))?"unsupported":i?"unresolvedInternal":"external"}}let u=d[0];a.delete(u);let p="resolved";if(["__init__.py","__init__.pyi"].includes(Rt.basename(u))&&n){let f=n==="*"?[]:Pw(Rt.join(Rt.dirname(u),n),o);f.length!==1?(n!=="*"||i)&&(p="unsupported"):(u!==t&&a.add(u),u=f[0],u!==t&&a.add(u))}for(l=Rt.dirname(u);l!==".";){let f=Zl(l,o);f.length>1&&(p="unsupported");for(let m of f)m!==u&&m!==t&&a.add(m);l=Rt.dirname(l)}return{target:u===t?null:u,status:p,additionalTargets:[...a].sort()}}function Zl(e,t){return["__init__.py","__init__.pyi"].map(n=>Rt.join(e,n)).filter(n=>t.has(n))}function Pw(e,t){return[`${e}.py`,`${e}.pyi`,...Zl(e,t)].filter(n=>t.has(n))}var dr,Aw=b(()=>{"use strict";dr={target:null,status:"unsupported"}});import{posix as YF}from"node:path";function Lw(e){let{relativePath:t,parsed:n,knownFiles:r,getWorkspacePackageExports:o,metadata:i,resolveRust:s,coverage:a}=e,c=YF.extname(t).slice(1),l=n.language??c,d=["js","jsx","ts","tsx","mjs","cjs","mts","cts"].includes(c),u=["py","pyi"].includes(c),p=["c","h","cc","cpp","cxx","hh","hpp","hxx"].includes(c),f=d?"javascript-relative":c==="rs"?"rust-modules":u?"python-modules":p?"c-relative-includes":"unsupported",m=a.languages.find(g=>g.language===l);m?m.files++:a.languages.push({language:l,files:1,linking:f});for(let g of n.diagnostics??[])a.diagnostics.push({file:t,code:g.startsWith("unsupported ")?"unsupported-linking":g.startsWith("tree-sitter graph facts are syntax-only;")?"syntax-only":"parse-recovery",message:g});f==="unsupported"&&a.diagnostics.push({file:t,code:"unsupported-linking",message:`Import linking is unsupported for ${l}; declarations are syntax facts only.`}),d&&!n.commonJs&&bw(a,t,n.calls);let h=new Set;return{extension:c,javascript:d,python:u,cFamily:p,auxiliaryTargets:h,resolve:(g,R,S={})=>{let{moduleDeclaration:C=!1,resolutionHint:w,moduleScope:T,importedName:k,exportMode:F="import"}=S,P=F==="types"?["mts","mjs"].includes(c)?"types-import":["cts","cjs"].includes(c)?"types-require":"types":F==="static"?c==="cts"?"require":["ts","tsx"].includes(c)?"static":"import":F,x;if(w==="unsupported"||f==="unsupported"||d&&g.startsWith("/"))x={target:null,status:"unsupported"};else if(c==="rs")x=s(g,t,T,C,R);else if(u)x=Ew(g,t,k,w,r);else if(p)x=Tw(g,t,w,r);else{let _=i.resolve(g,t),v=xw(g,t,r),A=!g.startsWith(".")&&!g.startsWith("/")?o().resolve(g,P):void 0;x=_??A??{target:v,status:v?"resolved":g.startsWith(".")||g.startsWith("/")?"unresolvedInternal":"external"}}for(let _ of x.additionalTargets??[])h.add(_);return a.imports[x.status]++,(x.status==="unsupported"||x.status==="unresolvedInternal")&&a.diagnostics.push({file:t,line:R,code:x.status==="unsupported"?"unsupported-linking":"unresolved-internal",message:`Cannot link import ${JSON.stringify(g)} (${x.status}${x.reason?`: ${x.reason}`:""}).`}),x.target}}}var kw=b(()=>{"use strict";Hf();ww();Aw()});import{posix as _w}from"node:path";function ql(e){return[...new Set([...JF,...e??[]])]}async function ni(e,t,n,r="syntax"){let o=await U.scanGraphFacts({path:e,excludeDir:t,maxFiles:n,maxFileBytes:1e6}),i=o.entries,s=o.candidatePaths.map(C=>_w.normalize(C.split("\\").join("/"))),a=new Set(s),c,l=()=>c??=pw(e,new Set(s)),d=gw(e,a,t,n),u=new Map,p=new Map,f=new Set,m=new Set,h=new Map,y=o.filesSkipped,g={basis:"syntactic",referenceBasis:"lexical-occurrence",languages:[],imports:{resolved:0,external:0,unresolvedInternal:0,unsupported:0},diagnostics:[]},R=[];for(let C of i){let w=_w.normalize(C.relativePath.split("\\").join("/"));try{let T=JSON.parse(C.factsJson);R.push({relativePath:w,parsed:T,referenceCounts:C.referenceCounts})}catch{y++}}let S=await aw(e,a,R,r,g);for(let C of R){let{relativePath:w,parsed:T}=C,{extension:k,javascript:F,python:P,cFamily:x,auxiliaryTargets:_,resolve:v}=Lw({relativePath:w,parsed:T,knownFiles:a,getWorkspacePackageExports:l,metadata:d,resolveRust:S,coverage:g}),A=(T.declarations??[]).filter(E=>!F||Ql(E.name)).map(E=>({id:E.id,name:E.name,kind:E.kind,line:E.line,exported:E.exported??!1})),I=new Map(C.referenceCounts.map(({name:E,count:G})=>[E,G])),L=(T.exports??[]).filter(E=>E.source&&E.name!=="*").map(E=>({specifier:E.source,localName:E.name,importedName:E.localName??E.name,line:E.line,importKind:E.exportKind==="type"?"type":"value",resolvedTarget:v(E.source,E.line,{exportMode:E.exportKind==="type"?"types":"static"})})),M={relativePath:w,declarations:A,imports:(T.imports??[]).map(E=>({specifier:E.specifier,localName:E.localName,importedName:E.importedName,line:E.line,importKind:E.importKind==="type"?"type":E.importKind==="module"?"module":"value",resolvedTarget:v(E.specifier,E.line,{moduleDeclaration:E.importKind==="module",resolutionHint:E.resolutionHint,moduleScope:E.moduleScope,importedName:E.importedName,exportMode:E.importKind==="type"?"types":"static"})})),namedReexports:L,calls:(T.calls??[]).filter(E=>E.kind!=="dynamic-import").map(E=>({caller:E.caller,callee:E.callee})),referenceCounts:I};u.set(w,M);let K=new Set,ie=new Set,Ye=new Map,st=(E,G)=>{if(k==="rs"&&E===w)return;K.add(E);let ae=Ye.get(E)??new Set;ae.add(G),d.targets.has(E)&&!G.startsWith("type-")&&ae.add("metadata-import"),Ye.set(E,ae)};for(let E of M.imports){let G=E.resolvedTarget;G&&(st(G,k==="rs"?E.importKind==="module"?"rust-module":"rust-use":E.importKind==="type"?"type-import":P?"python-import":x?"c-include":"static-import"),(E.importedName==="*"||x)&&m.add(G))}for(let E of _)st(E,"python-import"),m.add(E);for(let E of M.namedReexports){let G=E.resolvedTarget;G&&st(G,k==="rs"?"rust-use":E.importKind==="type"?"type-named-reexport":"named-reexport")}for(let E of T.calls??[]){if(E.kind!=="dynamic-import")continue;let G=v(E.callee,0);G&&(st(G,"dynamic-import"),m.add(G))}for(let E of T.commonJs??[]){if(!E.specifier){g.imports.unsupported++,g.diagnostics.push({file:w,line:E.line,code:"unsupported-linking",message:`CommonJS require cannot be linked (${E.reason??"missing-native-provenance"}).`});continue}let G=v(E.specifier,E.line,{exportMode:"require"});G&&(st(G,E.binding==="create-require"?"create-require":"commonjs-require"),m.add(G))}for(let E of T.exports??[]){if(!E.source||E.name!=="*")continue;let G=v(E.source,E.line,{exportMode:E.exportKind==="type"?"types":"static"});if(G){st(G,k==="rs"?"rust-use":E.exportKind==="type"?"type-star-reexport":"star-reexport"),f.add(G);let ae=h.get(G)??[];ae.push(w),h.set(G,ae)}}for(let[E,G]of Ye)G.size===1&&G.has("dynamic-import")&&ie.add(E);p.set(w,{relativePath:w,importsFiles:K,dynamicImportsFiles:ie,edgeKinds:Ye})}for(let C of d.targets)u.set(C,{relativePath:C,declarations:[],imports:[],namedReexports:[],calls:[],referenceCounts:new Map}),p.set(C,{relativePath:C,importsFiles:new Set,dynamicImportsFiles:new Set,edgeKinds:new Map});return d.targets.size&&g.languages.push({language:"json",files:d.targets.size,linking:"metadata"}),g.diagnostics=Yl(g.diagnostics).diagnostics,{coverage:g,facts:u,fileGraph:p,filesScanned:u.size,filesSkipped:y,truncated:o.truncated||d.truncated(),starReexportTargets:f,namespaceImportTargets:m,starReexporters:h}}var JF,eu=b(()=>{"use strict";We();Lf();cw();dw();yw();Gf();kw();JF=["node_modules","dist","build","out","coverage",".git","target",".next",".cache"]});import{existsSync as vw}from"node:fs";import{dirname as zf,join as Iw}from"node:path";function tu(e,t="syntax"){let n=zf(e),r=t==="cargo"||e.endsWith(".rs"),o;for(;;){if(r&&vw(Iw(n,"Cargo.toml")))return n;if(!o&&vw(Iw(n,"package.json"))){if(!r)return n;o=n}let i=zf(n);if(i===n)break;n=i}return o??zf(e)}var jf=b(()=>{"use strict"});import{readFileSync as ZF}from"node:fs";import{posix as Uf}from"node:path";function Qf(e){return qF.test(e)}function tM(e){let t=[];for(let n of e.split(/\s+/)){let r=n.includes("=")?[n,n.slice(n.indexOf("=")+1)]:[n];for(let o of r){let i=o.replace(/^["']|["']$/g,"");eM.test(i)&&!i.startsWith("-")&&t.push(i)}}return t}function $f(e){return e.split("\\").join("/")}function Ow(e){return e.replace(/^\.\//,"")}function Mw(e){for(let[t,n]of Object.entries(nM))if(e.endsWith(t))return e.slice(0,-t.length)+n}function rM(e,t){let n=[],r=Mw(e);r&&n.push(r);for(let o of Fw){let i=`${o}/`;if(!e.startsWith(i))continue;let a=`src/${e.slice(i.length)}`;n.push(a);let c=Mw(a);c&&n.push(c)}return Fw.some(o=>e.startsWith(`${o}/`))&&t.has("src/index.ts")&&n.push("src/index.ts"),n.find(o=>t.has(o))}function Gs(e,t){if(typeof e=="string"){t.push(e);return}if(Array.isArray(e)){for(let n of e)Gs(n,t);return}if(e&&typeof e=="object")for(let n of Object.values(e))Gs(n,t)}function nu(e,t,n,r){let o=[],i=new Set,s=!1;if(t&&t.length>0){let a=$f(e).replace(/\/$/,"");for(let c of t){let l=Ow($f(c));if(l===a?l=".":l.startsWith(a+"/")&&(l=l.slice(a.length+1)),l=Uf.normalize(l),r.has(l)){i.add(l);continue}let d=l==="."?"":`${l.replace(/\/$/,"")}/`,u=[...r].filter(p=>p.startsWith(d));if(u.length>0)for(let p of u)i.add(p);else o.push(`entrypoint not found in scan: ${c} \u2014 pass a file or dynamic asset directory relative to the scanned path, or an absolute path under it`)}}else{let a;try{let c=Uf.join(e,"package.json");a=JSON.parse(ZF(c,"utf-8"))}catch{}if(a){let c=[];if(Gs(a.main,c),Gs(a.exports,c),Gs(a.bin,c),a.scripts&&typeof a.scripts=="object")for(let l of Object.values(a.scripts))typeof l=="string"&&c.push(...tM(l));for(let l of c){let d=Uf.normalize(Ow($f(l))),u=r.has(d)?d:rM(d,r);u&&i.add(u)}}i.size===0&&(o.push("no entrypoints resolved from package.json \u2014 pass `entrypoints` explicitly, or every export in a reachable file will read as unreachable"),s=!0)}if(n)for(let a of r)Qf(a)&&i.add(a);return{entrypoints:[...i],warnings:o,lowConfidence:s}}var qF,eM,Fw,nM,Wf=b(()=>{"use strict";qF=/(\.(test|spec)\.[^/]+$)|(^|\/)(__tests__|tests?)\//i;eM=/\.(mjs|cjs|jsx?|tsx?)$/i;Fw=["dist","build","out"],nM={".js":".ts",".jsx":".tsx",".mjs":".mts",".cjs":".cts"}});function Bs(e,t){let n=new Set,r=[];for(let o of t)n.has(o)||(n.add(o),r.push(o));for(;r.length>0;){let o=r.pop(),i=e.get(o);if(i)for(let s of i.importsFiles)n.has(s)||(n.add(s),r.push(s))}return n}function ru(e){let t=0,n=new Map,r=new Map,o=new Set,i=[],s=[],a=[];for(let c of e.keys())if(!n.has(c))for(a.push({node:c,iterator:(e.get(c)?.importsFiles??new Set).values()}),n.set(c,t),r.set(c,t),t++,i.push(c),o.add(c);a.length>0;){let l=a[a.length-1],d=l.iterator.next();if(!d.done){let u=d.value;if(!n.has(u))n.set(u,t),r.set(u,t),t++,i.push(u),o.add(u),a.push({node:u,iterator:(e.get(u)?.importsFiles??new Set).values()});else if(o.has(u)){let p=r.get(l.node),f=n.get(u);r.set(l.node,Math.min(p,f))}continue}if(a.pop(),a.length>0){let u=a[a.length-1],p=r.get(u.node),f=r.get(l.node);r.set(u.node,Math.min(p,f))}if(r.get(l.node)===n.get(l.node)){let u=[],p;do p=i.pop(),o.delete(p),u.push(p);while(p!==l.node);(u.length>1||(e.get(u[0])?.importsFiles.has(u[0])??!1))&&s.push({files:u})}}return s}var Vf=b(()=>{"use strict"});function zs(e,t){return`${e}::${t}`}function oM(e,t,n,r,o,i){let s=new Set,a=[{file:e,name:t}];for(;a.length>0;){let c=a.pop(),l=zs(c.file,c.name);if(!s.has(l)){if(s.add(l),n.has(c.file)||r.has(l))return!0;for(let d of o.get(l)??[])a.push({file:d.file,name:d.localName});for(let d of i.get(c.file)??[])a.push({file:d,name:c.name})}}return!1}function Nw(e,t,n,r,o,i){let s=new Set(t.declarations.filter(p=>p.exported).map(p=>p.name)),a=new Set;for(let p of s)oM(e,p,n,r,o,i)&&a.add(p);let c=new Map,l=new Map;for(let p of t.calls){let f=c.get(p.caller)??[];f.push(p.callee),c.set(p.caller,f),s.has(p.caller)&&l.set(p.callee,(l.get(p.callee)??0)+1)}let d=[...a],u=p=>{!s.has(p)||a.has(p)||(a.add(p),d.push(p))};for(let[p,f]of c)if(!s.has(p))for(let m of f)u(m);for(let p of s)(t.referenceCounts.get(p)??0)-(l.get(p)??0)>1&&u(p);for(let p=0;p<d.length;p++){let f=d[p];for(let m of c.get(f)??[])m!==f&&u(m)}return a}var Dw=b(()=>{"use strict"});async function Hw(e,t,n){let r=ql(t.excludeDir),o=t.maxFiles??2e4,{facts:i,fileGraph:s,filesScanned:a,filesSkipped:c,truncated:l,coverage:d,namespaceImportTargets:u,starReexporters:p}=n??await ni(e,r,o,t.rustWorkspace),f=new Set(i.keys()),{entrypoints:m,warnings:h,lowConfidence:y}=nu(e,t.entrypoints,t.includeTests??!0,f);l&&h.push(`scan stopped at maxFiles (${o}) \u2014 results are partial, not a full-repo verdict`),c>0&&h.push(`${c} file(s) could not be read or parsed within the native graph bounds \u2014 results are partial, not a full-repo verdict`);let g=d?.diagnostics.some(E=>E.code!=="syntax-only")??!1;g&&h.push("Incomplete import linking or parse recovery can hide live paths. Dead-code results are low-confidence candidates and require semantic reference verification.");let R=m.filter(E=>{let G=i.get(E);return(s.get(E)?.importsFiles.size??0)===0&&(G?.declarations.length??0)===0&&(G?.namedReexports.length??0)===0}),S=R.length>0;S&&h.push(`${R.length} entrypoint file(s) parsed to no imports/exports (likely an extractor parse failure on that file) \u2014 reachability from them is unreliable, so "unreachable-file" results here are low-confidence and may be false positives: ${R.join(", ")}`);let C=Bs(s,m),w=new Set(m),T=new Set([...w,...u]),k=E=>t.includeTests!==!1||!Qf(E),F=new Map([...s].map(([E,G])=>[E,{relativePath:G.relativePath,importsFiles:new Set([...G.importsFiles].filter(ae=>!G.dynamicImportsFiles.has(ae))),dynamicImportsFiles:new Set,edgeKinds:new Map([...G.edgeKinds].map(([ae,at])=>[ae,new Set([...at].filter($e=>$e!=="dynamic-import"))]).filter(([,ae])=>ae.size>0))}])),P=Bs(F,m),x=[...C].filter(E=>!P.has(E)).sort();x.length>0&&h.push(`${x.length} file(s) reachable only through a dynamic import() \u2014 lower confidence than static analysis, verify with lspGetSemantics before treating as proof: ${x.join(", ")}`);let _=new Set,v=new Map;for(let E of C){let G=i.get(E);if(G){for(let ae of G.imports){let at=ae.resolvedTarget;at&&_.add(zs(at,ae.importedName))}for(let ae of G.namedReexports){let at=ae.resolvedTarget;if(!at)continue;let $e=zs(at,ae.importedName),Rr=v.get($e)??[];Rr.push({file:E,localName:ae.localName}),v.set($e,Rr)}}}let A=new Map;for(let[E,G]of p){let ae=G.filter(at=>C.has(at));ae.length>0&&A.set(E,ae)}let I=new Set(A.keys()),L=[],M=ru(s),K=new Map,ie=[],Ye=0;for(let E of M){let G=E.files.filter(k);if(G.length===0||!G.every($e=>!C.has($e)))continue;let at=Ye++;for(let $e of G)K.set($e,at);ie.push({id:at,files:G,reason:"mutually-referencing cluster with no path from any entrypoint \u2014 each file looks locally referenced by the others, but the cluster as a whole is unreachable"})}let st=new Map;for(let[E,G]of i){if(!k(E))continue;let ae=w.has(E),at=C.has(E);for(let $e of G.declarations){if(!$e.exported)continue;if(!at){let Qu=K.get(E);L.push({file:E,name:$e.name,kind:$e.kind,line:$e.line,reason:Qu!==void 0?"dead-cluster":"unreachable-file",...Qu!==void 0?{clusterId:Qu}:{}});continue}if(ae||I.has(E)||u.has(E))continue;let Rr=st.get(E);Rr||(Rr=Nw(E,G,T,_,v,A),st.set(E,Rr)),Rr.has($e.name)||L.push({file:E,name:$e.name,kind:$e.kind,line:$e.line,reason:"unreferenced-export",viaHeuristic:v.has(zs(E,$e.name))?"reexport-chain":"lexical-count"})}}return{filesScanned:a,filesSkipped:c,entrypointsResolved:m,deadExports:L,deadClusters:ie,warnings:h,...y||S||g||l||c>0?{confidence:"low"}:{}}}var Gw=b(()=>{"use strict";eu();Wf();Vf();Dw()});import{posix as iM}from"node:path";function Bw(e){return iM.normalize(e.split("\\").join("/")).replace(/^\.\//,"")}function ou(e,t){return[...e?.edgeKinds.get(t)??["static-import"]].sort()}function Kf(e,t){let n=new Set(t),r=new Set;for(let o of t){let i=e.get(o);for(let s of i?.importsFiles??[])if(n.has(s))for(let a of ou(i,s))r.add(a)}return[...r].sort()}function zw(e,t,n){let r=[],o=new Set([t]),i=[{file:t,distance:0}];for(let s=0;s<i.length;s++){let a=i[s];if(a.distance>=n)continue;let c=e.get(a.file),l=[...c?.importsFiles??[]].sort();for(let d of l){if(o.has(d))continue;o.add(d);let u=a.distance+1;i.push({file:d,distance:u}),r.push({file:d,distance:u,via:a.file,edgeKinds:ou(c,d),confidence:"syntactic"})}}return r}function jw(e){let t=new Map;for(let n of e.keys())t.set(n,{relativePath:n,importsFiles:new Set,dynamicImportsFiles:new Set,edgeKinds:new Map});for(let[n,r]of e)for(let o of r.importsFiles){let i=t.get(o);if(!i)continue;i.importsFiles.add(n);let s=new Set(ou(r,o));i.edgeKinds.set(n,s),s.size===1&&s.has("dynamic-import")&&i.dynamicImportsFiles.add(n)}return t}function Uw(e,t,n){let r=new Map,o=new Set([t]),i=[t];for(let c=0;c<i.length;c++){let l=i[c];if(l===n)break;for(let d of[...e.get(l)?.importsFiles??[]].sort())o.has(d)||(o.add(d),r.set(d,l),i.push(d))}if(!o.has(n))return{found:!1,files:[],edges:[]};let s=[n];for(;s[0]!==t;)s.unshift(r.get(s[0]));let a=s.slice(0,-1).map((c,l)=>{let d=s[l+1];return{from:c,to:d,edgeKinds:ou(e.get(c),d),confidence:"syntactic"}});return{found:!0,files:s,edges:a,length:s.length,complete:!0,confidence:"syntactic"}}var $w=b(()=>{"use strict"});function Qw(e){return new Map([...e].map(([t,n])=>{let r=[...n.importsFiles].filter(o=>[...n.edgeKinds.get(o)??[]].some(s=>sM.has(s)));return[t,{relativePath:t,importsFiles:new Set(r),dynamicImportsFiles:new Set(r.filter(o=>n.dynamicImportsFiles.has(o))),edgeKinds:new Map(r.map(o=>[o,new Set(n.edgeKinds.get(o)??["static-import"])]))}]}))}function Xf(e){let t=0,n=new Map,r=new Map,o=[],i=new Set,s=[];for(let f of[...e.keys()].sort()){if(n.has(f))continue;let m=[{node:f,successors:[...e.get(f)?.importsFiles??[]].sort(),offset:0}];for(n.set(f,t),r.set(f,t++),o.push(f),i.add(f);m.length>0;){let h=m[m.length-1],y=h.successors[h.offset++];if(y!==void 0){n.has(y)?i.has(y)&&r.set(h.node,Math.min(r.get(h.node),n.get(y))):(n.set(y,t),r.set(y,t++),o.push(y),i.add(y),m.push({node:y,successors:[...e.get(y)?.importsFiles??[]].sort(),offset:0}));continue}m.pop();let g=m[m.length-1];if(g&&r.set(g.node,Math.min(r.get(g.node),r.get(h.node))),r.get(h.node)!==n.get(h.node))continue;let R=[],S;do S=o.pop(),i.delete(S),R.push(S);while(S!==h.node);s.push(R.sort())}}s.sort((f,m)=>(f[0]??"").localeCompare(m[0]??""));let a=new Map;s.forEach((f,m)=>{for(let h of f)a.set(h,m)});let c=new Map,l=new Map;s.forEach((f,m)=>{c.set(m,new Set),l.set(m,new Set)});for(let[f,m]of e){let h=a.get(f);for(let y of m.importsFiles){let g=a.get(y);g===void 0||g===h||(c.get(h)?.add(g),l.get(g)?.add(h))}}let d=new Map(s.map((f,m)=>[m,l.get(m)?.size??0])),u=[],p=[...d].filter(([,f])=>f===0).map(([f])=>f).sort((f,m)=>f-m);for(;p.length>0;){u.push(p);let f=[];for(let m of p)for(let h of[...c.get(m)??[]].sort((y,g)=>y-g)){let y=d.get(h)-1;d.set(h,y),y===0&&f.push(h)}p=f.sort((m,h)=>m-h)}return{components:s,componentOf:a,edges:c,reverseEdges:l,layers:u}}function Yf(e){let t=new Set;for(let[n,r]of e)for(let o of r){let i=new Set([n]),s=[...r].filter(a=>a!==o);for(;s.length>0;){let a=s.pop();if(a===o){t.add(`${n}:${o}`);break}i.has(a)||(i.add(a),s.push(...e.get(a)??[]))}}return t}function Ww(e,t){let n=new Set,r=[],o=[{node:t,successors:[...e.get(t)?.importsFiles??[]].sort(),offset:0}];for(n.add(t);o.length>0;){let p=o[o.length-1],f=p.successors[p.offset++];if(f!==void 0){if(n.has(f))continue;n.add(f),o.push({node:f,successors:[...e.get(f)?.importsFiles??[]].sort(),offset:0});continue}o.pop(),r.push(p.node)}let i=r.reverse(),s=new Map(i.map((p,f)=>[p,f])),a=new Map(i.map(p=>[p,new Set]));for(let p of i)for(let f of e.get(p)?.importsFiles??[])a.get(f)?.add(p);let c=new Map([[t,t]]),l=(p,f)=>{let m=p,h=f;for(;m!==h;){for(;s.get(m)>s.get(h);)m=c.get(m);for(;s.get(h)>s.get(m);)h=c.get(h)}return m},d=!0;for(;d;){d=!1;for(let p of i.slice(1)){let f=[...a.get(p)??[]].filter(h=>c.has(h));if(f.length===0)continue;let m=f[0];for(let h of f.slice(1))m=l(h,m);c.get(p)!==m&&(c.set(p,m),d=!0)}}let u=new Map([[t,null]]);for(let p of i.slice(1))u.set(p,c.get(p)??null);return u}var sM,Vw=b(()=>{"use strict";sM=new Set(["static-import","dynamic-import","named-reexport","star-reexport","commonjs-require","create-require","python-import"])});function aM(e,t){let n=new Map,r=new Map;for(let o of[...t].sort()){if(!e.has(o)||n.has(o))continue;n.set(o,"visiting");let i=[{node:o,successors:[...e.get(o)?.importsFiles??[]].filter(s=>t.has(s)).sort(),offset:0}];for(;i.length>0;){let s=i[i.length-1],a=s.successors[s.offset++];if(a===void 0){n.set(s.node,"done"),i.pop();continue}let c=n.get(a);if(!c){r.set(a,s.node),n.set(a,"visiting"),i.push({node:a,successors:[...e.get(a)?.importsFiles??[]].filter(u=>t.has(u)).sort(),offset:0});continue}if(c!=="visiting")continue;let l=[s.node];for(;l[l.length-1]!==a;){let u=r.get(l[l.length-1]);if(!u)return[];l.push(u)}l.reverse();let d=[];for(let u=0;u<l.length-1;u++)d.push({from:l[u],to:l[u+1]});return d.push({from:s.node,to:a}),d}}return[]}function Jf(e,t){return aM(e,t).map(({from:n,to:r})=>({from:n,to:r,edgeKinds:[...e.get(n)?.edgeKinds.get(r)??new Set(["static-import"])].sort()}))}function Zf(e){let t=new Map;return e.forEach((n,r)=>{for(let o of n)t.set(o,r)}),t}var Kw=b(()=>{"use strict"});function lM(e){return cM.some(t=>t===e)}function Xw(e){let t=e.partialReasons??[],n=t.filter(lM),r=t.some(s=>["maxFiles","filesSkipped"].includes(s)),o=t.some(s=>["limit","maxFiles","filesSkipped"].includes(s)),i=e.coverage?.diagnosticsPagination;return{...e,completeness:{results:e.pagination?.hasMore?"pageable":o?"truncated":"complete",graph:r?"scan-truncated":n.length>0?"coverage-incomplete":"complete",diagnostics:i?.terminalLimit?"truncated":i?.hasMore?"pageable":"complete",...n.length>0?{coverageGapReasons:n}:{}}}}var cM,Yw=b(()=>{"use strict";cM=["parseRecovery","unresolvedImports","unsupportedLinking"]});function ri(e,t){let n=t.limit?e.slice(0,t.limit):e,r=n.length<e.length,o=t.pageSize??uM,i=t.page??1,s=Math.max(1,Math.ceil(n.length/o)),a=Math.min(Math.max(1,i),s),c=(a-1)*o;return{results:n.slice(c,c+o),pagination:{currentPage:a,totalPages:s,entriesPerPage:o,totalEntries:n.length,hasMore:a<s,...i>s?{outOfRange:!0}:{}},...r?{truncated:!0,partialReasons:["limit"],totalAvailable:e.length}:{}}}function pM(e,t){let n=(e.filesSkipped??0)>0,r=e.coverage?.diagnostics??[],o=r.some(a=>a.code==="parse-recovery"),i=r.some(a=>a.code==="unresolved-internal"),s=r.some(a=>a.code==="unsupported-linking");return!t&&!n&&!o&&!i&&!s?e:{...e,truncated:!0,partialReasons:[...new Set([...e.partialReasons??[],...t?["maxFiles"]:[],...n?["filesSkipped"]:[],...o?["parseRecovery"]:[],...i?["unresolvedImports"]:[],...s?["unsupportedLinking"]:[]])]}}function dM(e,t){let n=e.partialReasons?.includes("maxFiles")===!0&&(t.maxFiles??iu)>=su,r=e.partialReasons?.includes("limit")===!0&&t.limit!==void 0&&t.limit>=qf,o=e.pagination?.hasMore===!0&&e.pagination.currentPage>=1e3,i=e.partialReasons?.includes("filesSkipped")===!0,s=e.partialReasons?.includes("maxFiles")===!0&&(t.maxFiles??iu)<su,a=e.partialReasons?.some(c=>["parseRecovery","unsupportedLinking"].includes(c)||c==="unresolvedImports"&&!s)===!0;return n||r||o||i||a?{...e,terminalLimit:!0,...a?{warnings:[...e.warnings??[],"Graph coverage is incomplete; parser recovery or unsupported/unresolved module linking cannot be repaired by pagination. Inspect coverage.diagnostics and verify with LSP."]}:{}}:e}function mM(e,t,n){e.pagination?.outOfRange&&(e={...e,warnings:[...e.warnings??[],`page:${t.page} is out of range (only ${e.pagination.totalPages} page(s)) \u2014 returned page ${e.pagination.currentPage} instead.`]});let r={};if(e.pagination?.hasMore&&e.pagination.currentPage<1e3&&(r.nextPage=ke("localAnalyzeGraph",{...t,page:e.pagination.currentPage+1},n)),e.partialReasons?.includes("maxFiles")&&(t.maxFiles??iu)<su){let i=t.maxFiles??iu;r.expandScan=ke("localAnalyzeGraph",{...t,maxFiles:Math.min(su,Math.max(i+1,i*2)),page:1},"Re-run with a larger file-scan bound because this graph is partial.")}e.partialReasons?.includes("limit")&&t.limit!==void 0&&t.limit<qf&&(r.expandLimit=ke("localAnalyzeGraph",{...t,limit:Math.min(qf,Math.max(t.limit+1,t.limit*2)),page:1},"Re-run with a larger result limit because additional graph results exist."));let o=t.path;if(t.operation==="deadCode"&&o){let i=e.results[0];if(i&&typeof i.file=="string"&&typeof i.name=="string"&&typeof i.line=="number"){let s=o.replace(/\/+$/,"");r.verifyReferences={tool:we,query:{type:"references",uri:`${s}/${i.file}`,symbolName:i.name,lineHint:i.line,includeDeclaration:!1,groupByFile:!0},why:`Verify candidate "${i.name}" before deletion; repeat for each result, prioritizing viaHeuristic:"reexport-chain".`,confidence:"high"}}}for(let i of["expandScan","expandLimit"]){let s=r[i];s&&(delete s.query.diagnosticSnapshot,s.query.diagnosticPage=1)}return Object.keys(r).length>0?{...e,next:r}:e}function Jw(e,t,n,r){return Xw(fM(mM(dM(pM(e,n),t),t,r),t))}function fM(e,t){let n=e.coverage;if(!n)return e;let{diagnostics:r,resultId:o,diagnosticCounts:i}=Yl(n.diagnostics),{diagnosticSnapshot:s,...a}=t,c=ke("localAnalyzeGraph",{...a,diagnosticPage:1},"Restart diagnostic pagination from the current diagnostic snapshot.");if(t.diagnosticSnapshot&&t.diagnosticSnapshot!==o)return{...e,status:"error",errorCode:"graphDiagnosticsChanged",error:"Graph diagnostics changed between pages. Restart before combining diagnostic pages.",results:[],coverage:{...n,diagnostics:[],diagnosticCounts:i},next:{restartDiagnostics:c}};let l=Math.max(1,Math.min(t.diagnosticPageSize??25,100)),d=t.diagnosticPage??1,u=Math.max(1,Math.ceil(r.length/l)),p=Math.max(1,Math.min(d,u,1e3)),f=p<u,m=f&&p>=1e3,h=m&&l===100,y=d>u,g=(p-1)*l,R={...e.next};if(f&&!m&&(R.nextDiagnostics=ke("localAnalyzeGraph",{...t,diagnosticPage:p+1,diagnosticPageSize:l,diagnosticSnapshot:o},"Continue coverage diagnostics from the same diagnostic snapshot.")),m&&!h){let S=Math.min(100,l*2);R.nextDiagnostics=ke("localAnalyzeGraph",{...t,diagnosticPage:p*l/S+1,diagnosticPageSize:S,diagnosticSnapshot:o},"Continue the diagnostic snapshot with larger pages from the next unread row.")}return y&&(R.restartDiagnostics=c),{...e,coverage:{...n,diagnosticCounts:i,diagnostics:r.slice(g,g+l),diagnosticsPagination:{currentPage:p,totalPages:u,entriesPerPage:l,totalEntries:r.length,hasMore:f,resultId:o,...y?{outOfRange:!0}:{},...h?{terminalLimit:!0}:{}}},...Object.keys(R).length?{next:R}:{},...f?{truncated:!0,partialReasons:[...new Set([...e.partialReasons??[],"diagnosticPage"])]}:{},...h?{terminalLimit:!0}:{},...y||h?{warnings:[...e.warnings??[],y?`diagnosticPage:${d} is out of range; returned diagnostic page ${p}.`:"Diagnostic pagination reached its page limit; remaining diagnostics were not returned. Narrow the graph scope."]}:{}}}var uM,iu,su,qf,Zw=b(()=>{"use strict";sr();ce();Gf();he();Yw();uM=50,iu=2e4,su=5e4,qf=5e3});import{isAbsolute as eP,relative as hM}from"node:path";function eh(e,t){return Bw(eP(e)?hM(t,e):e)}function th(e){return{entrypointsResolved:e,entrypointsResolvedCount:e.length}}function au(e,t){return{status:"error",error:t,errorCode:"invalidGraphQuery",operation:e.operation,path:e.path,results:[]}}async function tP(e,t={}){let n=e.path;if(!n){let m=e.file??e.target??e.entrypoints?.[0];m&&eP(m)&&(n=tu(m,e.rustWorkspace))}if(!n)return{status:"error",error:"path is required \u2014 or provide an absolute file path to infer its nearest Cargo.toml (Rust) or package.json root",errorCode:"invalidGraphQuery",operation:e.operation,path:"",results:[]};let r={...e,path:n},o=ql(r.excludeDir),i=r.maxFiles??gM,s=await(t.getGraph?.(r.path,o,i,r.rustWorkspace)??ni(r.path,o,i,r.rustWorkspace)),a=(m,h)=>Jw({...m,...s.coverage?{coverage:s.coverage}:{}},r,s.truncated,h);if(r.operation==="deadCode"){let m=await Hw(r.path,r,s),h=ri(m.deadExports,r),y=new Set(h.results.map(g=>g.clusterId).filter(g=>typeof g=="number"));return a({operation:r.operation,path:r.path,filesScanned:m.filesScanned,filesSkipped:m.filesSkipped,...h,summary:{...th(m.entrypointsResolved),deadClusters:m.deadClusters.filter(g=>y.has(g.id)).map(g=>({...g,files:g.files,size:g.files.length,edgeKinds:Kf(s.fileGraph,g.files),confidence:"syntactic"})),deadClusterCount:m.deadClusters.length,deadExportCount:m.deadExports.length},...m.warnings.length>0?{warnings:m.warnings}:{},...m.confidence?{confidence:m.confidence}:{}},"Continue dead-code candidates.")}let c=[...s.truncated?[`scan stopped at maxFiles (${i}) \u2014 graph results are partial`]:[],...s.filesSkipped>0?[`${s.filesSkipped} file(s) could not be read or parsed within the native graph bounds \u2014 graph results are partial`]:[]],l={operation:r.operation,path:r.path,filesScanned:s.filesScanned,filesSkipped:s.filesSkipped};if(r.operation==="cycles"){let m=Xf(s.fileGraph),h=Zf(m.layers),y=Yf(m.edges),g=Qw(s.fileGraph),R=ru(g).map(w=>[...w.files].sort()),C=m.components.filter(w=>w.length>1||(s.fileGraph.get(w[0])?.importsFiles.has(w[0])??!1)).map(w=>{let T=m.componentOf.get(w[0]),k=new Set(w),F=R.filter(v=>v.every(A=>k.has(A))),P=Jf(s.fileGraph,k),x=Jf(g,k),_=T===void 0?[]:[...m.edges.get(T)??[]].sort((v,A)=>v-A);return{files:w,size:w.length,edgeKinds:Kf(s.fileGraph,w),runtimeCycle:F.length>0,runtimeCycles:F,runtimeCycleCount:F.length,cycleEdges:P,runtimeCycleEdges:x,componentId:T,topologicalLayer:T===void 0?void 0:h.get(T),outgoingComponents:_,outgoingComponentCount:_.length,confidence:"syntactic"}}).sort((w,T)=>(w.files[0]??"").localeCompare(T.files[0]??""));return a({...l,...ri(C,r),summary:{cycleCount:C.length,runtimeCycleCount:C.filter(w=>w.runtimeCycle).length,condensationComponentCount:m.components.length,condensationEdgeCount:[...m.edges.values()].reduce((w,T)=>w+T.size,0),topologicalLayerCount:m.layers.length,transitiveEdgeCount:y.size},...c.length>0?{warnings:c}:{}},"Continue cycle components.")}if(r.operation==="dependencies"||r.operation==="dependents"){if(!r.file)return a(au(r,`${r.operation} requires file`),`Retry ${r.operation} after expanding the graph scan.`);let m=eh(r.file,r.path);if(!s.fileGraph.has(m))return a(au(r,`file is not in the scanned graph: ${m}`),`Retry ${r.operation} after expanding the graph scan.`);let h=r.operation==="dependencies"?s.fileGraph:jw(s.fileGraph),y=Xf(h),g=Zf(y.layers),R=Yf(y.edges),S=r.depth??qw,C=S>1?Ww(h,m):void 0,w=zw(h,m,S).map(T=>{let k=T.file,F=T.via,P=y.componentOf.get(F),x=y.componentOf.get(k);return{...T,immediateDominator:S===1?m:C?.get(k)??null,topologicalLayer:x===void 0?void 0:g.get(x),transitiveEdge:P!==void 0&&x!==void 0?R.has(`${P}:${x}`):!1}});return a({...l,...ri(w,r),summary:{source:m,depth:r.depth??qw,condensationComponentCount:y.components.length,topologicalLayerCount:y.layers.length,transitiveEdgeCount:R.size},...c.length>0?{warnings:c}:{}},`Continue ${r.operation}.`)}if(r.operation==="path"){if(!r.file||!r.target)return a(au(r,"path requires file and target"),"Retry the path query after expanding the graph scan.");let m=eh(r.file,r.path),h=eh(r.target,r.path);return!s.fileGraph.has(m)||!s.fileGraph.has(h)?a(au(r,"file and target must both be in the scanned graph"),"Retry the path query after expanding the graph scan."):a({...l,...ri([Uw(s.fileGraph,m,h)],r),summary:{source:m,target:h},...c.length>0?{warnings:c}:{}},"Continue path results.")}let d=new Set(s.facts.keys()),u=nu(r.path,r.entrypoints,r.includeTests??!0,d);if(u.lowConfidence&&u.entrypoints.length===0)return a({...l,status:"empty",results:[],summary:{...th(u.entrypoints),classifiedCount:0,unclassifiedCount:s.fileGraph.size},warnings:[...c,...u.warnings],confidence:"low"},"Retry reachability after expanding the graph scan.");let p=Bs(s.fileGraph,u.entrypoints),f=[...s.fileGraph.keys()].sort().map(m=>({file:m,reachable:p.has(m),confidence:"syntactic"}));return a({...l,...ri(f,r),summary:{...th(u.entrypoints),reachableCount:p.size,unreachableCount:f.length-p.size},...c.length+u.warnings.length>0?{warnings:[...c,...u.warnings]}:{},...u.lowConfidence?{confidence:"low"}:{}},"Continue reachability classifications.")}var gM,qw,nP=b(()=>{"use strict";jf();eu();Gw();Wf();$w();Vf();Vw();Kw();Zw();gM=2e4,qw=1});import{z as ve}from"zod";var yM,J3,Ur,oi,ii,rP,oP,si,iP=b(()=>{"use strict";Me();yM="localAnalyzeGraph",J3=rt({name:yM,type:"Local",shortDescription:"Analyze a repository file graph through one bounded operation.",instructions:"Map file topology, not symbol identity. dependencies/dependents need file; path needs file+target; deadCode/reachability accept roots; cycles needs no selector. Read completeness.results, completeness.graph, and completeness.diagnostics independently. Import edges and dead-code results are candidates\u2014verify changes and deletions with exact reads plus LSP.",schema:{path:"Absolute repository or package root to scan.",operation:"One bounded operation: deadCode, cycles, dependencies, dependents, path, or reachability.",file:"Repository-relative source file for dependencies, dependents, or path.",target:"Repository-relative destination file for path.",depth:"Traversal depth for dependencies or dependents.",entrypoints:"Repository-relative file or dynamic asset directory roots for deadCode or reachability.",includeTests:"Treat test files as reachability roots.",excludeDir:"Directory names to prune from graph construction.",maxFiles:"Maximum source files scanned; truncation is reported.",limit:"Result cap applied before pagination.",page:"Result page, 1-based; advance only while pagination.hasMore.",pageSize:"Results returned per page.",diagnosticPage:"Coverage diagnostic page, independent of result pagination.",diagnosticPageSize:"Coverage diagnostics per page (default 25).",diagnosticSnapshot:"Snapshot from next.nextDiagnostics; restart if diagnostics changed.",rustWorkspace:"Rust resolution: syntax (default) or opt-in cargo workspace metadata."}}),Ur=(e,t)=>ve.preprocess(n=>typeof n=="number"&&Number.isFinite(n)?Math.min(Math.max(n,e),t):n,ve.number().int().min(e).max(t)),oi=(e,t)=>ve.literal(e).describe(t),ii={...se,path:ve.string().optional().describe("Absolute repository or package root to scan. Omit when file is absolute \u2014 the root is inferred by walking up to the nearest package.json."),excludeDir:ve.array(ve.string()).optional().describe("Directory names to prune from graph construction."),maxFiles:Ur(1,5e4).optional().describe("Maximum source files scanned; truncation is reported."),limit:Ur(1,5e3).optional().describe("Result cap applied before pagination."),page:Ur(1,Dr).optional().default(1).describe("Result page, 1-based."),pageSize:Ur(1,Lo).optional().describe("Results returned per page."),diagnosticPage:Ur(1,Dr).optional().describe("Coverage diagnostic page, 1-based and independent of result page."),diagnosticPageSize:Ur(1,100).optional().describe("Coverage diagnostics returned per page (default 25, maximum 100)."),diagnosticSnapshot:ve.string().regex(/^[a-f0-9]{64}$/).optional().describe("Diagnostic snapshot from next.nextDiagnostics; detects changes between pages."),rustWorkspace:ve.enum(["syntax","cargo"]).optional().describe("Rust resolution: syntax by default; cargo opts into workspace metadata.")},rP={entrypoints:ve.array(ve.string()).optional().describe("Repo-relative file or dynamic asset directory roots; omit to detect package.json main/exports/bin."),includeTests:ve.boolean().optional().default(!0).describe("Treat tests as reachability roots (default true).")},oP={file:ve.string().describe("Repo-relative source file."),depth:Ur(1,50).optional().default(1).describe("Maximum traversal depth (default 1).")},si=ve.discriminatedUnion("operation",[ve.object({...ii,...rP,operation:oi("deadCode","Find unreachable or unretained exported symbols and dead SCCs.")}).strict(),ve.object({...ii,operation:oi("cycles","Find strongly connected file components.")}).strict(),ve.object({...ii,...oP,operation:oi("dependencies","Traverse files imported or re-exported by the source file; results include edgeKinds and syntactic confidence.")}).strict(),ve.object({...ii,...oP,operation:oi("dependents","Traverse files that import or re-export the source file; results include edgeKinds and syntactic confidence.")}).strict(),ve.object({...ii,file:ve.string().describe("Repo-relative source file."),target:ve.string().describe("Repo-relative destination file."),operation:oi("path","Find the shortest directed import/re-export path with per-edge provenance.")}).strict(),ve.object({...ii,...rP,operation:oi("reachability","Classify scanned files by reachability from entrypoints.")}).strict()])});var sP,cu=b(()=>{"use strict";Pt();iP();sP=ge(si,{maxQueries:5})});var aP={};Pn(aP,{executeAnalyzeGraph:()=>SM});import{isAbsolute as bM}from"node:path";function RM(e){if(e.path)return e;let t=e,n=t.file??t.target??t.entrypoints?.[0];return!n||!bM(n)?e:{...e,path:tu(n,e.rustWorkspace)}}async function SM(e){let t=new Map,n=(r,o,i,s="syntax")=>{let a=JSON.stringify([r,[...o].sort(),i,s]),c=t.get(a);if(c)return c;let l=ni(r,o,i,s);return t.set(a,l),l};return Ce(e.queries||[],async r=>zt({toolName:N.LOCAL_ANALYZE_GRAPH,query:r,contextMessage:"localAnalyzeGraph execution failed",execute:async()=>{let o=Ze(si,r);if(o.ok===!1)return o.error;let i=RM(o.data),s=Tt(i,N.LOCAL_ANALYZE_GRAPH);return s.isValid?tP({...i,path:s.sanitizedPath},{getGraph:n}):D(s.errorResult,i,{toolName:N.LOCAL_ANALYZE_GRAPH})}}),{toolName:N.LOCAL_ANALYZE_GRAPH},e)}var nh=b(()=>{"use strict";eu();nn();ht();or();Ke();Be();nP();jf();cu()});function ai(e){return e===0?"0.0B":e<1024?`${e}.0B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)}MB`:e<1024*1024*1024*1024?`${(e/(1024*1024*1024)).toFixed(1)}GB`:`${(e/(1024*1024*1024*1024)).toFixed(1)}TB`}function js(e){let t=e.trim();if(/^\d+$/.test(t))return parseInt(t,10);let n=t.match(/^(\d+(?:\.\d+)?)(B|KB|MB|GB|TB)$/i);if(n&&n[1]&&n[2]){let s=parseFloat(n[1]);switch(n[2].toUpperCase()){case"B":return Math.round(s);case"KB":return Math.round(s*1024);case"MB":return Math.round(s*1024*1024);case"GB":return Math.round(s*1024*1024*1024);case"TB":return Math.round(s*1024*1024*1024*1024)}}let r=t.match(/^(\d+(?:\.\d+)?)([KMGT])$/i);if(!r||!r[1]||!r[2])throw new Error(`Invalid size format: ${e}`);let o=parseFloat(r[1]);switch(r[2].toUpperCase()){case"K":return Math.round(o*1024);case"M":return Math.round(o*1024*1024);case"G":return Math.round(o*1024*1024*1024);default:return Math.round(o*1024*1024*1024*1024)}}var Us=b(()=>{"use strict"});function rh(e){let t=e.filter(o=>o.type==="file").length,n=e.filter(o=>o.type==="directory").length,r=e.reduce((o,i)=>i.type==="file"&&i.size?o+js(i.size):o,0);return`${e.length} entries (${t} files, ${n} dirs, ${ai(r)})`}function oh(e,t){let n=e.length,r=t.itemsPerPage||20,o=Math.max(1,Math.ceil(n/r)),i=t.page||1,s=Math.min(i,o),a=i>o,c=(s-1)*r,l=Math.min(c+r,n),d=s<o;return{paginatedEntries:e.slice(c,l),endIdx:l,pagination:{currentPage:s,totalPages:o,entriesPerPage:r,totalEntries:n,hasMore:d,...d&&s<1e3?{nextPage:s+1}:{},...a?{outOfRange:!0}:{}}}}function CM(e,t,n,r){if(!n.hasMore||n.currentPage>=1e3)return[];let o=e.slice(r,r+3).map(i=>i.name).join(", ");return[`Page ${n.currentPage}/${n.totalPages} (showing ${t} of ${n.totalEntries}). Next: page=${n.currentPage+1}${o?` (starts with: ${o}...)`:""}`]}function $s(e){if(e.skipped<=0)return[];let t=e.skipped-e.permissionDenied;return e.permissionDenied>0&&t>0?[`${e.skipped} entries skipped (${e.permissionDenied} permission denied, ${t} other errors)`]:e.permissionDenied>0?[`${e.permissionDenied} ${e.permissionDenied===1?"entry":"entries"} skipped due to permission denied`]:[`${e.skipped} ${e.skipped===1?"entry":"entries"} skipped due to access errors`]}var lu=b(()=>{"use strict";Us();ce()});function cP(e){let t=e.find(r=>r.type==="file");if(t)return{fetch:{tool:"localGetFileContent",query:{path:t.path,minify:"standard"},why:'Read the first matched file (minify:"symbols" for a skeleton, minify:"none" for exact bytes).',confidence:"exact"}};let n=e.find(r=>r.type==="directory");if(n)return{viewStructure:{tool:"local.tree",query:{path:n.path},why:"Orient inside the first matched directory before reading files.",confidence:"exact"}}}var lP=b(()=>{"use strict"});function wM(e,t){let n=t??xM,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}async function uP(e){let t=e.detail==="full",n=e.detail==="modified"||t,r=n||(e.sortBy||"modified")==="modified";try{let o=Tt(e,N.LOCAL_FIND_FILES);if(!o.isValid)return o.errorResult;let i={...e,path:o.sanitizedPath},s={...i,excludeDir:wM(i.path,i.excludeDir)},{warnings:a,query:c}=LM(s),l=e.limit??1e4,d={path:c.path,recursive:!0,includeRoot:!0,showHidden:!0,maxDepth:c.maxDepth,minDepth:c.minDepth,names:c.names,extensions:c.extensions,regex:c.regex,entryType:c.entryType,empty:c.empty,modifiedWithin:c.time?.modifiedWithin,modifiedBefore:c.time?.modifiedBefore,accessedWithin:c.time?.accessedWithin,sizeGreater:c.size?.greater,sizeLess:c.size?.less,permissions:c.permissions,executable:c.access==="executable",readable:c.access==="readable",writable:c.access==="writable",excludeDir:c.excludeDir,limit:1e4},u=await U.queryFileSystem({...d,pathPattern:c.pathPattern}),p=u.totalDiscovered,f=u.wasCapped,m=u.entries.map(E=>PM(E,r)),h=e.sortBy||"modified";TM(m,h,r);let y=m.slice(0,l),g=y.length<m.length,R=f,S=EM(y,t,n),C=S.length,w=e.itemsPerPage||20,T=e.page||1,k=Math.max(1,Math.ceil(C/w)),F=(T-1)*w,P=Math.min(F+w,C),x=S.slice(F,P),_=C>0&&F>=C,v=x,A=[...u.warnings,...$s(u),...f?[`results capped at ${1e4} during the walk before sorting \u2014 sortBy:"${h}" only orders that partial set, not the true top-N across the whole tree`]:[],..._?[`page:${T} is out of range (only ${k} page(s), ${C} total file(s)) \u2014 returned 0 files. Use page:1..${k}.`]:[]],I=[...a,...A],L=T<k,M=g&&l<1e4,K=L&&T>=1e3||(g||R)&&!M,Ye={...cP(v)??{},...L&&!K?{nextPage:ke(N.LOCAL_FIND_FILES,{...i,page:T+1},"Continue to the next page of matched files.")}:{},...M?{expandLimit:ke(N.LOCAL_FIND_FILES,{...i,limit:Math.min(1e4,Math.max(l+1,l*2)),page:1},"Re-run with a larger file limit because matched files remain.")}:{}},st={...C===0?{status:"empty"}:{},path:i.path,files:v,pagination:{currentPage:T,totalPages:k,filesPerPage:w,totalFiles:C,hasMore:L,...L&&!K?{nextPage:T+1}:{},...f||p>C?{totalFilesFound:p}:{},..._?{outOfRange:!0}:{}},...K?{terminalLimit:!0}:{},...g||R?{truncated:!0,partialReasons:[...g?["limit"]:[],...R?["walkLimit"]:[]],totalAvailable:Math.max(p,m.length)}:{},...Object.keys(Ye).length>0?{next:Ye}:{},...I.length>0&&{warnings:I}};return ee(st,u.entries.reduce((E,G)=>E+G.path.length,0))}catch(o){return D(o,e,{toolName:N.LOCAL_FIND_FILES})}}function PM(e,t){let n={path:e.path,type:e.entryType==="directory"?"directory":e.entryType==="symlink"?"symlink":"file",...e.size!==void 0?{size:e.size}:{},...e.permissions?{permissions:e.permissions}:{}};return t&&e.modifiedMs!==void 0&&(n.modified=new Date(e.modifiedMs).toISOString()),n}function TM(e,t,n){e.sort((r,o)=>{switch(t){case"size":return(o.size??0)-(r.size??0);case"name":return(r.path.split("/").pop()||"").localeCompare(o.path.split("/").pop()||"");case"path":return r.path.localeCompare(o.path);default:return n&&r.modified&&o.modified?new Date(o.modified).getTime()-new Date(r.modified).getTime():r.path.localeCompare(o.path)}})}function EM(e,t,n){return e.map(r=>{let o={path:r.path,type:r.type};return r.size!==void 0&&r.type!=="directory"&&(t?o.size=r.size:o.sizeFormatted=ai(r.size)),t&&r.permissions&&(o.permissions=r.permissions),r.modified&&(o.modified=r.modified),o})}function LM(e){let t=[],n=e.time;if(!n)return{warnings:t,query:e};let r={...n},o=[{key:"modifiedBefore",value:n.modifiedBefore},{key:"modifiedWithin",value:n.modifiedWithin},{key:"accessedWithin",value:n.accessedWithin}];for(let{key:i,value:s}of o)s&&!AM.test(s)&&(t.push(`time.${i}="${s}" has an unsupported format \u2014 filter was skipped. Use a relative duration like "7d", "2h", "1w", or "3m".`),delete r[i]);return{warnings:t,query:{...e,time:r}}}var xM,AM,pP=b(()=>{"use strict";nn();Us();We();Ke();ce();ue();sr();lu();lP();xM=["node_modules",".git","dist","build","out","coverage","target",".next",".cache"];AM=/^\d+[hdwm]$/});function dP(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 mP=b(()=>{"use strict"});import{z as je}from"zod";var ih,$t,sh=b(()=>{"use strict";Me();ih={searchText:'Single lexical pattern. regex:"fixed" is literal and "perl" enables advanced syntax.',mode:'Search mode: "discovery" paths; "paginated" snippets; "detailed" context; "structural" AST.',pattern:"Structural code pattern: $X matches one node; $$$ARGS matches a list. Include modifiers or use a kind rule.",rule:"Structural YAML ast-grep rule for relational matches.",regex:'"smart" (default), "fixed" (literal), or "perl" (advanced).',caseMode:'"smart" (default), "sensitive", or "insensitive".',wholeWord:"Match whole words only (text/regex modes).",invertMatch:"Return non-matching lines (text/regex modes).",multiline:'"off" (default), "on", or "dotall" (. spans newlines).',include:"Glob(s) of files to include.",exclude:"Glob(s) of files to exclude.",excludeDir:"Directory names to prune from the walk.",noIgnore:"Also search .gitignored files.",hidden:"Include dot-files.",matchContentLength:"Matched-line characters kept per hit; longer lines are truncated.",maxFiles:"Text: page ceiling. Structural: scan cap; stats report truncation.",maxDepth:"Maximum levels below the search root; 0 means root files.",output:'"content" lines; "files"/"filesWithout" paths; count modes totals; "matchOnly" substrings.',unique:'With output:"matchOnly", deduplicate values or count frequency.',sort:'"relevance" (default), "matchCount", "path", "modified", "accessed", or "created".',sortReverse:"Reverse the sort order.",rankingProfile:'Language tuning for sort:"relevance"; "auto" detects.',langType:'Language/file type, e.g. "ts"; structural mode maps it to include globs.',captureText:"Structural: include verbatim $$$ list captures; ranges remain available when omitted.",maxMatchesPerFile:"Pairs with matchPage.",matchWindow:'Requires output:"matchOnly".',matchPage:"Per-file match page."},$t=V(ih,{...se,searchText:je.string().optional(),path:je.string(),mode:je.enum(["paginated","discovery","detailed","structural"]).default("paginated"),pattern:je.string().optional(),rule:je.string().optional(),regex:je.enum(["smart","fixed","perl"]).default("smart"),caseMode:je.enum(["smart","sensitive","insensitive"]).default("smart"),wholeWord:je.boolean().optional(),invertMatch:je.boolean().optional(),include:Fe,exclude:Fe,excludeDir:Fe,noIgnore:je.boolean().optional(),hidden:je.boolean().optional(),contextLines:Qc(),matchContentLength:z(1,$R).default(QR),maxMatchesPerFile:z(1,om).optional(),maxFiles:z(1,om).optional(),maxDepth:z(0,Uc).optional(),multiline:je.enum(["off","on","dotall"]).default("off"),sort:je.enum(["relevance","matchCount","path","modified","accessed","created"]).default("relevance"),sortReverse:je.boolean().optional(),rankingProfile:je.enum(["auto","typescript","javascript","rust","python","go","java","scala","markdown","json","yaml","generic"]).default("auto"),langType:je.string().optional(),captureText:je.boolean().optional(),output:je.enum(["content","files","filesWithout","countLines","countMatches","matchOnly"]).default("content"),unique:je.enum(["off","list","count"]).default("off"),matchWindow:z(0,200).optional(),matchPage:Ge(),itemsPerPage:z(1,WR).optional(),page:He()}).superRefine((e,t)=>{if(e.mode==="structural"){!e.pattern&&!e.rule&&t.addIssue({code:"custom",message:"Set pattern or rule for structural mode.",path:["pattern"]}),e.pattern&&e.rule&&t.addIssue({code:"custom",message:"Choose pattern or rule, not both.",path:["rule"]}),e.wholeWord&&t.addIssue({code:"custom",message:"Remove wholeWord in structural mode.",path:["wholeWord"]}),e.invertMatch&&t.addIssue({code:"custom",message:"Remove invertMatch in structural mode.",path:["invertMatch"]});for(let r of["regex","caseMode","multiline"]){let o=r==="multiline"?"off":"smart";e[r]!==o&&t.addIssue({code:"custom",message:`Remove ${r} in structural mode.`,path:[r]})}e.output!=="content"&&t.addIssue({code:"custom",message:"Remove output in structural mode.",path:["output"]}),e.unique!=="off"&&t.addIssue({code:"custom",message:"Remove unique in structural mode.",path:["unique"]})}else(e.pattern||e.rule)&&t.addIssue({code:"custom",message:"Use structural mode with pattern or rule.",path:[e.pattern?"pattern":"rule"]}),e.searchText||t.addIssue({code:"custom",message:"Set searchText for text modes.",path:["searchText"]});e.matchWindow!==void 0&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'Use output:"matchOnly" with matchWindow.',path:["matchWindow"]}),e.unique!=="off"&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'Use output:"matchOnly" with unique.',path:["unique"]})})});import{z as mr}from"zod";var kM,_M,fP,vM,IM,OM,Qs,N6,ah=b(()=>{"use strict";sh();ce();Pt();Nn();kM=["paginated","discovery","detailed","structural"],_M=["semanticRanking"],fP={mode:mr.enum(kM).optional().default("paginated"),searchText:mr.string().optional(),output:mr.enum(["content","files","filesWithout","countLines","countMatches","matchOnly"]).optional().default("content"),pattern:mr.string().optional(),maxDepth:J(0,20).optional(),rule:mr.string().optional(),captureText:mr.boolean().optional(),contextLines:Io,matchContentLength:J(1,1e5).optional().default(500),maxMatchesPerFile:J(1,1e5).optional(),maxFiles:J(1,1e5).optional(),matchPage:Bt.optional(),itemsPerPage:J(1,1e3).optional(),page:Bt.default(1),unique:mr.enum(["off","list","count"]).optional().default("off")},vM={...fP,semanticRanking:mr.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.')},IM=it($t,vM),OM=Xe($t,fP,{strict:!0,omit:_M}),Qs=OM.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 r of["pattern","rule"])e[r]!==void 0&&e[r].trim().length===0&&t.addIssue({code:"custom",message:`Structural \`${r}\` must not be empty or whitespace.`,path:[r]});e.wholeWord&&t.addIssue({code:"custom",message:'`wholeWord` is not valid with mode:"structural".',path:["wholeWord"]}),e.invertMatch&&t.addIssue({code:"custom",message:'`invertMatch` is not valid with mode:"structural".',path:["invertMatch"]}),e.regex&&e.regex!=="smart"&&t.addIssue({code:"custom",message:'`regex` is not valid with mode:"structural".',path:["regex"]}),e.caseMode&&e.caseMode!=="smart"&&t.addIssue({code:"custom",message:'`caseMode` is not valid with mode:"structural".',path:["caseMode"]}),e.multiline&&e.multiline!=="off"&&t.addIssue({code:"custom",message:'`multiline` is not valid with mode:"structural".',path:["multiline"]}),e.output&&e.output!=="content"&&e.output!=="countMatches"&&e.output!=="files"&&t.addIssue({code:"custom",message:'With mode:"structural", `output` supports only "content" (default), "countMatches" (per-file counts, no match content \u2014 cheapest for counting), or "files" (paths only).',path:["output"]}),e.unique&&e.unique!=="off"&&t.addIssue({code:"custom",message:'`unique` is not valid with mode:"structural".',path:["unique"]});let n=e.pattern&&!["php","bash","sh","zsh"].includes(e.langType??"")?/(?<!\$)\$\$(?!\$)[A-Z_][A-Z0-9_]*/.exec(e.pattern):null;if(n){let r=n[0].slice(2);t.addIssue({code:"custom",message:`\`${n[0]}\` is not a metavariable and matches nothing \u2014 use \`$${r}\` for one node or \`$$$${r}\` for a list of nodes.`,path:["pattern"]})}return}(e.pattern||e.rule)&&t.addIssue({code:"custom",message:'`pattern`/`rule` require mode:"structural".',path:[e.pattern?"pattern":"rule"]}),e.searchText||t.addIssue({code:"custom",message:'`searchText` is required unless mode:"structural".',path:["searchText"]}),e.matchWindow!==void 0&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'matchWindow requires output:"matchOnly".',path:["matchWindow"]}),(e.unique==="list"||e.unique==="count")&&e.output!=="matchOnly"&&t.addIssue({code:"custom",message:'unique requires output:"matchOnly".',path:["unique"]})}),N6=ge(IM,{maxQueries:5})});function pu(e){return ch.exec(e)?.[1]?.toLowerCase()??""}function zM(e){let t=pu(e);if(!t)return!1;for(let n of BM)if(Ws[n].extensions.includes(t))return!0;return!1}function SP(e,t,n){if(n&&n!=="auto")return Ws[n];let r=pu(e),o=(t??"").toLowerCase();for(let i of hP){let s=Ws[i];if(i!=="generic"&&o&&(i===o||s.extensions.includes(o)))return s}for(let i of hP){let s=Ws[i];if(i!=="generic"&&s.extensions.includes(r))return s}return Ws.generic}function lh(e){return FM.test(e)?"generated":NM.test(e)?"fixture":MM.test(e)?"test":HM.test(e)?"config":DM.test(e)?"docs":!uu.test(e)&&(GM.test(e)||zM(e))?"source":"unknown"}function CP(e){if(!e)return!1;if(uu.test(e))return!0;let t=lh(e);return t==="test"||t==="docs"||t==="fixture"||t==="generated"}var hP,be,yP,bP,gP,Ws,RP,uu,FM,MM,NM,DM,HM,GM,BM,ch,Vs=b(()=>{"use strict";hP=["typescript","javascript","rust","python","go","java","scala","markdown","json","yaml","generic"],be={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},yP=2e3,bP=/^\s*(\/\/|#|\*|\/\*|<!--|--)/,gP={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+['"]/]},Ws={typescript:{id:"typescript",extensions:["ts","tsx","mts","cts"],...gP},javascript:{id:"javascript",extensions:["js","jsx","mjs","cjs"],...gP},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/]}},RP=/^\s*#{1,6}\s/,uu=/(^|\/)(dist|build|out|coverage|node_modules|vendor|\.next|__snapshots__)(\/|$)/,FM=/(\.min\.|\.bundle\.|\.generated\.|\.d\.ts$|-lock\.)/,MM=/(^|\/)(tests?|__tests__|spec|e2e)(\/|$)|\.(test|spec)\./,NM=/(^|\/)(fixtures?|__fixtures__|snapshots?)(\/|$)/,DM=/(^|\/)(docs?|examples?)(\/|$)|\.(md|markdown|mdx|rst|txt)$/i,HM=/(^|\/)(config|\.github)(\/|$)|\.(json|ya?ml|toml|ini|cfg|conf|env)$|(^|\/)[^/]*\.config\.[jt]s$/i,GM=/(^|\/)(src|lib|app|packages|internal|pkg|cmd|crates|include|sources?)(\/|$)/,BM=new Set(["typescript","javascript","rust","python","go","java","scala"]),ch=/\.([a-z0-9]+)$/i});function du(e,t){for(let n of e)if(n.test(t))return!0;return!1}function uh(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function xP(e){return!!e&&/^[A-Za-z_$][\w$]*$/.test(e.trim())}function wP(e,t,n){if(e.indexOf(`
|
|
53
43
|
`)<0)return e;let o=e.split(`
|
|
54
|
-
`);if(t){let i=n?t:t.toLowerCase();for(let s of o)if((n?s:s.toLowerCase()).includes(i))return s}return o.find(i=>i.trim().length>0)??o[0]??""}function Np(e,t,n,r){if(n==="markdown")return/<!--/.test(e)?"comment":"code";if(n==="json")return"code";if(kp.test(e))return"comment";let o=q_(e,t,r);if(o<0)return"code";let i=J_(e);return i>=0&&o>i?"comment":Yb(e,o)?"string":"code"}function q_(e,t,n){return t?n?e.indexOf(t):e.toLowerCase().indexOf(t.toLowerCase()):-1}function J_(e){let t=-1,n=i=>{i>=0&&(t<0||i<t)&&(t=i)};for(let i of["//","/*","<!--"])n(e.indexOf(i));let r=/(^|\s)#(?![!{])/.exec(e);r&&n(r.index+(r[1]?.length??0));let o=/(^|\s)--\s/.exec(e);return o&&n(o.index+(o[1]?.length??0)),t}function Yb(e,t){let n="";for(let r=0;r<t&&r<e.length;r++){let o=e[r];n?o===n&&e[r-1]!=="\\"&&(n=""):(o==='"'||o==="'"||o==="`")&&(n=o)}return n!==""}function ek(e){if(!e)return;let t=/[A-Za-z_$][\w$]*/.exec(e);return t?t[0]:void 0}function tk(e,t){if(!e)return[];let n=new Set,r=[];for(let o of e.matchAll(/[A-Za-z_$][\w$]*/g)){let i=o[0],s=t?i:i.toLowerCase();n.has(s)||(n.add(s),r.push(i))}return r}function nk(e,t,n,r,o){if(!e||e.length===0)return 0;let i=Fp(n.keyword),s=0,a="";for(let c of e){let l=c.value??"";if(!l)continue;let u=Mp(l,r,n.caseSensitive),p=0,d=[];r&&i&&(new RegExp(`(^|[^\\w$])${Za(r)}([^\\w$]|$)`,n.caseSensitive?"":"i").test(u)?(p+=ae.exactWholeWord,d.push("whole-word match")):!n.caseSensitive&&u.toLowerCase().includes(r.toLowerCase())?(p+=ae.exactCaseInsensitive,d.push("case-insensitive match")):u.includes(r)&&(p+=ae.substring,d.push("substring match")));let m=c.kind;if(m)p+=rk(m,d);else{let f=Np(u,r,t.id,n.caseSensitive);f!=="code"?(p+=ae.commentOrStringPenalty,d.push(f==="comment"?"comment match (weak)":"string literal (weak)")):(Li(t.declaration,u)&&(p+=ae.declarationLine,d.push("declaration line")),Li(t.export,u)&&(p+=ae.exportLine,d.push("export/public line")),Li(t.import,u)&&(p+=ae.importLine,d.push("import line")),t.id==="markdown"&&Ip.test(u)&&(p+=ae.headingLine,d.push("markdown heading")),(t.id==="json"||t.id==="yaml")&&ok(u,r)&&(p+=ae.configKeyLine,d.push("config key match")))}p>s&&(s=p,a=d.join(", "))}return a&&o.push(a),s}function rk(e,t){switch(e){case"declaration":return t.push("AST: declaration"),ae.declarationLine;case"export":return t.push("AST: export/public"),ae.exportLine;case"configKey":return t.push("AST: config key"),ae.configKeyLine;case"heading":return t.push("AST: heading"),ae.headingLine;case"import":return t.push("AST: import"),ae.importLine;case"comment":case"string":return t.push(`AST: ${e} (weak)`),ae.commentOrStringPenalty;case"callsite":return t.push("AST: callsite"),1;default:return 0}}function ok(e,t){let n=e.indexOf(":");if(n<0)return!1;let r=e.slice(0,n);return t?r.includes(t):/["'\w]/.test(r)}function ik(e,t,n,r,o,i){let s=0;if(n){let c=e.toLowerCase(),l=n.toLowerCase();c.split("/").some(u=>u.replace(Xa,"").includes(l))&&(s+=ae.pathSegmentToken,i.push("query token in path"))}let a=Ai(e);return r.extensions.includes(a)&&t.langType&&(s+=ae.extMatchesLangType,i.push("extension matches langType")),o==="source"&&(s+=ae.sourceDir,i.push("source file")),s}function sk(e,t,n){return t.explicitLowSignal?0:e==="generated"||e==="fixture"?(n.push(`${e} file (penalized)`),ae.lowSignalPathPenalty):e==="test"?(n.push("test file (penalized)"),ae.testPathPenalty):0}function ak(e,t){if(e<=0)return 0;let n=Math.log2(e+1)*ae.matchCountScale,r=Math.min(n,ae.matchCountCap);return e>1&&t.push(`match count saturated (${e})`),r}function Dp(e,t){let n=tk(t.keyword,t.caseSensitive);if(n.length<2||e.length<2)return;let r=new Map,o=new Map;for(let i of e){let s=n.filter(a=>ck(i,a,t.caseSensitive));if(s.length!==0){r.set(i.path,s);for(let a of s)o.set(a,(o.get(a)??0)+1)}}if(r.size!==0)return{candidateCount:e.length,fileTokens:r,documentFrequency:o}}function ck(e,t,n){let r=n?"":"i",o=new RegExp(`(^|[^\\w$])${Za(t)}([^\\w$]|$)`,r);for(let i of e.matches??[])if(o.test(i.value??""))return!0;return o.test(e.path)}function lk(e,t,n){if(!t)return 0;let r=t.fileTokens.get(e.path);if(!r?.length)return 0;let o="",i=0,s=0;for(let a of r){let c=t.documentFrequency.get(a)??t.candidateCount;if(c>t.candidateCount/2)continue;let l=Math.log2((t.candidateCount+1)/(c+1)),u=Math.min(l*ae.rareQueryTokenScale,ae.rareQueryTokenCap);u>i&&(i=u,o=a,s=c)}return i<=0?0:(n.push(`rare query token: ${o} (${s}/${t.candidateCount} files)`),i)}function Hp(e,t,n){let r=Op(e.path,t.langType,t.profileOverride),o=Ya(e.path),i=ek(t.keyword),s=[],a=0;return a+=nk(e.matches,r,t,i,s),a+=ik(e.path,t,i,r,o,s),t.queryPath&&e.path.startsWith(t.queryPath.replace(/\/+$/,"")+"/")&&(a+=ae.pathUnderQuery,s.push("under requested subtree")),a+=sk(o,t,s),Ei.test(e.path)&&!t.explicitLowSignal&&(a+=ae.lowSignalPathPenalty,s.push("low-signal path (penalized)")),a+=ak(e.matchCount??0,s),a+=lk(e,n,s),{score:Math.round(a*100)/100,profile:r.id,pathRole:o,reasons:s}}function Gp(e,t,n,r={}){if(t==="matchCount"){let d=[...e].sort(Zb);return{files:r.sortReverse?d.reverse():d,cappedCandidates:0}}if(t==="path"){let d=[...e].sort((m,f)=>m.path.localeCompare(f.path));return{files:r.sortReverse?d.reverse():d,cappedCandidates:0}}if(t==="created"||t==="modified"||t==="accessed")return{files:[...e],cappedCandidates:0};let o=r.candidateCap??_p,i=e,s=[],a=0;if(e.length>o){let d=[...e].sort(Zb);i=d.slice(0,o),s=d.slice(o),a=s.length}let c=Dp(i,n),l=i.map(d=>{try{return{file:d,s:Hp(d,n,c)}}catch{return{file:d,s:uk()}}});l.sort((d,m)=>{if(m.s.score!==d.s.score)return m.s.score-d.s.score;let f=(m.file.matchCount??0)-(d.file.matchCount??0);return f!==0?f:d.file.path.localeCompare(m.file.path)});let u=[...l.map(d=>d.file),...s],p={files:r.sortReverse?u.reverse():u,cappedCandidates:a};return r.debug&&(p.debug=new Map(l.map(d=>[d.file.path,d.s]))),p}function uk(){return{score:0,profile:"generic",pathRole:"unknown",reasons:["ranking unavailable for this file"]}}function Zb(e,t){let n=(t.matchCount??0)-(e.matchCount??0);return n!==0?n:e.path.localeCompare(t.path)}var qb=8,pk=new Set(["async","await","break","case","catch","class","const","def","do","else","enum","export","for","function","if","import","interface","let","match","return","struct","switch","type","var","while","true","false","null","undefined","NaN","Infinity","this","super"]),dk=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function Jb(e,t,n,r){let o=e.find(a=>a.path),i=o?.matches?.find(a=>a.line),s={};if(n==="structural"&&e.some(a=>a.matches?.some(c=>c.capturesTruncated===!0))&&(s.expandCaptures={tool:"local.text",query:qa({...t,captureText:!0}),why:"Replay this structural page with verbatim capture text because the default capture budget omitted or shortened capture payloads.",confidence:"exact"}),o?.path){if(i?.line){let c=mk(i);s.fetch={tool:"localGetFileContent",query:qa({path:o.path,startLine:c.startLine,endLine:c.endLine,minify:"none"}),why:'Read exact source around the first match (set minify:"standard" for a token-lean slice, or drop the line range with minify:"symbols" for a skeleton).',confidence:"exact"}}else s.fetch={tool:"localGetFileContent",query:{path:o.path,minify:"standard"},why:'Read the first matched file (minify:"symbols" gives a skeleton for orientation; minify:"none" gives exact bytes).',confidence:r.isFileListMode?"low":"exact"};let a=fk(i,t,n);if(a&&i?.line){let c={uri:o.path,symbolName:a.symbol,lineHint:a.line??i.line};s.lspDefinition={tool:"lspGetSemantics",query:{...c,type:"definition"},why:"Use the grep line as an LSP lineHint to resolve the symbol definition.",confidence:"low"},s.lspReferences={tool:"lspGetSemantics",query:{...c,type:"references"},why:"Use the grep line as an LSP lineHint to inspect semantic usages.",confidence:"low"}}}return r.currentPage<r.totalFilePages&&r.currentPage<1e3&&(s.nextPage={tool:"local.text",query:qa({...t,page:r.currentPage+1}),why:"Continue to the next page of matched files.",confidence:"exact"}),r.hasFileWithMoreMatches&&r.matchPage<1e3&&(s.nextMatchPage={tool:"local.text",query:qa({...t,maxMatchesPerFile:r.matchesPerPage,matchPage:r.matchPage+1}),why:"Continue within files that have more matches than this response returned.",confidence:"exact"}),s}function mk(e){let t=Math.max(1,e.line??1),n=Math.max(t,e.endLine??t);return{startLine:Math.max(1,t-qb),endLine:n+qb}}function fk(e,t,n){if(t.output==="countLines"||t.output==="countMatches"||t.unique==="list"||t.unique==="count")return;if(n==="structural")return hk(e?.metavars,e?.metavarRanges);if(t.matchWindow)return;if(t.output==="matchOnly"){let o=Bp(e?.value);return o?{symbol:o}:void 0}let r=Bp(t.searchText);return r?{symbol:r}:void 0}function hk(e,t){if(e)for(let[n,r]of Object.entries(e))for(let[o,i]of r.entries()){let s=Bp(i);if(s)return{symbol:s,line:t?.[n]?.[o]?.line}}}function Bp(e){if(typeof e!="string")return;let t=e.trim();if(dk.test(t)&&!pk.has(t))return t}function qa(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}async function Ja(e,t,n,r,o){let i=t.sort??"relevance",s=n==="structural"&&i==="relevance"?"path":i,a;try{a=Gp(e,s,yk(t),{debug:!1,sortReverse:t.sortReverse})}catch{a={files:e,cappedCandidates:0},r.push("Relevance ranking failed; returning results in unranked engine order.")}let c=a.files,l=a.debug,u=c.length,p=t.output==="files"||t.output==="filesWithout",d=t.output==="countLines"||t.output==="countMatches",m=p||d,f=c.reduce((A,q)=>A+(q.matchCount??0),0),h=m?o?.totalOccurrences??o?.totalStructuralMatches??f:f,y=t,g=Math.min(y.itemsPerPage||Kt.DEFAULT_FILES_PER_PAGE,t.maxFiles||Number.POSITIVE_INFINITY),S=y.page||1,R=Math.max(1,Math.ceil(u/g)),C=(S-1)*g,P=Math.min(C+g,u),T=c.slice(C,P),E=u>0&&C>=u;E&&r.push(`page:${S} is out of range (only ${R} page(s), ${u} total file(s)) \u2014 returned 0 files. Use page:1..${R}.`);let k=y.maxMatchesPerFile||Kt.DEFAULT_MATCHES_PER_PAGE,x=T.map(A=>{let q=A.matches?.length??0,ne=Math.max(1,Math.ceil(q/k)),Me=Math.max(1,y.matchPage||1),X=(Me-1)*k,re=q>0&&X>=q,de=Math.min(X+k,q),Ee=m?void 0:A.matches?.slice(X,de),Se=Ee?.length;re&&r.push(`${A.path}: matchPage:${Me} is out of range under maxMatchesPerFile:${k} (only ${ne} page(s), ${q} total match(es) for this file) \u2014 returned 0 rows for this file. Use matchPage:1..${ne}, or drop matchPage to re-derive it from the current maxMatchesPerFile.`);let pt=l?.get(A.path);return{path:A.path,...p?{}:t.output==="countLines"?{totalMatchedLines:A.matchCount||1}:t.output==="countMatches"?{totalOccurrences:A.matchCount||1}:{totalMatchRows:q,...Se!==void 0?{returnedMatchRows:Se}:{}},...Ee!==void 0&&{matches:Ee},...pt?{ranking:{score:pt.score,profile:pt.profile,pathRole:pt.pathRole,reasons:pt.reasons}}:{},pagination:!m&&(q>k||re)?{currentPage:Me,totalPages:ne,matchesPerPage:k,totalMatches:q,hasMore:Me<ne,...Me<ne&&Me<1e3?{nextMatchPage:Me+1}:{},...re?{outOfRange:!0}:{}}:void 0}}),b=x.filter(A=>A.pagination?.hasMore),w=S<R&&S>=1e3||b.length>0&&(y.matchPage||1)>=1e3||o?.capReached===!0&&(t.maxFiles??Kt.MAX_FILES_DEFAULT)>=1e5,L=Jb(x,t,n,{isFileListMode:m,currentPage:S,totalFilePages:R,matchPage:y.matchPage||1,matchesPerPage:k,hasFileWithMoreMatches:b.length>0}),O=t.maxFiles??Kt.MAX_FILES_DEFAULT;o?.capReached===!0&&O<1e5&&(L.expandScan={tool:"local.text",query:{...t,maxFiles:Math.min(1e5,Math.max(O+1,O*2)),page:1},why:"Re-run with a larger file-scan bound because this search is partial.",confidence:"exact"});let v={searchEngine:n,...o?{stats:o}:{},files:x,pagination:{currentPage:S,totalPages:R,filesPerPage:g,totalFiles:u,...p?{}:{totalMatches:h},hasMore:S<R,...S<R&&S<1e3?{nextPage:S+1}:{},...E?{outOfRange:!0}:{}},...r.length>0?{warnings:r}:{},...Object.keys(L).length>0?{next:L}:{},...w?{terminalLimit:!0}:{},...o?.capReached===!0?{truncated:!0,partialReasons:["maxFiles"]}:{}};return gk(v,t,{totalMatches:h,totalFiles:u})}function gk(e,t,n){return e}function yk(e){let t=e.rankingProfile,n=!!(e.include?.length||vp(e.path));return{queryPath:e.path,keyword:e.searchText,langType:e.langType,caseSensitive:e.caseMode==="sensitive",wholeWord:e.wholeWord,profileOverride:t,explicitLowSignal:n}}function eS(e){let t=[],n=[],r=e.pattern;if(typeof r!="string"||r.length===0)return t.push("pattern is empty \u2014 provide a non-empty search string"),{isValid:!1,errors:t,warnings:n};let o=D.validateRipgrepPattern(r,e.fixedString,e.perlRegex);return o.valid||t.push(`invalid regex: ${o.error??"unknown regex parse error"}`),!e.fixedString&&bk(r)&&n.push(`pattern '${r}' looks literal \u2014 set regex:"fixed" to skip regex parsing and avoid accidental wildcards`),!e.perlRegex&&Sk(r)&&n.push("pattern uses lookaround (?= / ?! / ?<= / ?<!) which requires perlRegex: true; ripgrep will refuse it otherwise"),{isValid:t.length===0,errors:t,warnings:n}}function bk(e){return/[\\^$|()[\]{}+*?]/.test(e)?!1:!!(e.includes(".")&&/^[\w.\-/:]+$/.test(e)||e.length>2&&/^\w+$/.test(e))}function Sk(e){return/\(\?[=!<]/.test(e)}function Rk(e){return e==="created"||e==="modified"||e==="accessed"?e:"path"}function Ck(e){return{path:e.path,pattern:e.searchText??"",fixedString:e.regex==="fixed",perlRegex:e.regex==="perl",caseSensitive:e.caseMode==="sensitive",caseInsensitive:e.caseMode==="insensitive",wholeWord:e.wholeWord,invertMatch:e.invertMatch,multiline:e.multiline==="on"||e.multiline==="dotall",multilineDotall:e.multiline==="dotall",filesOnly:e.output==="files",filesWithoutMatch:e.output==="filesWithout",countLinesPerFile:e.output==="countLines",countMatchesPerFile:e.output==="countMatches",contextLines:e.contextLines,langType:e.langType,include:e.include,exclude:e.exclude,excludeDir:e.excludeDir,noIgnore:e.noIgnore,hidden:e.hidden,maxDepth:e.maxDepth,sort:Rk(e.sort),sortReverse:e.sortReverse,classifyMatches:e.sort==="relevance"||e.sort===void 0,maxSnippetChars:e.matchContentLength,onlyMatching:e.output==="matchOnly",unique:e.unique==="list"||e.unique==="count",countUnique:e.unique==="count",matchWindow:e.matchWindow,maxCollectedFiles:1e4}}function xk(e){let t=0;for(let n of e)if(t+=n.path.length,n.matches)for(let r of n.matches)t+=r.value?.length??0;return t}async function tS(e){let t=[],n=Vb(e);if(!n.isValid)return N(new Error(`Query validation failed: ${n.errors.join("; ")}`),e,{toolName:I.LOCAL_RIPGREP,extra:{warnings:n.warnings}});t.push(...n.warnings);let r=so.safeParse(e);if(!r.success){let h=r.error.issues.map(y=>y.message);return N(new Error(`Query validation failed: ${h.join(", ")}`),e,{toolName:I.LOCAL_RIPGREP,extra:{warnings:t}})}let o=r.data;if(!o.path)return N(new Error("Path is required for search"),o,{toolName:I.LOCAL_RIPGREP,extra:{warnings:t}});let s=lt(o,I.LOCAL_RIPGREP);if(!s.isValid)return s.errorResult;let a={...o,path:s.sanitizedPath},c=eS({pattern:a.searchText??"",fixedString:a.regex==="fixed",perlRegex:a.regex==="perl"});if(!c.isValid)return N(new Error(`Pattern validation failed: ${c.errors.join("; ")}`),o,{toolName:I.LOCAL_RIPGREP,extra:{warnings:[...t,...c.warnings]}});let l=[...c.warnings],u;try{u=await D.searchRipgrep(Ck(a))}catch(h){return N(h instanceof Error?h:new Error(String(h)),o,{toolName:I.LOCAL_RIPGREP})}let p=u.files.map(h=>({path:h.path,matchCount:h.matchCount,matches:h.matches.map(y=>{let g={line:y.line,column:y.column,value:y.value};return y.count!==void 0&&(g.count=y.count),y.kind!==void 0&&(g.kind=y.kind),y.scoreHint!==void 0&&(g.scoreHint=y.scoreHint),g})})),d=xk(p),m={totalOccurrences:u.stats.matchCount,matchedLines:u.stats.matchedLines,filesMatched:p.length,filesSearched:u.stats.filesSearched,bytesSearched:u.stats.bytesSearched??void 0,searchTime:u.stats.searchTime,capped:u.stats.capped??void 0,capReason:u.stats.capReason??void 0};if(u.stats.capped&&l.push(`Search hit native collection cap (${u.stats.capReason??"resource limit"}); narrow path/include/keywords for exhaustive results.`),p.length===0){let h=['No matches. Try caseMode:"insensitive", a shorter term, or regex:"smart".',...a.include?.length||a.maxDepth!==void 0?["Remove include/maxDepth to search a wider tree."]:[],...a.wholeWord?["Set wholeWord:false to match substrings."]:[]];return W({status:"empty",searchEngine:"rg",stats:m,hints:h,warnings:[...t,...l]},d)}a.output!=="files"&&d>Kt.LARGE_RESULT_BYTES_HINT&&l.push(`Result payload is large (~${Math.round(d/1024)}KB).`);let f=await Ja(p,o,"rg",[...t,...l],m);return W(f,d)}import{readFile as Tk,stat as Ek}from"node:fs/promises";var nS={bash:{kind:"extension",canonicalLanguage:"Shell",extension:"bash",extensions:["bash"]},c:{kind:"extension",canonicalLanguage:"C",extension:"c",extensions:["c"]},cc:{kind:"extension",canonicalLanguage:"C++",extension:"cc",extensions:["cc"]},cjs:{kind:"extension",canonicalLanguage:"JavaScript",extension:"cjs",extensions:["cjs"]},cpp:{kind:"extension",canonicalLanguage:"C++",extension:"cpp",extensions:["cpp"]},cs:{kind:"extension",canonicalLanguage:"C#",extension:"cs",extensions:["cs"]},cts:{kind:"extension",canonicalLanguage:"TypeScript",extension:"cts",extensions:["cts"]},cxx:{kind:"extension",canonicalLanguage:"C++",extension:"cxx",extensions:["cxx"]},go:{kind:"extension",canonicalLanguage:"Go",extension:"go",extensions:["go"]},h:{kind:"extension",canonicalLanguage:"C",extension:"h",extensions:["h"]},html:{kind:"extension",canonicalLanguage:"HTML",extension:"html",extensions:["html"]},htm:{kind:"extension",canonicalLanguage:"HTML",extension:"htm",extensions:["htm"]},hpp:{kind:"extension",canonicalLanguage:"C++",extension:"hpp",extensions:["hpp"]},js:{kind:"extension",canonicalLanguage:"JavaScript",extension:"js",extensions:["js"]},json:{kind:"extension",canonicalLanguage:"JSON",extension:"json",extensions:["json"]},jsonc:{kind:"extension",canonicalLanguage:"JSON",extension:"jsonc",extensions:["jsonc"]},jsx:{kind:"extension",canonicalLanguage:"JavaScript",extension:"jsx",extensions:["jsx"]},java:{kind:"extension",canonicalLanguage:"Java",extension:"java",extensions:["java"]},less:{kind:"extension",canonicalLanguage:"Less",extension:"less",extensions:["less"]},md:{kind:"extension",canonicalLanguage:"Markdown",extension:"md",extensions:["md"]},mdx:{kind:"extension",canonicalLanguage:"MDX",extension:"mdx",extensions:["mdx"]},mjs:{kind:"extension",canonicalLanguage:"JavaScript",extension:"mjs",extensions:["mjs"]},mts:{kind:"extension",canonicalLanguage:"TypeScript",extension:"mts",extensions:["mts"]},py:{kind:"extension",canonicalLanguage:"Python",extension:"py",extensions:["py"]},pyi:{kind:"extension",canonicalLanguage:"Python",extension:"pyi",extensions:["pyi"]},rs:{kind:"extension",canonicalLanguage:"Rust",extension:"rs",extensions:["rs"]},scala:{kind:"extension",canonicalLanguage:"Scala",extension:"scala",extensions:["scala"]},sc:{kind:"extension",canonicalLanguage:"Scala",extension:"sc",extensions:["sc"]},scss:{kind:"extension",canonicalLanguage:"SCSS",extension:"scss",extensions:["scss"]},sh:{kind:"extension",canonicalLanguage:"Shell",extension:"sh",extensions:["sh"]},ts:{kind:"extension",canonicalLanguage:"TypeScript",extension:"ts",extensions:["ts"]},tsx:{kind:"extension",canonicalLanguage:"TypeScript",extension:"tsx",extensions:["tsx"]},toml:{kind:"extension",canonicalLanguage:"TOML",extension:"toml",extensions:["toml"]},yaml:{kind:"extension",canonicalLanguage:"YAML",extension:"yaml",extensions:["yaml"]},yml:{kind:"extension",canonicalLanguage:"YAML",extension:"yml",extensions:["yml"]},zsh:{kind:"extension",canonicalLanguage:"Shell",extension:"zsh",extensions:["zsh"]}},rS={bash:{kind:"language",canonicalLanguage:"Shell",extensions:["sh","bash","zsh"]},c:{kind:"language",canonicalLanguage:"C",extensions:["c","h"]},"c++":{kind:"language",canonicalLanguage:"C++",extensions:["cpp","hpp","cc","cxx","hh","hxx"]},cpp:{kind:"language",canonicalLanguage:"C++",extensions:["cpp","hpp","cc","cxx","hh","hxx"]},csharp:{kind:"language",canonicalLanguage:"C#",extensions:["cs"]},css:{kind:"language",canonicalLanguage:"CSS",extensions:["css"]},go:{kind:"language",canonicalLanguage:"Go",extensions:["go"]},html:{kind:"language",canonicalLanguage:"HTML",extensions:["html","htm"]},java:{kind:"language",canonicalLanguage:"Java",extensions:["java"]},javascript:{kind:"language",canonicalLanguage:"JavaScript",extensions:["js","jsx","mjs","cjs"]},json:{kind:"language",canonicalLanguage:"JSON",extensions:["json","jsonc"]},less:{kind:"language",canonicalLanguage:"Less",extensions:["less"]},markdown:{kind:"language",canonicalLanguage:"Markdown",extensions:["md","markdown"]},python:{kind:"language",canonicalLanguage:"Python",extensions:["py","pyi"]},rust:{kind:"language",canonicalLanguage:"Rust",extensions:["rs"]},scala:{kind:"language",canonicalLanguage:"Scala",extensions:["scala","sc","sbt"]},scss:{kind:"language",canonicalLanguage:"SCSS",extensions:["scss"]},shell:{kind:"language",canonicalLanguage:"Shell",extensions:["sh","bash","zsh"]},typescript:{kind:"language",canonicalLanguage:"TypeScript",extensions:["ts","tsx","mts","cts"]},toml:{kind:"language",canonicalLanguage:"TOML",extensions:["toml"]},yaml:{kind:"language",canonicalLanguage:"YAML",extensions:["yaml","yml"]},yml:{kind:"language",canonicalLanguage:"YAML",extensions:["yaml","yml"]}};function wk(e){return e.trim().replace(/^\./,"").toLowerCase()}function oS(e){if(!e?.trim())return;let t=wk(e),n=nS[t]??rS[t];return n?{raw:e,normalized:t,...n}:{raw:e,normalized:t,kind:"unknown",canonicalLanguage:e.trim()}}function zp(e){let t=oS(e);if(!t)return;let r=(t.extensions?.length?t.extensions:[t.normalized.replace(/^[.*]+/,"")]).filter(Boolean).map(o=>`*.${o}`);return r.length?r:void 0}var Pk=/^\s*(\/\/|\/\*|\*|#)/;function sS(e,t,n){let r=t&&Object.keys(t).length>0;if(n)return{...e?{metavars:e}:{},...r?{metavarRanges:t??void 0}:{}};let o=!1,i;if(e){i={};for(let[a,c]of Object.entries(e))c.length<=1?(c.some(l=>l.length>120)&&(o=!0),i[a]=c.map(iS)):o=!0;Object.keys(i).length===0&&(i=void 0)}let s;if(r&&t){s={};for(let[a,c]of Object.entries(t)){let u=c.length>1?c.filter(d=>!Pk.test(d.text)):c;(u.length!==c.length||u.some(d=>d.text.length>120))&&(o=!0);let p=u.map(d=>({...d,text:iS(d.text)}));p.length>0&&(s[a]=p)}Object.keys(s).length===0&&(s=void 0)}return{...i?{metavars:i}:{},...s?{metavarRanges:s}:{},...o?{capturesTruncated:!0}:{}}}function iS(e){return e.length>120?`${e.slice(0,120)}\u2026`:e}var aS=300;function Ak(e){let t=e.replace(/\s+/g," ").trim();return t.length>aS?`${t.slice(0,aS-1)}\u2026`:t}var cS=[],lS=2e3,Lk=1e6,_k="0 structural matches. A pattern matches a complete AST node \u2014 a class/function usually needs a body (add `$$$BODY`), and Python/TS definitions may carry a return type (`-> $RET:`) or decorators the pattern must include. For partial or relational matches use a YAML `rule` instead of `pattern`.";function pS(e){if(!e||!/\)\s*\{/.test(e))return;let t=e.replace(/\)\s*\{/,"): $R {");return t===e?void 0:t}function kk(e){let t=pS(e);return t?` Try: \`${t}\`.`:""}function uS(e){return e.include?.length?e.include:zp(e.langType)}async function Ik(e){try{return(await Ek(e)).isFile()}catch{return!1}}async function Ok(e,t,n){let r=await Tk(e,"utf8"),o=await D.structuralSearch(r,e,n??t.pattern,t.rule);return{files:o.length>0?[{path:e,matches:o}]:[],totalMatches:o.length,parsedFiles:1,skippedByPreFilter:0,skippedUnsupported:0,skippedUnreadable:0,skippedLarge:0,warnings:[]}}async function dS(e){let t=lt(e,I.LOCAL_RIPGREP);if(!t.isValid)return t.errorResult;let n=await Ik(t.sanitizedPath),r=!!e.captureText,o=R=>({path:t.sanitizedPath,pattern:R??e.pattern,rule:e.rule,...uS(e)?{include:uS(e)}:{},...e.exclude?.length?{exclude:e.exclude}:{},...e.excludeDir?.length?{excludeDir:e.excludeDir}:cS.length?{excludeDir:cS}:{},...e.hidden!==void 0?{hidden:e.hidden}:{},...e.noIgnore!==void 0?{noIgnore:e.noIgnore}:{},maxFiles:e.maxFiles??lS,maxFileBytes:Lk}),i=R=>n?Ok(t.sanitizedPath,e,R):D.structuralSearchFiles(o(R)),s,a=!1,c;try{if(s=await i(),s.totalMatches===0&&e.pattern&&!e.rule&&!/[;}]\s*$/.test(e.pattern))try{let R=await i(`${e.pattern};`);R.totalMatches>0&&(s=R,a=!0)}catch{}if(s.totalMatches===0&&e.pattern&&!e.rule){let R=pS(e.pattern);if(R)try{let C=await i(R);C.totalMatches>0&&(s=C,c=R)}catch{}}}catch(R){let C=R instanceof Error?R.message:String(R),P=e.langType||"source";return N(new Error(`Invalid structural ${e.rule?"rule":"pattern"}: ${C} \u2014 use valid ${P} and match a complete node; a class/def usually needs a body (add \`$$$BODY\`). Run \`octocode tools localSearch --scheme\` for the live schema.`),e,{toolName:I.LOCAL_RIPGREP})}let l=s.files.map(R=>({path:R.path,matchCount:R.matches.length,matches:R.matches.map(C=>({line:C.startLine,endLine:C.endLine,value:Ak(C.text),column:C.startCol,endColumn:C.endCol,...sS(C.metavars,C.metavarRanges,r)}))})),u=e.maxDepth,p=l,d=0;if(typeof u=="number"&&!n){let R=t.sanitizedPath.replace(/\/+$/,"");p=l.filter(C=>(C.path.startsWith(`${R}/`)?C.path.slice(R.length+1):C.path).split("/").length<=u+1),d=l.length-p.length}let m=p.reduce((R,C)=>R+(C.matchCount??C.matches?.length??0),0),f=e.maxFiles??lS,y=(s.parsedFiles??0)+(s.skippedUnreadable??0)+(s.skippedLarge??0)>=f,g={totalStructuralMatches:typeof u=="number"?m:s.totalMatches,...y?{capReached:!0}:{}},S=[...s.warnings];if(d>0&&S.push(`maxDepth ${u}: dropped ${d} deeper file(s) \u2014 raise maxDepth or omit it to include them.`),a&&S.push(`Matched after appending ';' \u2014 statement patterns must parse as complete statements; the bare pattern parsed as an expression fragment. Results are for "${e.pattern};".`),c&&S.push(`Matched after adding a return-type metavar \u2014 the bare pattern missed functions that declare a return type. Results are for "${c}".`),s.totalMatches===0&&!n)try{let R=D.structuralSearchFilesDetailed(o()),C=R.query;if(C){let P=[`query parsed as ${C.kind}`];C.literalAnchor&&P.push(`literal anchor "${C.literalAnchor}"`),P.push(`pre-filter: ${C.preFilter}`),C.unsafeReason&&P.push(`unsafe: ${C.unsafeReason}`),S.push(`Engine explanation: ${P.join(", ")}.`);let T=[...C.diagnostics??[],...R.diagnostics??[]];for(let E of T.slice(0,3))S.push(`Engine ${E.severity} [${E.stage}/${E.code}]: ${E.message}${E.recovery?` \u2014 ${E.recovery}`:""}`);T.length>3&&S.push(`${T.length-3} additional engine diagnostic(s) omitted from this summary.`)}}catch{}return(p.length===0||g.totalStructuralMatches===0)&&e.pattern&&!e.rule&&d===0&&S.push(_k+kk(e.pattern)),await Ja(p,e,"structural",S,g)}function vk(e){let t=e.mode;if(!t)return e;let n={...e};return t==="discovery"&&n.output==="content"?n.output="files":t==="detailed"&&n.contextLines===void 0&&(n.contextLines=3),n}async function _i(e){let t=vk(e);if(t.mode==="structural")return await dS(t);t.contextLines===void 0&&(t.contextLines=2);try{return await tS(t)}catch(n){let r=n instanceof Error?n.message:String(n);return r.includes("Output size limit exceeded")?{status:"error",error:r,errorCode:j.OUTPUT_TOO_LARGE}:N(n,t,{toolName:I.LOCAL_RIPGREP})}}var Fk=new Set(["+","*","?"]),Mk=1e3;function Nk(e,t){let n=t+1;for(;n<e.length&&e[n]!=="]";)e[n]==="\\"&&n++,n++;return n+1}function mS(e,t){let n=e[t];return n===void 0?!1:Fk.has(n)||n==="{"&&Gk(e,t)}function Dk(e,t,n){let r=n.pop()??!1,o=mS(e,t+1);return o&&r?{unsafe:!0,next:t+1}:((o||r)&&n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:o?fS(e,t+1):t+1})}function Hk(e,t,n){return n.some(r=>r)?{unsafe:!0,next:t+1}:(n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:fS(e,t)})}function jp(e){if(e.length>Mk)return{safe:!1,reason:"Pattern too long (max 1000 characters)"};let t="Nested quantifiers detected (potential ReDoS). Simplify the pattern.",n=[],r=0;for(;r<e.length;){let o=e[r];if(o==="\\"){r+=2;continue}if(o==="["){r=Nk(e,r);continue}if(o==="("){n.push(!1),r++;continue}if(o===")"){let i=Dk(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}if(mS(e,r)){let i=Hk(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}r++}return{safe:!0}}function Gk(e,t){if(e[t]!=="{")return!1;let n=e.indexOf("}",t);return n===-1?!1:/^\{\d+,?\d*\}$/.test(e.slice(t,n+1))}function fS(e,t){return e[t]==="{"?t=e.indexOf("}",t)+1:t++,t<e.length&&(e[t]==="?"||e[t]==="+")&&t++,t}function HY(e,t){let n=jp(e);if(!n.safe)throw new Error(n.reason);return new RegExp(e,t)}function hS(e,t){let n=e;if(t.pattern){let r=t.pattern;if(r.includes("*")||r.includes("?")||r.includes("[")){let i=r.replace(/[.+^${}()|[\]\\*?]/g,"\\$&");i=i.replace(/\\\*/g,".*").replace(/\\\?/g,".").replace(/\\\[!/g,"[^").replace(/\\\[/g,"[").replace(/\\\]/g,"]");try{let s=`^${i}$`;if(!jp(s).safe)return n=n.filter(l=>(l.name.includes("/")?l.name.split("/").pop():l.name).includes(r)),n;let c=new RegExp(s,"i");n=n.filter(l=>{let u=l.name.includes("/")?l.name.split("/").pop():l.name;return c.test(u)})}catch{n=n.filter(s=>(s.name.includes("/")?s.name.split("/").pop():s.name).includes(r))}}else n=n.filter(i=>(i.name.includes("/")?i.name.split("/").pop():i.name).includes(r))}return n}function gS(e){let t=[],n=[],r=[];for(let o of e)o.type==="directory"?n.push(o.name):o.type==="symlink"?r.push(o.name):t.push(o.size?`${o.name} (${o.size})`:o.name);return{...t.length>0&&{files:t},...n.length>0&&{folders:n},...r.length>0&&{links:r}}}function yS(e){let t={type:e.type==="directory"?"dir":e.type==="symlink"?"link":"file"};return e.depth!==void 0&&e.depth>0&&(t.depth=e.depth),e.size&&e.type==="file"&&(t.size=e.size),e.modified&&(t.modified=e.modified),e.permissions&&(t.permissions=e.permissions),t}function bS(e){let t={},n=e.find(o=>o.type==="file"&&o.path);n?.path&&(t.fetch={tool:"localGetFileContent",query:{path:n.path,minify:"standard"},why:'Read the first listed file (minify:"symbols" for a skeleton, minify:"none" for exact bytes).',confidence:"exact"});let r=e.find(o=>o.type==="directory"&&o.path);return r?.path&&(t.viewDeeper={tool:"local.tree",query:{path:r.path},why:"Descend into the first listed subdirectory.",confidence:"exact"}),t.fetch||t.viewDeeper?t:void 0}var Bk=["node_modules",".git","dist","build","out","coverage","target",".next",".cache"];function zk(e,t){let n=t??Bk,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}async function SS(e){try{let t=lt(e,I.LOCAL_VIEW_STRUCTURE);if(!t.isValid)return t.errorResult;let n=e.detail==="modified"||e.detail==="full"||e.sortBy==="time";return await jk(e,t.sanitizedPath,n)}catch(t){let n=Xe.toolExecutionFailed("LOCAL_VIEW_STRUCTURE",t instanceof Error?t:void 0);return{status:"error",error:n.message,errorCode:n.errorCode}}}async function jk(e,t,n=!1){let r=!!(e.maxDepth||e.recursive),o=r?e.maxDepth||(e.recursive?5:2):1,i=Uk(e),s=Qk(e,i),a=r&&s?1e4:1e4,c=zk(t,e.excludeDir),l;try{l=await D.queryFileSystem({path:t,recursive:r,includeRoot:!1,showHidden:e.hidden??!1,maxDepth:o,names:i,extensions:e.extensions,entryType:$k(e),excludeDir:c,limit:a})}catch(O){return Kk(O,e,t)}let u=l.entries.map(O=>Wk(O,n,e.detail==="full")),p=hS(u,e),d=e.sortBy??"name";p=p.sort((O,v)=>{let A=0;switch(d){case"size":{let q=O.sizeBytes??(O.size?wi(O.size):0),ne=v.sizeBytes??(v.size?wi(v.size):0);A=q-ne;break}case"time":n&&O.modified&&v.modified?A=O.modified.localeCompare(v.modified):A=O.name.localeCompare(v.name);break;case"extension":A=(O.extension||"").localeCompare(v.extension||"");break;default:A=O.name.localeCompare(v.name);break}return e.reverse?-A:A});let m=p.length;e.limit&&(p=p.slice(0,e.limit));let f=p.length<m,h=l.wasCapped,y=p.length,{paginatedEntries:g,pagination:S}=Ap(p,e),C=e.detail==="full"||e.detail==="modified"?{path:t,entries:g.map(O=>({...yS(O),path:O.path??`${t.replace(/\/$/,"")}/${O.name}`}))}:{path:t,...gS(g)},P=[...l.warnings,...Pi({skipped:l.skipped,permissionDenied:l.permissionDenied}),...l.wasCapped?[`Results capped at ${a} entries during the walk before sorting \u2014 sortBy:"${d}" only orders that partial set, not the true top-N across the whole tree. Add pattern/extensions/entryType/excludeDir or reduce depth to narrow the scope.`]:[],...S.outOfRange?[`page:${e.page} is out of range (only ${S.totalPages} page(s), ${S.totalEntries} total entries) \u2014 returned page ${S.currentPage} instead.`]:[]],T=y===0,E=Ep(p),k=bS(g)??{},x=e.limit??1e4,b=f&&x<1e4,w=S.hasMore&&S.currentPage>=1e3||(f||h)&&!b,L={...k,...S.hasMore&&!w?{nextPage:We(I.LOCAL_VIEW_STRUCTURE,{...e,page:S.currentPage+1},"Continue to the next page of directory entries.")}:{},...b?{expandLimit:We(I.LOCAL_VIEW_STRUCTURE,{...e,limit:Math.min(1e4,Math.max(x+1,x*2)),page:1},"Re-run with a larger entry limit because directory entries remain.")}:{}};return W({...T?{status:"empty"}:{},...C,summary:E,...S.hasMore||S.totalPages>1||S.outOfRange?{pagination:S}:{},...Object.keys(L).length>0?{next:L}:{},...w?{terminalLimit:!0}:{},...f||h?{truncated:!0,partialReasons:[...f?["limit"]:[],...h?["walkLimit"]:[]],totalAvailable:Math.max(l.totalDiscovered,m)}:{},...P.length>0&&{warnings:P}},l.entries.reduce((O,v)=>O+v.path.length,0))}function Qk(e,t){return!!((typeof e.pattern=="string"?e.pattern:void 0)&&!t)}function Uk(e){let t=typeof e.pattern=="string"?e.pattern:void 0;if(t&&!t.includes("["))return t.includes("*")||t.includes("?")?[t]:[`*${t}*`]}function $k(e){return e.entryType}function Wk(e,t,n){let r=e.entryType==="directory"?"directory":e.entryType==="symlink"?"symlink":"file",o={name:e.relativePath||e.name,path:e.path,type:r,...e.size!==void 0?{size:io(e.size),sizeBytes:e.size}:{},...e.extension?{extension:e.extension}:{},depth:e.depth};return(n||t)&&e.modifiedMs!==void 0&&(o.modified=new Date(e.modifiedMs).toISOString()),n&&e.permissions&&(o.permissions=Vk(e.permissions)),o}function Vk(e){let t=Number.parseInt(e,8);if(!Number.isFinite(t))return e;let n=["---","--x","-w-","-wx","r--","r-x","rw-","rwx"];return`${n[t>>6&7]}${n[t>>3&7]}${n[t&7]}`}function Kk(e,t,n){let r=e instanceof Error?e.message:String(e),o=/ENOENT|not found|no such file/i.test(r),i=/EACCES|permission denied/i.test(r),s=/ENOTDIR|not a directory/i.test(r),a=Xe.pathValidationFailed(n,o?`Directory not found: ${n}`:i?`Permission denied: ${n}`:s?`Not a directory: ${n}`:`Cannot access path: ${n}`);return N(a,t,{toolName:I.LOCAL_VIEW_STRUCTURE})}import{z as CS}from"zod";function Qp(e,t){let{pageSize:n,reverse:r,...o}=e,i={...o,...n!==void 0?{itemsPerPage:n}:{},...r!==void 0?{sortReverse:r}:{}};return t==="paginated"||t==="discovery"||t==="detailed"?{...i,mode:t}:{...i,mode:"paginated",output:t}}var[Xk,Yk,Zk,qk,Jk]=$l.options,RS=CS.enum(["content","files","countMatches"]).optional().default("content").describe("Structural result shape; content is the default."),ao=CS.union([Xk,Yk.extend({resultView:RS}),Zk.extend({resultView:RS}),qk,Jk]),Up=Z(ao,{maxQueries:5});var tI={"local.text":"text","local.files":"files","local.tree":"tree"};async function xS(e){return he(e.queries||[],t=>Ct({toolName:et,query:t,contextMessage:"localSearch execution failed",execute:async()=>{let n=ao.safeParse(t);if(!n.success)throw n.error;try{await eI(n.data.path)}catch(r){throw Xe.fileAccessFailed(n.data.path,r instanceof Error?r:void 0)}return $p(await nI(n.data))}}),{toolName:et},e)}async function nI(e){switch(e.operation){case"text":{let{operation:t,resultView:n,...r}=e;return _i(so.parse(Qp(r,n)))}case"structural":{let{operation:t,resultView:n,...r}=e;return _i(so.parse({...Qp(r,n),mode:"structural",output:n}))}case"files":{let{operation:t,pathRegex:n,limit:r,sort:o,pageSize:i,...s}=e;return Wb({...s,regex:n,limit:r,sortBy:o,itemsPerPage:i})}case"tree":{let{operation:t,namePattern:n,limit:r,sort:o,pageSize:i,...s}=e;return SS({...s,pattern:n,limit:r,sortBy:o,itemsPerPage:i})}default:throw new Error("Unsupported localSearch operation")}}function $p(e){if(Array.isArray(e))return e.map($p);if(!e||typeof e!="object")return e;let t=Object.fromEntries(Object.entries(e).map(([r,o])=>[r,$p(o)])),n=typeof t.tool=="string"?tI[t.tool]:void 0;if(t.tool==="local.text"&&t.query&&typeof t.query=="object"&&t.query.mode==="structural"&&(n="structural"),n&&(t.tool=et,t.query&&typeof t.query=="object")){let r={...t.query};delete r.goal,delete r.reasoning,n==="text"?(r.resultView=typeof r.output=="string"&&r.output!=="content"?r.output:typeof r.mode=="string"&&r.mode!=="structural"?r.mode:"paginated",delete r.mode,delete r.output):n==="structural"&&(r.resultView=typeof r.output=="string"?r.output:"content",delete r.mode,delete r.output,delete r.searchText,delete r.regex,delete r.caseMode,delete r.wholeWord,delete r.invertMatch,delete r.multiline,delete r.unique,delete r.matchWindow),n==="text"||n==="structural"?(r.pageSize=r.itemsPerPage,r.reverse=r.sortReverse,delete r.itemsPerPage,delete r.sortReverse):(r.pageSize=r.itemsPerPage,r.sort=r.sortBy,delete r.itemsPerPage,delete r.sortBy,n==="files"?(r.pathRegex=r.regex,delete r.regex):(r.namePattern=r.pattern,delete r.pattern)),t.query={operation:n,...r}}return t}import{acquirePooledClientDetailed as JI,isLanguageServerAvailable as eO}from"@octocodeai/octocode-engine/lsp/manager";import{resolveWorkspaceRootForFile as tO}from"@octocodeai/octocode-engine/lsp/workspaceRoot";var wS=["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation","workspaceSymbol","supertypes","subtypes","diagnostic"];function cn(e){return{name:e.name,uri:e.uri,foundAtLine:e.foundAtLine,...e.orderHint!==void 0&&{orderHint:e.orderHint},...e.isAmbiguous===!0&&{isAmbiguous:!0},...e.lineDeviation!==void 0&&{lineDeviation:e.lineDeviation}}}function Wp(e){let t=e.displayRange??(e.range?{startLine:e.range.start.line+1,endLine:e.range.end.line+1}:void 0);return{uri:e.uri,...e.content!==void 0&&{content:e.content},...t&&{displayRange:t},...e.isDefinition&&{isDefinition:!0}}}var rI=new Set(["noLocations","noReferences","noCalls","noTypeHierarchy","noHover"]);function oI(e){let t=e.payload;return t.kind==="empty"?t.category:t.empty?.category}function PS(e,t){if(t===void 0||t==="progressIdle")return e;let n=oI(e);if(!n||!rI.has(n))return e;let r=`Language server did not confirm indexing completion (readiness: ${t}) \u2014 zero results may mean the project is not yet indexed, not that the symbol is absent. Retry the query, or warm the relevant consumer files first.`;return{...e,warnings:[...e.warnings??[],r]}}import{readFile as iI,stat as sI}from"node:fs/promises";import{SymbolResolver as aI,SymbolResolutionError as cI}from"@octocodeai/octocode-engine/lsp/resolver";import{toUri as lI}from"@octocodeai/octocode-engine/lsp/uri";import{LSP_ERROR_CODES as ec}from"@octocodeai/octocode-engine/lsp/lspErrorCodes";async function Vp(e,t){let n=e.uri,r=lt({...e,path:n},t);if(!r.isValid)return{ok:!1,error:r.errorResult};let o=r.sanitizedPath;try{if((await sI(o)).isDirectory())return{ok:!1,error:{status:"error",error:`Path is a directory: ${o}.`,errorType:"not_a_file",errorCode:ec.LSP_REQUEST_FAILED,hints:["Choose a source file, or use workspaceSymbol with symbolName."]}}}catch{return{ok:!1,error:{status:"error",error:`File not found: ${o}.`,errorType:"file_not_found",errorCode:ec.LSP_REQUEST_FAILED,hints:['Use localSearch with operation:"files" to resolve the path.']}}}try{return{ok:!0,value:{uri:lI(o),absolutePath:o,content:await iI(o,"utf-8")}}}catch(i){return{ok:!1,error:{status:"error",error:i instanceof Error?i.message:String(i),errorType:"file_not_found",errorCode:ec.LSP_REQUEST_FAILED,hints:[`Could not read file: ${n??"<missing>"}`]}}}}async function TS(e,t){let n=await Vp(e,t);if(n.ok===!1)return n;if(e.type==="documentSymbols")return{ok:!1,error:{status:"error",error:"documentSymbols is file-level and does not use a symbol anchor"}};let r=new aI({lineSearchRadius:5});try{let o=r.resolvePositionFromContent(n.value.content,{symbolName:e.symbolName,lineHint:e.lineHint,orderHint:e.orderHint??0}),i=e.symbolName.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`\\b${i}\\b`,"g"),a=(n.value.content.match(s)??[]).length,c=e.lineHint!==void 0?Math.abs(o.foundAtLine-e.lineHint):void 0,l=a>1&&c!==void 0&&c>0?!0:void 0;return{ok:!0,value:{...n.value,resolvedSymbol:{name:e.symbolName,uri:n.value.uri,range:uI(o.position),foundAtLine:o.foundAtLine,orderHint:e.orderHint,position:o.position,...l&&{isAmbiguous:l},...c!==void 0&&c>0?{lineDeviation:c}:{}}}}}catch(o){if(o instanceof cI)return{ok:!1,error:{status:"empty",error:o.message,errorType:"symbol_not_found",errorCode:ec.SYMBOL_NOT_FOUND,searchRadius:o.searchRadius,hints:[`Symbol "${e.symbolName}" was not found near line ${e.lineHint}.`,'Run localSearch with operation:"text" and the exact symbol name to refresh lineHint, then retry.']}};throw o}}function uI(e){return{start:e,end:{line:e.line,character:e.character}}}import Oi from"node:path";import{readFile as xI}from"node:fs/promises";import{resolveImportAliasDefinitions as wI}from"@octocodeai/octocode-engine/lsp/resolver";var Hn=40,tc=40,Kp=10;function Xp(e,t){return/unsupported/i.test(t)?"unsupportedOperation":/could not find symbol|symbol.*not found/i.test(t)?"symbolNotFound":/call/i.test(t)?"noCalls":e==="references"?"noReferences":e==="hover"?"noHover":e==="documentSymbols"?"anchorFailed":"noLocations"}function Yp(e,t){let n=e.uri??"";return{type:e.type,uri:n,lsp:{},payload:{kind:"empty",category:Xp(e.type,t),reason:t}}}function Pt(e,t,n,r=!1){return{type:e,uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:r},payload:{kind:"empty",category:Xp(e,n),reason:n}}}function Tt(e,t,n){let r=Math.max(1,n),o=Math.max(1,Math.ceil(e.length/r)),i=Math.min(Math.max(1,t),o),s=(i-1)*r,a=e.slice(s,s+r),c=i<o;return{pageItems:a,pagination:{currentPage:i,totalPages:o,totalResults:e.length,hasMore:c,pageSize:r,...c&&i<1e3?{nextPage:i+1}:{}}}}function ki(e,t,n,r,o){let i=o.length>0,s=o.map(Wp),{pageItems:a,pagination:c}=Tt(s,e.page??1,e.pageSize??tc);return{type:e.type,uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:r},payload:i?{kind:n,locations:a}:{kind:"empty",category:"noLocations",reason:`${r} returned no locations`},...i?{pagination:c}:{}}}function Zp(e,t,n,r){let o=n.map(p=>{let d=p.uri===t.uri&&p.range.start.line===t.resolvedSymbol.position.line&&p.range.start.character===t.resolvedSymbol.position.character;return{...p,...d?{isDefinition:!0}:{}}}),i=e.groupByFile?ES(o):void 0,s=i??o.map(Wp),{pageItems:a,pagination:c}=Tt(s,e.page??1,e.pageSize??tc),l=o.length===0?{category:"noReferences",reason:"referencesProvider returned no references"}:void 0,u=r?.possiblyTruncated===!0?[`Reference warmup opened ${r.warmedFiles}/${r.candidates} candidate file(s) and may be incomplete because the candidate set hit the warmup cap; narrow workspaceRoot/path or confirm with localSearch operation:"text" before unused/safe-delete claims.`]:[];return{type:"references",uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"referencesProvider",source:"lsp"},payload:{kind:"references",...i?{byFile:a}:{locations:a},totalReferences:o.length,totalFiles:new Set(o.map(p=>p.uri)).size,...o.length>0&&o.every(p=>p.isDefinition)?{definitionOnly:!0}:{},...r?{warmup:r}:{},...l?{empty:l}:{}},pagination:c,...u.length>0?{warnings:u}:{}}}async function qp(e,t,n){let r=AS(n),o=!!(r.markdown||r.text);return{type:"hover",uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"hoverProvider"},payload:o?{kind:"hover",...r}:{kind:"empty",category:"noHover",reason:"hoverProvider returned no hover content"}}}function ES(e){let t=new Map;for(let n of e){let r=n.range.start.line+1,o=t.get(n.uri);if(o){o.count+=1,o.lines.push(r),n.isDefinition&&(o.hasDefinition=!0);continue}t.set(n.uri,{uri:n.uri,count:1,firstLine:r,firstCharacter:n.range.start.character,lines:[r],...n.isDefinition?{hasDefinition:!0}:{}})}return[...t.values()]}function AS(e){if(!e||typeof e!="object")return{};let n=e.contents;if(typeof n=="string")return{text:n.trim()};if(Array.isArray(n))return{markdown:n.map(r=>LS(r)).join(`
|
|
55
|
-
`).trim()};if(n&&typeof n=="object"){let r=n;if(typeof r.value=="string")return r.kind==="markdown"?{markdown:r.value.trim()}:{text:r.value.trim()}}return{}}function LS(e){if(typeof e=="string")return e;if(e&&typeof e=="object"){let t=e.value;if(typeof t=="string")return t}return String(e)}import{safeReadLineWindow as pI}from"@octocodeai/octocode-engine/lsp/validation";var dI={maxNodes:100,maxRequests:50},_S={truncatedByDepth:!1,truncatedByBudget:!1,visitedNodeCount:0,requestCount:0,cycleCount:0,failedRequestCount:0};function kS(e){return{...dI,...e,visitedNodeCount:0,requestCount:0,truncatedByBudget:!1}}function IS(e){return e.requestCount>=e.maxRequests?(e.truncatedByBudget=!0,!1):(e.requestCount+=1,!0)}function OS(e){return e.visitedNodeCount>=e.maxNodes?(e.truncatedByBudget=!0,!1):(e.visitedNodeCount+=1,!0)}function Xt(e,t){return{...e,truncatedByBudget:t.truncatedByBudget,visitedNodeCount:t.visitedNodeCount,requestCount:t.requestCount}}function Ii(e){return`${e.uri}:${e.range.start.line}:${e.name}`}async function vS(e,t,n){if(t<=0)return e;let r=n?.[0]?.start.line??e.range.start.line,o=await pI(e.uri,r,t);if(!o)return e;let i=Xo(o).length,s=Math.max(0,r-t),a=s+Math.max(0,i-1);return{...e,content:o,displayRange:{startLine:s+1,endLine:a+1}}}async function mI(e,t){return Promise.all(e.map(async n=>({...n,from:await vS(n.from,t,n.fromRanges)})))}async function fI(e,t){return Promise.all(e.map(async n=>({...n,to:await vS(n.to,t)})))}async function Jp(e,t,n,r,o,i=kS(void 0)){if(n<=0||!e)return{calls:[],..._S};if(!IS(i))return Xt({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},i);try{let s=await e.getIncomingCalls(t),a=o>0?await mI(s,o):s;if(n===1)return Xt({calls:a,truncatedByDepth:a.length>0,cycleCount:0,failedRequestCount:0},i);let c=[];for(let l of a){let u=Ii(l.from);if(r.has(u)){c.push(Xt({calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0},i));continue}if(!OS(i)||(r.add(u),c.push(await Jp(e,l.from,n-1,r,o,i)),i.truncatedByBudget))break}return Xt({calls:[...a,...c.flatMap(l=>l.calls)],truncatedByDepth:c.some(l=>l.truncatedByDepth),cycleCount:c.reduce((l,u)=>l+u.cycleCount,0),failedRequestCount:c.reduce((l,u)=>l+u.failedRequestCount,0)},i)}catch{return Xt({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1},i)}}async function ed(e,t,n,r,o,i=kS(void 0)){if(n<=0||!e)return{calls:[],..._S};if(!IS(i))return Xt({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},i);try{let s=await e.getOutgoingCalls(t),a=o>0?await fI(s,o):s;if(n===1)return Xt({calls:a,truncatedByDepth:a.length>0,cycleCount:0,failedRequestCount:0},i);let c=[];for(let l of a){let u=Ii(l.to);if(r.has(u)){c.push(Xt({calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0},i));continue}if(!OS(i)||(r.add(u),c.push(await ed(e,l.to,n-1,r,o,i)),i.truncatedByBudget))break}return Xt({calls:[...a,...c.flatMap(l=>l.calls)],truncatedByDepth:c.some(l=>l.truncatedByDepth),cycleCount:c.reduce((l,u)=>l+u.cycleCount,0),failedRequestCount:c.reduce((l,u)=>l+u.failedRequestCount,0)},i)}catch{return Xt({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1},i)}}var hI=8;function MS(e){return W(e,B(e))}function NS(e,t){return e.format!=="compact"||!td(t)?t:gI(t)}function td(e){return Nt(e)&&typeof e.type=="string"&&typeof e.uri=="string"&&Nt(e.payload)}function gI(e){return{...e,format:"compact",payload:yI(e.payload)}}function yI(e){switch(e.kind){case"definition":case"typeDefinition":case"implementation":return{kind:e.kind,locations:e.locations.map(FS)};case"references":return{kind:"references",...e.byFile?{byFile:e.byFile.map(SI)}:{locations:(e.locations??[]).map(FS)},totalReferences:e.totalReferences,totalFiles:e.totalFiles};case"callers":case"callees":case"callHierarchy":return{kind:e.kind,...e.root?{root:DS(e.root)}:{},direction:e.direction,calls:e.calls.map(RI),...e.incomingCalls!==void 0?{incomingCalls:e.incomingCalls}:{},...e.outgoingCalls!==void 0?{outgoingCalls:e.outgoingCalls}:{},completeness:e.completeness};case"documentSymbols":return{kind:"documentSymbols",symbols:e.symbols.map(bI)};case"hover":case"empty":case"workspaceSymbol":case"typeHierarchy":case"diagnostic":return e}}function bI(e){if(!Nt(e))return String(e);let t=ut(e,"line"),n=ut(e,"character"),r=ut(e,"endLine"),o=ln(e,"kind"),i=ln(e,"name"),s=ut(e,"childCount"),a=ln(e,"containerName");return[`${t}:${n}${r!==t?`-${r}`:""}`,o,i,a?`< ${a}`:"",s>0?`children=${s}`:""].filter(Boolean).join(" ")}function FS(e){if(typeof e=="string")return e;let t=e.displayRange?`${e.displayRange.startLine}-${e.displayRange.endLine}`:"?",n=e.isDefinition?" def":"",r=e.content?` | ${GS(e.content,180)}`:"";return`${e.uri}:${t}${n}${r}`}function SI(e){if(!Nt(e))return String(e);let t=ln(e,"uri"),n=ut(e,"firstLine"),r=ut(e,"firstCharacter"),o=ut(e,"count"),i=HS(e,"lines").map(a=>typeof a=="number"?a:void 0).filter(a=>a!==void 0).join(","),s=e.hasDefinition===!0?" def":"";return`${t}:${n}:${r} count=${o} lines=${i}${s}`}function RI(e){if(!Nt(e))return String(e);let t=ln(e,"direction"),n=DS(e.item),r=HS(e,"ranges").map(CI).join(","),o=ut(e,"rangeCount"),i=ut(e,"rangeSampleCount"),s=ln(e,"contentPreview");return[t,n,r?`ranges=${r}`:"",o>i?`totalRanges=${o}`:"",s?`| ${GS(s,180)}`:""].filter(Boolean).join(" ")}function DS(e){if(!Nt(e))return String(e);let t=ln(e,"name"),n=ln(e,"kind"),r=ln(e,"uri"),o=ut(e,"line"),i=ut(e,"endLine"),s=ut(e,"selectionLine"),a=s>0?` sel=${s}`:"";return`${t} ${n} ${r}:${o}-${i}${a}`}function CI(e){return Nt(e)?`${ut(e,"line")}:${ut(e,"character")}`:String(e)}function Nt(e){return typeof e=="object"&&e!==null}function ln(e,t,n=""){let r=e[t];return typeof r=="string"?r:n}function ut(e,t,n=0){let r=e[t];return typeof r=="number"?r:n}function HS(e,t){let n=e[t];return Array.isArray(n)?n:[]}function GS(e,t){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,Math.max(0,t-3))}... (truncated for single-line display \u2014 use charOffset or startLine to read full content)`:n}function BS(e,t){let n=jS(e.fromRanges);return{direction:"incoming",item:nc(e.from),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...QS(e.from,t)}}function zS(e,t){let n=jS(e.fromRanges);return{direction:"outgoing",item:nc(e.to),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...QS(e.to,t)}}function nc(e){return{name:e.name,kind:co(e.kind),uri:e.uri,line:e.range.start.line+1,endLine:e.range.end.line+1,...e.selectionRange?{selectionLine:e.selectionRange.start.line+1}:{}}}function jS(e){let t=new Set,n=[];for(let r of e){let o=r.start.line+1,i=r.start.character,s=`${o}:${i}`;if(!t.has(s)&&(t.add(s),n.push({line:o,character:i}),n.length>=hI))break}return n}function QS(e,t){return t<=0||!e.content?{}:{contentPreview:e.content}}function co(e){if(typeof e=="string")return e;switch(typeof e=="number"?e:void 0){case 1:return"file";case 2:return"module";case 3:return"namespace";case 4:return"package";case 5:return"class";case 6:return"method";case 7:return"property";case 8:return"field";case 9:return"constructor";case 10:return"enum";case 11:return"interface";case 12:return"function";case 13:return"variable";case 14:return"constant";case 15:return"string";case 16:return"number";case 17:return"boolean";case 18:return"array";case 19:return"object";case 20:return"key";case 21:return"null";case 22:return"enumMember";case 23:return"struct";case 24:return"event";case 25:return"operator";case 26:return"typeParameter";default:return"unknown"}}async function nd(e,t,n){let o=(await n.prepareCallHierarchy(t.absolutePath,t.resolvedSymbol.position,t.content))[0];if(!o)return Pt(e.type,t,"No callable symbol found",!0);let i=e.depth??1,s={calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0,truncatedByBudget:!1,visitedNodeCount:0,requestCount:0},a=e.type==="callers"||e.type==="callHierarchy"?await Jp(n,o,i,new Set([Ii(o)]),e.contextLines??0):s,c=e.type==="callees"||e.type==="callHierarchy"?await ed(n,o,i,new Set([Ii(o)]),e.contextLines??0):s,l=S=>/node_modules\/typescript\/lib\/lib\.[^/]*\.d\.ts$/.test(S.to.uri),u=c.calls.filter(l).length,p=c.calls.filter(S=>!l(S)),d=[...a.calls.map(S=>({direction:"incoming",...S})),...p.map(S=>({direction:"outgoing",...S}))],m=d.map(S=>S.direction==="incoming"?BS(S,e.contextLines??0):zS(S,e.contextLines??0)),{pageItems:f,pagination:h}=Tt(m,e.page??1,e.pageSize??Kp),y=e.type==="callers"?"incoming":e.type==="callees"?"outgoing":"both",g=!a.truncatedByDepth&&!c.truncatedByDepth&&!a.truncatedByBudget&&!c.truncatedByBudget&&a.failedRequestCount+c.failedRequestCount===0;return{type:e.type,uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"callHierarchyProvider"},payload:{kind:e.type,root:nc(o),direction:y,calls:f,incomingCalls:a.calls.length,outgoingCalls:p.length,completeness:{complete:g,truncatedByDepth:a.truncatedByDepth||c.truncatedByDepth,truncatedByBudget:a.truncatedByBudget||c.truncatedByBudget,visitedNodeCount:a.visitedNodeCount+c.visitedNodeCount,requestCount:a.requestCount+c.requestCount,cycleCount:a.cycleCount+c.cycleCount,failedRequestCount:a.failedRequestCount+c.failedRequestCount,dynamicCallsExcluded:!0,...u>0&&{stdlibCallsExcluded:u}},...d.length===0?{empty:{category:"noCalls",reason:"callHierarchyProvider returned no calls"}}:{}},pagination:h}}async function rd(e,t,n){let o=(await n.prepareTypeHierarchy(t.absolutePath,t.resolvedSymbol.position,t.content))[0];if(!o)return Pt(e.type,t,"No type-hierarchy item found at position",!0);let i=e.type==="supertypes"?"supertypes":"subtypes",s=i==="supertypes"?await n.typeHierarchySupertypes(o):await n.typeHierarchySubtypes(o),{pageItems:a,pagination:c}=Tt(s,e.page??1,e.pageSize??Hn);return{type:e.type,uri:t.uri,resolvedSymbol:cn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"typeHierarchyProvider"},payload:s.length>0?{kind:"typeHierarchy",direction:i,root:o,items:a,totalItems:s.length}:{kind:"empty",category:"noTypeHierarchy",reason:`typeHierarchyProvider returned no ${i} for this symbol`},pagination:c}}var WS=new Set(["references","callers","callees","callHierarchy","implementation"]),US=100,PI=512*1024,$S=["ts","tsx","mts","cts","js","jsx","mjs","cjs"];async function VS(e,t,n){let r={candidates:0,warmedFiles:0,skippedLarge:0,possiblyTruncated:!1};if(typeof e.openDocument!="function")return r;try{let o=Oi.extname(t.absolutePath).slice(1),i=$S.includes(o)?$S:[o],s=await _i({path:n,searchText:t.resolvedSymbol.name,regex:"fixed",wholeWord:!0,output:"files",maxFiles:US,include:i.filter(Boolean).map(c=>`*.${c}`)}),a={candidates:s.files?.length??0,warmedFiles:0,skippedLarge:0,possiblyTruncated:(s.files?.length??0)>=US||!!s.stats?.capped};for(let c of s.files??[]){let l=typeof c.path=="string"?c.path:void 0;if(!l)continue;let u=Oi.isAbsolute(l)?l:Oi.join(n,l);if(Oi.resolve(u)!==Oi.resolve(t.absolutePath))try{let p=await xI(u,"utf-8");if(p.length>PI){a.skippedLarge+=1;continue}await e.openDocument(u,p),a.warmedFiles+=1}catch{}}return a}catch{return r}}async function KS(e,t,n,r){switch(e.type){case"definition":return n.hasCapability("definitionProvider")?ki(e,t,"definition","definitionProvider",await wI({anchorUri:t.uri,symbolName:t.resolvedSymbol.name,locations:await n.gotoDefinition(t.absolutePath,t.resolvedSymbol.position,t.content)})):Pt(e.type,t,"definitionProvider unsupported",!0);case"typeDefinition":return n.hasCapability("typeDefinitionProvider")?ki(e,t,"typeDefinition","typeDefinitionProvider",await n.typeDefinition(t.absolutePath,t.resolvedSymbol.position,t.content)):Pt(e.type,t,"typeDefinitionProvider unsupported",!0);case"implementation":return n.hasCapability("implementationProvider")?ki(e,t,"implementation","implementationProvider",await n.implementation(t.absolutePath,t.resolvedSymbol.position,t.content)):Pt(e.type,t,"implementationProvider unsupported",!0);case"references":return n.hasCapability("referencesProvider")?Zp(e,t,await n.findReferences(t.absolutePath,t.resolvedSymbol.position,e.includeDeclaration??!0,t.content),r):Pt(e.type,t,"referencesProvider unsupported",!0);case"hover":return n.hasCapability("hoverProvider")?qp(e,t,await n.hover(t.absolutePath,t.resolvedSymbol.position,t.content)):Pt(e.type,t,"hoverProvider unsupported",!0);case"callers":case"callees":case"callHierarchy":return n.hasCapability("callHierarchyProvider")?nd(e,t,n):Pt(e.type,t,"callHierarchyProvider unsupported",!0);case"supertypes":case"subtypes":return n.hasCapability("typeHierarchyProvider")?rd(e,t,n):Pt(e.type,t,"typeHierarchyProvider unsupported",!0)}}import id from"node:path";import{fileURLToPath as TI}from"node:url";import{unavailableHintFor as EI}from"@octocodeai/octocode-engine/lsp/manager";import{detectLanguageId as AI}from"@octocodeai/octocode-engine/lsp/config";var od;function sd(e){return od||(od=new Set(D.getSupportedJsTsExtensions().map(t=>`.${t}`))),od.has(id.extname(e).toLowerCase())}function Dt(e,t,n){let r=AI(e),o=EI(r,void 0),i=n?.message?` LSP startup detail (${n.kind??"startupFailed"}): ${n.message}.`:"";throw new Ge(j.LSP_SERVER_UNAVAILABLE,`No ${r} language server is available for ${e}, so "${t}" cannot be answered semantically.${i} ${o} Meanwhile, use localSearch operation:"text" or "structural" to find occurrences, then localGetFileContent for surrounding code.`)}var LI=["py","rs","go","java","kt","cs","c","cc","cpp","h","hpp","rb","php","swift","scala","lua","dart","ex","exs","erl","hrl","clj","cljs"];function XS(e,t){let n=e.startsWith("file://")?TI(e):e;return id.isAbsolute(n)?n:id.resolve(t,n)}function ad(){return[...D.getSupportedJsTsExtensions(),...LI]}function YS(){return ad().map(e=>`**/*.${e}`)}var _I=[".git","node_modules","dist","out","coverage","target"];async function ZS(e,t){let n=e.symbolName?.trim();if(n)try{return(await D.searchRipgrep({path:t,pattern:n,fixedString:!0,caseSensitive:!0,filesOnly:!0,include:YS(),excludeDir:[..._I],maxSnippetChars:1})).files[0]?.path}catch{return}}async function cd(e,t){if(e.uri)return XS(e.uri,t);let n=await ZS(e,t);if(n)return n;try{let o=(await D.queryFileSystem({path:t,recursive:!0,includeRoot:!1,showHidden:!1,entryType:"f",extensions:ad(),maxDepth:5,limit:1})).entries[0];if(o)return o.path}catch{}return t}function ld(e){return e instanceof Error?e.message:String(e)}function ud(e,t){if(!sd(e))return null;try{let n=D.extractJsSymbols(t,e);if(!n)return null;let r=JSON.parse(n);return Array.isArray(r)?r:null}catch{return null}}function kI(e){if(!e||typeof e!="object")return!1;let t=e,n=r=>!!r&&typeof r=="object"&&typeof r.line=="number"&&typeof r.character=="number";return n(t.start)&&n(t.end)}function qS(e,t){if(!sd(e))return null;try{let n=D.extractGraphFacts(t,e);if(!n)return null;let r=JSON.parse(n),i=(Array.isArray(r.declarations)?r.declarations:[]).filter(s=>typeof s.name=="string"&&Ba(s.name)&&typeof s.kind=="string"&&kI(s.range)).map(s=>({name:s.name,kind:s.kind,range:s.range}));return i.length>0?i:null}catch{return null}}import{acquirePooledClient as II,isLanguageServerAvailable as OI}from"@octocodeai/octocode-engine/lsp/manager";import{resolveWorkspaceRootForFile as vI}from"@octocodeai/octocode-engine/lsp/workspaceRoot";async function md(e){let t=await Vp(e,we);if(t.ok===!1)return t.error;let n=e.workspaceRoot??await vI(t.value.absolutePath),r=await OI(t.value.absolutePath,n),o=r?await II(n,t.value.absolutePath):null,i=!!o?.hasCapability("documentSymbolProvider"),s=[],a,c=ud(t.value.uri,t.value.content),l=c?.length?null:qS(t.value.uri,t.value.content);if(c?.length)s=c,a="native";else if(l?.length)s=l,a="native-graph-facts";else if(i&&o){let g=await o.documentSymbols(t.value.absolutePath,t.value.content);s=Array.isArray(g)?g:[],a="lsp"}else{let g=Nh(t.value.content,t.value.uri);g&&(s=g,a="markdown")}let u=a!==void 0;!u&&!r&&Dt(t.value.uri,"documentSymbols");let p=JS(s),d=tR(s),{pageItems:m,pagination:f}=Tt(p,e.page??1,e.pageSize??Hn),h=nR(p,g=>g.kind),y=u?void 0:{category:"unsupportedOperation",reason:"documentSymbolProvider unsupported"};return{type:"documentSymbols",uri:t.value.uri,lsp:{serverAvailable:r,...a==="lsp"?{provider:"documentSymbolProvider"}:{},...a?{source:a}:{}},summary:{totalSymbols:p.length,returnedSymbols:m.length,topLevelSymbols:d,kinds:h},payload:{kind:"documentSymbols",symbols:m,...y?{empty:y}:{}},pagination:f}}function JS(e){let t=[];for(let n of e)fd(n,t);return t.sort((n,r)=>n.line-r.line||n.character-r.character)}function fd(e,t,n){if(!e||typeof e!="object")return;let r=e,o=eR(r);if(typeof r.name=="string"&&o&&t.push({name:r.name,kind:co(r.kind),line:o.start.line+1,character:o.start.character,endLine:o.end.line+1,childCount:Array.isArray(r.children)?r.children.length:0,...n?{containerName:n}:{}}),Array.isArray(r.children)&&FI.has(co(r.kind))){let i=typeof r.name=="string"?r.name:n;for(let s of r.children)fd(s,t,i)}}var FI=new Set(["file","module","namespace","package","class","enum","interface","markdownHeading","struct"]);function eR(e){if(pd(e.range))return e.range;let t=e.location;return t&&pd(t.range)?t.range:void 0}function pd(e){if(!e||typeof e!="object")return!1;let t=e;return dd(t.start)&&dd(t.end)}function dd(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.line=="number"&&typeof t.character=="number"}function tR(e){return e.filter(t=>t&&typeof t=="object"&&"name"in t).length}function nR(e,t){let n={};for(let r of e){let o=t(r),i=n[o];n[o]=typeof i=="number"?i+1:1}return n}import rR from"node:path";import{readFile as MI}from"node:fs/promises";import{acquirePooledClientDetailed as oR,isLanguageServerAvailable as iR}from"@octocodeai/octocode-engine/lsp/manager";import{resolveImportAliasDefinitions as NI}from"@octocodeai/octocode-engine/lsp/resolver";import{resolveWorkspaceRootForFile as sR}from"@octocodeai/octocode-engine/lsp/workspaceRoot";async function hd(e){let t=e.symbolName??"",n=rR.resolve(e.workspaceRoot??(e.uri?await sR(e.uri):process.cwd())),r=await cd(e,n);await iR(r,n)||Dt(r,"workspaceSymbol");let i=await oR(n,r);i.ok===!1&&Dt(r,"workspaceSymbol",i);let s=i.client;if(!s.hasCapability("workspaceSymbolProvider"))return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"workspaceSymbolProvider unsupported"}};let a;try{rR.extname(r)&&await s.openDocument(r),a=await s.workspaceSymbol(t)}catch(p){return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:`workspaceSymbolProvider failed: ${ld(p)}`}}}let c=await HI(s,aR(a)),{pageItems:l,pagination:u}=Tt(c,e.page??1,e.pageSize??Hn);return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},summary:{query:t,totalSymbols:c.length},payload:c.length>0?{kind:"workspaceSymbol",query:t,symbols:l,totalSymbols:c.length}:{kind:"empty",category:"noWorkspaceSymbols",reason:`workspaceSymbolProvider returned no symbols for query "${t}"`},pagination:u}}var DI=10;async function HI(e,t){return t.length===0||t.length>DI?t:Promise.all(t.map(async n=>{try{if(!n.uri)return n;let r=n.uri.startsWith("file://")?decodeURIComponent(n.uri.slice(7)):n.uri,o=await MI(r,"utf8");await e.openDocument(r);let i=await NI({anchorUri:r,symbolName:n.name,locations:await e.gotoDefinition(r,{line:n.line-1,character:n.character},o)});if(!Array.isArray(i)||i.length!==1)return n;let s=i[0],a=(s.range?.start?.line??-1)+1;return!s.uri||a<1||s.uri===n.uri&&a===n.line?n:{...n,uri:s.uri,line:a,endLine:(s.range?.end?.line??s.range?.start?.line??a-1)+1,character:s.range?.start?.character??n.character}}catch{return n}}))}function aR(e){return e.flatMap(t=>{if(!t||typeof t!="object")return[];let n=t,r=typeof n.name=="string"?n.name:void 0;if(!r)return[];let o=n.kind,i=n.location,s=i?.range,a=typeof i?.uri=="string"?i.uri:"",c=(s?.start?.line??0)+1,l=(s?.end?.line??s?.start?.line??0)+1,u=typeof n.containerName=="string"?n.containerName:void 0;return[{name:r,kind:co(o),line:c,character:s?.start?.character??0,endLine:l,childCount:0,...u?{containerName:u}:{},uri:a}]})}async function gd(e){let t=e.uri??"",n=e.workspaceRoot??(t?await sR(t):process.cwd());await iR(t,n)||Dt(t,"diagnostic");let o=await oR(n,t);o.ok===!1&&Dt(t,"diagnostic",o);let i=o.client;if(!i.hasCapability("diagnosticProvider"))return{type:"diagnostic",uri:t,lsp:{serverAvailable:!0,provider:"diagnosticProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"diagnosticProvider (pull) unsupported \u2014 server uses push (publishDiagnostics) instead"},warnings:['This server pushes diagnostics via textDocument/publishDiagnostics. Pull diagnostics (type: "diagnostic") require LSP 3.17 pull support. Check server docs to enable it.']};let s=await i.getDiagnostics(t),a=cR(s),c=a.filter(d=>d.severity===1).length,l=a.filter(d=>d.severity===2).length,{pageItems:u,pagination:p}=Tt(a,e.page??1,e.pageSize??Hn);return{type:"diagnostic",uri:t,lsp:{serverAvailable:!0,provider:"diagnosticProvider"},summary:{totalDiagnostics:a.length,errorCount:c,warningCount:l},payload:a.length>0?{kind:"diagnostic",diagnostics:u,totalDiagnostics:a.length,errorCount:c,warningCount:l}:{kind:"empty",category:"noDiagnostics",reason:"No diagnostics \u2014 file has no errors or warnings"},pagination:p}}function cR(e){if(e&&typeof e=="object"){let t=e;return(Array.isArray(t.items)?t.items:[]).flatMap(r=>lR(r))}return[]}function lR(e){if(!e||typeof e!="object")return[];let t=e,n=t.range,r=typeof t.message=="string"?t.message:"";return r?[{severity:typeof t.severity=="number"?t.severity:void 0,message:r,line:(n?.start?.line??0)+1,endLine:(n?.end?.line??n?.start?.line??0)+1,character:n?.start?.character??0,...t.code!==void 0?{code:t.code}:{},...typeof t.source=="string"?{source:t.source}:{}}]:[]}var GI=new Set(["unsupportedOperation","symbolNotFound","anchorFailed","noLocations","noReferences","noHover","noCalls","noWorkspaceSymbols","noTypeHierarchy","noDiagnostics"]),BI=new Set(["symbolNotFound","anchorFailed"]);function zI(e){if(e.kind==="empty"&&typeof e.category=="string")return{category:e.category,...typeof e.reason=="string"?{reason:e.reason}:{}};let t=e.empty;if(Nt(t)&&typeof t.category=="string")return{category:t.category,...typeof t.reason=="string"?{reason:t.reason}:{}}}function jI(e){switch(e.slice(e.lastIndexOf(".")+1).toLowerCase()){case"rs":return"^\\s*pub\\s";case"py":case"pyi":return"^\\s*(def|class)\\s";case"go":return"^(func|type|var|const)\\s";case"java":case"kt":case"scala":case"cs":return"^\\s*(public|protected|internal)\\s";case"rb":return"^\\s*(def|class|module)\\s";default:return"^\\s*export\\s"}}function QI(e,t){let n=e.symbolName;if(typeof n=="string"&&n.trim())return n.trim();let r=t.resolvedSymbol?.name;if(typeof r=="string"&&r.trim())return r.trim()}function rc(e){return e.startsWith("file://")?decodeURIComponent(e.slice(7)):e}function UI(e,t){if(!Nt(t.pagination))return;let{hasMore:n,nextPage:r}=t.pagination;if(!(n!==!0||typeof r!="number"||r>1e3))return We("lspGetSemantics",{...e,page:r},`Continue semantic ${e.type} results on page ${r}.`)}function uR(e,t){if(!td(t))return t;let n=t;if(Nt(n.pagination)&&n.pagination.hasMore===!0&&typeof n.pagination.currentPage=="number"&&n.pagination.currentPage>=1e3){let{nextPage:C,...P}=n.pagination;n={...n,pagination:P,terminalLimit:!0}}let r=n.payload,o=r.warmup?.possiblyTruncated===!0,i=r.completeness?.truncatedByDepth===!0,s=r.completeness?.truncatedByBudget===!0,a="depth"in e?e.depth??1:1,c=i&&a<20,l=QI(e,n),u=n.workspaceRoot??e.workspaceRoot??(n.uri?rc(n.uri):void 0),p=[...o?["warmupCap"]:[],...i?["depth"]:[],...s?["budget"]:[]];p.length>0&&(n={...n,truncated:!0,partialReasons:p,...(s||i&&!c)&&{terminalLimit:!0}});let d=UI(e,n),m={...n.next??{},...d?{nextPage:d}:{},...c?{expandDepth:We("lspGetSemantics",{...e,depth:Math.min(20,Math.max(a+1,a*2)),page:1},"Re-run with a larger call-hierarchy depth because deeper calls remain.")}:{},...o&&l&&u?{verifyCompleteness:We("localSearch",{operation:"text",path:u,searchText:l,wholeWord:!0,resultView:"files"},"The LSP consumer warmup hit its file cap; search the complete workspace lexically for additional consumer files.")}:{}},f=r.locations?.[0],h=f?.displayRange?.startLine;if(f?.uri&&typeof h=="number"){let C=rc(f.uri);return{...n,next:{...m,readSite:{tool:"localGetFileContent",query:{path:C,startLine:Math.max(1,h-3),endLine:(f.displayRange?.endLine??h)+10},why:"Read the top result location with surrounding context",confidence:"exact"}}}}let y=zI(r);if(y?.category==="unsupportedOperation"&&n.type==="documentSymbols"&&n.uri){let C=rc(n.uri);return{...n,next:{...m,textSearch:{tool:"localSearch",query:{operation:"text",path:C,searchText:jI(C),regex:"perl"},why:"documentSymbols is unsupported for this file's language server \u2014 fall back to a regex search over top-level declarations for an outline.",confidence:"low"}}}}if(!y||!l||!GI.has(y.category))return Object.keys(m).length>0?{...n,next:m}:n;let g=n.type==="workspaceSymbol"?n.workspaceRoot??e.workspaceRoot??n.uri??e.uri:n.uri??e.uri??n.workspaceRoot??e.workspaceRoot;if(!g)return n;let S=rc(g),R={...m,textSearch:{tool:"localSearch",query:{operation:"text",path:S,searchText:l},why:`Semantic ${n.type} returned no result (${y.category}) \u2014 fall back to a text search for "${l}"`,confidence:"low"}};return BI.has(y.category)&&n.uri&&(R.reAnchor={tool:"lspGetSemantics",query:{type:"documentSymbols",uri:n.uri},why:"Re-anchor: list this file's symbols to find the correct lineHint, then retry the semantic query",confidence:"medium"}),{...n,next:R}}import{z as Gn}from"zod";var $I=M(1,1e9),WI=M(0,1e5).optional(),VI=["structured","compact"],pR={type:Gn.enum(wS).default("definition"),symbolName:Gn.string().min(1).max(1024).optional(),lineHint:$I.optional(),orderHint:WI,depth:M(0,20).optional(),includeDeclaration:Gn.boolean().optional().default(!0),page:be,pageSize:M(1,100).optional(),contextLines:M(0,100).optional(),format:Gn.enum(VI).optional().default("structured")},Bn=pe(Bs,pR),KI=["definition","references","callers","callees","callHierarchy","hover","typeDefinition","implementation","supertypes","subtypes"],XI=["documentSymbols","diagnostic"],YI=Bn.extend({type:Gn.enum(KI).optional(),uri:Te(Bn.shape,"uri"),symbolName:Te(Bn.shape,"symbolName"),lineHint:Te(Bn.shape,"lineHint")}),ZI=Bn.extend({type:Gn.enum(XI),uri:Te(Bn.shape,"uri")}),qI=Bn.extend({type:Gn.literal("workspaceSymbol"),symbolName:Te(Bn.shape,"symbolName")}),lo=se(Bs,pR),oc=Z(Gn.union([YI,ZI,qI]),{maxQueries:5});async function yd(e){return he(e.queries||[],async t=>{let n=tt(lo,t);if(n.ok===!1)return n.error;let r=n.data;return Ct({toolName:we,query:r,contextMessage:"lspGetSemantics execution failed",execute:async()=>{let o=await nO(r);return MS(uR(r,NS(r,o)))}})},{toolName:we,minQueryTimeoutMs:3e4},e)}async function nO(e){if(e.type==="documentSymbols")return md(e);if(e.type==="workspaceSymbol")return hd(e);if(e.type==="diagnostic")return gd(e);let t=await TS(e,we);if(t.ok===!1){let l=typeof t.error.error=="string"?t.error.error:"Symbol anchor resolution failed";return Yp(e,l)}let n=e.workspaceRoot??await tO(t.value.absolutePath);await eO(t.value.absolutePath,n)||Dt(t.value.uri,e.type);let o=await JI(n,t.value.absolutePath);o.ok===!1&&Dt(t.value.uri,e.type,o);let i=o.client,s=WS.has(e.type)?await VS(i,t.value,n):void 0,a=i.getReadiness?.(),c=await KS(e,t.value,i,s);return PS({...c,workspaceRoot:n},a)}import{existsSync as dR}from"fs";import{delimiter as rO,dirname as oO,join as mR}from"path";function fR(){return process.platform==="win32"?"npm.cmd":"npm"}function iO(){let e=oO(process.execPath);return mR(e,fR())}function sO(){return process.platform==="win32"?[]:["/opt/homebrew/bin","/usr/local/bin","/usr/bin"]}function aO(){let e=(process.env.PATH??"").split(rO).map(t=>t.trim()).filter(Boolean);return[...new Set([...e,...sO()])]}function hR(){let e=iO();if(dR(e))return{command:process.execPath,argsPrefix:[e]};let t=fR();for(let n of aO()){let r=mR(n,t);if(dR(r))return{command:r,argsPrefix:[]}}return{command:t,argsPrefix:[]}}var cO=["view","search","ping","config","whoami"],lO=[...Vr,...Sg];async function cZ(e=1e4){let t=hR();return Rg(t.command,[...t.argsPrefix,"--version"],e)}async function zn(e,t,n={}){if(!cO.includes(e))return{stdout:"",stderr:"",error:new Error(`Command '${e}' is not allowed`)};let r=sa(t);if(!r.valid)return{stdout:"",stderr:"",error:new Error(`Invalid arguments: ${r.error}`)};let{timeout:o=3e4,cwd:i,env:s}=n,a=hR(),c=await ar(a.command,[...a.argsPrefix,e,...t],{timeout:o,cwd:i,env:s,allowEnvVars:lO});return{stdout:c.stdout,stderr:c.stderr,exitCode:c.exitCode??void 0,error:c.error}}var uo="https://registry.npmjs.org",vi=null;async function Fi(){if(vi)return vi;try{let e=await zn("config",["get","registry","--no-workspaces"],{timeout:1e4});if(!e.error&&e.exitCode===0){let t=e.stdout.trim().replace(/\/+$/,"");if(t&&t.startsWith("http"))return vi=t,t}}catch{}return vi=uo,uo}function uO(){vi=null}async function pO(){try{let e=await Fi(),t=globalThis.fetch;return t?(await t(e,{method:"HEAD",signal:AbortSignal.timeout(5e3)})).ok:!1}catch{return!1}}var dZ=5;var po=new Map,Sd=5,Mi=3e4;function Ni(e){try{return new URL(e).host||e}catch{return e}}var bd=class extends Error{retryable=!1;host;retryAfterMs;constructor(t,n){super(`Circuit open for ${t}: too many recent failures \u2014 failing fast, retry in ~${Math.ceil(n/1e3)}s.`),this.name="CircuitOpenError",this.host=t,this.retryAfterMs=n}};function gR(e,t=Date.now()){let n=po.get(Ni(e));if(!(!n||n.state==="closed")&&n.state==="open"){let r=t-n.openedAt;if(r<Mi)throw new bd(Ni(e),Mi-r);n.state="half-open"}}function Rd(e){let t=po.get(Ni(e));t&&(t.failures=0,t.state="closed")}function yR(e,t=Date.now()){let n=Ni(e),r=po.get(n)??{failures:0,state:"closed",openedAt:0};r.state==="half-open"?(r.state="open",r.openedAt=t):(r.failures+=1,r.failures>=Sd&&(r.state="open",r.openedAt=t)),po.set(n,r)}function mZ(){po.clear(),Sd=5,Mi=3e4}function fZ(e){typeof e.failureThreshold=="number"&&(Sd=e.failureThreshold),typeof e.cooldownMs=="number"&&(Mi=e.cooldownMs)}function bR(e,t=Date.now()){let n=po.get(Ni(e));return!n||n.state==="closed"?!1:n.state==="open"?t-n.openedAt<Mi:!1}import{z as _}from"zod";var ic=_.looseObject({name:_.string(),version:_.string(),repository:_.union([_.string(),_.object({url:_.string().optional(),type:_.string().optional(),directory:_.string().optional()})]).optional(),main:_.string().optional(),module:_.string().optional(),type:_.string().optional(),exports:_.unknown().optional(),types:_.string().optional(),typings:_.string().optional(),description:_.string().optional(),keywords:_.array(_.string()).optional(),license:_.union([_.string(),_.object({type:_.string().optional()})]).optional(),homepage:_.string().optional(),author:_.union([_.string(),_.object({name:_.string().optional(),email:_.string().optional(),url:_.string().optional()})]).optional(),maintainers:_.array(_.object({name:_.string().optional(),email:_.string().optional()})).optional(),engines:_.record(_.string(),_.string()).optional(),dependencies:_.record(_.string(),_.string()).optional(),devDependencies:_.record(_.string(),_.string()).optional(),peerDependencies:_.record(_.string(),_.string()).optional(),time:_.record(_.string(),_.string().optional()).optional()}),dO=_.looseObject({package:_.looseObject({name:_.string().nullish(),version:_.string().nullish(),description:_.string().nullish(),links:_.looseObject({npm:_.string().nullish(),homepage:_.string().nullish(),repository:_.string().nullish()}).nullish()}),score:_.looseObject({final:_.number().nullish(),detail:_.looseObject({quality:_.number().nullish(),popularity:_.number().nullish(),maintenance:_.number().nullish()}).nullish()}).nullish()}),SR=_.looseObject({objects:_.array(dO),total:_.union([_.number(),_.string()]).optional()}),RR=_.union([_.string(),_.boolean(),_.number(),_.null(),_.record(_.string(),_.unknown())]);var mO=6e4;function CR(e){let t=e.get("Retry-After");if(!t)return;let n=parseInt(t,10);return isNaN(n)?void 0:n}function fO(e,t,n,r){e&&An({limit_type:"primary",retry_after_seconds:CR(r),api_method:t,api_url:n,provider:e})}function hO(e,t,n,r,o){e.body?.cancel?.().catch(()=>{});let i=new Error(bo.FETCH_HTTP_ERROR.message(e.status,e.statusText));return i.status=e.status,i.headers=e.headers,r&&e.status!==404&&Vf(r),e.status===429&&fO(o,t,n,e.headers),i.retryable=e.status===429||e.status===408||e.status>=500&&e.status<600,i}function gO(e,t,n,r){let o=Math.min(t*Math.pow(2,e-1),n);if(o+=Math.floor(Math.random()*t),r&&r.headers&&typeof r.headers.get=="function"){let i=CR(r.headers);i!==void 0&&(o=Math.min(i*1e3,n))}return o}async function Yt(e,t={}){let{maxRetries:n=3,initialDelayMs:r=1e3,maxDelayMs:o=mO,headers:i={},method:s="GET",includeVersion:a=!1,signal:c,rateLimitProvider:l,packageRegistry:u}=t,p=e;if(a){let y=e.includes("?")?"&":"?";p=`${e}${y}version=${encodeURIComponent(Vn)}`}let d={"User-Agent":`Octocode-MCP/${Vn}`,...i},m=globalThis.fetch;if(!m)throw new Error(bo.FETCH_NOT_AVAILABLE.message);gR(p);let f,h=n+1;for(let y=1;y<=h;y++){if(c?.aborted)throw new Error("Request aborted");try{let g=await m(p,{method:s,headers:d,signal:c});if(!g.ok)throw hO(g,s,p,u,l);if(g.status===204)return Rd(p),null;let S=await g.json();return Rd(p),S}catch(g){let S=g;if(c?.aborted||g instanceof Error&&g.name==="AbortError")throw new Error("Request aborted");if(S&&S.retryable===!1)throw g;if(f=g instanceof Error?g:new Error(String(g)),y===h)break;let R=gO(y,r,o,S);await new Promise(C=>setTimeout(C,R))}}throw yR(p),new Error(bo.FETCH_FAILED_AFTER_RETRIES.message(h,f?.message||""))}function jn(e){return e.replace(/^git\+/,"").replace(/\.git$/,"")}var yO="https://api.npmjs.org/downloads/point/last-week";function rt(e){return e===void 0?0:B(e)}async function ac(e){try{let t=`${yO}/${encodeURIComponent(e)}`,n=await Yt(t,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3),packageRegistry:"npm"});return{downloads:typeof n?.downloads=="number"?n.downloads:void 0,rawResponseChars:rt(n)}}catch{return{rawResponseChars:0}}}function sc(e,t){return{values:e.slice(0,t),total:e.length,truncated:e.length>t}}function bO(e){if(typeof e=="string")return sc([e],12);if(!e||typeof e!="object")return;let n=Object.entries(e).flatMap(([r,o])=>typeof o=="string"?[`${r}:${o}`]:o&&typeof o=="object"?Object.entries(o).filter(([,i])=>typeof i=="string").map(([i,s])=>`${r}:${i}:${s}`):[]);return n.length>0?sc(n,12):void 0}function SO(e,t){if(typeof e=="string"){let n=t?.replace(/^@[^/]+\//,"")??"";return sc([n?`${n} \u2192 ${e}`:e],8)}if(e&&typeof e=="object"){let n=Object.entries(e).filter(([,r])=>typeof r=="string").map(([r,o])=>`${r} \u2192 ${o}`);return n.length>0?sc(n,8):void 0}}function RO(e){return e.type==="module"||e.module?"module":e.main?"commonjs":e.types||e.typings?"types-only":"unknown"}function cc(e,t=!1,n="cli"){let r=bO(e.exports),o=SO(e.bin,e.name),i=null,s;e.repository&&(typeof e.repository=="string"?i=jn(e.repository):(e.repository.url&&(i=jn(e.repository.url)),e.repository.directory&&(s=e.repository.directory.replace(/^\.\//,""))));let a;if(e.time){let u=(e.version?e.time[e.version]:void 0)||e.time.modified;u&&(a=u)}let c={name:e.name,npmUrl:`https://www.npmjs.com/package/${encodeURIComponent(e.name)}`,repoUrl:i,version:e.version||"latest",mainEntry:e.main||null,moduleEntry:e.module||null,typeDefinitions:e.types||e.typings||null,packageType:RO(e),...s?{repositoryDirectory:s}:{},...r?{exports:r.values,exportsTotal:r.total,...r.truncated?{exportsTruncated:!0}:{}}:{},...o?{bin:o.values,binTotal:o.total,...o.truncated?{binTruncated:!0}:{}}:{},lastPublished:a,source:n};return e.description&&(c.description=e.description),e.license&&(c.license=typeof e.license=="string"?e.license:e.license.type),t&&(e.author&&(typeof e.author=="string"?c.author=e.author:e.author.name&&(c.author=e.author.name)),e.keywords&&e.keywords.length>0&&(c.keywords=e.keywords),e.homepage&&(c.homepage=e.homepage),e.engines&&Object.keys(e.engines).length>0&&(c.engines=e.engines),e.dependencies&&Object.keys(e.dependencies).length>0&&(c.dependencies=e.dependencies),e.peerDependencies&&Object.keys(e.peerDependencies).length>0&&(c.peerDependencies=e.peerDependencies)),c}function CO(e){return typeof e.links?.repository=="string"?jn(e.links.repository):typeof e.repository=="string"?jn(e.repository):typeof e.repository?.url=="string"?jn(e.repository.url):null}function xR(e){if(!e.name)return null;let t=(e.links?.npm??"")||`https://www.npmjs.com/package/${encodeURIComponent(e.name)}`,n=e.links?.homepage??void 0;return{name:e.name,npmUrl:t,repoUrl:CO(e),version:e.version??"unknown",source:"cli",...e.description?{description:e.description}:{},...n?{homepage:n}:{},...e.keywords&&e.keywords.length>0?{keywords:e.keywords}:{}}}function Cd(e){return e.startsWith("@")?"@"+e.slice(1).replace("/","%2F"):e}function wR(e,t){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"){let n=Number.parseInt(e,10);if(Number.isFinite(n))return n}return t}var xO=3e3;function xd(e){if(!e)return!1;let t=e.toLowerCase();return t.includes("fetch failed")||t.includes("failed to fetch")||t.includes("network")||t.includes("econnrefused")||t.includes("enotfound")||t.includes("etimedout")||t.includes("socket hang up")||t.includes("connect timeout")||t.includes("command timeout")||t.includes("circuit open")||t.includes("circuit breaker")}async function wd(e){try{let t=await Fi(),n=Cd(e),r=`${t}/${n}`,o=AbortSignal.timeout(8e3);try{let s=await Yt(r,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/vnd.npm.install-v1+json"},signal:o,packageRegistry:"npm"}),a=rt(s);if(s?.modified)return{lastPublished:s.modified,rawResponseChars:a}}catch{}let i=await Yt(r,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:o,packageRegistry:"npm"});return{lastPublished:i?.time?.modified||void 0,rawResponseChars:rt(i)}}catch{return{rawResponseChars:0}}}async function uc(e,t,n){let[r,o]=await Promise.all([ac(e),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):wd(e)]);return r.downloads!==void 0&&(t.weeklyDownloads=r.downloads),o.lastPublished&&!t.lastPublished&&(t.lastPublished=o.lastPublished),{pkg:t,rawResponseChars:n+r.rawResponseChars+o.rawResponseChars}}function lc(e){let t=e.toLowerCase();return t.includes("404")||t.includes("not found")||t.includes("e404")}async function wO(e,t){try{let n=await zn("view",[e,"--json"],{timeout:xO});if(!n)return{pkg:null,rawResponseChars:0};if(n.error||n.exitCode!==0){let c=n.error?.message||n.stderr||`npm exited ${n.exitCode}`;return{pkg:null,...lc(c)?{}:{errorDetail:c},rawResponseChars:rt(n.stdout)}}let r=n.stdout.trim();if(!r||r==="undefined")return{pkg:null,rawResponseChars:0};let o;try{o=JSON.parse(r)}catch{return{pkg:null,errorDetail:"Invalid npm view JSON output",rawResponseChars:r.length}}let i=rt(o),s=ic.safeParse(o);return s.success?{pkg:cc(s.data,t,"cli"),rawResponseChars:i}:{pkg:null,errorDetail:"Invalid npm view response format",rawResponseChars:i}}catch(n){let r=n instanceof Error?n.message:String(n);return{pkg:null,...lc(r)?{}:{errorDetail:r},rawResponseChars:0}}}async function PO(e,t){try{let n=await Fi(),r=Cd(e),o=`${n}/${r}/latest`,i;try{i=await Yt(o,{maxRetries:1,initialDelayMs:500,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3),packageRegistry:"npm"})}catch(l){let u=l instanceof Error?l.message:String(l);return u.includes("404")||u.toLowerCase().includes("not found")?{pkg:null,rawResponseChars:0}:{pkg:null,errorDetail:u,rawResponseChars:0}}let s=rt(i);if(!i||typeof i!="object")return{pkg:null,rawResponseChars:s};let a=ic.safeParse(i);return a.success?{pkg:cc(a.data,t,"registry"),rawResponseChars:s}:{pkg:null,errorDetail:"Invalid npm registry response format",rawResponseChars:s}}catch(n){let r=n instanceof Error?n.message:String(n);return{pkg:null,...lc(r)?{}:{errorDetail:r},rawResponseChars:0}}}function TO(e){return[`https://cdn.jsdelivr.net/npm/${e}/package.json`,`https://unpkg.com/${e}/package.json`]}async function Pd(e,t){let n=0,r;for(let o of TO(e)){let i;try{i=await Yt(o,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3)})}catch(c){let l=c instanceof Error?c.message:String(c);lc(l)||(r=l);continue}if(n+=rt(i),!i||typeof i!="object")continue;let s=ic.safeParse(i);if(!s.success){r="Invalid npm CDN package.json response format";continue}return{pkg:cc(s.data,t,"cdn"),rawResponseChars:n}}return{pkg:null,...r?{errorDetail:r}:{},rawResponseChars:n}}async function pc(e,t=!1){let[n,r]=await Promise.allSettled([wO(e,t),PO(e,t)]),o=n.status==="fulfilled"?n.value:{pkg:null,rawResponseChars:0},i=r.status==="fulfilled"?r.value:{pkg:null,rawResponseChars:0},s=o.pkg?o:i.pkg?i:null;return s?.pkg?uc(e,s.pkg,s.rawResponseChars):{pkg:null,errorDetail:o.errorDetail||i.errorDetail,rawResponseChars:o.rawResponseChars+i.rawResponseChars}}async function PR(e,t,n=!1){let{pkg:r,errorDetail:o,rawResponseChars:i}=await pc(e,t);if(!r){if(o){let s=xd(o);if(s&&n){let a=await Pd(e,t);if(a.pkg){let c=await uc(e,a.pkg,a.rawResponseChars);return{packages:c.pkg?[c.pkg]:[],totalFound:c.pkg?1:0,rawResponseChars:i+c.rawResponseChars}}}return{error:`NPM view failed for '${e}': ${o}`,rawResponseChars:i,hints:s?["npm registry is unreachable.",'Use ghSearch operation:"repositories" with the package name or domain terms.']:["Ensure npm is installed and available in PATH","Check package name for typos",`Try: npm view ${e} --json`]}}return{packages:[],totalFound:0,rawResponseChars:i}}return{packages:[r],totalFound:1,rawResponseChars:i}}async function EO(e,t,n,r=0){let o=Math.max(t+r,t),i=await zn("search",[e,"--json","--searchlimit",String(o)],{timeout:8e3});if(!i)return{error:"NPM CLI search unavailable",rawResponseChars:0};if(i.error||i.exitCode!==0)return{error:`NPM CLI search failed: ${i.error?.message||i.stderr||`npm exited ${i.exitCode}`}`,rawResponseChars:rt(i.stdout)};let s=i.stdout.trim();if(!s)return{packages:[],totalFound:0,rawResponseChars:0};let a;try{a=JSON.parse(s)}catch{return{error:"Invalid npm search JSON output",rawResponseChars:s.length}}let c=rt(a);if(!Array.isArray(a))return{error:"Invalid npm search response format",rawResponseChars:c};let u=[...a].sort((f,h)=>{let y=f?.score?.final??0;return(h?.score?.final??0)-y}).slice(r,r+t),p=await Promise.all(u.map(async f=>{if(!f||typeof f!="object")return null;let h=f;if(!h.name)return null;if(n){let y=await pc(h.name,!0);if(y.pkg)return y}return{pkg:xR(h),rawResponseChars:0}})),d=p.map(f=>f?.pkg).filter(f=>!!f),m=p.reduce((f,h)=>f+(h?.rawResponseChars??0),0);return{packages:d,totalFound:a.length,rawResponseChars:c+m}}async function AO(e,t,n,r=0){try{let o=r>0?`&from=${r}`:"",i=`${uo}/-/v1/search?text=${encodeURIComponent(e)}&size=${t}${o}`,s;try{s=await Yt(i,{maxRetries:1,initialDelayMs:500,signal:AbortSignal.timeout(8e3),packageRegistry:"npm"})}catch(f){return{error:`Could not reach the npm search API (${f instanceof Error?f.message:String(f)}). The package may not exist, or the registry search endpoint is unavailable.`,hints:['Verify the exact package name / scope (e.g. "@scope/name")',"For an exact known name, query it directly instead of a keyword search","Ensure the npm registry is accessible from this environment"]}}let a=rt(s);if(!s||typeof s!="object")return{packages:[],totalFound:0,rawResponseChars:a};let c=SR.safeParse(s);if(!c.success)return{error:`Invalid npm registry search response format: ${c.error.issues.map(h=>h.message).join("; ")}`,rawResponseChars:a,hints:["Try a different search term","Try itemsPerPage=1 for an exact package lookup"]};let u=[...c.data.objects].sort((f,h)=>{let y=f.score?.final??0;return(h.score?.final??0)-y}).map(f=>f.package).filter(f=>typeof f.name=="string"&&f.name.length>0).slice(0,t),p=await Promise.all(u.map(async f=>{if(n){let h=await pc(f.name,!0);if(h.pkg)return h}return{pkg:{name:f.name,npmUrl:(f.links?.npm??"")||`https://www.npmjs.com/package/${encodeURIComponent(f.name)}`,repoUrl:f.links?.repository&&typeof f.links.repository=="string"?jn(f.links.repository):null,version:f.version??"unknown",source:"registry",...f.description?{description:f.description}:{},...f.links?.homepage?{homepage:f.links.homepage}:{}},rawResponseChars:0}})),d=p.map(f=>f.pkg).filter(f=>!!f),m=p.reduce((f,h)=>f+h.rawResponseChars,0);return{packages:d,totalFound:wR(c.data.total,d.length),rawResponseChars:a+m}}catch(o){return{error:`NPM registry search failed: ${o instanceof Error?o.message:String(o)}`,hints:["Check package name for typos","Try searching with a simpler term","Ensure npm registry is accessible"]}}}async function Td(e,t){let n="https://api.npms.io/v2/search",r="octocode-mcp/1.0 (+https://github.com/bgauryy/octocode-mcp)";try{let o=`${n}?q=${encodeURIComponent(e)}&size=${t}`,i;try{i=await Yt(o,{maxRetries:1,initialDelayMs:500,headers:{Accept:"application/json","User-Agent":r},signal:AbortSignal.timeout(8e3)})}catch(c){return{error:`Web search failed: ${c instanceof Error?c.message:String(c)}`}}if(!i||typeof i!="object")return{packages:[],totalFound:0,rawResponseChars:rt(i)};let s=i;if(!Array.isArray(s.results))return{packages:[],totalFound:0,rawResponseChars:rt(i)};let a=s.results.slice(0,t).map(c=>c.package).filter(c=>typeof c?.name=="string"&&c.name.length>0).map(c=>({name:c.name,npmUrl:c.links?.npm??`https://www.npmjs.com/package/${encodeURIComponent(c.name)}`,repoUrl:c.links?.repository&&typeof c.links.repository=="string"?jn(c.links.repository):null,version:c.version??"unknown",source:"web",...c.description?{description:c.description}:{},...c.links?.homepage?{homepage:c.links.homepage}:{}}));return{packages:a,totalFound:typeof s.total=="number"?s.total:a.length,rawResponseChars:rt(i)}}catch(o){return{error:`Web search failed: ${o instanceof Error?o.message:String(o)}`}}}async function Ed(e,t,n,r=0){try{let o=await EO(e,t,n,r);if(!("error"in o))return o}catch{}return AO(e,t,n,r)}async function Ad(e){if(e.packages.length===0)return e;let t=e.packages[0];if(t.weeklyDownloads!==void 0&&t.lastPublished)return e;let[n,r]=await Promise.all([t.weeklyDownloads!==void 0?Promise.resolve({downloads:void 0,rawResponseChars:0}):ac(t.name),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):wd(t.name)]),o={...t};return n.downloads!==void 0&&(o.weeklyDownloads=n.downloads),r.lastPublished&&(o.lastPublished=r.lastPublished),{...e,packages:[o,...e.packages.slice(1)]}}function pr(e){return e.startsWith("@")&&e.includes("/")?!0:e.includes(" ")?!1:/^[a-z0-9][a-z0-9._-]*$/i.test(e)}function TR(e){return e.replace(/^@/,"").replace(/[/_-]/g," ").replace(/\s+/g," ").trim()}async function Ld(e,t,n,r=0){let o=xe("npm-search",{name:e,limit:t,metadata:n,from:r});return De(o,async()=>{if(bR(uo)){if(r===0&&t===1&&pr(e)){let u=await Pd(e,n);if(u.pkg){let p=await uc(e,u.pkg,u.rawResponseChars);return{packages:p.pkg?[p.pkg]:[],totalFound:p.pkg?1:0,rawResponseChars:p.rawResponseChars}}}let l=await Td(e,t);return!("error"in l)&&l.packages.length>0?l:{error:"npm registry circuit open and web search returned no results.",hints:['Use ghSearch operation:"repositories" to find the source repository.']}}if(r===0&&pr(e)){let l=await PR(e,n,t===1);if("error"in l){if(!xd(l.error))return l}else if(l.packages.length>0||t===1)return l}let s=await Ed(e,t,n,r);if(!("error"in s)&&s.packages.length>0)return Ad(s);let a=TR(e);if(a!==e){let l=await Ed(a,t,n,r);if(!("error"in l)&&l.packages.length>0)return Ad(l)}let c=await Td(e,t);return!("error"in c)&&c.packages.length>0?c:"error"in s?{...s,hints:["npm registry and web search (npms.io) are both unreachable.",'Use ghSearch operation:"repositories" with the package name or domain terms.']}:s},{shouldCache:i=>!("error"in i||"totalFound"in i&&i.totalFound===0)})}async function ER(e){try{let t=await zn("view",[e,"deprecated","--json"]);if(t.error||t.exitCode!==0)return null;let n=t.stdout.trim();if(!n||n==="undefined"||n==="")return{deprecated:!1};try{let r=JSON.parse(n),o=RR.safeParse(r),i=o.success?o.data:n;return{deprecated:!0,message:typeof i=="string"?i:"This package is deprecated"}}catch{return{deprecated:!0,message:n}}}catch{return null}}async function AR(e){let t=pr(e.name),n=e.itemsPerPage??(t?1:10),r=Math.max(0,((e.page??1)-1)*n);return Ld(e.name,n,!0,r)}function _d(e){if(e===void 0)return;let t=e.join(" ").trim();return t.length>0?t:void 0}var LO=/\b(?:404|e404)\b|not\s+found|no\s+such\s+package|does\s+not\s+exist/i;function kd(e){return LO.test(e)}function Id(e,t,n,r){let o=Math.max(1,e.page??1),i=r?e.pageSize??10:1,s=r&&n>=i,a=Math.max(1,Math.ceil(t/i)),c=s||o<a,l=s&&o>=a?o+1:a;return{currentPage:o,totalPages:l,perPage:i,totalFound:t,returned:n,hasMore:c,...c&&o<1e3?{nextPage:o+1}:{},...c&&o>=1e3?{continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}function LR(e,t){if(!(!Array.isArray(e.keywords)||typeof t.nextPage!="number"))return{nextPage:{tool:"npmSearch",query:{keywords:e.keywords,page:t.nextPage,...typeof e.pageSize=="number"?{pageSize:e.pageSize}:{}},why:`Continue npm keyword discovery on page ${t.nextPage}.`,confidence:"exact"}}}function _O(e){return"error"in e}function dc(e){return"npmUrl"in e}function kO(e){return dc(e)&&e.path?e.path:e.name}function IO(e){return dc(e)?e.repoUrl:e.repository}function OO(e){if(!e)return;let t=e.replace(/^\.\//,"").replace(/^\//,"");return t.length>0?t:void 0}var vO={github:"github.com",gitlab:"gitlab.com",bitbucket:"bitbucket.org"};function FO(e){if(!e)return;let t=e.trim();if(!t)return;t=t.replace(/^git\+/,"");let n=s=>s.replace(/\.git$/,""),r=t.match(/^(github|gitlab|bitbucket):(.+)$/i);if(r&&r[1]&&r[2]){let s=vO[r[1].toLowerCase()];return n(`https://${s}/${r[2]}`)}let o=t.match(/^[^@/]+@([^:/]+):(.+)$/);if(o&&o[1]&&o[2])return n(`https://${o[1]}/${o[2]}`);let i=t.match(/^(?:ssh|git|https?):\/\/(.+)$/);if(i&&i[1]){let s=i[1].replace(/^[^@/]+@/,"");return n(`https://${s}`)}return n(t)}function Od(e){if(!e)return;let t=e.match(/^https:\/\/github\.com\/([^/]+)\/([^/#?]+)/i);if(!(!t||!t[1]||!t[2]))return{owner:t[1],repo:t[2]}}function _R(e,t){let n=Od(e);if(!n)return;let{owner:r,repo:o}=n;return{viewTree:{tool:"ghSearch",query:{operation:"tree",owner:r,repo:o,...t?{path:t}:{}}},searchRepositoryCode:{tool:"ghSearch",query:{operation:"code",owner:r,repo:o}},cloneRepo:{tool:"ghCloneRepo",query:{owner:r,repo:o,...t?{sparsePath:t}:{}}}}}function MO(e){let t=kO(e),n=FO(IO(e)),r={name:t};dc(e)&&(e.version&&e.version!=="unknown"&&(r.version=e.version),e.description&&(r.description=e.description),e.license&&(r.license=e.license),typeof e.weeklyDownloads=="number"&&(r.downloads=e.weeklyDownloads)),n&&(r.repository=n);let o=OO(dc(e)?e.repositoryDirectory:void 0);o&&(r.repositoryDirectory=o);let i=_R(n,o);return i&&(r.next=i),r.version&&Od(n)&&(r.warnings=[`npm version ${r.version} is the registry's latest publish and may not correspond to a release/tag in the linked repository \u2014 verify against the repo's releases or tags before citing it as the repo's latest release.`]),r}function NO(e){if(e.length<=1)return{packages:e};let t={},n=new Map,r=1,o=e.map(i=>{if(!i.repository)return i;let s=Od(i.repository);if(!s)return i;let a=`${i.repository}\0${i.repositoryDirectory??""}`,c=n.get(a);c||(c=`r${r++}`,n.set(a,c),t[c]={repository:i.repository,owner:s.owner,repo:s.repo,...i.repositoryDirectory?{repositoryDirectory:i.repositoryDirectory}:{},next:_R(i.repository,i.repositoryDirectory)});let{repository:l,repositoryDirectory:u,next:p,...d}=i;return{...d,repositoryId:c}});return Object.keys(t).length?{packages:o,repositories:t}:{packages:e}}async function kR(e){return he(e.queries,async t=>{try{let n=t.packageName??_d(t.keywords),r=Array.isArray(t.keywords);if(!n)return N("Provide a packageName or keywords for package search",t);let o=await AR({name:n,page:t.page,...r&&typeof t.pageSize=="number"?{itemsPerPage:t.pageSize}:{},goal:t.goal,reasoning:t.reasoning});if(_O(o)){if(kd(o.error)){let d=pr(n);return ge(t,{packages:[],hints:[d?`No package named "${n}". Check spelling and scope.`:`No packages matched "${n}". Try fewer keywords or an exact name.`]},!1,I.PACKAGE_SEARCH,{rawResponse:o})}return N(o.error,t,{rawResponse:o})}let s=o.packages.map(MO),a=s.length>0,c=Id(t,o.totalFound,s.length,r),l=NO(s),u=LR(t,c),p={...l,pagination:c,...c.continuationUnavailable?{terminalLimit:!0}:{},...u?{next:u}:{}};return ge(t,p,a,I.PACKAGE_SEARCH,{rawResponse:o.rawResponseChars??o})}catch(n){return N(n,t,{toolName:I.PACKAGE_SEARCH})}},{toolName:I.PACKAGE_SEARCH,keysPriority:["packages","pagination","error"]},e)}import{z as dr}from"zod";var IR={page:be,pageSize:M(1,100).optional().describe("Packages returned per keyword-discovery page."),keywords:dr.array(dr.string()).optional()};function vd(e,t){let n=Array.isArray(e.keywords)?e.keywords.join(" ").trim():e.keywords?.trim();!e.packageName?.trim()&&!n&&t.addIssue({code:"custom",path:["packageName"],message:"provide packageName or keywords"}),e.packageName?.trim()&&n&&t.addIssue({code:"custom",path:["keywords"],message:"provide packageName or keywords, not both"}),e.packageName?.trim()&&e.pageSize!==void 0&&t.addIssue({code:"custom",path:["pageSize"],message:"pageSize is only available for keyword discovery"})}var Fd=se(Hs,IR).superRefine(vd),mc=pe(Hs,IR,{strict:!0}),OR=mc.omit({packageName:!0,keywords:!0,pageSize:!0}).shape,DO=dr.object({...OR,packageName:Te(mc.shape,"packageName")}).strict().superRefine((e,t)=>vd(e,t)),HO=dr.object({...OR,keywords:dr.array(dr.string()).min(1).describe(Pe(mc.shape,"keywords").description??""),pageSize:Pe(mc.shape,"pageSize")}).strict().superRefine((e,t)=>vd(e,t)),Md=Z(dr.union([DO,HO]),{maxQueries:5});import{z as GO}from"zod";var vR={limit:M(1,100).optional(),page:be.default(1),match:GO.enum(["file","path"]).default("file")},BO=se(kn,vR),zO=Z(pe(kn,vR));import{z as fc}from"zod";var mr=e=>fc.literal(e).describe("Required operation selector."),mo=e=>Te(e,"owner"),fo=e=>Te(e,"repo"),jO=rp.extend({operation:mr("pullRequests")}).strict(),QO=yi.extend({operation:mr("issues"),owner:mo(yi.shape),repo:fo(yi.shape)}).strict(),Nd=op.omit({includeDiff:!0,filePage:!0,charOffset:!0,charLength:!0}),UO=Nd.extend({operation:mr("commits"),owner:mo(Nd.shape),repo:fo(Nd.shape)}).strict(),ho=fc.discriminatedUnion("operation",[jO,QO,UO]).describe("Search or list GitHub pull requests, issues, or commits using one strict operation branch."),Bd=Z(ho),Dd=Na.omit({prNumber:!0}),$O=Dd.extend({operation:mr("pullRequest"),owner:mo(Dd.shape),repo:fo(Dd.shape),number:Na.shape.prNumber}).strict(),Hd=Da.omit({issueNumber:!0}),WO=Hd.extend({operation:mr("issue"),owner:mo(Hd.shape),repo:fo(Hd.shape),number:Da.shape.issueNumber}).strict(),Gd=no.omit({base:!0,head:!0}),VO=Gd.extend({operation:mr("commit"),owner:mo(Gd.shape),repo:fo(Gd.shape),ref:fc.string().min(1).describe("Commit SHA or ref to retrieve exactly.")}).strict(),KO=no.extend({operation:mr("compare"),owner:mo(no.shape),repo:fo(no.shape)}).strict(),un=fc.discriminatedUnion("operation",[$O,WO,VO,KO]).describe("Retrieve one GitHub pull request, issue, commit, or ref comparison using one strict operation branch."),zd=Z(un);import{z as FR}from"zod";var MR={limit:M(1,100).optional(),page:be.default(1),match:FR.array(FR.enum(["name","description","readme"])).optional()},XO=se(rn,MR),YO=Z(pe(rn,MR));var NR={maxDepth:M(0,20).optional(),page:be.default(1),itemsPerPage:M(1,200).optional()},ZO=se(er,NR),qO=Z(pe(er,NR));import{z as jd}from"zod";var DR={maxDepth:M(0,100).optional(),minDepth:M(0,100).optional(),limit:M(1,1e4).optional(),page:be.default(1),itemsPerPage:M(1,50).optional(),excludeDir:jd.array(jd.string()).optional()},HR=jd.object(Object.fromEntries(Object.entries(Ut.shape).filter(([e])=>e!=="regexType")));function JO(e,t){e.minDepth!==void 0&&e.maxDepth!==void 0&&e.minDepth>e.maxDepth&&t.addIssue({code:"custom",message:"minDepth must be less than or equal to maxDepth.",path:["minDepth"]})}var ev=pe(HR,DR),tv=se(HR,DR).superRefine(JO),nv=Z(ev,{maxQueries:5});import{z as GR}from"zod";var BR={excludeDir:GR.array(GR.string()).optional(),maxDepth:M(0,20).optional(),limit:M(1,1e4).optional(),page:be.default(1),itemsPerPage:M(1,50).optional()},rv=pe($t,BR),ov=se($t,BR),iv=Z(rv,{maxQueries:5});var Di=[{name:St,title:"GitHub Search",description:Ue.ghSearch,schema:Xr,inputSchema:Vu},{name:oe.GITHUB_FETCH_CONTENT,title:"GitHub File Content Fetch",description:Ue.ghGetFileContent,schema:ci,inputSchema:Fu},{name:le,title:"GitHub History Search",description:Ue.ghSearchHistory,schema:ho,inputSchema:Bd},{name:ye,title:"GitHub History Item",description:Ue.ghGetHistoryItem,schema:un,inputSchema:zd},{name:oe.PACKAGE_SEARCH,title:"Package Search",description:Ue.npmSearch,schema:Fd,inputSchema:Md},{name:oe.GITHUB_CLONE_REPO,title:"Clone / Fetch GitHub Repository Locally",description:Ue.ghCloneRepo,schema:ma,inputSchema:vu},{name:et,title:"Local Search",description:Ue.localSearch,schema:ao,inputSchema:Up},{name:Wt,title:"Local Analyze Graph",description:Ue.localAnalyzeGraph,schema:On,inputSchema:Tp},{name:oe.LOCAL_FETCH_CONTENT,title:"Local Fetch Content",description:Ue.localGetFileContent,schema:bi,inputSchema:up},{name:we,title:"Get Semantic Content",description:Ue.lspGetSemantics,schema:lo,inputSchema:oc}];async function zR(e,t){try{let o=(await(await $(t)).rest.repos.getCommit({owner:e.owner,repo:e.repo,ref:e.ref})).data,i=o.files??[],s=e.path,a=s?i.filter(f=>f.filename===s||f.previous_filename===s||f.filename.startsWith(s.endsWith("/")?s:`${s}/`)):i,c=o.commit.author,l=o.commit.committer,u=o.author?.login,p=o.committer?.login,d=o.commit.message,m={type:"commit",owner:e.owner,repo:e.repo,ref:e.ref,sha:o.sha,message:d,messageHeadline:d.split(`
|
|
56
|
-
`)[0]??d,author:{name:c?.name??"unknown",email:c?.email??"",...u?{login:u}:{},...c?.date?{date:c.date}:{}},...l?{committer:{name:l.name??"unknown",email:l.email??"",...p?{login:p}:{},...l.date?{date:l.date}:{}}}:{},parents:o.parents.map(f=>f.sha),...o.stats?.additions===void 0?{}:{additions:o.stats.additions},...o.stats?.deletions===void 0?{}:{deletions:o.stats.deletions},changedFiles:a.length};return e.includeDiff?{data:{...m,...sr(a,{filePage:e.filePage,itemsPerPage:e.itemsPerPage,charOffset:e.charOffset,charLength:e.charLength})},status:200}:{data:m,status:200}}catch(n){return J(n)}}var jR={body:"continueBody",changedFiles:"nextChangedFilesPage",comments:"nextCommentsPage",commentBody:"continueCommentBody",commits:"nextCommitsPage",patches:"continuePatch",filePaths:"nextFilePathsPage"},sv={body:"charOffset",changedFiles:"filePage",comments:"commentPage",commentBody:"commentBodyOffset",commits:"commitPage",patches:"charOffset",filePaths:"filePage"};function pn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Hi(e,t){let n=Array.isArray(e)?e.filter(r=>typeof r=="string"):[];return[...new Set([...n,t])]}function av(e){return{body:"Continue the pull-request or issue body.",changedFiles:"Continue the pull-request changed-file list.",comments:"Continue the discussion comment list.",commentBody:"Continue the current comment body.",commits:"Continue the pull-request commit list.",patches:"Continue the current patch window.",filePaths:"Continue the pull-request file-path list."}[e]}function cv(e,t){return["filePage","commentPage","commitPage","charOffset","commentBodyOffset"].every(n=>e[n]===void 0||e[n]===t[n])}function Qd(e,t){let n=t==="pullRequest"?"pullRequests":"issues",r=e[n];if(!Array.isArray(r)||r.length===0||!pn(r[0]))return e;let o=r[0].contentPagination;if(!pn(o))return e;let s={...pn(e.next)?e.next:{}},a={},c=!1,l=!1;for(let[p,d]of Object.entries(o)){if(!pn(d)){a[p]=d;continue}let{nextQuery:m,...f}=d,h=p;if(f.hasMore===!0&&h in jR){c=!0;let y=pn(m)?un.safeParse(m):void 0,g=sv[h],S=pn(m)&&typeof m[g]=="number";y?.success&&S&&cv(m,y.data)?s[jR[h]]={tool:ye,query:y.data,why:av(h),confidence:"exact"}:(l=!0,f.continuationUnavailable={reason:S?"schemaLimit":"missingCursor"})}a[p]=f}if(!c)return e;let u=[...r];return u[0]={...r[0],contentPagination:a},{...e,[n]:u,isPartial:!0,partialReasons:Hi(e.partialReasons,"contentPagination"),...l?{terminalLimit:!0}:{},...Object.keys(s).length>0?{next:s}:{}}}function QR(e,t){let r=(Array.isArray(e.commits)?e.commits:[]).find(a=>pn(a)&&a.messageTruncated===!0);if(!pn(r)||typeof r.sha!="string")return e;let o={operation:"commit",owner:t.owner,repo:t.repo,ref:r.sha},i=un.safeParse(o);if(!i.success)return e;let s=pn(e.next)?e.next:{};return{...e,isPartial:!0,partialReasons:Hi(e.partialReasons,"commitMessageTruncated"),next:{...s,readCommit:{tool:ye,query:i.data,why:`Read the complete message for commit ${r.sha}.`,confidence:"exact"}}}}var $d=1e3;function hc(e,t,n){let r=n==="commits"?QR(e,t):e,o=r.incompleteResults===!0,i=Wd(r.next),s=typeof t.page=="number"&&Number.isInteger(t.page)?t.page:1,a=o?{...r,isPartial:!0,partialReasons:Hi(r.partialReasons,"providerIncompleteResults"),next:{...i,retry:{tool:le,query:Yu(t,n,s),why:`Retry the same ${n} provider page because the provider reported incomplete results.`,confidence:"exact"}}}:r,c=a.pagination;if(!c||typeof c!="object")return a;let l=c,u=l.totalMatchesCapped===!0,p=u?lv(a):a;if(l.hasMore!==!0)return p;let d=l.nextPage;if(typeof d!="number"||!Number.isInteger(d))return Ud(p,l,{reason:"missingProviderCursor"});if(d>1e3)return Ud(p,l,{reason:"schemaPageLimit",maxPage:1e3});let m=typeof l.perPage=="number"&&l.perPage>0?l.perPage:typeof t.pageSize=="number"&&t.pageSize>0?t.pageSize:void 0;return u&&m!==void 0&&(d-1)*m>=$d?Ud(p,l,{reason:"providerResultCap",maxResults:$d}):{...p,next:{...Wd(p.next),nextPage:{tool:le,query:Yu(t,n,d),why:`Continue ${n} search/list results on page ${d}.`,confidence:"exact"}}}}function lv(e){return{...e,isPartial:!0,terminalLimit:!0,partialReasons:Hi(e.partialReasons,"providerResultCap"),providerLimit:{reason:"providerResultCap",maxResults:$d}}}function Ud(e,t,n){let{nextPage:r,...o}=t,{nextPage:i,...s}=Wd(e.next);return{...e,terminalLimit:!0,pagination:{...o,continuationUnavailable:n},...Object.keys(s).length>0?{next:s}:{}}}function Wd(e){return e&&typeof e=="object"?e:{}}function UR(e){return tt(gi,e)}function $R(e){let{operation:t,...n}=e;return n}function uv(e,t){let n=e.filesPagination,o=(Array.isArray(e.files)?e.files:[]).find(s=>s&&typeof s=="object"&&typeof s.patchPagination?.nextCharOffset=="number"),i={};return typeof n?.nextFilePage=="number"&&(i.nextFilePage={tool:ye,query:Xu(t,{filePage:n.nextFilePage}),why:"Continue the changed-file list.",confidence:"exact"}),typeof o?.patchPagination?.nextCharOffset=="number"&&(i.continuePatch={tool:ye,query:Xu(t,{charOffset:o.patchPagination.nextCharOffset}),why:"Continue the current patch window.",confidence:"exact"}),Object.keys(i).length>0?{...e,next:i}:e}async function pv(e,t,n){let r=tt(ho,e);if(r.ok===!1)return r.error;let o=r.data,i=o.operation,s={...$R(o),type:i==="pullRequests"?"prs":i==="issues"?"issues":"commits"},a=UR(s);return a.ok===!1?a.error:i==="pullRequests"?hc(await hi(s,a.data,n,le),e,i):i==="issues"?hc(await mi(s,a.data,t.authInfo,le),e,i):hc(await fi(s,a.data,t.authInfo,le),e,i)}async function dv(e,t,n){let r=tt(un,e);if(r.ok===!1)return r.error;let o=r.data;if(o.operation==="commit"){let c=await zR({owner:String(o.owner),repo:String(o.repo),ref:String(o.ref),...typeof o.includeDiff!="boolean"?{}:{includeDiff:o.includeDiff},...typeof o.path!="string"?{}:{path:o.path},...typeof o.filePage!="number"?{}:{filePage:o.filePage},...typeof o.pageSize!="number"?{}:{itemsPerPage:o.pageSize},...typeof o.charOffset!="number"?{}:{charOffset:o.charOffset},...typeof o.charLength!="number"?{}:{charLength:o.charLength}},t.authInfo);return Rt(c)?N(c,e,{toolName:ye}):ge(e,uv(c.data,e),!0,ye)}let s={...$R(o),...o.operation==="pullRequest"?{type:"prs",prNumber:o.number,number:void 0}:o.operation==="issue"?{type:"issues",issueNumber:o.number,number:void 0}:{type:"commits"}};delete s.number;let a=UR(s);return a.ok===!1?a.error:o.operation==="pullRequest"?Qd(await hi(s,a.data,n,ye),o.operation):o.operation==="issue"?Qd(await mi(s,a.data,t.authInfo,ye),o.operation):fi(s,a.data,t.authInfo,ye)}function WR(e,t,n){let r=$e(e.authInfo);return he(e.queries,async o=>{try{return await n(o,e,r)}catch(i){return He(i,o,void 0,t)}},{toolName:t},e)}function VR(e){return WR(e,le,pv)}function KR(e){return WR(e,ye,dv)}var Gi={security:"remote",requiresServerRuntime:!0,requiresProviders:!0},mv={[St]:{isDefault:!0,isLocal:!1,type:"search",direct:{executionFn:Ny,...Gi}},[oe.GITHUB_FETCH_CONTENT]:{isDefault:!0,isLocal:!1,type:"content",direct:{executionFn:hy,...Gi}},[le]:{isDefault:!0,isLocal:!1,type:"history",direct:{executionFn:VR,...Gi}},[ye]:{isDefault:!0,isLocal:!1,type:"history",direct:{executionFn:KR,...Gi}},[oe.PACKAGE_SEARCH]:{isDefault:!0,isLocal:!1,type:"search",direct:{executionFn:kR,security:"remote",requiresServerRuntime:!0}},[oe.GITHUB_CLONE_REPO]:{isDefault:!0,isLocal:!0,isClone:!0,type:"content",direct:{executionFn:zg,timeoutMs:15e4,...Gi}},[et]:{isDefault:!0,isLocal:!0,type:"search",direct:{executionFn:xS,security:"basic"}},[Wt]:{isDefault:!0,isLocal:!0,type:"search",direct:{executionFn:Ub,security:"basic"}},[oe.LOCAL_FETCH_CONTENT]:{isDefault:!0,isLocal:!0,type:"content",direct:{executionFn:Ab,security:"basic"}},[we]:{isDefault:!0,isLocal:!0,type:"content",direct:{executionFn:yd,security:"basic",requiresServerRuntime:!0}}};function fv(e){let t=mv[e.name];if(!t)throw new Error(`Missing runtime configuration for ${e.name}`);return{name:e.name,title:e.title,description:e.description,...t,direct:{schema:e.schema,inputSchema:e.inputSchema,...t.direct}}}function hv(){let e=new Map(Di.map(m=>{let f=fv(m);return[f.name,f]})),t=m=>{let f=e.get(m);if(!f)throw new Error(`Missing direct-tool specification for ${m}`);return f},n=t(St),r=t(oe.GITHUB_FETCH_CONTENT),o=t(le),i=t(ye),s=t(oe.PACKAGE_SEARCH),a=t(oe.GITHUB_CLONE_REPO),c=t(et),l=t(Wt),u=t(oe.LOCAL_FETCH_CONTENT),p=t(we),d=Di.map(m=>t(m.name));return{GITHUB_SEARCH:n,GITHUB_FETCH_CONTENT:r,GITHUB_SEARCH_HISTORY:o,GITHUB_GET_HISTORY_ITEM:i,PACKAGE_SEARCH:s,GITHUB_CLONE_REPO:a,LOCAL_SEARCH:c,LOCAL_ANALYZE_GRAPH:l,LOCAL_FETCH_CONTENT:u,LSP_GET_SEMANTIC_CONTENT:p,ALL_TOOLS:d}}var Ht=hv(),i3=Ht.GITHUB_SEARCH,s3=Ht.GITHUB_FETCH_CONTENT,a3=Ht.GITHUB_SEARCH_HISTORY,c3=Ht.GITHUB_GET_HISTORY_ITEM,l3=Ht.PACKAGE_SEARCH,u3=Ht.GITHUB_CLONE_REPO,p3=Ht.LOCAL_SEARCH,d3=Ht.LOCAL_ANALYZE_GRAPH,m3=Ht.LOCAL_FETCH_CONTENT,f3=Ht.LSP_GET_SEMANTIC_CONTENT,XR=Ht.ALL_TOOLS;import{SYSTEM_PROMPT as bv}from"@octocodeai/octocode-core";var YR=["GitHub","Local Code","Package","Other"],ZR=new Map([St,le,ye,oe.GITHUB_FETCH_CONTENT,oe.GITHUB_CLONE_REPO,et,Wt,oe.LOCAL_FETCH_CONTENT,we,oe.PACKAGE_SEARCH].map((e,t)=>[e,t])),Gt=class extends Error{constructor(n,r=[]){super(n);this.details=r;this.name="DirectToolInputError"}details},gv=["goal","reasoning"],go=new Set([...gv]);function yv(e){return{name:e.name,title:e.title,description:e.description,schema:e.schema,inputSchema:e.inputSchema}}var JR=Di.map(e=>yv(e)),eC=[...JR];function ot(e){return JR.find(t=>t.name===e)}function qR(e){return e.startsWith("gh")?"GitHub":e.startsWith("local")||e.startsWith("lsp")?"Local Code":e===oe.PACKAGE_SEARCH?"Package":"Other"}function S3(e){return[...e].sort((t,n)=>{let r=YR.indexOf(qR(t)),o=YR.indexOf(qR(n));if(r!==o)return r-o;let i=ZR.get(t)??Number.MAX_SAFE_INTEGER,s=ZR.get(n)??Number.MAX_SAFE_INTEGER;return i!==s?i-s:t.localeCompare(n)})}var Vd={systemPrompt:bv,toolNames:mt,baseSchema:qn,tools:Object.fromEntries(eC.map(e=>[e.name,{description:e.description}]))};var Bi=null;function tC(){return Bi||(Bi=Vd),Bi}async function E3(){return tC()}async function A3(){tC()}function L3(){return Bi}function _3(){Bi=null}import{z as nC}from"zod";var Sv=["goal","reasoning"];function v3(e){let t=ot(e);if(!t)return"{}";try{return JSON.stringify(nC.toJSONSchema(t.inputSchema,{io:"input"}),null,2)}catch{return JSON.stringify(nC.toJSONSchema(t.schema,{io:"input"}),null,2)}}function F3(e){return JSON.stringify(e??{},null,2)}function M3(e){return ot(e)?[...Sv]:[]}function N3(e,t){return ot(e)?.description??e}import{z as Xd}from"zod";function bc(e){let t=ot(e);if(!t)return[];let n=Xd.toJSONSchema(t.schema,{io:"input"});if(!Et(n))return[];let r=Sc(n),o=iC(r),i=sC(r,o);return yc(o,i)}function B3(e){let t=ot(e);if(!t)return{};let n=Xd.toJSONSchema(t.schema,{io:"input"});if(!Et(n))return{};let r=new Map;for(let o of Sc(n)){if(!ht(o.properties))continue;let i=o.properties.operation;if(!Et(i)||typeof i.const!="string")continue;let s=r.get(i.const)??[];s.push(o),r.set(i.const,s)}return Object.fromEntries([...r].map(([o,i])=>{let s=iC(i),a=sC(i,s);return[o,yc(s,a).filter(c=>!go.has(c.name)&&c.name!=="operation")]}))}function oC(e,t){let n=ot(e);if(!n)return new Set;let r=Xd.toJSONSchema(n.schema,{io:"input"});if(!Et(r))return new Set;let o=Sc(r),i=o.filter(a=>Rv(a,t)),s=i.length>0?i:o;return new Set(s.flatMap(a=>ht(a.properties)?Object.keys(a.properties):[]))}function Rv(e,t){if(!ht(e.properties))return!0;for(let[n,r]of Object.entries(t)){let o=e.properties[n];if(Et(o)&&("const"in o&&r!==o.const||Array.isArray(o.enum)&&!o.enum.some(i=>i===r)))return!1}return!0}function Cv(e){let t=[],n=typeof e.minimum=="number"?e.minimum:void 0,r=typeof e.maximum=="number"?e.maximum:void 0;return n!==void 0&&r!==void 0?t.push(`${n}-${r}`):n!==void 0?t.push(`>=${n}`):r!==void 0&&t.push(`<=${r}`),"default"in e&&t.push(`default ${JSON.stringify(e.default)}`),t.length>0?t.join(", "):void 0}function gc(e){if("const"in e)return`enum(${String(e.const)})`;if(Array.isArray(e.enum)&&e.enum.length>0)return`enum(${e.enum.map(String).join(", ")})`;if(e.type==="array"){let n=Et(e.items)?e.items:void 0;return`array<${n?gc(n):"value"}>`}let t=Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:void 0;if(t){let n=t.filter(Et).map(gc).filter(r=>r!=="value");if(n.length>0)return[...new Set(n)].join(" | ")}return Array.isArray(e.type)?e.type.join(" | "):typeof e.type=="string"?e.type:"value"}function Sc(e){return ht(e.properties)?[e]:(Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:[]).filter(Et).flatMap(n=>Sc(n))}function iC(e){let t=new Map;for(let n of e)if(ht(n.properties))for(let[r,o]of Object.entries(n.properties)){if(!Et(o))continue;let i=t.get(r)??[];i.push(o),t.set(r,i)}return Object.fromEntries([...t].map(([n,r])=>{let o=r.filter(s=>"const"in s).map(s=>s.const);return o.length===r.length?[n,{enum:[...new Set(o)],description:n==="operation"?"Required operation selector.":r[0]?.description}]:new Set(r.map(gc)).size>1?[n,{anyOf:r}]:[n,r[0]??{}]}))}function sC(e,t){if(e.length===0)return new Set;let n=e.map(o=>new Set(Array.isArray(o.required)?o.required:[])),r=[...n[0]??new Set].filter(o=>n.every(i=>i.has(o)));return new Set(r.filter(o=>!go.has(o)&&!Kd(t[o])))}function yc(e,t,n=""){let r=[];for(let[o,i]of Object.entries(e)){if(!n&&go.has(o))continue;let s=Et(i)?i:{},a=n?`${n}.${o}`:o;if(r.push({name:a,required:t.has(o),type:gc(s),constraints:Cv(s),description:typeof s.description=="string"?s.description:void 0}),ht(s.properties)){let l=new Set(Array.isArray(s.required)?s.required.filter(u=>typeof u=="string"?!Kd(s.properties?.[u]):!1):[]);r.push(...yc(s.properties,l,a))}let c=s.type==="array"&&Et(s.items)?s.items:void 0;if(c&&ht(c.properties)){let l=new Set(Array.isArray(c.required)?c.required.filter(u=>typeof u=="string"?!Kd(c.properties?.[u]):!1):[]);r.push(...yc(c.properties,l,a))}}return r}function aC(e,t){if(t.startsWith("array<")){let n=t.slice(6,-1);return[rC(e,n)]}return rC(e,t)}function rC(e,t){if(t.startsWith("enum("))return/^enum\(([^,)]+)/.exec(t)?.[1]??e;if(t==="integer"||t==="number")return e==="lineHint"?42:5;if(t==="boolean")return!0;switch(e){case"keywords":case"keywordsToSearch":case"query":case"text":return"runCLI";case"path":return".";case"uri":return"/path/to/file.ts";case"owner":return"bgauryy";case"repo":return"octocode";case"extension":return"ts";case"filename":return"package.json";case"language":return"TypeScript";case"symbolName":return"myFunction";case"name":case"packageName":return"zod";default:return e}}function ht(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Et(e){return ht(e)}function Kd(e){return Et(e)&&"default"in e}function cC(e){return e!==St?[]:[{label:"code search",query:{operation:"code",keywords:["localSearch"],owner:"bgauryy",repo:"octocode",pageSize:5}},{label:"repository search",query:{operation:"repositories",keywords:["code research"],language:"TypeScript",pageSize:5}},{label:"repository tree",query:{operation:"tree",owner:"bgauryy",repo:"octocode",path:"packages",maxDepth:2}}]}function lC(e){let t=cC(e);return t.length>0?t:e===le?[{label:"PR search (list)",query:{operation:"pullRequests",owner:"bgauryy",repo:"octocode",keywords:["localSearch"],concise:!0,pageSize:5}},{label:"issue search (list)",query:{operation:"issues",owner:"bgauryy",repo:"octocode",keywords:["schema"],state:"open",pageSize:5}},{label:"commit history",query:{operation:"commits",owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src",since:"6m",pageSize:10}}]:e===oe.GITHUB_CLONE_REPO?[{label:"full repo clone",query:{owner:"bgauryy",repo:"octocode"}},{label:"subtree clone",query:{owner:"bgauryy",repo:"octocode",sparsePath:"packages/octocode-tools-core"}}]:e===et?[{label:"text anchors",query:{operation:"text",path:"/ABS/repo/src",searchText:"buildDirectToolCommandPatterns",maxFiles:20}},{label:"structural matches",query:{operation:"structural",path:"/ABS/repo/src",pattern:"eval($X)",langType:"typescript"}},{label:"file discovery",query:{operation:"files",path:"/ABS/repo",names:["package.json"],entryType:"f"}},{label:"tree orientation",query:{operation:"tree",path:"/ABS/repo/src",maxDepth:2}}]:e===oe.LOCAL_FETCH_CONTENT?[{label:"exact line range",query:{path:"/ABS/repo/packages/octocode-tools-core/package.json",startLine:1,endLine:30,minify:"none"}},{label:"matched slice",query:{path:"/ABS/repo/packages/octocode-tools-core/src/tools/directToolCatalog.meta.ts",matchString:"buildKnownDirectToolCommandPatternQueries",contextLines:8,minify:"standard"}}]:e===Wt?[{label:"dead code from detected entrypoints",query:{operation:"deadCode",path:"/ABS/repo",limit:20}},{label:"cycles",query:{operation:"cycles",path:"/ABS/repo",limit:20}},{label:"dependencies of one file",query:{operation:"dependencies",path:"/ABS/repo",file:"src/index.ts",depth:2}},{label:"dependents of one file",query:{operation:"dependents",path:"/ABS/repo",file:"src/index.ts",depth:2}},{label:"shortest dependency path",query:{operation:"path",path:"/ABS/repo",file:"src/index.ts",target:"src/responses.ts"}},{label:"reachability from detected entrypoints",query:{operation:"reachability",path:"/ABS/repo",limit:20}}]:e===oe.GITHUB_FETCH_CONTENT?[{label:"matched slice (cheap read of one function)",query:{owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src/responses.ts",matchString:"export function cleanJsonObject",contextLines:8}},{label:"symbols outline (unknown/large file)",query:{owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src/responses.ts",minify:"symbols"}}]:e===ye?[{label:"pull request detail",query:{operation:"pullRequest",owner:"bgauryy",repo:"octocode",number:1,content:{body:!0,patches:{mode:"all"}}}},{label:"issue detail",query:{operation:"issue",owner:"bgauryy",repo:"octocode",number:1,content:{body:!0,comments:{discussion:!0}}}},{label:"exact commit",query:{operation:"commit",owner:"bgauryy",repo:"octocode",ref:"main"}},{label:"compare two refs (base...head)",query:{operation:"compare",owner:"bgauryy",repo:"octocode",base:"main",head:"update-tools"}}]:e===oe.PACKAGE_SEARCH?[{label:"exact package \u2192 source repo",query:{packageName:"zod"}},{label:"keyword discovery (paged candidates)",query:{keywords:["schema","validation"],page:1}}]:e===we?[{label:"symbol outline (absolute uri)",query:{uri:"/ABS/packages/octocode-tools-core/src/scheme/pagination.ts",type:"documentSymbols"}},{label:"semantic definition (absolute uri + lineHint)",query:{uri:"/ABS/packages/octocode-tools-core/src/scheme/pagination.ts",type:"definition",symbolName:"buildNextPageContinuation",lineHint:72}}]:[]}function uC(e,t){return`tools ${e} --queries '${JSON.stringify(t)}'`}function xv(e){let t=lC(e);if(t.length>0)return t.map(r=>({...r,command:uC(e,r.query)}));let n=wv(e);return Object.keys(n).length===0?[]:[{label:"schema-derived",query:n,command:uC(e,n)}]}function Z3(e){return xv(e)[0]?.query??{}}function wv(e){if(!ot(e))return{};let t=bc(e),n=t.filter(i=>!i.name.includes(".")),r=Pv(n),o={};for(let i of r)o[i.name]=aC(i.name,i.type);return e.startsWith("lsp")&&t.some(i=>i.name==="uri")&&(o.uri??="uri"),e===we&&(o.type??="definition",o.symbolName??="symbolName",o.lineHint??=1),o}var pC=4,Yd=new Map([["keywords",10],["keywordsToSearch",11],["query",12],["text",13],["packageName",14],["name",15],["uri",20],["type",21],["owner",30],["repo",31],["extension",32],["filename",33],["language",34],["path",40],["target",50],["from",51],["scope",52],["pattern",60],["rule",61],["op",80],["operation",81],["minify",90]]),dC=new Set(["page","itemsPerPage","limit","pageSize","matchPage","maxFiles","maxMatchesPerFile","matchContentLength","responseCharLength","responseCharOffset"]);function Pv(e){let t=e.filter(i=>i.required),n=new Map;for(let i of t)n.set(i.name,i);let r=e.filter(i=>!i.required&&Tv(i)).sort(Ev),o=Math.max(pC,t.length);for(let i of r){if(n.size>=o)break;n.set(i.name,i)}return n.size>0?[...n.values()]:e.filter(i=>!dC.has(i.name)).filter(i=>i.type!=="boolean").slice(0,pC)}function Tv(e){return dC.has(e.name)||e.type==="boolean"?!1:Av(e)?Yd.has(e.name):!0}function Ev(e,t){let n=Yd.get(e.name)??Number.MAX_SAFE_INTEGER,r=Yd.get(t.name)??Number.MAX_SAFE_INTEGER;return n!==r?n-r:e.name.localeCompare(t.name)}function Av(e){return e.constraints?.includes("default ")===!0}import{z as hC}from"zod";import{z as Lv}from"zod";function Rc(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function mC(e){return Rc(e.properties)?[e]:(Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:[]).filter(Rc).flatMap(mC)}function _v(e){let t=ot(e)?.schema;if(!t)return new Map;let n=Lv.toJSONSchema(t),r=new Map;for(let o of mC(n)){if(!Rc(o.properties))continue;let i=o.properties.operation;if(!Rc(i)||typeof i.const!="string")continue;let s=r.get(i.const)??new Set;for(let a of Object.keys(o.properties))["goal","reasoning","operation"].includes(a)||s.add(a);r.set(i.const,s)}return new Map([...r].map(([o,i])=>[o,[...i]]))}function Zd(e){if(e==="ghSearch"){let[t,...n]=Ls(e);return[...t?[t]:[],"code and repositories need at least one search term or scope filter.",...n]}return e==="localSearch"?["text needs searchText.","structural needs exactly one of pattern or rule.","Fields from different operations cannot be mixed."]:e==="ghSearchHistory"?["Choose pullRequests, issues, or commits; fields cannot cross operations.","issues and commits require owner+repo; pullRequests may search globally.","Search/list operations reject exact identities, content, and diff pagination."]:e==="ghGetHistoryItem"?["Every operation requires owner+repo.","pullRequest and issue need number; commit needs ref; compare needs base+head.","Fields and pagination axes cannot cross operations."]:Ls(e)}function fC(e){let t=_v(e);return(e==="ghSearchHistory"?[{name:"pullRequests",when:"Search or list pull requests",requires:["operation"],example:{operation:"pullRequests",keywords:["schema"]}},{name:"issues",when:"Search or list issues",requires:["operation","owner","repo"],example:{operation:"issues",owner:"o",repo:"r"}},{name:"commits",when:"List commit history",requires:["operation","owner","repo"],example:{operation:"commits",owner:"o",repo:"r"}}]:e==="ghGetHistoryItem"?[{name:"pullRequest",when:"Retrieve one pull request",requires:["operation","owner","repo","number"],example:{operation:"pullRequest",owner:"o",repo:"r",number:1}},{name:"issue",when:"Retrieve one issue",requires:["operation","owner","repo","number"],example:{operation:"issue",owner:"o",repo:"r",number:1}},{name:"commit",when:"Retrieve one commit",requires:["operation","owner","repo","ref"],example:{operation:"commit",owner:"o",repo:"r",ref:"main"}},{name:"compare",when:"Compare two refs",requires:["operation","owner","repo","base","head"],example:{operation:"compare",owner:"o",repo:"r",base:"main",head:"next"}}]:Al(e)).map(r=>({...r,...e==="localSearch"&&r.name==="structural"?{requires:["operation","path"]}:{},...e==="lspGetSemantics"&&r.name==="workspace"?{requires:["type","symbolName"]}:{},...t.has(r.name)?{fields:t.get(r.name)}:{}}))}function a6(e,t,n={}){if(typeof t!="string")return null;let r;try{r=JSON.parse(t)}catch{throw new Gt("Tool input must be valid JSON.")}return kv(e,r,n)}function kv(e,t,n={}){let r=vv(e,t,n),o=ot(e);if(!o)throw new Gt(`Unknown tool: ${e}`);let i=o.inputSchema.safeParse(r);if(!i.success)throw new Gt("Check the query fields.",[...Iv(e),...Ov(i.error)]);return i.data}function Iv(e){if(e==="npmSearch")return Zd(e).slice(0,1);if(e==="localSearch"){let t=fC(e).map(n=>n.name);return t.length>0?[`operation must be one of ${t.map((n,r)=>r===t.length-1&&t.length>1?`or ${n}`:n).join(", ")}.`]:[]}if(e==="lspGetSemantics"){let t=Zd(e);return t.length>0?[t.join(" ")]:[]}return[]}function Ov(e){let t=n=>{let r=n.errors;if(n.code!=="invalid_union"||!Array.isArray(r))return[n];let o=r.filter(s=>Array.isArray(s));return o.length===0?[n]:o.reduce((s,a)=>a.length<s.length?a:s).map(s=>({...s,path:[...n.path,...s.path]}))};return e.issues.flatMap(t).map(n=>`${n.path.length>0?n.path.join("."):"input"}: ${n.message}`)}function vv(e,t,n){let r=[];if(Array.isArray(t))r=t;else if(ht(t)&&Array.isArray(t.queries))r=t.queries;else if(ht(t))r=[t];else throw new Gt('Tool input must be a JSON object, an array of query objects, or { "queries": [...] }.');if(r.length===0)throw new Gt("At least one query is required.");let o=ht(t)&&Array.isArray(t.queries)?Object.fromEntries(Object.entries(t).filter(([s])=>s!=="queries")):{},i=r.map((s,a)=>Fv(e,Gv(e,s,a,n),{sourceLabel:n.sourceLabel}));return{...o,queries:i}}function Fv(e,t,n){let r={...t},o=n.sourceLabel??"direct tool execution",i=Mv(e,o);return(typeof r.goal!="string"||r.goal.trim().length===0)&&(r.goal=i),(typeof r.reasoning!="string"||r.reasoning.trim().length===0)&&(r.reasoning=`Executed via ${o} tool command`),r}function Mv(e,t){return`Execute ${e} via ${t}`}function Nv(e,t){let n=e.length+1,r=t.length+1,o=Array.from({length:n*r},()=>0);for(let i=0;i<n;i++)o[i*r]=i;for(let i=0;i<r;i++)o[i]=i;for(let i=1;i<n;i++)for(let s=1;s<r;s++){let a=e[i-1]===t[s-1]?0:1;o[i*r+s]=Math.min(o[(i-1)*r+s]+1,o[i*r+s-1]+1,o[(i-1)*r+s-1]+a)}return o[n*r-1]}function Dv(e,t){let n=e.toLowerCase(),r,o=Number.POSITIVE_INFINITY,i,s=Number.POSITIVE_INFINITY;for(let a of t){let c=a.toLowerCase(),l=Nv(n,c);if(c.includes(n)||n.includes(c)){l<o&&(r=a,o=l);continue}if(n.length<3)continue;let u=Math.max(2,Math.floor(a.length/3));l<=u&&l<s&&(i=a,s=l)}return r??i}var Hv={npmSearch:{name:"packageName"},lspGetSemantics:{op:"type",line:"lineHint",path:"uri",itemsPerPage:"pageSize",limit:""},localGetFileContent:{filePath:"path"},localSearch:{itemsPerPage:"pageSize",maxResults:["maxFiles","limit","pageSize"],keywords:"searchText",language:"langType",regexType:"regex",sortBy:"sort",sortReverse:"reverse"},ghGetFileContent:{matchStringContextLines:"contextLines",minified:"minify"},ghSearch:{itemsPerPage:"pageSize",limit:"",topicsToSearch:"topics"},localAnalyzeGraph:{itemsPerPage:"pageSize",maxResults:"limit",maxDepth:"depth"}};function Gv(e,t,n,r={}){if(!ht(t))throw new Gt("Tool input must be a JSON object or an array of objects.");let o=new Set([...bc(e).filter(a=>!a.name.includes(".")).map(a=>a.name),...gC(ot(e)?.schema),...go]),i={},s=[];for(let[a,c]of Object.entries(t)){if(o.has(a)){i[a]=c;continue}s.push(a)}if(s.length>0&&o.size>0&&(r.onUnknownFields?.(s,n),r.rejectUnknownFields===!0)){let a=oC(e,t),c=s.map(l=>{let u=Hv[e]?.[l],d=(Array.isArray(u)?u:u===void 0?[]:[u]).find(m=>a.has(m))??Dv(l,a);return d?`'${l}' \u2192 did you mean '${d}'?`:""}).filter(Boolean);throw new Gt(`Unknown field(s): ${s.join(", ")}`,[...c,`Remove unknown field(s) from query ${n+1}: ${s.join(", ")}`,`Run tools ${e} --scheme to see valid fields.`])}return i}function gC(e){if(!e)return[];if(e instanceof hC.ZodObject)return Object.keys(e.shape);let t=e.options,n=e instanceof hC.ZodUnion?e.options:Array.isArray(t)?t:[];return n.length>0?[...new Set(n.flatMap(r=>gC(r)))]:[]}import{getConfigSync as Uv}from"@octocodeai/config";import{ContentSanitizer as zv}from"@octocodeai/octocode-engine/security";function yC(e){if(e instanceof Error){let t=e.code;return{name:e.name||"Error",message:e.message||String(e),code:typeof t=="string"?t:void 0}}if(typeof e=="string")return{name:"Error",message:e};if(e&&typeof e=="object"){let t=e,n=typeof t.message=="string"?t.message:Bv(t)??"Unknown error",r=typeof t.name=="string"?t.name:"Error",o=typeof t.code=="string"?t.code:void 0;return{name:r,message:n,code:o}}return{name:"Error",message:e===void 0?"undefined":String(e)}}function Bv(e){try{return JSON.stringify(e)}catch{return}}var jv="[content withheld: sanitization failed \u2014 retry the call; if this persists, report it]";function qd(e){let t=e;if(t.structuredContent)try{t={...t,structuredContent:sn(t.structuredContent)}}catch{t={...t,structuredContent:{results:[],status:"error",code:"SANITIZATION_FAILED",error:"structuredContent withheld: sanitization failed \u2014 retry the call; if this persists, report it"},isError:!0}}return t.content?.length&&(t={...t,content:t.content.map(n=>{if(n.type==="text"&&"text"in n&&typeof n.text=="string")try{let{content:r}=zv.sanitizeContent(n.text);return{...n,text:r}}catch{return{...n,text:jv}}return n})}),t}var Qv="TOOL_CALLBACK_EXCEPTION";function Jd(e,t){let n=yC(t),r={content:[{type:"text",text:`error: tool "${e}" threw an exception
|
|
57
|
-
message: ${n.message}`}],structuredContent:{results:[],status:"error",tool:e,code:Qv,error:{name:n.name,message:n.message,code:n.code}},isError:!0};try{return qd(r)}catch{return r}}var Cc=null,xc=null,wc=null,$v=$f;function Wv(e){let t=e;return n=>t(n)}function Vv(e){let{direct:t}=e;return{name:e.name,title:e.title,description:e.description,schema:t.schema,inputSchema:t.inputSchema,execute:Wv(t.executionFn),security:t.security,isLocal:e.isLocal,isDefault:e.isDefault,isClone:e.isClone,requiresServerRuntime:t.requiresServerRuntime,requiresProviders:t.requiresProviders,timeoutMs:t.timeoutMs}}var Kv=XR.map(Vv);function Xv(e){return Kv.find(t=>t.name===e)}async function Yv(e,t){let n=Xv(e);if(!n)throw new Error(`Unknown tool: ${e}`);try{let r=Zv(n,t);return Jv(n),await qv(n),await eF(n,r)}catch(r){return Jd(n.name,r)}}function Zv(e,t){let n=e.inputSchema.safeParse(t);if(!n.success)throw n.error;return n.data}async function qv(e){e.requiresServerRuntime||(wc||(wc=Ar(At()).then(()=>{}).catch(t=>{throw wc=null,t})),await wc),e.requiresServerRuntime&&(Cc||(Cc=$v().catch(t=>{throw Cc=null,t})),await Cc),e.requiresProviders&&(xc||(xc=bg().then(()=>{}).catch(t=>{throw xc=null,t})),await xc)}function Jv(e){let t=Uv(),n=t.tools.enabled??[],r=t.tools.disabled??[];if(e.isLocal&&!t.local.enabled){let o=new Error(`Tool "${e.name}" requires local tools. Set ENABLE_LOCAL=true to use it.`);throw o.code="localToolsDisabled",o}if(e.isClone&&!t.local.enableClone){let o=new Error(`Tool "${e.name}" requires clone support. Set ENABLE_CLONE=true to use it.`);throw o.code="cloneDisabled",o}if(n.length>0&&!n.includes(e.name)){let o=new Error(`Tool "${e.name}" is outside the TOOLS_TO_RUN allowlist.`);throw o.code="toolNotEnabled",o}if(!e.isDefault&&!n.includes(e.name)){let o=new Error(`Tool "${e.name}" is opt-in. Add it to TOOLS_TO_RUN or .octocoderc tools.enabled.`);throw o.code="toolNotEnabled",o}if(n.length===0&&r.includes(e.name)){let o=new Error(`Tool "${e.name}" is disabled by DISABLE_TOOLS.`);throw o.code="toolDisabled",o}}async function eF(e,t){try{let n=e.security==="remote"?await tF(e,t):await nF(e,t);return qd(n)}catch(n){return Jd(e.name,n)}}async function tF(e,t){return em(e.name,async(r,o)=>e.execute({...r,authInfo:o.authInfo,sessionId:o.sessionId,signal:o.signal}),{timeoutMs:e.timeoutMs})(t)}async function nF(e,t){return tm(e.execute,e.name,{timeoutMs:e.timeoutMs})(t)}var F6={success:"\u2705",empty:"\u{1F4ED}",error:"\u274C",partial:"\u26A0\uFE0F",searching:"\u{1F50D}",loading:"\u23F3",info:"\u2139\uFE0F",file:"\u{1F4C4}",folder:"\u{1F4C1}",page:"\u{1F4C3}",definition:"\u{1F3AF}",reference:"\u{1F517}",call:"\u{1F4DE}"};import{getConfigSync as bC}from"@octocodeai/config";function D6(){return process.env.VSCODE_PID||process.env.VSCODE_IPC_HOOK?"vscode":process.env.CURSOR_CHANNEL||process.env.CURSOR_TRACE_ID?"cursor":"standalone"}function H6(){try{return bC().local.enabled}catch{return!1}}function G6(){try{if(!bC().local.enabled)return"Local tools are disabled (ENABLE_LOCAL=false). MCP LSP tools are unavailable."}catch{}return null}import{validateCommand as rF}from"@octocodeai/octocode-engine/commandValidator";async function Q6(e,t=[],n={}){let r=rF(e,t);if(!r.isValid)throw new Error(`Command validation failed: ${r.error||"Command not allowed"}`);let o=sa(t);if(!o.valid)throw new Error(`Argument validation failed: ${o.error||"Invalid arguments"}`);let{timeout:i=3e4,cwd:s,env:a,maxOutputSize:c=10*1024*1024,tolerateOutputLimit:l=!1}=n,u=await ar(e,t,{timeout:i,cwd:s,env:a,maxOutputSize:c});if(u.outputLimitExceeded&&l)return{success:!0,code:u.exitCode,stdout:u.stdout,stderr:u.stderr,truncated:!0};if(u.error)throw u.error;return{success:u.success,code:u.exitCode,stdout:u.stdout,stderr:u.stderr}}import{z}from"zod";var Pc=z.object({text:z.string()}),oF=z.object({match:z.object({text:z.string()}).optional(),start:z.number(),end:z.number()}),iF=z.object({type:z.literal("match"),data:z.object({path:Pc,lines:z.object({text:z.string()}),line_number:z.number(),absolute_offset:z.number(),submatches:z.array(oF)})}),sF=z.object({type:z.literal("context"),data:z.object({path:Pc,lines:z.object({text:z.string()}),line_number:z.number(),absolute_offset:z.number()})}),aF=z.object({type:z.literal("begin"),data:z.object({path:Pc})}),cF=z.object({type:z.literal("end"),data:z.object({path:Pc,stats:z.object({elapsed:z.object({human:z.string()}),searches:z.number(),searches_with_match:z.number()}).optional()})}),lF=z.object({type:z.literal("summary"),data:z.object({elapsed_total:z.object({human:z.string()}),stats:z.object({elapsed:z.object({human:z.string()}),searches:z.number(),searches_with_match:z.number(),bytes_searched:z.number(),bytes_printed:z.number(),matched_lines:z.number(),matches:z.number()})})}),W6=z.discriminatedUnion("type",[iF,sF,aF,cF,lF]);import{securityRegistry as C9,ContentSanitizer as x9}from"@octocodeai/octocode-engine/security";import{maskSensitiveData as P9}from"@octocodeai/octocode-engine/mask";import{configureSecurity as E9}from"@octocodeai/octocode-engine/withSecurityValidation";import{z as M9}from"zod";export{hF as ALL_ERROR_CODES,XR as ALL_TOOLS,qn as BASE_SCHEMA,vu as BulkCloneRepoLocalSchema,oc as BulkLspGetSemanticsQuerySchema,Df as CACHE_MAINTENANCE_INTERVAL_MS,Tc as CONFIG_ERRORS,si as CORE_ALLOWED_ENV_VARS,qt as CREDENTIALS_FILE,bd as CircuitOpenError,ma as CloneRepoQueryLocalSchema,no as CommitCompareQueryShape,op as CommitHistoryQueryShape,x9 as ContentSanitizer,f2 as DEFAULTS,dZ as DEFAULT_CIRCUIT_FAILURE_THRESHOLD,sm as DEFAULT_MATCH_SNIPPET_CHARS,Ue as DESCRIPTIONS,pT as DIFF_PREVIEW_MAX_LINES,go as DIRECT_TOOL_AUTO_FILLED_FIELDS,YR as DIRECT_TOOL_CATEGORIES,JR as DIRECT_TOOL_DEFINITIONS,eC as DIRECT_TOOL_DISCOVERY_DEFINITIONS,Gt as DirectToolInputError,K as ERROR_CODES,Ie as ERROR_MESSAGES,bo as FETCH_ERRORS,fn as FILE_OPERATION_ERRORS,Fu as FileContentBulkQueryLocalSchema,hA as FileContentQueryBaseLocalSchema,ci as FileContentQueryLocalSchema,u3 as GITHUB_CLONE_REPO,s3 as GITHUB_FETCH_CONTENT,im as GITHUB_FILE_CONTENT_DEFAULT_CHAR_LENGTH,c3 as GITHUB_GET_HISTORY_ITEM,ye as GITHUB_GET_HISTORY_ITEM_TOOL_NAME,i3 as GITHUB_SEARCH,Re as GITHUB_SEARCH_DEFAULT_LIMIT,a3 as GITHUB_SEARCH_HISTORY,le as GITHUB_SEARCH_HISTORY_TOOL_NAME,ue as GITHUB_SEARCH_MAX_LIMIT,dF as GITHUB_SEARCH_MAX_PAGES,St as GITHUB_SEARCH_TOOL_NAME,mF as GITHUB_STRUCTURE_DEFAULT_ENTRIES_PER_PAGE,nm as GITHUB_STRUCTURE_MAX_ENTRIES_PER_PAGE,na as GitHubProvider,kL as GitHubPullRequestSearchBulkQueryLocalSchema,gi as GitHubPullRequestSearchQueryLocalSchema,Vu as GitHubSearchBulkQuerySchema,Xr as GitHubSearchQuerySchema,gr as HOME,qN as IGNORED_FILE_EXTENSIONS,JN as IGNORED_FILE_NAMES,eD as IGNORED_FOLDER_NAMES,Da as IssueDetailQueryShape,yi as IssueListQueryShape,zt as KEY_FILE,d3 as LOCAL_ANALYZE_GRAPH,Wt as LOCAL_ANALYZE_GRAPH_TOOL_NAME,ji as LOCAL_DEFAULT_FILES_PER_PAGE,m3 as LOCAL_FETCH_CONTENT,dn as LOCAL_MAX_DEPTH,Qi as LOCAL_MAX_FILES_PER_PAGE,Ve as LOCAL_MAX_LIMIT,p3 as LOCAL_SEARCH,et as LOCAL_SEARCH_TOOL_NAME,j as LOCAL_TOOL_ERROR_CODES,am as LOCAL_TOOL_ERROR_REGISTRY,we as LSP_GET_SEMANTICS_TOOL_NAME,f3 as LSP_GET_SEMANTIC_CONTENT,Tp as LocalAnalyzeGraphBulkQuerySchema,On as LocalAnalyzeGraphQuerySchema,up as LocalFetchContentBulkQuerySchema,bi as LocalFetchContentQuerySchema,Up as LocalSearchBulkQuerySchema,ao as LocalSearchQuerySchema,PC as LocalToolErrorCategory,lo as LspGetSemanticsQuerySchema,vw as MAX_BRANCH_CACHE_SIZE,fr as MAX_CHAR_LENGTH,om as MAX_CONTEXT_LINES,zo as MAX_DIRECTORY_FILES,mn as MAX_MATCH_CONTENT_LENGTH,G as MAX_PAGE_NUMBER,Ts as MAX_TOTAL_SIZE,sl as NETWORK_ERROR_PATTERNS,RR as NpmDeprecationOutputSchema,SR as NpmRegistrySearchSchema,Md as NpmSearchBulkQueryLocalSchema,Fd as NpmSearchQueryLocalSchema,ic as NpmViewResultSchema,Lc as OCTOCODE_DIR,Ye as OCTOCODE_HOME,sf as OctocodeConfigSchema,Aw as OctokitWithThrottling,l3 as PACKAGE_SEARCH,So as PROMISE_ERRORS,ug as PROVIDER_CAPABILITIES,Sg as PROXY_ENV_VARS,Qn as PR_CONTENT_DEFAULT_ITEMS_PER_PAGE,rm as PR_CONTENT_MAX_ITEMS_PER_PAGE,Ue as PUBLIC_TOOL_DESCRIPTIONS,Ou as ProviderInitializationError,Na as PullRequestDetailQueryShape,rp as PullRequestListQueryShape,Ps as RATE_LIMIT_CONFIG,al as RATE_LIMIT_PATTERNS,hn as REPOSITORY_ERRORS,Kt as RESOURCE_LIMITS,W6 as RipgrepJsonMessageSchema,Ke as SEARCH_ERRORS,wS as SEMANTIC_CONTENT_TYPES,WQ as SENSITIVE_ENV_VARS,$n as SESSION_FILE,xC as STARTUP_ERRORS,oe as STATIC_TOOL_NAMES,Wn as STATS_FILE,nh as STATUS_TO_ERROR_CODE,e2 as SearchCommitsBulkLocalSchema,JV as SearchCommitsLocalSchema,qV as SearchIssuesBulkLocalSchema,ZV as SearchIssuesLocalSchema,YV as SearchPullRequestsBulkLocalSchema,XV as SearchPullRequestsLocalSchema,F6 as StatusEmojis,Vr as TOOLING_ALLOWED_ENV_VARS,wC as TOOL_ERRORS,CC as TOOL_METADATA_ERRORS,I as TOOL_NAMES,Ge as ToolError,Xe as ToolErrors,yo as VALIDATION_ERRORS,TR as _packageNameToSearchKeywords,_3 as _resetMetadataState,uO as _resetNpmRegistryUrlCache,of as _resetSessionState,hN as _resetTokenResolvers,fN as _setTokenResolvers,WL as applyConfiguredAllowedRoots,ql as applyContentPagination,Us as applyPagination,ei as applyPartialContentFilter,ng as applyStructurePagination,gR as assertCircuitAvailable,W as attachRawResponseChars,CB as buildBlockBoundaryHint,ia as buildChildProcessEnv,dl as buildCodeSearchQuery,jB as buildDiffPreview,xv as buildDirectToolCommandPatterns,Z3 as buildDirectToolExampleQuery,k_ as buildEntryPaginationHints,aC as buildExampleValue,YT as buildGitHubPullRequestsSearchParams,my as buildGithubFetchContentFinalizer,bl as buildIssueSearchQuery,Id as buildPackagePagination,CT as buildPullRequestSearchCacheKey,hl as buildPullRequestSearchQuery,ml as buildRepoSearchQuery,rC as buildScalarExampleValue,Jd as buildToolErrorResult,Pi as buildWalkWarnings,oT as byteSlice,Qs as byteToCharIndex,Gh as charToByteIndex,d2 as checkLargeOutputSafety,cZ as checkNpmAvailability,ER as checkNpmDeprecation,pO as checkNpmRegistryReachable,jp as checkRegexSafety,M as clampedInt,ii as cleanJsonObject,gN as cleanup,$c as cleanupStaleCloneArtifacts,zM as clearAllCache,TM as clearDiskCache,QM as clearLSPToolCache,jM as clearLocalToolCache,_N as clearOctokitInstances,EQ as clearProviderCache,UM as clearRemoteAPICache,Pg as cloneRepo,yc as collectDisplayFields,oy as collectFlatErrors,WE as commonDirPrefix,Wp as compactLocation,NO as compactPackageRepositories,cn as compactResolvedSymbol,Ay as compareIsoDateDescending,Vd as completeMetadata,Ig as computeQueryTimeout,fZ as configureCircuitBreaker,E9 as configureSecurity,$r as contextLinesField,fB as convertByteMatchToChar,Vt as countLines,B as countSerializedChars,tu as createBasePRTransformation,wr as createCacheMeta,Ii as createCallItemKey,N as createErrorResult,on as createGitHubProviderError,ta as createGitHubProviderErrorFromResult,$e as createLazyProviderContext,Zl as createPaginationInfo,cA as createProviderExecutionContext,Z as createRelaxedBulkQuerySchema,Qr as createResponseFormat,IQ as createResult,HY as createSafeRegExp,ge as createSuccessResult,Yi as decrypt,xm as deleteCredentials,rf as deleteSession,Cv as describeSchemaConstraints,gc as describeSchemaType,D6 as detectEnvironment,Xi as encrypt,pm as ensureClone,Pn as ensureCloneParentDir,Vi as ensureHome,yn as ensureOctocodeDir,LC as ensureRepos,Ac as ensureTmp,_C as ensureTree,Tr as etagSoftCache,ms as evictExpiredClones,Pr as evictExpiredTrees,Ub as executeAnalyzeGraph,he as executeBulkOperation,zg as executeCloneRepo,Yv as executeDirectTool,Ab as executeFetchContent,Ny as executeGitHubSearch,xS as executeLocalSearch,yd as executeLspGetSemantics,zn as executeNpmCommand,an as executeProviderOperation,Bg as executeProviderOperations,_g as executeWithErrorIsolation,Ct as executeWithToolBoundary,Or as extractEtag,zs as extractMatchingLines,pb as fallbackOnBestEffortFailure,Tb as fetchContent,Tl as fetchDirectoryContents,ri as fetchDirectoryContentsRecursivelyAPI,Xl as fetchFileContentToDisk,Jl as fetchFileTimestamp,Qh as fetchGitHubFileContentAPI,Pz as fetchGitHubPullRequestByNumberAPI,pu as fetchGitHubPullRequestByNumberAPIInternal,qh as fetchHistory,hy as fetchMultipleGitHubFileContents,Ko as fetchRawGitHubFileContent,Yt as fetchWithRetries,Uh as filterPatch,ot as findDirectToolDefinition,Zo as findNextBlockBoundary,Km as flushSession,Xm as flushSessionSync,_d as foldKeywords,dx as formatBytes,OQ as formatCallToolResultForOutput,uC as formatDirectToolCommandPattern,F3 as formatDirectToolMetadataSchemaText,v3 as formatDirectToolSchemaText,Ov as formatDirectToolValidationIssues,io as formatFileSize,Kr as formatFinalizedResponse,zr as formatPRForResponse,MO as formatPackageData,Jp as gatherIncomingCallsRecursive,ed as gatherOutgoingCallsRecursive,xe as generateCacheKey,pj as generatePaginationHints,Js as generateStructurePaginationHints,nl as getActiveProvider,rl as getActiveProviderConfig,Om as getAppDataPath,Mm as getArchitecture,Bh as getByteLength,Zc as getCacheMaintenanceDelayMs,jf as getCacheMaintenanceMarkerPath,$M as getCacheStats,Mx as getCacheTTL,Oo as getCloneBaseDir,Qc as getCloneDir,Un as getCredentials,Am as getCredentialsFilePath,Ji as getCredentialsSync,gn as getDefaultOctocodeHome,oC as getDirectToolAllowedFieldNames,M3 as getDirectToolAutoFilledFields,qR as getDirectToolCategory,N3 as getDirectToolDescription,bc as getDirectToolDisplayFields,Zd as getDirectToolSchemaRelations,fC as getDirectToolSchemaVariants,B3 as getDirectToolVariantDisplayFields,Io as getDirectorySizeBytes,Af as getDiskCacheEntryPath,Yc as getDiskCacheRoot,If as getDiskCacheStats,ih as getExtension,mg as getFileContent,Zi as getGhCliToken,tl as getGitHubToken,vm as getLocalAppDataPath,G6 as getLspEnvironmentHint,Nx as getMaxCacheSizeBytes,Dx as getMaxCloneCount,L3 as getMetadataOrNull,Fi as getNpmRegistryUrl,At as getOctocodeDir,$ as getOctokit,Ym as getOrCreateSession,or as getOutputCharLimit,oh as getOwnerQualifier,Fm as getPlatformName,Su as getProvider,ie as getRawResponseChars,ni as getRecursiveFetchFailureCount,hg as getRepoStructure,fx as getReposBaseDir,Go as getServerConfig,Zm as getSessionId,Lm as getToken,bN as getTokenSource,_m as getTokenSync,Mc as getTokenWithRefresh,us as getTreeBaseDir,vo as getTreeDir,He as handleCatchError,J as handleGitHubAPIError,oa as handleProviderError,Tm as hasCredentials,Em as hasCredentialsSync,gW as hasExpensiveContentRequest,Kd as hasSchemaDefault,qf as hashGitHubToken,ca as hoistSharedFields,g2 as ignoreBestEffortFailure,Jm as incrementErrors,as as incrementGitHubCacheHits,cs as incrementGitHubCacheRateLimits,tf as incrementPackageRegistryFailures,ef as incrementRateLimitByProvider,is as incrementRateLimits,qm as incrementToolCalls,ss as incrementToolCharSavings,$f as initialize,bg as initializeProviders,A3 as initializeToolMetadata,wo as invalidateCredentialsCache,jQ as invokeCallbackSafely,xr as isCacheHit,hf as isCacheValid,bR as isCircuitOpen,Wf as isCloneEnabled,Xc as isDiskCacheEnabled,pr as isExactPackageName,Rt as isGitHubAPIError,HT as isGitHubAPISuccess,Et as isJsonSchemaObject,Dc as isLinux,yN as isLocalEnabled,RG as isLocalTool,Nc as isMac,Yo as isMidBlockCut,Qt as isNoResultsSearchError,kd as isPackageNotFoundError,sA as isProviderError,pa as isProviderSuccess,ht as isRecord,Co as isRefreshTokenExpired,GT as isRepository,Zt as isTokenExpired,Ec as isToolError,jP as isToolInMetadata,Po as isWindows,Wr as lineNumberField,wm as listStoredHosts,Pm as listStoredHostsSync,E3 as loadToolContent,Yg as mapCodeSearchProviderResult,Xg as mapCodeSearchToolQuery,ny as mapFileContentProviderResult,ty as mapFileContentToolQuery,ey as mapPullRequestProviderResultData,Jg as mapPullRequestToolQuery,qg as mapRepoSearchProviderRepositories,Zg as mapRepoSearchToolQuery,ry as mapRepoStructureProviderResult,Mu as mapRepoStructureToolQuery,P9 as maskSensitiveData,yC as normalizeError,Jo as normalizeOwnerRepo,Dy as normalizePullRequestContentRequest,FO as normalizeRepoUrl,Ir as normalizeResponseHeaders,at as offsetField,Ap as paginateEntries,wi as parseFileSize,Fe as parseGitHubProjectId,qs as parseHasMore,ze as paths,kv as prepareDirectToolInput,a6 as prepareDirectToolInputFromJsonText,jh as processFileContentAPI,da as providerSupports,ch as rateLimitWarning,Wc as readCacheMeta,Jt as readCredentialsStore,ys as readDiskCache,lh as recomputeMatchPositions,yR as recordCircuitFailure,Rd as recordCircuitSuccess,Vf as recordPackageRegistryFailure,An as recordRateLimit,Ro as redactPath,km as refreshAuthToken,aa as relativizeResultPaths,be as relaxedPageNumberField,ds as removeCloneDir,mZ as resetCircuitBreaker,Of as resetDiskCacheStats,nf as resetSessionStats,Ic as resetTokenResolution,ke as resolveCacheAuthFingerprint,Be as resolveDefaultBranch,Vp as resolveFileAnchor,TS as resolveSymbolAnchor,Oc as resolveToken,Sn as resolveTokenFull,vc as resolveTokenWithRefresh,Ar as runCacheMaintenanceIfDue,Q6 as safeExec,tt as safeParseOrError,qd as sanitizeCallToolResult,sn as sanitizeStructuredContent,pg as searchCode,ph as searchGitHubCodeAPI,Zh as searchGitHubPullRequestsAPI,tg as searchGitHubReposAPI,i2 as searchMultipleGitHubCommits,o2 as searchMultipleGitHubIssues,Fa as searchMultipleGitHubPullRequests,r2 as searchMultipleGitHubPullRequestsSplit,Ld as searchNpmPackage,AR as searchPackage,kR as searchPackages,fg as searchPullRequests,dg as searchRepos,C9 as securityRegistry,yB as serializeForPagination,Wy as shapePullRequestForContent,nu as shouldEnrichPullRequestFromSearch,Bo as shouldIgnoreDir,kr as shouldIgnoreFile,H6 as shouldUseMCPLsp,Sl as shouldUseSearchForIssues,gl as shouldUseSearchForPRs,bB as sliceByCharRespectLines,Yl as sliceContent,$s as snapToSemanticBoundary,S3 as sortDirectToolNames,Rg as spawnCheckSuccess,qQ as spawnCollectStdout,ar as spawnWithTimeout,Xo as splitLines,iN as startCacheGC,sN as stopCacheGC,Fc as storeCredentials,Ep as summarizeEntries,PM as sweepDiskCacheIfDue,kf as sweepDiskCacheNow,Qp as toLegacyTextQuery,cm as toToolError,QT as transformCodeSearchResult,WT as transformFileContentResult,ti as transformPullRequestItemFromREST,uu as transformPullRequestItemFromSearch,XT as transformPullRequestResult,UT as transformRepoSearchResult,nE as transformRepoStructureResult,$h as trimDiffContext,gA as truncateSnippetChars,ps as tryRecoverStaleCloneLock,dt as updateSessionStats,es as updateToken,sa as validateArgs,lt as validateToolPath,bu as viewGitHubRepositoryStructureAPI,tm as withBasicSecurityValidation,De as withDataCache,Rs as withDataCacheConditional,em as withSecurityValidation,Cr as writeCacheMeta,Uc as writeCloneLockMeta,Ho as writeDiskCache,M9 as z};
|
|
44
|
+
`);if(t){let i=n?t:t.toLowerCase();for(let s of o)if((n?s:s.toLowerCase()).includes(i))return s}return o.find(i=>i.trim().length>0)??o[0]??""}function PP(e,t,n,r){if(n==="markdown")return/<!--/.test(e)?"comment":"code";if(n==="json")return"code";if(bP.test(e))return"comment";let o=jM(e,t,r);if(o<0)return"code";let i=UM(e);return i>=0&&o>i?"comment":$M(e,o)?"string":"code"}function jM(e,t,n){return t?n?e.indexOf(t):e.toLowerCase().indexOf(t.toLowerCase()):-1}function UM(e){let t=-1,n=i=>{i>=0&&(t<0||i<t)&&(t=i)};for(let i of["//","/*","<!--"])n(e.indexOf(i));let r=/(^|\s)#(?![!{])/.exec(e);r&&n(r.index+(r[1]?.length??0));let o=/(^|\s)--\s/.exec(e);return o&&n(o.index+(o[1]?.length??0)),t}function $M(e,t){let n="";for(let r=0;r<t&&r<e.length;r++){let o=e[r];n?o===n&&e[r-1]!=="\\"&&(n=""):(o==='"'||o==="'"||o==="`")&&(n=o)}return n!==""}var TP=b(()=>{"use strict";Vs()});function QM(e){if(!e)return;let t=/[A-Za-z_$][\w$]*/.exec(e);return t?t[0]:void 0}function WM(e,t){if(!e)return[];let n=new Set,r=[];for(let o of e.matchAll(/[A-Za-z_$][\w$]*/g)){let i=o[0],s=t?i:i.toLowerCase();n.has(s)||(n.add(s),r.push(i))}return r}function VM(e,t,n,r,o){if(!e||e.length===0)return 0;let i=xP(n.keyword),s=0,a="";for(let c of e){let l=c.value??"";if(!l)continue;let d=wP(l,r,n.caseSensitive),u=0,p=[];r&&i&&(new RegExp(`(^|[^\\w$])${uh(r)}([^\\w$]|$)`,n.caseSensitive?"":"i").test(d)?(u+=be.exactWholeWord,p.push("whole-word match")):!n.caseSensitive&&d.toLowerCase().includes(r.toLowerCase())?(u+=be.exactCaseInsensitive,p.push("case-insensitive match")):d.includes(r)&&(u+=be.substring,p.push("substring match")));let f=c.kind;if(f)u+=KM(f,p);else{let m=PP(d,r,t.id,n.caseSensitive);m!=="code"?(u+=be.commentOrStringPenalty,p.push(m==="comment"?"comment match (weak)":"string literal (weak)")):(du(t.declaration,d)&&(u+=be.declarationLine,p.push("declaration line")),du(t.export,d)&&(u+=be.exportLine,p.push("export/public line")),du(t.import,d)&&(u+=be.importLine,p.push("import line")),t.id==="markdown"&&RP.test(d)&&(u+=be.headingLine,p.push("markdown heading")),(t.id==="json"||t.id==="yaml")&&XM(d,r)&&(u+=be.configKeyLine,p.push("config key match")))}u>s&&(s=u,a=p.join(", "))}return a&&o.push(a),s}function KM(e,t){switch(e){case"declaration":return t.push("AST: declaration"),be.declarationLine;case"export":return t.push("AST: export/public"),be.exportLine;case"configKey":return t.push("AST: config key"),be.configKeyLine;case"heading":return t.push("AST: heading"),be.headingLine;case"import":return t.push("AST: import"),be.importLine;case"comment":case"string":return t.push(`AST: ${e} (weak)`),be.commentOrStringPenalty;case"callsite":return t.push("AST: callsite"),1;default:return 0}}function XM(e,t){let n=e.indexOf(":");if(n<0)return!1;let r=e.slice(0,n);return t?r.includes(t):/["'\w]/.test(r)}function YM(e,t,n,r,o,i){let s=0;if(n){let c=e.toLowerCase(),l=n.toLowerCase();c.split("/").some(d=>d.replace(ch,"").includes(l))&&(s+=be.pathSegmentToken,i.push("query token in path"))}let a=pu(e);return r.extensions.includes(a)&&t.langType&&(s+=be.extMatchesLangType,i.push("extension matches langType")),o==="source"&&(s+=be.sourceDir,i.push("source file")),s}function JM(e,t,n){return t.explicitLowSignal?0:e==="generated"||e==="fixture"?(n.push(`${e} file (penalized)`),be.lowSignalPathPenalty):e==="test"?(n.push("test file (penalized)"),be.testPathPenalty):0}function ZM(e,t){if(e<=0)return 0;let n=Math.log2(e+1)*be.matchCountScale,r=Math.min(n,be.matchCountCap);return e>1&&t.push(`match count saturated (${e})`),r}function EP(e,t){let n=WM(t.keyword,t.caseSensitive);if(n.length<2||e.length<2)return;let r=new Map,o=new Map;for(let i of e){let s=n.filter(a=>qM(i,a,t.caseSensitive));if(s.length!==0){r.set(i.path,s);for(let a of s)o.set(a,(o.get(a)??0)+1)}}if(r.size!==0)return{candidateCount:e.length,fileTokens:r,documentFrequency:o}}function qM(e,t,n){let r=n?"":"i",o=new RegExp(`(^|[^\\w$])${uh(t)}([^\\w$]|$)`,r);for(let i of e.matches??[])if(o.test(i.value??""))return!0;return o.test(e.path)}function eN(e,t,n){if(!t)return 0;let r=t.fileTokens.get(e.path);if(!r?.length)return 0;let o="",i=0,s=0;for(let a of r){let c=t.documentFrequency.get(a)??t.candidateCount;if(c>t.candidateCount/2)continue;let l=Math.log2((t.candidateCount+1)/(c+1)),d=Math.min(l*be.rareQueryTokenScale,be.rareQueryTokenCap);d>i&&(i=d,o=a,s=c)}return i<=0?0:(n.push(`rare query token: ${o} (${s}/${t.candidateCount} files)`),i)}function AP(e,t,n){let r=SP(e.path,t.langType,t.profileOverride),o=lh(e.path),i=QM(t.keyword),s=[],a=0;return a+=VM(e.matches,r,t,i,s),a+=YM(e.path,t,i,r,o,s),t.queryPath&&e.path.startsWith(t.queryPath.replace(/\/+$/,"")+"/")&&(a+=be.pathUnderQuery,s.push("under requested subtree")),a+=JM(o,t,s),uu.test(e.path)&&!t.explicitLowSignal&&(a+=be.lowSignalPathPenalty,s.push("low-signal path (penalized)")),a+=ZM(e.matchCount??0,s),a+=eN(e,n,s),{score:Math.round(a*100)/100,profile:r.id,pathRole:o,reasons:s}}var LP=b(()=>{"use strict";Vs();TP()});function _P(e,t,n,r={}){if(t==="matchCount"){let p=[...e].sort(kP);return{files:r.sortReverse?p.reverse():p,cappedCandidates:0}}if(t==="path"){let p=[...e].sort((f,m)=>f.path.localeCompare(m.path));return{files:r.sortReverse?p.reverse():p,cappedCandidates:0}}if(t==="created"||t==="modified"||t==="accessed")return{files:[...e],cappedCandidates:0};let o=r.candidateCap??yP,i=e,s=[],a=0;if(e.length>o){let p=[...e].sort(kP);i=p.slice(0,o),s=p.slice(o),a=s.length}let c=EP(i,n),l=i.map(p=>{try{return{file:p,s:AP(p,n,c)}}catch{return{file:p,s:tN()}}});l.sort((p,f)=>{if(f.s.score!==p.s.score)return f.s.score-p.s.score;let m=(f.file.matchCount??0)-(p.file.matchCount??0);return m!==0?m:p.file.path.localeCompare(f.file.path)});let d=[...l.map(p=>p.file),...s],u={files:r.sortReverse?d.reverse():d,cappedCandidates:a};return r.debug&&(u.debug=new Map(l.map(p=>[p.file.path,p.s]))),u}function tN(){return{score:0,profile:"generic",pathRole:"unknown",reasons:["ranking unavailable for this file"]}}function kP(e,t){let n=(t.matchCount??0)-(e.matchCount??0);return n!==0?n:e.path.localeCompare(t.path)}var vP=b(()=>{"use strict";Vs();LP()});function OP(e,t,n,r){let o=e.find(c=>c.path),i=o?.matches?.find(c=>c.line),s={},a=t.maxFiles??rn.MAX_FILES_DEFAULT;if(r.scanCapReached&&a<1e5&&(s.expandScan={tool:"local.text",query:Ks({...t,maxFiles:Math.min(1e5,Math.max(a+1,a*2)),page:1}),why:"Re-run with a larger file-scan bound because this search is partial.",confidence:"exact"}),n==="structural"&&e.some(c=>c.matches?.some(l=>l.capturesTruncated===!0))&&(s.expandCaptures={tool:"local.text",query:Ks({...t,captureText:!0}),why:"Replay this structural page with verbatim capture text because the default capture budget omitted or shortened capture payloads.",confidence:"exact"}),o?.path){if(i?.line){let l=oN(i);s.fetch={tool:"localGetFileContent",query:Ks({path:o.path,startLine:l.startLine,endLine:l.endLine,minify:"none"}),why:'Read exact source around the first match (set minify:"standard" for a token-lean slice, or drop the line range with minify:"symbols" for a skeleton).',confidence:"exact"}}else s.fetch={tool:"localGetFileContent",query:{path:o.path,minify:"standard"},why:'Read the first matched file (minify:"symbols" gives a skeleton for orientation; minify:"none" gives exact bytes).',confidence:r.isFileListMode?"low":"exact"};let c=iN(i,t,n);if(c&&i?.line){let l={uri:o.path,symbolName:c.symbol,lineHint:c.line??i.line};s.lspDefinition={tool:"lspGetSemantics",query:{...l,type:"definition"},why:"Use the grep line as an LSP lineHint to resolve the symbol definition.",confidence:"low"},s.lspReferences={tool:"lspGetSemantics",query:{...l,type:"references"},why:"Use the grep line as an LSP lineHint to inspect semantic usages.",confidence:"low"}}}return r.currentPage<r.totalFilePages&&r.currentPage<1e3&&(s.nextPage={tool:"local.text",query:Ks({...t,page:r.currentPage+1}),why:"Continue to the next page of matched files.",confidence:"exact"}),r.hasFileWithMoreMatches&&r.matchPage<1e3&&(s.nextMatchPage={tool:"local.text",query:Ks({...t,maxMatchesPerFile:r.matchesPerPage,matchPage:r.matchPage+1}),why:"Continue within files that have more matches than this response returned.",confidence:"exact"}),s}function oN(e){let t=Math.max(1,e.line??1),n=Math.max(t,e.endLine??t);return{startLine:Math.max(1,t-IP),endLine:n+IP}}function iN(e,t,n){if(t.output==="countLines"||t.output==="countMatches"||t.unique==="list"||t.unique==="count")return;if(n==="structural")return sN(e?.metavars,e?.metavarRanges);if(t.matchWindow)return;if(t.output==="matchOnly"){let o=ph(e?.value);return o?{symbol:o}:void 0}let r=ph(t.searchText);return r?{symbol:r}:void 0}function sN(e,t){if(!e)return;let n=Object.keys(e).sort((r,o)=>+(o.toLowerCase()==="name")-+(r.toLowerCase()==="name")||(r<o?-1:r>o?1:0));for(let r of n){let o=e[r]??[];for(let[i,s]of o.entries()){let a=ph(s);if(a)return{symbol:a,line:t?.[r]?.[i]?.line}}}}function ph(e){if(typeof e!="string")return;let t=e.trim();if(rN.test(t)&&!nN.has(t))return t}function Ks(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}var IP,nN,rN,FP=b(()=>{"use strict";ce();Zo();IP=8,nN=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"]),rN=/^[A-Za-z_$][A-Za-z0-9_$]*$/});async function Xs(e,t,n,r,o){let i=t.sort??"relevance",s=n==="structural"&&i==="relevance"?"path":i,a;try{a=_P(e,s,aN(t),{debug:!1,sortReverse:t.sortReverse})}catch{a={files:e,cappedCandidates:0},r.push("Relevance ranking failed; returning results in unranked engine order.")}let c=a.files,l=a.debug,d=c.length,u=t.output==="files"||t.output==="filesWithout",p=t.output==="countLines"||t.output==="countMatches",f=u||p,m=c.reduce((I,L)=>I+(L.matchCount??0),0),h=f?o?.totalOccurrences??o?.totalStructuralMatches??m:m,y=t,g=Math.min(y.itemsPerPage||rn.DEFAULT_FILES_PER_PAGE,t.maxFiles||Number.POSITIVE_INFINITY),R=y.page||1,S=Math.max(1,Math.ceil(d/g)),C=(R-1)*g,w=Math.min(C+g,d),T=c.slice(C,w),k=d>0&&C>=d;k&&r.push(`page:${R} is out of range (only ${S} page(s), ${d} total file(s)) \u2014 returned 0 files. Use page:1..${S}.`);let F=y.maxMatchesPerFile||rn.DEFAULT_MATCHES_PER_PAGE,P=T.map(I=>{let L=I.matches?.length??0,M=Math.max(1,Math.ceil(L/F)),K=Math.max(1,y.matchPage||1),ie=(K-1)*F,Ye=L>0&&ie>=L,st=Math.min(ie+F,L),E=f?void 0:I.matches?.slice(ie,st),G=E?.length;Ye&&r.push(`${I.path}: matchPage:${K} is out of range under maxMatchesPerFile:${F} (only ${M} page(s), ${L} total match(es) for this file) \u2014 returned 0 rows for this file. Use matchPage:1..${M}, or drop matchPage to re-derive it from the current maxMatchesPerFile.`);let ae=l?.get(I.path);return{path:I.path,...u?{}:t.output==="countLines"?{totalMatchedLines:I.matchCount||1}:t.output==="countMatches"?{totalOccurrences:I.matchCount||1}:{totalMatchRows:L,...G!==void 0?{returnedMatchRows:G}:{}},...E!==void 0&&{matches:E},...ae?{ranking:{score:ae.score,profile:ae.profile,pathRole:ae.pathRole,reasons:ae.reasons}}:{},pagination:!f&&(L>F||Ye)?{currentPage:K,totalPages:M,matchesPerPage:F,totalMatches:L,hasMore:K<M,...K<M&&K<1e3?{nextMatchPage:K+1}:{},...Ye?{outOfRange:!0}:{}}:void 0}}),x=P.filter(I=>I.pagination?.hasMore),_=R<S&&R>=1e3||x.length>0&&(y.matchPage||1)>=1e3||o?.capReached===!0&&(t.maxFiles??rn.MAX_FILES_DEFAULT)>=1e5,v=OP(P,t,n,{isFileListMode:f,currentPage:R,totalFilePages:S,matchPage:y.matchPage||1,matchesPerPage:F,hasFileWithMoreMatches:x.length>0,scanCapReached:o?.capReached});return{searchEngine:n,...o?{stats:o}:{},files:P,pagination:{currentPage:R,totalPages:S,filesPerPage:g,totalFiles:d,...u?{}:{totalMatches:h},hasMore:R<S,...R<S&&R<1e3?{nextPage:R+1}:{},...k?{outOfRange:!0}:{}},...r.length>0?{warnings:r}:{},...Object.keys(v).length>0?{next:v}:{},..._?{terminalLimit:!0}:{},...o?.capReached===!0?{truncated:!0,partialReasons:["maxFiles"]}:{}}}function aN(e){let t=e.rankingProfile,n=!!(e.include?.length||CP(e.path));return{queryPath:e.path,keyword:e.searchText,langType:e.langType,caseSensitive:e.caseMode==="sensitive",wholeWord:e.wholeWord,profileOverride:t,explicitLowSignal:n}}var dh=b(()=>{"use strict";Zo();ce();vP();Vs();FP()});function MP(e){let t=[],n=[],r=e.pattern;if(typeof r!="string"||r.length===0)return t.push("pattern is empty \u2014 provide a non-empty search string"),{isValid:!1,errors:t,warnings:n};let o=U.validateRipgrepPattern(r,e.fixedString,e.perlRegex);return o.valid||t.push(`invalid regex: ${o.error??"unknown regex parse error"}`),!e.fixedString&&cN(r)&&n.push(`pattern '${r}' looks literal \u2014 set regex:"fixed" to skip regex parsing and avoid accidental wildcards`),!e.perlRegex&&lN(r)&&n.push("pattern uses lookaround (?= / ?! / ?<= / ?<!) which requires perlRegex: true; ripgrep will refuse it otherwise"),{isValid:t.length===0,errors:t,warnings:n}}function cN(e){return/[\\^$|()[\]{}+*?]/.test(e)?!1:!!(e.includes(".")&&/^[\w.\-/:]+$/.test(e)||e.length>2&&/^\w+$/.test(e))}function lN(e){return/\(\?[=!<]/.test(e)}var NP=b(()=>{"use strict";We()});function uN(e){return e==="created"||e==="modified"||e==="accessed"?e:"path"}function pN(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:uN(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 dN(e){let t=0;for(let n of e)if(t+=n.path.length,n.matches)for(let r of n.matches)t+=r.value?.length??0;return t}async function DP(e){let t=[],n=dP(e);if(!n.isValid)return D(new Error(`Query validation failed: ${n.errors.join("; ")}`),e,{toolName:N.LOCAL_RIPGREP,extra:{warnings:n.warnings}});t.push(...n.warnings);let r=Qs.safeParse(e);if(!r.success){let h=r.error.issues.map(y=>y.message);return D(new Error(`Query validation failed: ${h.join(", ")}`),e,{toolName:N.LOCAL_RIPGREP,extra:{warnings:t}})}let o=r.data;if(!o.path)return D(new Error("Path is required for search"),o,{toolName:N.LOCAL_RIPGREP,extra:{warnings:t}});let s=Tt(o,N.LOCAL_RIPGREP);if(!s.isValid)return s.errorResult;let a={...o,path:s.sanitizedPath},c=MP({pattern:a.searchText??"",fixedString:a.regex==="fixed",perlRegex:a.regex==="perl"});if(!c.isValid)return D(new Error(`Pattern validation failed: ${c.errors.join("; ")}`),o,{toolName:N.LOCAL_RIPGREP,extra:{warnings:[...t,...c.warnings]}});let l=[...c.warnings],d;try{d=await U.searchRipgrep(pN(a))}catch(h){return D(h instanceof Error?h:new Error(String(h)),o,{toolName:N.LOCAL_RIPGREP})}let u=d.files.map(h=>({path:h.path,matchCount:h.matchCount,matches:h.matches.map(y=>{let g={line:y.line,column:y.column,value:y.value};return y.count!==void 0&&(g.count=y.count),y.kind!==void 0&&(g.kind=y.kind),y.scoreHint!==void 0&&(g.scoreHint=y.scoreHint),g})})),p=dN(u),f={totalOccurrences:d.stats.matchCount,matchedLines:d.stats.matchedLines,filesMatched:u.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&&l.push(`Search hit native collection cap (${d.stats.capReason??"resource limit"}); narrow path/include/keywords for exhaustive results.`),u.length===0){let h=['No matches. Try caseMode:"insensitive", a shorter term, or regex:"smart".',...a.include?.length||a.maxDepth!==void 0?["Remove include/maxDepth to search a wider tree."]:[],...a.wholeWord?["Set wholeWord:false to match substrings."]:[]];return ee({status:"empty",searchEngine:"rg",stats:f,hints:h,warnings:[...t,...l]},p)}a.output!=="files"&&p>rn.LARGE_RESULT_BYTES_HINT&&l.push(`Result payload is large (~${Math.round(p/1024)}KB).`);let m=await Xs(u,o,"rg",[...t,...l],f);return ee(m,p)}var HP=b(()=>{"use strict";nn();mP();ah();Zo();Ke();dh();NP();ue();We()});var GP,BP,zP=b(()=>{"use strict";GP={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"]}},BP={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 mN(e){return e.trim().replace(/^\./,"").toLowerCase()}function fN(e){if(!e?.trim())return;let t=mN(e),n=GP[t]??BP[t];return n?{raw:e,normalized:t,...n}:{raw:e,normalized:t,kind:"unknown",canonicalLanguage:e.trim()}}function jP(e){let t=fN(e);if(!t)return;let r=(t.extensions?.length?t.extensions:[t.normalized.replace(/^[.*]+/,"")]).filter(Boolean).map(o=>`*.${o}`);return r.length?r:void 0}var UP=b(()=>{"use strict";zP()});function QP(e,t,n){let r=t&&Object.keys(t).length>0;if(n)return{...e?{metavars:e}:{},...r?{metavarRanges:t??void 0}:{}};let o=!1,i;if(e){i={};for(let[a,c]of Object.entries(e))c.length<=1?(c.some(l=>l.length>120)&&(o=!0),i[a]=c.map($P)):o=!0;Object.keys(i).length===0&&(i=void 0)}let s;if(r&&t){s={};for(let[a,c]of Object.entries(t)){let d=c.length>1?c.filter(p=>!hN.test(p.text)):c;(d.length!==c.length||d.some(p=>p.text.length>120))&&(o=!0);let u=d.map(p=>({...p,text:$P(p.text)}));u.length>0&&(s[a]=u)}Object.keys(s).length===0&&(s=void 0)}return{...i?{metavars:i}:{},...s?{metavarRanges:s}:{},...o?{capturesTruncated:!0}:{}}}function $P(e){return e.length>120?`${e.slice(0,120)}\u2026`:e}var hN,WP=b(()=>{"use strict";hN=/^\s*(\/\/|\/\*|\*|#)/});function $r(e){return e.scanTruncated||e.status==="truncated"||e.status==="partial"}function mh(e,t,n){let r=e;return n.length&&(r.diagnostics=n),(t==="truncated"||t==="partial")&&(r.truncated=!0,r.terminalLimit=!0,r.partialReasons=[...r.partialReasons??[],t==="truncated"?"structuralLimit":"skippedFiles"]),r}function mu(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 fh(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 VP=b(()=>{"use strict"});import{readFile as gN,stat as yN}from"node:fs/promises";function bN(e){let t=e.replace(/\s+/g," ").trim();return t.length>KP?`${t.slice(0,KP-1)}\u2026`:t}function CN(e){if(!e||!/\)\s*\{/.test(e))return;let t=e.replace(/\)\s*\{/,"): $R {");return t===e?void 0:t}function YP(e){return e.include?.length?e.include:jP(e.langType)}async function xN(e){try{return(await yN(e)).isFile()}catch{return!1}}async function wN(e,t,n){let r=await gN(e,"utf8"),o=await U.structuralSearch(r,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 JP(e){let t=Tt(e,N.LOCAL_RIPGREP);if(!t.isValid)return t.errorResult;let n=await xN(t.sanitizedPath),r=!!e.captureText,o=C=>({path:t.sanitizedPath,pattern:C??e.pattern,rule:e.rule,...YP(e)?{include:YP(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??XP,maxFileBytes:RN}),i=e.pattern,s=e.pattern,a=C=>(i=C??e.pattern,n?wN(t.sanitizedPath,e,C):U.structuralSearchFiles(o(C))),c;try{if(c=await a(),c.totalMatches===0&&!$r(c)&&e.pattern&&!e.rule&&!/[;}]\s*$/.test(e.pattern))try{let C=await a(`${e.pattern};`);(C.totalMatches>0||$r(C))&&(c=C,s=`${e.pattern};`)}catch(C){let w=C instanceof Error?C.message:String(C);if(mu(w,t.sanitizedPath))throw C}if(c.totalMatches===0&&!$r(c)&&e.pattern&&!e.rule){let C=CN(e.pattern);if(C)try{let w=await a(C);(w.totalMatches>0||$r(w))&&(c=w,s=C)}catch(w){let T=w instanceof Error?w.message:String(w);if(mu(T,t.sanitizedPath))throw w}}}catch(C){let w=C instanceof Error?C.message:String(C),T=/^\[(structural\.[A-Za-z.]+)\]/.exec(w)?.[1];if(T==="structural.language.unsupported")return D(`${w}. Use localSearch operation:"text" to search this file.`,e,{toolName:N.LOCAL_RIPGREP,extra:{errorCode:"structural.language.unsupported"}});let k=mu(w,t.sanitizedPath);if(k){let P=fh(e.pattern,i,t.sanitizedPath);return mh(await Xs([],e,"structural",[k.message],{totalStructuralMatches:0}),"truncated",[k,...P?[P]:[]])}let F=e.langType||"source";return D(new Error(`Invalid structural ${e.rule?"rule":"pattern"}: ${w} \u2014 use valid ${F} 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:N.LOCAL_RIPGREP,...T?{extra:{errorCode:T}}:{}})}let l=c.files.map(C=>({path:C.path,matchCount:C.matches.length,matches:C.matches.map(w=>({line:w.startLine,endLine:w.endLine,value:bN(w.text),column:w.startCol,endColumn:w.endCol,...QP(w.metavars,w.metavarRanges,r)}))})),d=e.maxDepth,u=l,p=0;if(typeof d=="number"&&!n){let C=t.sanitizedPath.replace(/\/+$/,"");u=l.filter(w=>(w.path.startsWith(`${C}/`)?w.path.slice(C.length+1):w.path).split("/").length<=d+1),p=l.length-u.length}let f=u.reduce((C,w)=>C+(w.matchCount??w.matches?.length??0),0),m=e.maxFiles??XP,h=!n&&c.scanTruncated===!0,y={totalStructuralMatches:typeof d=="number"?f:c.totalMatches,...h?{capReached:!0}:{}},g=[...c.warnings],R=[...c.diagnostics??[]],S=fh(e.pattern,s,t.sanitizedPath);if(S&&R.push(S),p>0&&g.push(`maxDepth ${d}: dropped ${p} deeper file(s) \u2014 raise maxDepth or omit it to include them.`),c.totalMatches===0&&!$r(c)&&!n){let C=c.query;if(C){let w=[`query parsed as ${C.kind}`];C.literalAnchor&&w.push(`literal anchor "${C.literalAnchor}"`),w.push(`pre-filter: ${C.preFilter}`),C.unsafeReason&&w.push(`unsafe: ${C.unsafeReason}`),g.push(`Engine explanation: ${w.join(", ")}.`);let T=C.diagnostics??[];R.push(...T);for(let k of T.slice(0,3))g.push(`Engine ${k.severity} [${k.stage}/${k.code}]: ${k.message}${k.recovery?` \u2014 ${k.recovery}`:""}`);T.length>3&&g.push(`${T.length-3} additional engine diagnostic(s) omitted from this summary.`)}}if((u.length===0||y.totalStructuralMatches===0)&&!$r(c)&&e.pattern&&!e.rule&&p===0){let C=SN;g.push(C),R.push({code:"structural.query.noMatches",severity:"info",stage:"match",message:C,path:t.sanitizedPath})}return mh(await Xs(u,{...e,pattern:s,maxFiles:m},"structural",g,y),c.status,R)}var KP,XP,RN,SN,ZP=b(()=>{"use strict";We();nn();Ke();UP();dh();WP();VP();KP=300;XP=2e3,RN=1e6,SN="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 PN(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 Ys(e){let t=PN(e);if(t.mode==="structural")return await JP(t);t.contextLines===void 0&&(t.contextLines=2);try{return await DP(t)}catch(n){let r=n instanceof Error?n.message:String(n);return r.includes("Output size limit exceeded")?{status:"error",error:r,errorCode:W.OUTPUT_TOO_LARGE}:D(n,t,{toolName:N.LOCAL_RIPGREP})}}var hh=b(()=>{"use strict";nn();jn();Ke();HP();ZP()});function AN(e,t){let n=t+1;for(;n<e.length&&e[n]!=="]";)e[n]==="\\"&&n++,n++;return n+1}function qP(e,t){let n=e[t];return n===void 0?!1:TN.has(n)||n==="{"&&_N(e,t)}function LN(e,t,n){let r=n.pop()??!1,o=qP(e,t+1);return o&&r?{unsafe:!0,next:t+1}:((o||r)&&n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:o?eT(e,t+1):t+1})}function kN(e,t,n){return n.some(r=>r)?{unsafe:!0,next:t+1}:(n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:eT(e,t)})}function gh(e){if(e.length>EN)return{safe:!1,reason:"Pattern too long (max 1000 characters)"};let t="Nested quantifiers detected (potential ReDoS). Simplify the pattern.",n=[],r=0;for(;r<e.length;){let o=e[r];if(o==="\\"){r+=2;continue}if(o==="["){r=AN(e,r);continue}if(o==="("){n.push(!1),r++;continue}if(o===")"){let i=LN(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}if(qP(e,r)){let i=kN(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}r++}return{safe:!0}}function _N(e,t){if(e[t]!=="{")return!1;let n=e.indexOf("}",t);return n===-1?!1:/^\{\d+,?\d*\}$/.test(e.slice(t,n+1))}function eT(e,t){return e[t]==="{"?t=e.indexOf("}",t)+1:t++,t<e.length&&(e[t]==="?"||e[t]==="+")&&t++,t}function F8(e,t){let n=gh(e);if(!n.safe)throw new Error(n.reason);return new RegExp(e,t)}var TN,EN,yh=b(()=>{"use strict";TN=new Set(["+","*","?"]),EN=1e3});function tT(e,t){let n=e;if(t.pattern){let r=t.pattern;if(r.includes("*")||r.includes("?")||r.includes("[")){let i=r.replace(/[.+^${}()|[\]\\*?]/g,"\\$&");i=i.replace(/\\\*/g,".*").replace(/\\\?/g,".").replace(/\\\[!/g,"[^").replace(/\\\[/g,"[").replace(/\\\]/g,"]");try{let s=`^${i}$`;if(!gh(s).safe)return n=n.filter(l=>(l.name.includes("/")?l.name.split("/").pop():l.name).includes(r)),n;let c=new RegExp(s,"i");n=n.filter(l=>{let d=l.name.includes("/")?l.name.split("/").pop():l.name;return c.test(d)})}catch{n=n.filter(s=>(s.name.includes("/")?s.name.split("/").pop():s.name).includes(r))}}else n=n.filter(i=>(i.name.includes("/")?i.name.split("/").pop():i.name).includes(r))}return n}function nT(e){let t=[],n=[],r=[];for(let o of e)o.type==="directory"?n.push(o.name):o.type==="symlink"?r.push(o.name):t.push(o.size?`${o.name} (${o.size})`:o.name);return{...t.length>0&&{files:t},...n.length>0&&{folders:n},...r.length>0&&{links:r}}}function rT(e){let t={type:e.type==="directory"?"dir":e.type==="symlink"?"link":"file"};return e.depth!==void 0&&e.depth>0&&(t.depth=e.depth),e.size&&e.type==="file"&&(t.size=e.size),e.modified&&(t.modified=e.modified),e.permissions&&(t.permissions=e.permissions),t}var oT=b(()=>{"use strict";yh()});function iT(e){let t={},n=e.find(o=>o.type==="file"&&o.path);n?.path&&(t.fetch={tool:"localGetFileContent",query:{path:n.path,minify:"standard"},why:'Read the first listed file (minify:"symbols" for a skeleton, minify:"none" for exact bytes).',confidence:"exact"});let r=e.find(o=>o.type==="directory"&&o.path);return r?.path&&(t.viewDeeper={tool:"local.tree",query:{path:r.path},why:"Descend into the first listed subdirectory.",confidence:"exact"}),t.fetch||t.viewDeeper?t:void 0}var sT=b(()=>{"use strict"});function IN(e,t){let n=t??vN,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}async function aT(e){try{let t=Tt(e,N.LOCAL_VIEW_STRUCTURE);if(!t.isValid)return t.errorResult;let n=e.detail==="modified"||e.detail==="full"||e.sortBy==="time";return await ON(e,t.sanitizedPath,n)}catch(t){let n=lt.toolExecutionFailed("LOCAL_VIEW_STRUCTURE",t instanceof Error?t:void 0);return{status:"error",error:n.message,errorCode:n.errorCode}}}async function ON(e,t,n=!1){let r=!!(e.maxDepth||e.recursive),o=r?e.maxDepth||(e.recursive?5:2):1,i=MN(e),s=FN(e,i),a=r&&s?1e4:1e4,c=IN(t,e.excludeDir),l;try{l=await U.queryFileSystem({path:t,recursive:r,includeRoot:!1,showHidden:e.hidden??!1,maxDepth:o,names:i,extensions:e.extensions,entryType:NN(e),excludeDir:c,limit:a})}catch(A){return GN(A,e,t)}let d=l.entries.map(A=>DN(A,n,e.detail==="full")),u=tT(d,e),p=e.sortBy??"name";u=u.sort((A,I)=>{let L;switch(p){case"size":{let M=A.sizeBytes??(A.size?js(A.size):0),K=I.sizeBytes??(I.size?js(I.size):0);L=M-K;break}case"time":n&&A.modified&&I.modified?L=A.modified.localeCompare(I.modified):L=A.name.localeCompare(I.name);break;case"extension":L=(A.extension||"").localeCompare(I.extension||"");break;default:L=A.name.localeCompare(I.name);break}return e.reverse?-L:L});let f=u.length;e.limit&&(u=u.slice(0,e.limit));let m=u.length<f,h=l.wasCapped,y=u.length,{paginatedEntries:g,pagination:R}=oh(u,e),C=e.detail==="full"||e.detail==="modified"?{path:t,entries:g.map(A=>({...rT(A),path:A.path??`${t.replace(/\/$/,"")}/${A.name}`}))}:{path:t,...nT(g)},w=[...l.warnings,...$s({skipped:l.skipped,permissionDenied:l.permissionDenied}),...l.wasCapped?[`Results capped at ${a} entries during the walk before sorting \u2014 sortBy:"${p}" only orders that partial set, not the true top-N across the whole tree. Add pattern/extensions/entryType/excludeDir or reduce depth to narrow the scope.`]:[],...R.outOfRange?[`page:${e.page} is out of range (only ${R.totalPages} page(s), ${R.totalEntries} total entries) \u2014 returned page ${R.currentPage} instead.`]:[]],T=y===0,k=rh(u),F=iT(g)??{},P=e.limit??1e4,x=m&&P<1e4,_=R.hasMore&&R.currentPage>=1e3||(m||h)&&!x,v={...F,...R.hasMore&&!_?{nextPage:ke(N.LOCAL_VIEW_STRUCTURE,{...e,page:R.currentPage+1},"Continue to the next page of directory entries.")}:{},...x?{expandLimit:ke(N.LOCAL_VIEW_STRUCTURE,{...e,limit:Math.min(1e4,Math.max(P+1,P*2)),page:1},"Re-run with a larger entry limit because directory entries remain.")}:{}};return ee({...T?{status:"empty"}:{},...C,summary:k,...R.hasMore||R.totalPages>1||R.outOfRange?{pagination:R}:{},...Object.keys(v).length>0?{next:v}:{},..._?{terminalLimit:!0}:{},...m||h?{truncated:!0,partialReasons:[...m?["limit"]:[],...h?["walkLimit"]:[]],totalAvailable:Math.max(l.totalDiscovered,f)}:{},...w.length>0&&{warnings:w}},l.entries.reduce((A,I)=>A+I.path.length,0))}function FN(e,t){return!!((typeof e.pattern=="string"?e.pattern:void 0)&&!t)}function MN(e){let t=typeof e.pattern=="string"?e.pattern:void 0;if(t&&!t.includes("["))return t.includes("*")||t.includes("?")?[t]:[`*${t}*`]}function NN(e){return e.entryType}function DN(e,t,n){let r=e.entryType==="directory"?"directory":e.entryType==="symlink"?"symlink":"file",o={name:e.relativePath||e.name,path:e.path,type:r,...e.size!==void 0?{size:ai(e.size),sizeBytes:e.size}:{},...e.extension?{extension:e.extension}:{},depth:e.depth};return(n||t)&&e.modifiedMs!==void 0&&(o.modified=new Date(e.modifiedMs).toISOString()),n&&e.permissions&&(o.permissions=HN(e.permissions)),o}function HN(e){let t=Number.parseInt(e,8);if(!Number.isFinite(t))return e;let n=["---","--x","-w-","-wx","r--","r-x","rw-","rwx"];return`${n[t>>6&7]}${n[t>>3&7]}${n[t&7]}`}function GN(e,t,n){let r=e instanceof Error?e.message:String(e),o=/ENOENT|not found|no such file/i.test(r),i=/EACCES|permission denied/i.test(r),s=/ENOTDIR|not a directory/i.test(r),a=lt.pathValidationFailed(n,o?`Directory not found: ${n}`:i?`Permission denied: ${n}`:s?`Not a directory: ${n}`:`Cannot access path: ${n}`);return D(a,t,{toolName:N.LOCAL_VIEW_STRUCTURE})}var vN,cT=b(()=>{"use strict";Us();Ke();nn();Zr();oT();lu();ce();ue();We();sr();sT();vN=["node_modules",".git","dist","build","out","coverage","target",".next",".cache"]});import{z as At}from"zod";var Rh,bh,Qr,lT=b(()=>{"use strict";Me();Rh={maxDepth:"Maximum levels below path; 0 is direct entries.",minDepth:"Requires <= maxDepth when both set.",names:"Basename globs; ORed.",pathPattern:"Full-path glob.",regex:"Basename Rust regex.",empty:"Match only empty files/dirs.",time:"Time filters using d/h/w/m durations.","time.modifiedWithin":"Modified within this duration, e.g. 2d or 6h.","time.modifiedBefore":"Modified before this duration ago, e.g. 30d.","time.accessedWithin":"Accessed within this duration, e.g. 1w.",size:"Size range, e.g. 100k or 1m.","size.greater":"Minimum file size, e.g. 100k or 1m.","size.less":"Maximum file size, e.g. 500b or 2m.",extensions:'Extensions without dots, e.g. ["ts","tsx"].',excludeDir:"Directory names; generated/vendor dirs are pruned by default. Pass [] to prune nothing.",entryType:'"f" files, "d" dirs.',permissions:"Exact permission filter.",access:'"executable", "readable", or "writable" filter.',detail:'"basic" (default), "modified" (+mtime), or "full" (all metadata).',sortBy:'"modified" (default), "name", "path", or "size".',limit:"Post-sort result cap; pagination stays within it."},bh=Rh,Qr=V(bh,{...se,path:At.string(),maxDepth:z(0,rm).optional(),minDepth:z(0,rm).optional(),names:Fe,pathPattern:At.string().optional(),regex:At.string().optional(),empty:At.boolean().optional(),time:V(bh,{modifiedWithin:At.string().optional(),modifiedBefore:At.string().optional(),accessedWithin:At.string().optional()},"time").optional(),size:V(bh,{greater:At.string().optional(),less:At.string().optional()},"size").optional(),permissions:At.string().optional(),access:At.enum(["executable","readable","writable"]).optional(),extensions:Fe,excludeDir:Fe,limit:z(1,$c).optional(),detail:At.enum(["basic","modified","full"]).default("basic"),sortBy:At.enum(["modified","name","path","size"]).default("modified"),entryType:At.enum(["f","d"]).optional(),page:He(),itemsPerPage:z(1,Lo).optional()}).superRefine((e,t)=>{e.minDepth!==void 0&&e.maxDepth!==void 0&&e.minDepth>e.maxDepth&&t.addIssue({code:"custom",message:"minDepth must be less than or equal to maxDepth.",path:["minDepth"]})})});import{z as fr}from"zod";var Sh,ci,uT=b(()=>{"use strict";Me();Sh={pattern:"Name glob or substring; use the files operation for regex.",entryType:'"f" files only, "d" dirs only; omit for both.',detail:'"basic" (default), "modified" (+mtime), or "full" (size/perms).',hidden:"Include dot-files/dirs.",recursive:"true enables the default recursive depth; omit with maxDepth for immediate children.",maxDepth:"Recursion depth. Omitted: immediate children, or 5 if recursive:true; maxDepth alone enables recursion, so recursive:true is not required. 0 uses those defaults.",extensions:"Allowlist without dots.",excludeDir:"Directories to prune; [] includes generated/vendor directories.",sortBy:'"name" (default), "size", "time", or "extension".',reverse:"Reverse the sort order.",limit:"Discovery cap before pagination."},ci=V(Sh,{...se,path:fr.string(),detail:fr.enum(["basic","modified","full"]).default("basic"),hidden:fr.boolean().optional(),sortBy:fr.enum(["name","size","time","extension"]).default("name"),reverse:fr.boolean().optional(),pattern:fr.string().optional(),entryType:fr.enum(["f","d"]).optional(),recursive:fr.boolean().optional(),extensions:Fe,excludeDir:Fe,maxDepth:z(0,Uc).optional(),limit:z(1,$c).optional(),page:He(),itemsPerPage:z(1,Lo).optional()})});import{z as Qt}from"zod";function pT(e,t){if("error"in e)for(let n of e.error.issues)n.code==="custom"&&t.addIssue({code:"custom",message:n.message,path:n.path})}var Js,dT,cq,mT,BN,zN,jN,UN,fT,$N,QN,WN,VN,hT,gT=b(()=>{"use strict";Me();sh();lT();uT();Js={...ih};delete Js.mode;delete Js.output;delete Js.itemsPerPage;delete Js.sortReverse;dT={...Sh};delete dT.recursive;cq=rt({name:"localSearch",type:"Local",shortDescription:"Search local text, syntax, paths, or directory trees through one operation.",instructions:'Choose operation:"text" for lexical anchors, "structural" for AST matches, "files" for path or metadata discovery, and "tree" for directory orientation. Each operation has a strict branch, so do not mix fields across operations. Files/tree prune common generated and vendor directories by default; pass excludeDir:[] to prune nothing. Read exact hits with localGetFileContent and prove symbol identity with lspGetSemantics.',schema:{...Rh,...dT,...Js,operation:'Required branch: "text", "structural", "files", or "tree".',resultView:'Text/structural result shape. Text also supports "paginated", "discovery", and "detailed".',pattern:"Structural AST pattern.",namePattern:"Tree entry name glob or substring.",pathRegex:"Files operation: basename Rust regex.",limit:"Files/tree discovery cap before pagination.",pageSize:"Results returned per page.",sort:"Operation-specific sort order.",reverse:"Reverse the selected sort order."}}),mT=Qt.object($t.shape),BN=Qt.object(Qr.shape),zN=Qt.enum(["paginated","discovery","detailed","content","files","filesWithout","countLines","countMatches","matchOnly"]),jN=Qt.enum(["content","files","countLines","countMatches","matchOnly"]),UN=mT.omit({pattern:!0,rule:!0,captureText:!0,mode:!0,output:!0,itemsPerPage:!0,sortReverse:!0}).extend({operation:Qt.literal("text").describe('Use "text" for lexical search.'),searchText:Qt.string().describe("Single lexical pattern."),resultView:zN.optional().default("paginated").describe("Text result shape; paginated is the default."),pageSize:$t.shape.itemsPerPage.describe("Matches returned per page."),reverse:$t.shape.sortReverse.describe("Reverse the selected sort order."),unique:$t.shape.unique.describe('With resultView:"matchOnly", deduplicate values or count frequency.'),matchWindow:$t.shape.matchWindow.describe('Requires resultView:"matchOnly".')}).strict(),fT=mT.omit({searchText:!0,pattern:!0,rule:!0,mode:!0,regex:!0,caseMode:!0,wholeWord:!0,invertMatch:!0,multiline:!0,unique:!0,matchWindow:!0,output:!0,itemsPerPage:!0,sortReverse:!0}).extend({operation:Qt.literal("structural").describe('Use "structural" for AST matching.'),resultView:jN.optional().default("content").describe("Structural result shape; content is the default."),pageSize:$t.shape.itemsPerPage.describe("Matches returned per page."),reverse:$t.shape.sortReverse.describe("Reverse the selected sort order.")}).strict(),$N=fT.extend({pattern:Qt.string().describe("Structural AST pattern.")}).strict(),QN=fT.extend({rule:Qt.string().describe("Structural YAML ast-grep rule.")}).strict(),WN=BN.omit({regex:!0,limit:!0,sortBy:!0,itemsPerPage:!0}).extend({operation:Qt.literal("files").describe('Use "files" for path and metadata discovery.'),pathRegex:Qr.shape.regex.describe("Basename Rust regex."),limit:Qr.shape.limit.describe("Post-sort discovery cap."),sort:Qr.shape.sortBy.describe("File sort order."),pageSize:Qr.shape.itemsPerPage.describe("Files returned per page.")}).strict(),VN=ci.omit({pattern:!0,recursive:!0,limit:!0,sortBy:!0,itemsPerPage:!0}).extend({operation:Qt.literal("tree").describe('Use "tree" for directory orientation.'),namePattern:ci.shape.pattern.describe("Entry name glob or substring."),limit:ci.shape.limit.describe("Discovery cap before pagination."),sort:ci.shape.sortBy.describe("Tree sort order."),pageSize:ci.shape.itemsPerPage.describe("Entries returned per page.")}).strict();hT=Qt.union([UN,$N,QN,WN,VN]).superRefine((e,t)=>{if(e.operation==="text"){let n=e.resultView,r={...e,itemsPerPage:e.pageSize,sortReverse:e.reverse};delete r.operation,delete r.resultView,delete r.pageSize,delete r.reverse;let o=["paginated","discovery","detailed"].includes(n)?{...r,mode:n}:{...r,mode:"paginated",output:n};pT($t.safeParse(o),t);return}if(e.operation!=="structural"&&e.operation==="files"){let n={...e,regex:e.pathRegex,limit:e.limit,sortBy:e.sort,itemsPerPage:e.pageSize};delete n.operation,delete n.pathRegex,delete n.pageSize,delete n.sort,pT(Qr.safeParse(n),t)}})});import{z as bT}from"zod";function Ch(e,t){let{pageSize:n,reverse:r,...o}=e,i={...o,...n!==void 0?{itemsPerPage:n}:{},...r!==void 0?{sortReverse:r}:{}};return t==="paginated"||t==="discovery"||t==="detailed"?{...i,mode:t}:{...i,mode:"paginated",output:t}}var KN,XN,YN,JN,ZN,yT,Zs,RT,fu=b(()=>{"use strict";gT();Pt();[KN,XN,YN,JN,ZN]=hT.options,yT=bT.enum(["content","files","countMatches"]).optional().default("content").describe("Structural result shape; content is the default."),Zs=bT.union([KN,XN.extend({resultView:yT}),YN.extend({resultView:yT}),JN,ZN]),RT=ge(Zs,{maxQueries:5})});var ST={};Pn(ST,{executeLocalSearch:()=>tD});import{access as qN}from"node:fs/promises";async function tD(e){return Ce(e.queries||[],t=>zt({toolName:dt,query:t,contextMessage:"localSearch execution failed",execute:async()=>{let n=Zs.safeParse(t);if(!n.success)throw n.error;try{await qN(n.data.path)}catch(r){throw lt.fileAccessFailed(n.data.path,r instanceof Error?r:void 0)}return xh(await nD(n.data))}}),{toolName:dt},e)}async function nD(e){switch(e.operation){case"text":{let{operation:t,resultView:n,...r}=e;return Ys(Qs.parse(Ch(r,n)))}case"structural":{let{operation:t,resultView:n,...r}=e,o=Qs.safeParse({...Ch(r,n),mode:"structural",output:n});return o.success?Ys(o.data):D(o.error.issues.map(i=>i.message).join("; "),e,{toolName:dt,extra:{errorCode:"structural.query.invalid"}})}case"files":{let{operation:t,pathRegex:n,limit:r,sort:o,pageSize:i,...s}=e;return uP({...s,regex:n,limit:r,sortBy:o,itemsPerPage:i})}case"tree":{let{operation:t,namePattern:n,limit:r,sort:o,pageSize:i,...s}=e;return aT({...s,pattern:n,limit:r,sortBy:o,itemsPerPage:i})}default:throw new Error("Unsupported localSearch operation")}}function xh(e){if(Array.isArray(e))return e.map(xh);if(!e||typeof e!="object")return e;let t=Object.fromEntries(Object.entries(e).map(([r,o])=>[r,xh(o)])),n=typeof t.tool=="string"?eD[t.tool]:void 0;if(t.tool==="local.text"&&t.query&&typeof t.query=="object"&&t.query.mode==="structural"&&(n="structural"),n&&(t.tool=dt,t.query&&typeof t.query=="object")){let r={...t.query};delete r.goal,delete r.reasoning,n==="text"?(r.resultView=typeof r.output=="string"&&r.output!=="content"?r.output:typeof r.mode=="string"&&r.mode!=="structural"?r.mode:"paginated",delete r.mode,delete r.output):n==="structural"&&(r.resultView=typeof r.output=="string"?r.output:"content",delete r.mode,delete r.output,delete r.searchText,delete r.regex,delete r.caseMode,delete r.wholeWord,delete r.invertMatch,delete r.multiline,delete r.unique,delete r.matchWindow),n==="text"||n==="structural"?(r.pageSize=r.itemsPerPage,r.reverse=r.sortReverse,delete r.itemsPerPage,delete r.sortReverse):(r.pageSize=r.itemsPerPage,r.sort=r.sortBy,delete r.itemsPerPage,delete r.sortBy,n==="files"?(r.pathRegex=r.regex,delete r.regex):(r.namePattern=r.pattern,delete r.pattern)),t.query={operation:n,...r}}return t}var eD,wh=b(()=>{"use strict";Zr();ht();or();Be();pP();hh();ah();cT();fu();he();eD={"local.text":"text","local.files":"files","local.tree":"tree"}});function oD(e){let t=e.payload;return t.kind==="empty"?t.category:t.empty?.category}function CT(e,t){if(t===void 0||t==="progressIdle")return e;let n=oD(e);if(!n||!rD.has(n))return e;let r=`Language server did not confirm indexing completion (readiness: ${t}) \u2014 zero results may mean the project is not yet indexed, not that the symbol is absent. Retry the query, or warm the relevant consumer files first.`;return{...e,incompleteResults:!0,partialReasons:[...new Set([...e.partialReasons??[],"readinessUnconfirmed"])],warnings:[...e.warnings??[],r]}}var rD,xT=b(()=>{"use strict";rD=new Set(["noLocations","noReferences","noCalls","noTypeHierarchy","noHover"])});import{open as iD,stat as sD}from"node:fs/promises";import{SymbolResolver as aD,SymbolResolutionError as cD}from"@octocodeai/octocode-engine/lsp/resolver";import{toUri as lD}from"@octocodeai/octocode-engine/lsp/uri";import{LSP_ERROR_CODES as qs}from"@octocodeai/octocode-engine/lsp/lspErrorCodes";async function uD(e){let t=await iD(e,"r");try{let n=await t.stat();if(!n.isFile())throw new Error("Semantic source must be a regular file.");if(n.size>hu)throw new Error(Ph);let r=Buffer.alloc(hu+1),o=0;for(;o<r.length;){let{bytesRead:i}=await t.read(r,o,r.length-o,null);if(i===0)break;o+=i}if(o>hu)throw new Error(Ph);return r.toString("utf8",0,o)}finally{await t.close()}}async function li(e,t){let n=e.uri,r=Tt({...e,path:n},t);if(!r.isValid)return{ok:!1,error:r.errorResult};let o=r.sanitizedPath;try{let i=await sD(o);if(!i.isFile())return{ok:!1,error:{status:"error",error:`Path is not a regular source file: ${o}.`,errorType:"not_a_file",errorCode:qs.LSP_REQUEST_FAILED,hints:["Choose a source file, or use workspaceSymbol with symbolName."]}};if(i.size>hu)return{ok:!1,error:{status:"error",error:Ph,errorType:"source_limit",errorCode:qs.LSP_REQUEST_FAILED}}}catch{return{ok:!1,error:{status:"error",error:`File not found: ${o}.`,errorType:"file_not_found",errorCode:qs.LSP_REQUEST_FAILED,hints:['Use localSearch with operation:"files" to resolve the path.']}}}try{return{ok:!0,value:{uri:lD(o),absolutePath:o,content:await uD(o)}}}catch(i){return{ok:!1,error:{status:"error",error:i instanceof Error?i.message:String(i),errorType:i instanceof Error&&i.message.includes("[lspSourceTooLarge]")?"source_limit":"file_not_found",errorCode:qs.LSP_REQUEST_FAILED,hints:[`Could not read file: ${n??"<missing>"}`]}}}}async function wT(e,t){let n=await li(e,t);if(n.ok===!1)return n;if(e.type==="documentSymbols")return{ok:!1,error:{status:"error",error:"documentSymbols is file-level and does not use a symbol anchor"}};let r=new aD;try{let o=r.resolvePositionFromContent(n.value.content,{symbolName:e.symbolName,lineHint:e.lineHint,orderHint:e.orderHint??0}),i=e.symbolName.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s="[\\p{ID_Continue}$\\u200C\\u200D]",a=new RegExp(`(?<!${s})${i}(?!${s})`,"gu"),c=(n.value.content.match(a)??[]).length,l=e.lineHint!==void 0?Math.abs(o.foundAtLine-e.lineHint):void 0,d=c>1&&l!==void 0&&l>0?!0:void 0;return{ok:!0,value:{...n.value,resolvedSymbol:{name:e.symbolName,uri:n.value.uri,range:pD(o.position),foundAtLine:o.foundAtLine,orderHint:e.orderHint,position:o.position,...d&&{isAmbiguous:d},...l!==void 0&&l>0?{lineDeviation:l}:{}}}}}catch(o){if(o instanceof cD)return{ok:!1,error:{status:"empty",error:o.message,errorType:"symbol_not_found",errorCode:qs.SYMBOL_NOT_FOUND,searchRadius:o.searchRadius,hints:[`Symbol "${e.symbolName}" was not found near line ${e.lineHint}.`,'Run localSearch with operation:"text" and the exact symbol name to refresh lineHint, then retry.']}};throw o}}function pD(e){return{start:e,end:{line:e.line,character:e.character}}}var hu,Ph,ea=b(()=>{"use strict";nn();hu=1e6,Ph="[lspSourceTooLarge] Semantic source exceeds 1000000 bytes; choose a smaller source file."});import{safeReadLineWindow as dD}from"@octocodeai/octocode-engine/lsp/validation";function TT(e){return{...mD,...e,visitedNodeCount:0,requestCount:0,truncatedByBudget:!1}}function ET(e){return e.requestCount>=e.maxRequests?(e.truncatedByBudget=!0,!1):(e.requestCount+=1,!0)}function AT(e){return e.visitedNodeCount>=e.maxNodes?(e.truncatedByBudget=!0,!1):(e.visitedNodeCount+=1,!0)}function wn(e,t){return{...e,truncatedByBudget:t.truncatedByBudget,visitedNodeCount:t.visitedNodeCount,requestCount:t.requestCount}}function ta(e){return`${e.uri}:${e.range.start.line}:${e.name}`}async function LT(e,t,n){if(t<=0)return e;let r=n?.[0]?.start.line??e.range.start.line,o=await dD(e.uri,r,t);if(!o)return e;let i=os(o).length,s=Math.max(0,r-t),a=s+Math.max(0,i-1);return{...e,content:o,displayRange:{startLine:s+1,endLine:a+1}}}async function fD(e,t){return Promise.all(e.map(async n=>({...n,from:await LT(n.from,t,n.fromRanges)})))}async function hD(e,t){return Promise.all(e.map(async n=>({...n,to:await LT(n.to,t)})))}async function Th(e,t,n,r,o,i=TT(void 0)){if(n<=0||!e)return{calls:[],...PT};if(!ET(i))return wn({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},i);try{let s=await e.getIncomingCalls(t),a=o>0?await fD(s,o):s;if(n===1)return wn({calls:a,truncatedByDepth:a.length>0,cycleCount:0,failedRequestCount:0},i);let c=[];for(let l of a){let d=ta(l.from);if(r.has(d)){c.push(wn({calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0},i));continue}if(!AT(i)||(r.add(d),c.push(await Th(e,l.from,n-1,r,o,i)),i.truncatedByBudget))break}return wn({calls:[...a,...c.flatMap(l=>l.calls)],truncatedByDepth:c.some(l=>l.truncatedByDepth),cycleCount:c.reduce((l,d)=>l+d.cycleCount,0),failedRequestCount:c.reduce((l,d)=>l+d.failedRequestCount,0)},i)}catch{return wn({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1},i)}}async function Eh(e,t,n,r,o,i=TT(void 0),s){if(n<=0||!e)return{calls:[],...PT};if(!ET(i))return wn({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},i);try{let a=await e.getOutgoingCalls(t),c=s?a.filter(f=>!s(f)):a,l=a.length-c.length,d=o>0?await hD(c,o):c;if(n===1)return wn({calls:d,truncatedByDepth:d.length>0,cycleCount:0,failedRequestCount:0,...l>0&&{excludedCallCount:l}},i);let u=[];for(let f of d){let m=ta(f.to);if(r.has(m)){u.push(wn({calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0},i));continue}if(!AT(i)||(r.add(m),u.push(await Eh(e,f.to,n-1,r,o,i,s)),i.truncatedByBudget))break}let p=l+u.reduce((f,m)=>f+(m.excludedCallCount??0),0);return wn({calls:[...d,...u.flatMap(f=>f.calls)],truncatedByDepth:u.some(f=>f.truncatedByDepth),cycleCount:u.reduce((f,m)=>f+m.cycleCount,0),failedRequestCount:u.reduce((f,m)=>f+m.failedRequestCount,0),...p>0&&{excludedCallCount:p}},i)}catch{return wn({calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1},i)}}var mD,PT,Ah=b(()=>{"use strict";Ir();mD={maxNodes:100,maxRequests:50},PT={truncatedByDepth:!1,truncatedByBudget:!1,visitedNodeCount:0,requestCount:0,cycleCount:0,failedRequestCount:0}});function Hn(e){return{name:e.name,uri:e.uri,foundAtLine:e.foundAtLine,...e.orderHint!==void 0&&{orderHint:e.orderHint},...e.isAmbiguous===!0&&{isAmbiguous:!0},...e.lineDeviation!==void 0&&{lineDeviation:e.lineDeviation}}}function Lh(e){let t=e.displayRange??(e.range?{startLine:e.range.start.line+1,endLine:e.range.end.line+1}:void 0);return{uri:e.uri,...e.content!==void 0&&{content:e.content},...t&&{displayRange:t},...e.isDefinition&&{isDefinition:!0}}}var kT,ui=b(()=>{"use strict";kT=["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation","workspaceSymbol","supertypes","subtypes","diagnostic"]});function vT(e){return ee(e,j(e))}function IT(e){return gu(e)&&e.payload.kind==="empty"&&["unsupportedOperation","symbolNotFound","anchorFailed"].includes(e.payload.category)?{...e,status:"empty",confidence:"low"}:e}function OT(e,t){return e.format!=="compact"||!gu(t)?t:yD(t)}function gu(e){return on(e)&&typeof e.type=="string"&&typeof e.uri=="string"&&on(e.payload)}function yD(e){return{...e,format:"compact",payload:bD(e.payload)}}function bD(e){switch(e.kind){case"definition":case"typeDefinition":case"implementation":return{...e,locations:e.locations.map(_T)};case"references":return{...e,...e.byFile?{byFile:e.byFile.map(SD)}:{locations:(e.locations??[]).map(_T)}};case"callers":case"callees":case"callHierarchy":return{...e,...e.root?{root:FT(e.root)}:{},direction:e.direction,calls:e.calls.map(CD),...e.incomingCalls!==void 0?{incomingCalls:e.incomingCalls}:{},...e.outgoingCalls!==void 0?{outgoingCalls:e.outgoingCalls}:{},completeness:e.completeness};case"documentSymbols":return{...e,symbols:e.symbols.map(RD)};case"hover":case"empty":case"workspaceSymbol":case"typeHierarchy":case"diagnostic":return e}}function RD(e){if(!on(e))return String(e);let t=Lt(e,"line"),n=Lt(e,"character"),r=Lt(e,"endLine"),o=Gn(e,"kind"),i=Gn(e,"name"),s=Lt(e,"childCount"),a=Gn(e,"containerName");return[`${t}:${n}${r!==t?`-${r}`:""}`,o,i,a?`< ${a}`:"",s>0?`children=${s}`:""].filter(Boolean).join(" ")}function _T(e){if(typeof e=="string")return e;let t=e.displayRange?`${e.displayRange.startLine}-${e.displayRange.endLine}`:"?",n=e.isDefinition?" def":"",r=e.content?` | ${NT(e.content,180)}`:"";return`${e.uri}:${t}${n}${r}`}function SD(e){if(!on(e))return String(e);let t=Gn(e,"uri"),n=Lt(e,"firstLine"),r=Lt(e,"firstCharacter"),o=Lt(e,"count"),i=MT(e,"lines").map(a=>typeof a=="number"?a:void 0).filter(a=>a!==void 0).join(","),s=e.hasDefinition===!0?" def":"";return`${t}:${n}:${r} count=${o} lines=${i}${s}`}function CD(e){if(!on(e))return String(e);let t=Gn(e,"direction"),n=FT(e.item),r=MT(e,"ranges").map(xD).join(","),o=Lt(e,"rangeCount"),i=Lt(e,"rangeSampleCount"),s=Gn(e,"contentPreview");return[t,n,r?`ranges=${r}`:"",o>i?`totalRanges=${o}`:"",s?`| ${NT(s,180)}`:""].filter(Boolean).join(" ")}function FT(e){if(!on(e))return String(e);let t=Gn(e,"name"),n=Gn(e,"kind"),r=Gn(e,"uri"),o=Lt(e,"line"),i=Lt(e,"endLine"),s=Lt(e,"selectionLine"),a=s>0?` sel=${s}`:"";return`${t} ${n} ${r}:${o}-${i}${a}`}function xD(e){return on(e)?`${Lt(e,"line")}:${Lt(e,"character")}`:String(e)}function on(e){return typeof e=="object"&&e!==null}function Gn(e,t,n=""){let r=e[t];return typeof r=="string"?r:n}function Lt(e,t,n=0){let r=e[t];return typeof r=="number"?r:n}function MT(e,t){let n=e[t];return Array.isArray(n)?n:[]}function NT(e,t){let n=e.replace(/\s+/g," ").trim();return n.length>t?`${n.slice(0,Math.max(0,t-3))}... (truncated for single-line display \u2014 use charOffset or startLine to read full content)`:n}function DT(e,t){let n=GT(e.fromRanges);return{direction:"incoming",item:yu(e.from),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...BT(e.from,t)}}function HT(e,t){let n=GT(e.fromRanges);return{direction:"outgoing",item:yu(e.to),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...BT(e.to,t)}}function yu(e){return{name:e.name,kind:pi(e.kind),uri:e.uri,line:e.range.start.line+1,endLine:e.range.end.line+1,...e.selectionRange?{selectionLine:e.selectionRange.start.line+1}:{}}}function GT(e){let t=new Set,n=[];for(let r of e){let o=r.start.line+1,i=r.start.character,s=`${o}:${i}`;if(!t.has(s)&&(t.add(s),n.push({line:o,character:i}),n.length>=gD))break}return n}function BT(e,t){return t<=0||!e.content?{}:{contentPreview:e.content}}function pi(e){if(typeof e=="string")return e;switch(typeof e=="number"?e:void 0){case 1:return"file";case 2:return"module";case 3:return"namespace";case 4:return"package";case 5:return"class";case 6:return"method";case 7:return"property";case 8:return"field";case 9:return"constructor";case 10:return"enum";case 11:return"interface";case 12:return"function";case 13:return"variable";case 14:return"constant";case 15:return"string";case 16:return"number";case 17:return"boolean";case 18:return"array";case 19:return"object";case 20:return"key";case 21:return"null";case 22:return"enumMember";case 23:return"struct";case 24:return"event";case 25:return"operator";case 26:return"typeParameter";default:return"unknown"}}var gD,di=b(()=>{"use strict";ue();gD=8});import{createHash as jT}from"node:crypto";import wD from"node:path";import{fileURLToPath as PD}from"node:url";function kh(e){return JSON.stringify(e,(t,n)=>!n||typeof n!="object"||Array.isArray(n)?n:Object.fromEntries(Object.entries(n).sort(([r],[o])=>r<o?-1:r>o?1:0)))}function zT(e){if(e)return wD.resolve(e.startsWith("file:")?PD(e):e)}function bu(e){if(!e.rustContext)return;let t=e.rustContext,n={features:t.features==="all"?"all":[...new Set(t.features??[])].sort(),noDefaultFeatures:t.noDefaultFeatures??!1,target:t.target??null,cfgs:[...new Set(t.cfgs??[])].sort(),buildScripts:t.buildScripts??!1,procMacros:t.procMacros??!1};return{...n,fingerprint:`rust-v1:${jT("sha256").update(kh(n)).digest("hex")}`}}function TD(e){let t=e;return{type:e.type,uri:zT(e.uri),workspaceRoot:zT(e.workspaceRoot)??process.cwd(),symbolName:t.symbolName,lineHint:t.lineHint,orderHint:t.orderHint??0,depth:t.depth??1,includeDeclaration:t.includeDeclaration??!0,groupByFile:t.groupByFile??!1,contextLines:e.contextLines??0,rustContext:bu(e)}}function ED(e){let t=e,n=t?.item??t?.from??t?.to??t;return[String(n?.uri??n?.path??""),Number(n?.range?.start?.line??n?.displayRange?.startLine??n?.firstLine??n?.line??0),Number(n?.range?.start?.character??n?.firstCharacter??n?.character??0),String(n?.name??"")]}function UT(e,t,n=e){let r=e.map((i,s)=>({item:i,identity:kh(n[s]),order:ED(i)}));r.sort((i,s)=>{for(let a=0;a<i.order.length;a++){let c=i.order[a],l=s.order[a];if(c<l)return-1;if(c>l)return 1}return i.identity<s.identity?-1:i.identity>s.identity?1:0});let o=jT("sha256").update(kh([TD(t),r.map(i=>i.identity)])).digest("hex");return{items:r.map(i=>i.item),snapshot:`lsp-v1:${o}`}}function $T(e,t){if(!t.payload||typeof t.payload!="object"||"status"in t&&t.status==="error")return t;let n=t,r=n.pagination,o=(e.page??1)>1&&!e.snapshot&&!!r;if(!o&&(!e.snapshot||e.snapshot===r?.snapshot))return t;let{snapshot:i,...s}=e;return{type:n.type,uri:n.uri,lsp:n.lsp,...e.rustContext?{rustContext:bu(e)}:{},...n.workspaceRoot?{workspaceRoot:n.workspaceRoot}:{},status:"empty",confidence:"low",payload:{kind:"empty",category:o?"paginationSnapshotRequired":"paginationChanged",reason:o?"Later pages require the snapshot from next.nextPage. Restart at page 1.":"The semantic result set or query changed. Discard earlier pages and restart at page 1; no rows from a different snapshot were returned."},snapshot:{...e.snapshot?{expected:e.snapshot}:{},...r?.snapshot?{actual:r.snapshot}:{}},next:{restartPagination:{tool:"lspGetSemantics",query:{...s,page:1},why:"Discard earlier pages and restart semantic pagination from the current result set.",confidence:"exact"}}}}var _h=b(()=>{"use strict"});function WT(e,t){return/unsupported/i.test(t)?"unsupportedOperation":/could not find symbol|symbol.*not found/i.test(t)?"symbolNotFound":/call/i.test(t)?"noCalls":e==="references"?"noReferences":e==="hover"?"noHover":e==="documentSymbols"?"anchorFailed":"noLocations"}function VT(e,t){let n=e.uri??"";return{type:e.type,uri:n,lsp:{},payload:{kind:"empty",category:WT(e.type,t),reason:t}}}function sn(e,t,n,r=!1){return{type:e,uri:t.uri,resolvedSymbol:Hn(t.resolvedSymbol),lsp:{serverAvailable:r},payload:{kind:"empty",category:WT(e,n),reason:n}}}function an(e,t,n,r,o){let i=r?UT(e,r,o):void 0;e=i?.items??e;let s=Math.max(1,n),a=Math.max(1,Math.ceil(e.length/s)),c=Math.min(Math.max(1,t),a),l=(c-1)*s,d=e.slice(l,l+s),u=c<a;return{pageItems:d,pagination:{currentPage:c,totalPages:a,totalResults:e.length,hasMore:u,pageSize:s,...i?{snapshot:i.snapshot}:{},...u&&c<1e3?{nextPage:c+1}:{}}}}var Wr,vh,QT,Vr=b(()=>{"use strict";ui();ce();_h();Wr=40,vh=40,QT=10});function AD(e){return/node_modules\/typescript\/lib\/lib\.[^/]*\.d\.ts$/.test(e.to.uri)}async function KT(e,t,n,r){let i=(await n.prepareCallHierarchy(t.absolutePath,t.resolvedSymbol.position,t.content))[0];if(!i)return sn(e.type,t,"No callable symbol found",!0);let s=e.depth??1,a={calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0,truncatedByBudget:!1,visitedNodeCount:0,requestCount:0,excludedCallCount:0},c=e.type==="callers"||e.type==="callHierarchy"?await Th(n,i,s,new Set([ta(i)]),e.contextLines??0):a,l=e.type==="callees"||e.type==="callHierarchy"?await Eh(n,i,s,new Set([ta(i)]),e.contextLines??0,void 0,AD):a,d=l.excludedCallCount??0,u=[...c.calls.map(g=>({direction:"incoming",...g})),...l.calls.map(g=>({direction:"outgoing",...g}))],p=u.map(g=>g.direction==="incoming"?DT(g,e.contextLines??0):HT(g,e.contextLines??0)),{pageItems:f,pagination:m}=an(p,e.page??1,e.pageSize??QT,e,u),h=e.type==="callers"?"incoming":e.type==="callees"?"outgoing":"both",y=!c.truncatedByDepth&&!l.truncatedByDepth&&!c.truncatedByBudget&&!l.truncatedByBudget&&c.failedRequestCount+l.failedRequestCount===0;return{type:e.type,uri:t.uri,resolvedSymbol:Hn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"callHierarchyProvider"},payload:{kind:e.type,root:yu(i),direction:h,calls:f,incomingCalls:c.calls.length,outgoingCalls:l.calls.length,...r?{warmup:r}:{},completeness:{complete:y&&!r?.possiblyTruncated,...r?.possiblyTruncated?{consumerWarmupIncomplete:!0}:{},truncatedByDepth:c.truncatedByDepth||l.truncatedByDepth,truncatedByBudget:c.truncatedByBudget||l.truncatedByBudget,visitedNodeCount:c.visitedNodeCount+l.visitedNodeCount,requestCount:c.requestCount+l.requestCount,cycleCount:c.cycleCount+l.cycleCount,failedRequestCount:c.failedRequestCount+l.failedRequestCount,dynamicCallsExcluded:!0,...d>0&&{stdlibCallsExcluded:d}},...u.length===0?{empty:{category:"noCalls",reason:d>0?"No project calls remain after excluding TypeScript standard-library targets.":"callHierarchyProvider returned no calls"}}:{}},pagination:m}}async function XT(e,t,n){let o=(await n.prepareTypeHierarchy(t.absolutePath,t.resolvedSymbol.position,t.content))[0];if(!o)return sn(e.type,t,"No type-hierarchy item found at position",!0);let i=e.type==="supertypes"?"supertypes":"subtypes",s=i==="supertypes"?await n.typeHierarchySupertypes(o):await n.typeHierarchySubtypes(o),{pageItems:a,pagination:c}=an(s,e.page??1,e.pageSize??Wr,e);return{type:e.type,uri:t.uri,resolvedSymbol:Hn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"typeHierarchyProvider"},payload:s.length>0?{kind:"typeHierarchy",direction:i,root:o,items:a,totalItems:s.length}:{kind:"empty",category:"noTypeHierarchy",reason:`typeHierarchyProvider returned no ${i} for this symbol`},pagination:c}}var YT=b(()=>{"use strict";Ah();ui();di();Vr()});import JT from"node:path";import{fileURLToPath as OD,pathToFileURL as ZT}from"node:url";function Ru(e,t,n,r,o,i){let s=o.length>0,a=n==="implementation"&&i?{warmup:i}:{},c=o.map(Lh),{pageItems:l,pagination:d}=an(c,e.page??1,e.pageSize??vh,e,o);return{type:e.type,uri:t.uri,resolvedSymbol:Hn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:r},payload:s?{kind:n,locations:l,...a}:{kind:"empty",category:"noLocations",reason:`${r} returned no locations`,...a},...s?{pagination:d}:{}}}function qT(e,t,n,r){let o=kD(n),i=e.groupByFile?_D(o):void 0,s=new Map;if(i)for(let p of o){let f=s.get(p.uri)??[];f.push(p),s.set(p.uri,f)}let a=i??o.map(Lh),{pageItems:c,pagination:l}=an(a,e.page??1,e.pageSize??vh,e,i?i.map(p=>s.get(p.uri)):o),d=o.length===0?{category:"noReferences",reason:"referencesProvider returned no references"}:void 0,u=r?.possiblyTruncated===!0?[`Reference warmup opened ${r.warmedFiles}/${r.candidates} candidate file(s) and was incomplete (${r.incompleteReasons?.join(", ")??"file cap"}); narrow workspaceRoot/path or confirm with localSearch operation:"text" before unused/safe-delete claims.`]:[];return{type:"references",uri:t.uri,resolvedSymbol:Hn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"referencesProvider",source:"lsp"},payload:{kind:"references",...i?{byFile:c}:{locations:c},totalReferences:o.length,totalFiles:new Set(o.map(p=>p.uri)).size,...o.length>0&&o.every(p=>p.isDefinition)?{definitionOnly:!0}:{},...r?{warmup:r}:{},...d?{empty:d}:{}},pagination:l,...u.length>0?{warnings:u}:{}}}function LD(e){return e.startsWith("file:")?ZT(OD(e)).href:JT.isAbsolute(e)?ZT(JT.normalize(e)).href:e}function kD(e){let t=new Map;for(let n of e){let{start:r,end:o}=n.range,i=LD(n.uri),s=JSON.stringify([i,r.line,r.character,o.line,o.character]);t.has(s)||t.set(s,{...n,uri:i})}return[...t.values()].sort((n,r)=>(n.uri<r.uri?-1:n.uri>r.uri?1:0)||n.range.start.line-r.range.start.line||n.range.start.character-r.range.start.character||n.range.end.line-r.range.end.line||n.range.end.character-r.range.end.character)}async function eE(e,t,n){let r=vD(n),o=!!(r.markdown||r.text);return{type:"hover",uri:t.uri,resolvedSymbol:Hn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"hoverProvider"},payload:o?{kind:"hover",...r}:{kind:"empty",category:"noHover",reason:"hoverProvider returned no hover content"}}}function _D(e){let t=new Map;for(let n of e){let r=n.range.start.line+1,o=t.get(n.uri);if(o){o.count+=1,o.lines.push(r),n.isDefinition&&(o.hasDefinition=!0);continue}t.set(n.uri,{uri:n.uri,count:1,firstLine:r,firstCharacter:n.range.start.character,lines:[r],...n.isDefinition?{hasDefinition:!0}:{}})}return[...t.values()]}function vD(e){if(!e||typeof e!="object")return{};let n=e.contents;if(typeof n=="string")return{text:n.trim()};if(Array.isArray(n))return{markdown:n.map(r=>ID(r)).join(`
|
|
45
|
+
`).trim()};if(n&&typeof n=="object"){let r=n;if(typeof r.value=="string")return r.kind==="markdown"?{markdown:r.value.trim()}:{text:r.value.trim()}}return{}}function ID(e){if(typeof e=="string")return e;if(e&&typeof e=="object"){let t=e.value;if(typeof t=="string")return t}return String(e)}var tE=b(()=>{"use strict";ui();Vr()});import Ih from"node:path";import{readFile as FD}from"node:fs/promises";async function oE(e,t,n){let r={candidates:0,warmedFiles:0,skippedLarge:0,possiblyTruncated:!1},o=new Set,i=new Set;try{let s=Ih.extname(t.absolutePath).slice(1),a=nE.includes(s)?nE:[s],c={path:n,searchText:t.resolvedSymbol.name,regex:"fixed",wholeWord:!0,output:"files",maxFiles:Kr,itemsPerPage:Kr,sort:"path",include:a.filter(Boolean).map(d=>`*.${d}`)},l=1;for(let d=0;d<Kr;d+=1){let u=await Ys({...c,page:l});if(u.status==="error"){o.add("search");break}let p=u.pagination,f=u.stats,m=u.files??[],h=p?.totalFiles??f?.filesMatched;typeof h=="number"&&(r.candidates=Math.max(r.candidates,h)),f?.capped&&o.add("search");for(let g of m){let R=typeof g.path=="string"?g.path:void 0;if(!R){o.add("fileRead");continue}let S=Ih.resolve(n,R);if(!i.has(S)){if(i.size>=Kr){o.add("fileCap");break}if(i.add(S),r.candidates=Math.max(r.candidates,i.size),S!==Ih.resolve(t.absolutePath))try{let C=await FD(S,"utf-8");if(Buffer.byteLength(C,"utf8")>MD){r.skippedLarge+=1,o.add("fileRead");continue}await e.openDocument(S,C),r.warmedFiles+=1}catch{o.add("fileRead")}}}if(!p?.hasMore){!p&&m.length>=Kr&&o.add("fileCap");break}if(i.size>=Kr){o.add("fileCap");break}let y=p.nextPage;if(typeof y!="number"||y<=l||d+1>=Kr){o.add("search");break}l=y}}catch{o.add("search")}return r.possiblyTruncated=o.size>0,o.size&&(r.incompleteReasons=[...o]),r}async function iE(e,t,n,r){switch(e.type){case"definition":return n.hasCapability("definitionProvider")?Ru(e,t,"definition","definitionProvider",await n.gotoDefinition(t.absolutePath,t.resolvedSymbol.position,t.content)):sn(e.type,t,"definitionProvider unsupported",!0);case"typeDefinition":return n.hasCapability("typeDefinitionProvider")?Ru(e,t,"typeDefinition","typeDefinitionProvider",await n.typeDefinition(t.absolutePath,t.resolvedSymbol.position,t.content)):sn(e.type,t,"typeDefinitionProvider unsupported",!0);case"implementation":return n.hasCapability("implementationProvider")?Ru(e,t,"implementation","implementationProvider",await n.implementation(t.absolutePath,t.resolvedSymbol.position,t.content),r):sn(e.type,t,"implementationProvider unsupported",!0);case"references":return n.hasCapability("referencesProvider")?qT(e,t,await n.findReferences(t.absolutePath,t.resolvedSymbol.position,e.includeDeclaration??!0,t.content),r):sn(e.type,t,"referencesProvider unsupported",!0);case"hover":return n.hasCapability("hoverProvider")?eE(e,t,await n.hover(t.absolutePath,t.resolvedSymbol.position,t.content)):sn(e.type,t,"hoverProvider unsupported",!0);case"callers":case"callees":case"callHierarchy":return n.hasCapability("callHierarchyProvider")?KT(e,t,n,r):sn(e.type,t,"callHierarchyProvider unsupported",!0);case"supertypes":case"subtypes":return n.hasCapability("typeHierarchyProvider")?XT(e,t,n):sn(e.type,t,"typeHierarchyProvider unsupported",!0)}}var rE,Kr,MD,nE,sE=b(()=>{"use strict";hh();YT();Vr();tE();rE={references:"referencesProvider",callers:"callHierarchyProvider",callees:"callHierarchyProvider",callHierarchy:"callHierarchyProvider",implementation:"implementationProvider"},Kr=100,MD=512*1024,nE=["ts","tsx","mts","cts","js","jsx","mjs","cjs"]});import Fh from"node:path";import{fileURLToPath as ND}from"node:url";import{unavailableHintFor as DD}from"@octocodeai/octocode-engine/lsp/manager";import{detectLanguageId as HD}from"@octocodeai/octocode-engine/lsp/config";function aE(e){return Oh||(Oh=new Set(U.getSupportedJsTsExtensions().map(t=>`.${t}`))),Oh.has(Fh.extname(e).toLowerCase())}function cn(e,t,n){let r=HD(e),o=DD(r,void 0),i=n?.message?` LSP startup detail (${n.kind??"startupFailed"}): ${n.message}.`:"";throw new Je(W.LSP_SERVER_UNAVAILABLE,`No ${r} language server is available for ${e}, so "${t}" cannot be answered semantically.${i} ${o} Meanwhile, use localSearch operation:"text" or "structural" to find occurrences, then localGetFileContent for surrounding code.`)}function BD(e,t){let n=e.startsWith("file://")?ND(e):e;return Fh.isAbsolute(n)?n:Fh.resolve(t,n)}function cE(){return[...U.getSupportedJsTsExtensions(),...GD]}function zD(){return cE().map(e=>`**/*.${e}`)}async function UD(e,t){let n=e.symbolName?.trim();if(n)try{return(await U.searchRipgrep({path:t,pattern:n,fixedString:!0,caseSensitive:!0,filesOnly:!0,include:zD(),excludeDir:[...jD],maxSnippetChars:1})).files[0]?.path}catch{return}}async function lE(e,t){if(e.uri)return BD(e.uri,t);let n=await UD(e,t);if(n)return n;try{let o=(await U.queryFileSystem({path:t,recursive:!0,includeRoot:!1,showHidden:!1,entryType:"f",extensions:cE(),maxDepth:5,limit:1})).entries[0];if(o)return o.path}catch{}return t}function uE(e,t){if(!aE(e))return null;try{let n=U.extractJsSymbols(t,e);if(!n)return null;let r=JSON.parse(n);return Array.isArray(r)?r:null}catch{return null}}function $D(e){if(!e||typeof e!="object")return!1;let t=e,n=r=>!!r&&typeof r=="object"&&typeof r.line=="number"&&typeof r.character=="number";return n(t.start)&&n(t.end)}function pE(e,t){if(!aE(e))return null;try{let n=U.extractGraphFacts(t,e);if(!n)return null;let r=JSON.parse(n),i=(Array.isArray(r.declarations)?r.declarations:[]).filter(s=>typeof s.name=="string"&&Ql(s.name)&&typeof s.kind=="string"&&$D(s.range)).map(s=>({name:s.name,kind:s.kind,range:s.range}));return i.length>0?i:null}catch{return null}}var Oh,GD,jD,Su=b(()=>{"use strict";Pi();jn();We();Lf();GD=["py","rs","go","java","kt","cs","c","cc","cpp","h","hpp","rb","php","swift","scala","dart","ex","exs","erl","hrl","clj","cljs"];jD=[".git","node_modules","dist","out","coverage","target"]});import{acquirePooledClientDetailed as QD,isLanguageServerAvailable as WD}from"@octocodeai/octocode-engine/lsp/manager";import{resolveWorkspaceRootForFile as VD}from"@octocodeai/octocode-engine/lsp/workspaceRoot";async function fE(e){let t=await li(e,we);if(t.ok===!1)return t.error;let n=[],r,o=uE(t.value.uri,t.value.content),i=o?.length?null:pE(t.value.uri,t.value.content);if(o?.length)n=o,r="native";else if(i?.length)n=i,r="native-graph-facts";else{let u=rR(t.value.content,t.value.uri);u&&(n=u,r="markdown")}if(!r){let u=e.workspaceRoot??await VD(t.value.absolutePath);await WD(t.value.absolutePath,u)||cn(t.value.uri,"documentSymbols");let p=await QD(u,t.value.absolutePath,e.rustContext);if(p.ok===!1&&cn(t.value.uri,"documentSymbols",p),!p.client.hasCapability("documentSymbolProvider"))return{type:"documentSymbols",uri:t.value.uri,lsp:{serverAvailable:!0,provider:"documentSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"documentSymbolProvider unsupported"}};let f=await p.client.documentSymbols(t.value.absolutePath,t.value.content);n=Array.isArray(f)?f:[],r="lsp"}let s=KD(n),a=JD(n),{pageItems:c,pagination:l}=an(s,e.page??1,e.pageSize??Wr,e),d=ZD(s,u=>u.kind);return{type:"documentSymbols",uri:t.value.uri,lsp:{...r==="lsp"?{serverAvailable:!0,provider:"documentSymbolProvider"}:{},...r?{source:r}:{}},summary:{totalSymbols:s.length,returnedSymbols:c.length,topLevelSymbols:a,kinds:d},payload:{kind:"documentSymbols",symbols:c},pagination:l}}function KD(e){let t=[];for(let n of e)hE(n,t);return t.sort((n,r)=>n.line-r.line||n.character-r.character)}function hE(e,t,n){if(!e||typeof e!="object")return;let r=e,o=YD(r);if(typeof r.name=="string"&&o&&t.push({name:r.name,kind:pi(r.kind),line:o.start.line+1,character:o.start.character,endLine:o.end.line+1,childCount:Array.isArray(r.children)?r.children.length:0,...n?{containerName:n}:{}}),Array.isArray(r.children)&&XD.has(pi(r.kind))){let i=typeof r.name=="string"?r.name:n;for(let s of r.children)hE(s,t,i)}}function YD(e){if(dE(e.range))return e.range;let t=e.location;return t&&dE(t.range)?t.range:void 0}function dE(e){if(!e||typeof e!="object")return!1;let t=e;return mE(t.start)&&mE(t.end)}function mE(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.line=="number"&&typeof t.character=="number"}function JD(e){return e.filter(t=>t&&typeof t=="object"&&"name"in t).length}function ZD(e,t){let n={};for(let r of e){let o=t(r),i=n[o];n[o]=typeof i=="number"?i+1:1}return n}var XD,gE=b(()=>{"use strict";Ac();he();ea();Vr();di();Su();XD=new Set(["file","module","namespace","package","class","enum","interface","markdownHeading","struct"])});import yE from"node:path";import{readFile as qD}from"node:fs/promises";import{acquirePooledClientDetailed as bE,isLanguageServerAvailable as RE}from"@octocodeai/octocode-engine/lsp/manager";import{resolveWorkspaceRootForFile as SE}from"@octocodeai/octocode-engine/lsp/workspaceRoot";async function CE(e){if(e.uri){let u=await li(e,we);if(u.ok===!1)return u.error;e={...e,uri:u.value.absolutePath}}let t=e.symbolName??"",n=yE.resolve(e.workspaceRoot??(e.uri?await SE(e.uri):process.cwd())),r=await lE(e,n);await RE(r,n)||cn(r,"workspaceSymbol");let i=await bE(n,r,e.rustContext);i.ok===!1&&cn(r,"workspaceSymbol",i);let s=i.client;if(!s.hasCapability("workspaceSymbolProvider"))return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"workspaceSymbolProvider unsupported"}};yE.extname(r)&&await s.openDocument(r);let a=await s.workspaceSymbol(t),c=await tH(s,nH(a)),{pageItems:l,pagination:d}=an(c,e.page??1,e.pageSize??Wr,e);return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},summary:{query:t,totalSymbols:c.length},payload:c.length>0?{kind:"workspaceSymbol",query:t,symbols:l,totalSymbols:c.length}:{kind:"empty",category:"noWorkspaceSymbols",reason:`workspaceSymbolProvider returned no symbols for query "${t}"`},pagination:d}}async function tH(e,t){return t.length===0||t.length>eH?t:Promise.all(t.map(async n=>{try{if(!n.uri)return n;let r=n.uri.startsWith("file://")?decodeURIComponent(n.uri.slice(7)):n.uri,o=await qD(r,"utf8");await e.openDocument(r);let i=await e.gotoDefinition(r,{line:n.line-1,character:n.character},o);if(!Array.isArray(i)||i.length!==1)return n;let s=i[0],a=(s.range?.start?.line??-1)+1;return!s.uri||a<1||s.uri===n.uri&&a===n.line?n:{...n,uri:s.uri,line:a,endLine:(s.range?.end?.line??s.range?.start?.line??a-1)+1,character:s.range?.start?.character??n.character}}catch{return n}}))}function nH(e){return e.flatMap(t=>{if(!t||typeof t!="object")return[];let n=t,r=typeof n.name=="string"?n.name:void 0;if(!r)return[];let o=n.kind,i=n.location,s=i?.range,a=typeof i?.uri=="string"?i.uri:"",c=(s?.start?.line??0)+1,l=(s?.end?.line??s?.start?.line??0)+1,d=typeof n.containerName=="string"?n.containerName:void 0;return[{name:r,kind:pi(o),line:c,character:s?.start?.character??0,endLine:l,childCount:0,...d?{containerName:d}:{},uri:a}]})}async function xE(e){let t=await li(e,we);if(t.ok===!1)return t.error;let n=t.value.absolutePath,r=e.workspaceRoot??(n?await SE(n):process.cwd());await RE(n,r)||cn(n,"diagnostic");let i=await bE(r,n,e.rustContext);i.ok===!1&&cn(n,"diagnostic",i);let s=i.client;if(!s.hasCapability("diagnosticProvider"))return{type:"diagnostic",uri:n,lsp:{serverAvailable:!0,provider:"diagnosticProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"diagnosticProvider (pull) unsupported \u2014 server uses push (publishDiagnostics) instead"},warnings:['This server pushes diagnostics via textDocument/publishDiagnostics. Pull diagnostics (type: "diagnostic") require LSP 3.17 pull support. Check server docs to enable it.']};let a=await s.getDiagnostics(n),c=rH(a),l=c.filter(f=>f.severity===1).length,d=c.filter(f=>f.severity===2).length,{pageItems:u,pagination:p}=an(c,e.page??1,e.pageSize??Wr,e);return{type:"diagnostic",uri:n,lsp:{serverAvailable:!0,provider:"diagnosticProvider"},summary:{totalDiagnostics:c.length,errorCount:l,warningCount:d},payload:c.length>0?{kind:"diagnostic",diagnostics:u,totalDiagnostics:c.length,errorCount:l,warningCount:d}:{kind:"empty",category:"noDiagnostics",reason:"No diagnostics \u2014 file has no errors or warnings"},pagination:p}}function rH(e){if(e&&typeof e=="object"){let t=e;return(Array.isArray(t.items)?t.items:[]).flatMap(r=>oH(r))}return[]}function oH(e){if(!e||typeof e!="object")return[];let t=e,n=t.range,r=typeof t.message=="string"?t.message:"";return r?[{severity:typeof t.severity=="number"?t.severity:void 0,message:r,line:(n?.start?.line??0)+1,endLine:(n?.end?.line??n?.start?.line??0)+1,character:n?.start?.character??0,...t.code!==void 0?{code:t.code}:{},...typeof t.source=="string"?{source:t.source}:{}}]:[]}var eH,wE=b(()=>{"use strict";Vr();di();Su();ea();he();eH=10});function aH(e){if(e.kind==="empty"&&typeof e.category=="string")return{category:e.category,...typeof e.reason=="string"?{reason:e.reason}:{}};let t=e.empty;if(on(t)&&typeof t.category=="string")return{category:t.category,...typeof t.reason=="string"?{reason:t.reason}:{}}}function cH(e){switch(e.slice(e.lastIndexOf(".")+1).toLowerCase()){case"rs":return"^\\s*pub\\s";case"py":case"pyi":return"^\\s*(def|class)\\s";case"go":return"^(func|type|var|const)\\s";case"java":case"kt":case"scala":case"cs":return"^\\s*(public|protected|internal)\\s";case"rb":return"^\\s*(def|class|module)\\s";default:return"^\\s*export\\s"}}function lH(e,t){let n=e.symbolName;if(typeof n=="string"&&n.trim())return n.trim();let r=t.resolvedSymbol?.name;if(typeof r=="string"&&r.trim())return r.trim()}function mi(e){return e.startsWith("file://")?decodeURIComponent(e.slice(7)):e}function uH(e,t){if(/^\s*import(?:\s|\{|\*)/.test(e))return!0;let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`^(?:type\\s+)?(?:${n}|[$\\w]+\\s+as\\s+${n})\\s*,?$`).test(e.trim())}function pH(e,t){if(!on(t.pagination))return;let{hasMore:n,nextPage:r}=t.pagination;if(!(n!==!0||typeof r!="number"||r>1e3))return ke("lspGetSemantics",{...e,page:r,...typeof t.pagination.snapshot=="string"?{snapshot:t.pagination.snapshot}:{}},`Continue semantic ${e.type} results on page ${r}.`)}function PE(e,t){if(!gu(t))return t;let n=t;if(on(n.pagination)&&n.pagination.hasMore===!0&&typeof n.pagination.currentPage=="number"&&n.pagination.currentPage>=1e3){let{nextPage:T,...k}=n.pagination;n={...n,pagination:k,terminalLimit:!0}}let r=n.payload,o=r.warmup?.possiblyTruncated===!0,i=r.completeness?.truncatedByDepth===!0,s=r.completeness?.truncatedByBudget===!0,a="depth"in e?e.depth??1:1,c=i&&a<20,l=lH(e,n),d=n.workspaceRoot??e.workspaceRoot??(n.uri?mi(n.uri):void 0),u=[...o?[r.warmup?.incompleteReasons&&!r.warmup.incompleteReasons.includes("fileCap")?"warmupIncomplete":"warmupCap"]:[],...i?["depth"]:[],...s?["budget"]:[]];u.length>0&&(n={...n,truncated:!0,partialReasons:u,...(s||i&&!c)&&{terminalLimit:!0}});let p=pH(e,n),f=n.workspaceRoot??e.workspaceRoot,m=r.locations?.[0],h=e.type==="definition"&&l&&m?.uri&&typeof m.content=="string"&&mi(m.uri)===mi(n.uri)&&uH(m.content,l),y={...n.next??{},...p?{nextPage:p}:{},...h?{verifyDefinition:{tool:"lspGetSemantics",query:{type:"workspaceSymbol",uri:n.uri,symbolName:l,...f&&{workspaceRoot:f},...e.format&&{format:e.format}},why:"Search workspace symbol candidates to verify this binding; a cold server may return the same import binding.",confidence:"medium"},...f&&{searchDefinitionCandidates:{tool:"localSearch",query:{operation:"text",path:f,searchText:l,regex:"fixed",wholeWord:!0,resultView:"content",maxFiles:100,pageSize:20,maxMatchesPerFile:20},why:"Find lexical declaration candidates when the language server only resolves the import binding.",confidence:"low"}}}:{},...c?{expandDepth:ke("lspGetSemantics",{...e,snapshot:void 0,depth:Math.min(20,Math.max(a+1,a*2)),page:1},"Re-run with a larger call-hierarchy depth to inspect possible calls beyond the current depth.")}:{},...o&&l&&d?{verifyCompleteness:ke("localSearch",{operation:"text",path:d,searchText:l,wholeWord:!0,resultView:"files"},"The LSP consumer warmup was incomplete; search the complete workspace lexically for additional consumer files.")}:{}},g=m?.displayRange?.startLine;if(m?.uri&&typeof g=="number"){let T=mi(m.uri);return{...n,next:{...y,readSite:{tool:"localGetFileContent",query:{path:T,startLine:Math.max(1,g-3),endLine:(m.displayRange?.endLine??g)+10},why:"Read the top result location with surrounding context",confidence:"exact"}}}}let R=aH(r);if(R?.category==="unsupportedOperation"&&n.type==="documentSymbols"&&n.uri){let T=mi(n.uri);return{...n,next:{...y,textSearch:{tool:"localSearch",query:{operation:"text",path:T,searchText:cH(T),regex:"perl"},why:"documentSymbols is unsupported for this file's language server \u2014 fall back to a regex search over top-level declarations for an outline.",confidence:"low"}}}}if(!R||!l||!iH.has(R.category))return Object.keys(y).length>0?{...n,next:y}:n;let S=n.type==="workspaceSymbol"?n.workspaceRoot??e.workspaceRoot??n.uri??e.uri:n.uri??e.uri??n.workspaceRoot??e.workspaceRoot;if(!S)return n;let C=mi(S),w={...y,textSearch:{tool:"localSearch",query:{operation:"text",path:C,searchText:l},why:`Semantic ${n.type} returned no result (${R.category}) \u2014 fall back to a text search for "${l}"`,confidence:"low"}};return sH.has(R.category)&&n.uri&&(w.reAnchor={tool:"lspGetSemantics",query:{type:"documentSymbols",uri:n.uri},why:"Re-anchor: list this file's symbols to find the correct lineHint, then retry the semantic query",confidence:"medium"}),{...n,next:w}}var iH,sH,TE=b(()=>{"use strict";sr();ce();di();iH=new Set(["unsupportedOperation","symbolNotFound","anchorFailed","noLocations","noReferences","noHover","noCalls","noWorkspaceSymbols","noTypeHierarchy","noDiagnostics"]),sH=new Set(["symbolNotFound","anchorFailed"])});import{z as Ue}from"zod";var dH,Mh,EE=b(()=>{"use strict";Me();dH=rt({name:"lspGetSemantics",type:"Local",shortDescription:"Run LSP semantic queries \u2014 definitions, references, call hierarchy, symbols, type hierarchy, diagnostics.",instructions:`Use a real search/read line anchor for semantic proof. references finds usages; callers incoming calls; callees outgoing calls; callHierarchy both. Fall back to references if call hierarchy is unavailable.
|
|
46
|
+
documentSymbols/diagnostic need uri; workspaceSymbol needs symbolName; other operations need uri+symbolName+lineHint. orderHint resolves same-line names. format:"compact" saves tokens. Empty/unavailable results call for a new anchor or text search.`,schema:{pageSize:"References or symbols returned per page.",page:"Reference/symbol result page.",snapshot:"Result-set token from next.nextPage; required after page 1. On paginationChanged, discard prior pages and execute next.restartPagination.",type:"Identity, usage, hierarchy, hover, symbol, or diagnostic operation.",uri:"Target file path/URI; required for every type except workspaceSymbol.",symbolName:"Bare anchored identifier, or fuzzy workspace symbol query.",lineHint:"Observed line containing symbolName.",orderHint:"Disambiguate repeated symbols on one line.",depth:"Call/type hierarchy depth; 0 is direct only.",includeDeclaration:"references: include the declaration; disable before unused analysis.",groupByFile:"references summary mode.",contextLines:"Lines of surrounding source shown around each result location.",format:'"compact" saves tokens; "structured" has typed locations.',workspaceRoot:"Use when auto-root is wrong.",rustContext:"Explicit Rust build context (requires a .rs uri). Features/target/cfgs select rust-analyzer semantics. buildScripts and procMacros default false; enabling either permits workspace code execution. procMacros requires buildScripts:true. Context partitions server reuse and pagination; syntax graphs remain unexpanded."}}),Mh=V(dH.schema,{...se,uri:Ue.string().optional(),type:Ue.enum(["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation","workspaceSymbol","supertypes","subtypes","diagnostic"]).default("definition"),symbolName:Ue.string().min(1).optional(),lineHint:z(1,xt).optional(),orderHint:z(0,zR).default(0),depth:z(0,VR).optional(),includeDeclaration:Ue.boolean().default(!0),groupByFile:Ue.boolean().optional(),page:He(),pageSize:z(1,KR).optional(),snapshot:Ue.string().min(1).max(128).optional(),contextLines:Qc(),format:Ue.enum(["structured","compact"]).default("structured"),workspaceRoot:Ue.string().optional(),rustContext:Ue.object({features:Ue.union([Ue.literal("all"),Ue.array(Ue.string().min(1).max(128)).max(128)]).default([]),noDefaultFeatures:Ue.boolean().default(!1),target:Ue.string().min(1).max(256).optional(),cfgs:Ue.array(Ue.string().min(1).max(256)).max(128).default([]),buildScripts:Ue.boolean().default(!1),procMacros:Ue.boolean().default(!1)}).strict().superRefine((e,t)=>{e.procMacros&&!e.buildScripts&&t.addIssue({code:"custom",path:["procMacros"],message:"procMacros requires buildScripts:true because rust-analyzer builds procedural macros through Cargo."})}).optional()}).superRefine((e,t)=>{if(e.rustContext&&!e.uri?.toLowerCase().endsWith(".rs")&&t.addIssue({code:"custom",path:["rustContext"],message:"rustContext requires a Rust .rs uri, including for workspaceSymbol."}),e.type==="workspaceSymbol"){e.symbolName||t.addIssue({code:"custom",path:["symbolName"],message:"Set symbolName for workspaceSymbol."});return}e.uri||t.addIssue({code:"custom",path:["uri"],message:"Set uri for file-scoped operations."}),!(e.type==="documentSymbols"||e.type==="diagnostic")&&(e.symbolName||t.addIssue({code:"custom",path:["symbolName"],message:"Set symbolName for anchored operations."}),Number.isInteger(e.lineHint)||t.addIssue({code:"custom",path:["lineHint"],message:"Set lineHint for anchored operations."}))})});import{z as hr}from"zod";var mH,fH,hH,AE,gr,gH,yH,bH,RH,SH,Cu,LE,xu=b(()=>{"use strict";EE();ce();Pt();Nn();Br();ui();mH=J(1,1e9),fH=J(0,1e5).optional(),hH=["structured","compact"],AE={type:hr.enum(kT).default("definition"),symbolName:hr.string().min(1).max(1024).optional(),lineHint:mH.optional(),orderHint:fH,depth:J(0,20).optional(),includeDeclaration:hr.boolean().optional().default(!0),page:Bt,pageSize:J(1,100).optional(),contextLines:J(0,100).optional(),format:hr.enum(hH).optional().default("structured")},gr=it(Mh,AE),gH=["definition","references","callers","callees","callHierarchy","hover","typeDefinition","implementation","supertypes","subtypes"],yH=["documentSymbols","diagnostic"],bH=gr.extend({type:hr.enum(gH).optional(),uri:_e(gr.shape,"uri"),symbolName:_e(gr.shape,"symbolName"),lineHint:_e(gr.shape,"lineHint")}),RH=gr.extend({type:hr.enum(yH),uri:_e(gr.shape,"uri")}),SH=gr.extend({type:hr.literal("workspaceSymbol"),symbolName:_e(gr.shape,"symbolName")}),Cu=Xe(Mh,AE),LE=ge(hr.union([bH,RH,SH]),{maxQueries:5})});var kE={};Pn(kE,{executeLspGetSemantics:()=>PH});import{acquirePooledClientDetailed as CH,isLanguageServerAvailable as xH}from"@octocodeai/octocode-engine/lsp/manager";import{resolveWorkspaceRootForFile as wH}from"@octocodeai/octocode-engine/lsp/workspaceRoot";async function PH(e){return Ce(e.queries||[],async t=>{let n=Ze(Cu,t);if(n.ok===!1)return n.error;let r=n.data;return zt({toolName:we,query:r,contextMessage:"lspGetSemantics execution failed",execute:async()=>{let o=await TH(r),i=r.rustContext?{...o,rustContext:bu(r)}:o;return vT(OT(r,PE(r,IT($T(r,i)))))}})},{toolName:we,minQueryTimeoutMs:3e4},e)}async function TH(e){if(e.type==="documentSymbols")return fE(e);if(e.type==="workspaceSymbol")return CE(e);if(e.type==="diagnostic")return xE(e);let t=await wT(e,we);if(t.ok===!1){if(t.error.status==="error")return t.error;let d=typeof t.error.error=="string"?t.error.error:"Symbol anchor resolution failed";return VT(e,d)}let n=e.workspaceRoot??await wH(t.value.absolutePath);await xH(t.value.absolutePath,n)||cn(t.value.uri,e.type);let o=await CH(n,t.value.absolutePath,e.rustContext);o.ok===!1&&cn(t.value.uri,e.type,o);let i=o.client,s=rE[e.type],a=s&&i.hasCapability(s)?await oE(i,t.value,n):void 0,c=i.getReadiness?.(),l=await iE(e,t.value,i,a);return CT({...l,workspaceRoot:n},c)}var Nh=b(()=>{"use strict";ht();or();Be();he();xT();ea();sE();Vr();gE();wE();Su();di();TE();_h();xu()});import{z as wu}from"zod";var EH,Dh,_E=b(()=>{"use strict";ir();Me();EH=rt({name:"npmSearch",type:"NPM",shortDescription:"Look up npm packages and find their source repositories.",instructions:Ae.npmSearch,schema:{keywords:"Discovery terms joined with spaces. Mutually exclusive with packageName.",packageName:"Exact package name; include scope for scoped packages.",page:"Keyword-result page only.",registry:"Optional registry URL overriding npm defaults and scope mappings. Credentials come from npm configuration, never tool arguments."}}),Dh=V(EH.schema,{...se,packageName:wu.string().trim().min(1).optional(),keywords:wu.array(wu.string().trim().min(1)).min(1).optional(),page:Ge(),registry:wu.string().url().refine(e=>{let t=new URL(e);return["http:","https:"].includes(t.protocol)&&!t.username&&!t.password&&!t.search&&!t.hash},"Use an HTTP(S) registry URL without credentials, query, or fragment.").optional()}).superRefine((e,t)=>{e.packageName===void 0&&e.keywords===void 0&&t.addIssue({code:"custom",path:["packageName"],message:"Set packageName or keywords."}),e.packageName!==void 0&&e.keywords!==void 0&&t.addIssue({code:"custom",path:["keywords"],message:"Set packageName or keywords, not both."}),e.packageName!==void 0&&e.page!==void 0&&t.addIssue({code:"custom",path:["page"],message:"page applies only to keyword discovery; omit it for an exact package lookup."})})});import{z as Xr}from"zod";function Hh(e,t){let n=Array.isArray(e.keywords)?e.keywords.join(" ").trim():e.keywords?.trim();!e.packageName?.trim()&&!n&&t.addIssue({code:"custom",path:["packageName"],message:"provide packageName or keywords"}),e.packageName?.trim()&&n&&t.addIssue({code:"custom",path:["keywords"],message:"provide packageName or keywords, not both"}),e.packageName?.trim()&&e.pageSize!==void 0&&t.addIssue({code:"custom",path:["pageSize"],message:"pageSize is only available for keyword discovery"})}var vE,Pu,na,IE,AH,LH,OE,Tu=b(()=>{"use strict";_E();Pt();Nn();Br();vE={page:Bt.removeDefault(),pageSize:J(1,100).optional().describe("Packages returned per keyword-discovery page."),keywords:Xr.array(Xr.string()).optional()};Pu=Xe(Dh,vE).superRefine(Hh),na=it(Dh,vE,{strict:!0}),IE=na.omit({packageName:!0,keywords:!0,pageSize:!0,page:!0}).shape,AH=Xr.object({...IE,packageName:_e(na.shape,"packageName")}).strict().superRefine((e,t)=>Hh(e,t)),LH=Xr.object({...IE,keywords:Xr.array(Xr.string()).min(1).describe(Le(na.shape,"keywords").description??""),pageSize:Le(na.shape,"pageSize"),page:Le(na.shape,"page")}).strict().superRefine((e,t)=>Hh(e,t)),OE=ge(Xr.union([AH,LH]),{maxQueries:5})});import{existsSync as Eu,realpathSync as kH}from"fs";import{delimiter as _H,dirname as ra,join as fi}from"path";function FE(){return process.platform==="win32"?"npm.cmd":"npm"}function vH(){let e=ra(process.execPath);return fi(e,FE())}function IH(){return process.platform==="win32"?[]:["/opt/homebrew/bin","/usr/local/bin","/usr/bin"]}function OH(){let e=(process.env.PATH??"").split(_H).map(t=>t.trim()).filter(Boolean);return[...new Set([...e,...IH()])]}function Gh(){let e=vH();if(Eu(e))return{command:process.execPath,argsPrefix:[e]};let t=FE();for(let n of OH()){let r=fi(n,t);if(Eu(r))return{command:r,argsPrefix:[]}}return{command:t,argsPrefix:[]}}function ME(){let e=Gh(),t=e.argsPrefix[0]??e.command;try{let n=kH(t),r=ra(ra(n));if(Eu(fi(r,"bin","npm-cli.js")))return r;let o=fi(ra(n),"node_modules","npm");if(Eu(fi(o,"bin","npm-cli.js")))return o}catch{}return fi(ra(process.execPath),"node_modules","npm")}async function k9(e=1e4){let t=Gh();return nS(t.command,[...t.argsPrefix,"--version"],e)}async function NE(e,t,n={}){if(!FH.includes(e))return{stdout:"",stderr:"",error:new Error(`Command '${e}' is not allowed`)};let r=Zc(t);if(!r.valid)return{stdout:"",stderr:"",error:new Error(`Invalid arguments: ${r.error}`)};let{timeout:o=3e4,cwd:i,env:s}=n,a=Gh(),c=await Hr(a.command,[...a.argsPrefix,e,...t],{timeout:o,cwd:i,env:s,allowEnvVars:MH});return{stdout:c.stdout,stderr:c.stderr,exitCode:c.exitCode??void 0,error:c.error}}var FH,MH,Au=b(()=>{"use strict";ys();bs();FH=["view","search","ping","config","whoami"],MH=[...Fo,...tS,"NPM_CONFIG_REGISTRY","npm_config_registry","NPM_CONFIG_USERCONFIG","npm_config_userconfig","NPM_TOKEN","NODE_AUTH_TOKEN"]});import{z as O}from"zod";var DE,NH,HE,GE,oa=b(()=>{"use strict";DE=O.looseObject({name:O.string(),version:O.string(),repository:O.union([O.string(),O.object({url:O.string().optional(),type:O.string().optional(),directory:O.string().optional()})]).optional(),main:O.string().optional(),module:O.string().optional(),type:O.string().optional(),exports:O.unknown().optional(),types:O.string().optional(),typings:O.string().optional(),description:O.string().optional(),keywords:O.array(O.string()).optional(),license:O.union([O.string(),O.object({type:O.string().optional()})]).optional(),homepage:O.string().optional(),author:O.union([O.string(),O.object({name:O.string().optional(),email:O.string().optional(),url:O.string().optional()})]).optional(),maintainers:O.array(O.object({name:O.string().optional(),email:O.string().optional()})).optional(),engines:O.record(O.string(),O.string()).optional(),dependencies:O.record(O.string(),O.string()).optional(),devDependencies:O.record(O.string(),O.string()).optional(),peerDependencies:O.record(O.string(),O.string()).optional(),time:O.record(O.string(),O.string().optional()).optional()}),NH=O.looseObject({package:O.looseObject({name:O.string().nullish(),version:O.string().nullish(),description:O.string().nullish(),links:O.looseObject({npm:O.string().nullish(),homepage:O.string().nullish(),repository:O.string().nullish()}).nullish()}),score:O.looseObject({final:O.number().nullish(),detail:O.looseObject({quality:O.number().nullish(),popularity:O.number().nullish(),maintenance:O.number().nullish()}).nullish()}).nullish()}),HE=O.looseObject({objects:O.array(NH),total:O.union([O.number(),O.string()]).optional()}),GE=O.union([O.string(),O.boolean(),O.number(),O.null(),O.record(O.string(),O.unknown())])});import{createHash as DH}from"node:crypto";import HH from"@npmcli/config";import GH from"@npmcli/config/lib/definitions/index.js";import BH from"npm-registry-fetch";async function Lu(e,t){let n=new HH({...GH,npmPath:ME(),argv:["node","octocode","--no-workspaces"],env:{...process.env},cwd:process.cwd()});await n.load(),n.validate();let r=e?.startsWith("@")?e.split("/")[0]:void 0,o=String(t??(r?n.get(`${r}:registry`):void 0)??n.get("registry")??zH).replace(/\/+$/,""),i=new URL(o);if(!["http:","https:"].includes(i.protocol)||i.username||i.password||i.search||i.hash)throw new Error("Invalid npm registry URL: use HTTP(S) without credentials, query or fragment.");let s={...n.flat,registry:o},a=DH("sha256").update(JSON.stringify(Object.entries(s).sort(([c],[l])=>c.localeCompare(l)))).digest("hex");return{registry:o,cacheIdentity:a,options:s}}async function jH(){return(await Lu()).registry}async function ia(e,t){try{return await BH.json(`${e.registry}/${t}`,{...e.options,registry:e.registry,cache:!1,offline:!1,preferOffline:!1,retry:{retries:1,minTimeout:500,maxTimeout:1e3},timeout:8e3})}catch(n){let r=n.statusCode;throw r===401||r===403?new Error(`npm registry authentication failed (${r}). Check npm login and registry-scoped credentials.`):r===404?new Error("npm registry returned 404 Not Found."):new Error(r?`npm registry request failed (HTTP ${r}).`:"npm registry request failed: network or configuration error.")}}async function UH(){try{return await ia(await Lu(),"-/ping"),!0}catch{return!1}}var zH,sa=b(()=>{"use strict";Au();zH="https://registry.npmjs.org"});function ku(e){return e.replace(/^git\+/,"").replace(/\.git$/,"")}function vu(e){return e===void 0?0:j(e)}function _u(e,t){return{values:e.slice(0,t),total:e.length,truncated:e.length>t}}function $H(e){if(typeof e=="string")return _u([e],12);if(!e||typeof e!="object")return;let n=Object.entries(e).flatMap(([r,o])=>typeof o=="string"?[`${r}:${o}`]:o&&typeof o=="object"?Object.entries(o).filter(([,i])=>typeof i=="string").map(([i,s])=>`${r}:${i}:${s}`):[]);return n.length>0?_u(n,12):void 0}function QH(e,t){if(typeof e=="string"){let n=t?.replace(/^@[^/]+\//,"")??"";return _u([n?`${n} \u2192 ${e}`:e],8)}if(e&&typeof e=="object"){let n=Object.entries(e).filter(([,r])=>typeof r=="string").map(([r,o])=>`${r} \u2192 ${o}`);return n.length>0?_u(n,8):void 0}}function WH(e){return e.type==="module"||e.module?"module":e.main?"commonjs":e.types||e.typings?"types-only":"unknown"}function BE(e,t=!1,n="cli"){let r=$H(e.exports),o=QH(e.bin,e.name),i=null,s;e.repository&&(typeof e.repository=="string"?i=ku(e.repository):(e.repository.url&&(i=ku(e.repository.url)),e.repository.directory&&(s=e.repository.directory.replace(/^\.\//,""))));let a;if(e.time){let d=(e.version?e.time[e.version]:void 0)||e.time.modified;d&&(a=d)}let c={name:e.name,npmUrl:`https://www.npmjs.com/package/${encodeURIComponent(e.name)}`,repoUrl:i,version:e.version||"latest",mainEntry:e.main||null,moduleEntry:e.module||null,typeDefinitions:e.types||e.typings||null,packageType:WH(e),...s?{repositoryDirectory:s}:{},...r?{exports:r.values,exportsTotal:r.total,...r.truncated?{exportsTruncated:!0}:{}}:{},...o?{bin:o.values,binTotal:o.total,...o.truncated?{binTruncated:!0}:{}}:{},lastPublished:a,source:n};return e.description&&(c.description=e.description),e.license&&(c.license=typeof e.license=="string"?e.license:e.license.type),t&&(e.author&&(typeof e.author=="string"?c.author=e.author:e.author.name&&(c.author=e.author.name)),e.keywords&&e.keywords.length>0&&(c.keywords=e.keywords),e.homepage&&(c.homepage=e.homepage),e.engines&&Object.keys(e.engines).length>0&&(c.engines=e.engines),e.dependencies&&Object.keys(e.dependencies).length>0&&(c.dependencies=e.dependencies),e.peerDependencies&&Object.keys(e.peerDependencies).length>0&&(c.peerDependencies=e.peerDependencies)),c}function zE(e){return e.startsWith("@")?"@"+e.slice(1).replace("/","%2F"):e}function jE(e,t){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&/^\d+$/.test(e)){let n=Number(e);if(Number.isFinite(n))return n}return t}var Bh=b(()=>{"use strict";ue()});async function Iu(e,t,n){try{let r=await ia(n,`${zE(e)}/latest`),o=vu(r),i=DE.safeParse(r);return i.success?i.data.name!==e?{error:"npm registry returned a different package name.",rawResponseChars:o}:{packages:[BE(i.data,t,"registry")],totalFound:1,rawResponseChars:o}:{error:"Invalid npm registry package response.",rawResponseChars:o}}catch(r){let o=r instanceof Error?r.message:"npm package request failed.";return o.includes("404 Not Found")?{packages:[],totalFound:0,rawResponseChars:0}:{error:o}}}var zh=b(()=>{"use strict";oa();sa();Bh()});async function UE(e,t,n,r,o){try{let i=r>0?`&from=${r}`:"",s=`-/v1/search?text=${encodeURIComponent(e)}&size=${t}${i}`,a;try{a=await ia(o,s)}catch(h){return{error:`Could not reach the npm search API (${h instanceof Error?h.message:String(h)}). The package may not exist, or the registry search endpoint is unavailable.`,hints:['Verify the exact package name / scope (e.g. "@scope/name")',"For an exact known name, query it directly instead of a keyword search","Ensure the npm registry is accessible from this environment"]}}let c=vu(a);if(!a||typeof a!="object")return{error:"Invalid npm registry search response; expected an object with results and a total.",rawResponseChars:c};let l=HE.safeParse(a);if(!l.success)return{error:`Invalid npm registry search response format: ${l.error.issues.map(y=>y.message).join("; ")}`,rawResponseChars:c,hints:["Try a different search term","Use packageName for an exact package lookup"]};let d=jE(l.data.total,NaN);if(!Number.isSafeInteger(d)||d<0)return{error:"npm registry search omitted a valid total; pagination cannot be determined.",rawResponseChars:c};if(l.data.objects.some(h=>!h.package.name))return{error:"npm registry search returned an unnamed package; refusing to skip a result.",rawResponseChars:c};let u=l.data.objects.map(h=>h.package).filter(h=>typeof h.name=="string"&&h.name.length>0).slice(0,t),p=await Promise.all(u.map(async h=>{if(n){let y=await Iu(h.name,!0,o);if(!("error"in y)&&y.packages[0])return{pkg:y.packages[0],rawResponseChars:y.rawResponseChars??0}}return{pkg:{name:h.name,npmUrl:(h.links?.npm??"")||`https://www.npmjs.com/package/${encodeURIComponent(h.name)}`,repoUrl:h.links?.repository&&typeof h.links.repository=="string"?ku(h.links.repository):null,version:h.version??"unknown",source:"registry",...h.description?{description:h.description}:{},...typeof h.license=="string"?{license:h.license}:{},...typeof h.date=="string"?{lastPublished:h.date}:{},...h.links?.homepage?{homepage:h.links.homepage}:{}},rawResponseChars:0}})),f=p.map(h=>h.pkg).filter(h=>!!h),m=p.reduce((h,y)=>h+y.rawResponseChars,0);return{packages:f,totalFound:d,rawResponseChars:c+m}}catch(i){return{error:`NPM registry search failed: ${i instanceof Error?i.message:String(i)}`,hints:["Check package name for typos","Try searching with a simpler term","Ensure npm registry is accessible"]}}}var $E=b(()=>{"use strict";oa();sa();Bh();zh()});function VH(e){return e.startsWith("@")&&e.includes("/")?!0:e.includes(" ")?!1:/^[a-z0-9][a-z0-9._-]*$/i.test(e)}async function jh(e,t,n,r=0,o="exact",i){let s=await Lu(o==="exact"?e:void 0,i),a=q("npm-search",{registry:s.registry,identity:s.cacheIdentity,mode:o,name:e,limit:t,metadata:n,from:r});return oe(a,async()=>{let c=o==="exact"?await Iu(e,n,s):await UE(e,t,n,r,s);return"error"in c?c:{...c,registry:s.registry}},{shouldCache:c=>!("error"in c||"totalFound"in c&&c.totalFound===0)})}async function KH(e){try{let t=await NE("view",[e,"deprecated","--json"]);if(t.error||t.exitCode!==0)return null;let n=t.stdout.trim();if(!n||n==="undefined")return{deprecated:!1};try{let r=JSON.parse(n),o=GE.safeParse(r),i=o.success?o.data:n;return{deprecated:!0,message:typeof i=="string"?i:"This package is deprecated"}}catch{return{deprecated:!0,message:n}}}catch{return null}}var Uh=b(()=>{"use strict";Au();Oe();Ve();oa();sa();zh();$E()});async function QE(e){let t=e.mode==="exact",n=e.itemsPerPage??(t?1:10),r=Math.max(0,((e.page??1)-1)*n);return jh(e.name,n,!1,r,e.mode,e.registry)}var $h=b(()=>{"use strict";Uh()});function Qh(e){if(e===void 0)return;let t=e.join(" ").trim();return t.length>0?t:void 0}function Wh(e){return XH.test(e)}var XH,Vh=b(()=>{"use strict";XH=/\b(?:404|e404)\b|not\s+found|no\s+such\s+package|does\s+not\s+exist/i});import{getConfigSync as YH}from"@octocodeai/config";function Kh(e,t=YH()){let n=e===pe.GITHUB_CLONE_REPO,r=n||e.startsWith("local")||e.startsWith("lsp"),o;return r&&!t.local.enabled?o="ENABLE_LOCAL":n&&t.storage.mode!=="persistent"?o="OCTOCODE_STORAGE_MODE":n&&!t.local.enableClone?o="ENABLE_CLONE":t.tools.enabled?.length?t.tools.enabled.includes(e)||(o="TOOLS_TO_RUN"):t.tools.disabled?.includes(e)&&(o="DISABLE_TOOLS"),o?{enabled:!1,envVar:o}:{enabled:!0}}var WE=b(()=>{"use strict";he()});function Xh(e,t,n,r){let o=Math.max(1,e.page??1),i=r?e.pageSize??10:1,s=Math.max(1,Math.ceil(t/i)),a=r&&o<s;return{currentPage:o,totalPages:s,perPage:i,totalFound:t,returned:n,hasMore:a,...a&&o<1e3?{nextPage:o+1}:{},...a&&o>=1e3?{continuationUnavailable:{reason:"schemaPageLimit",maxPage:1e3}}:{}}}function VE(e,t){if(!(!Array.isArray(e.keywords)||typeof t.nextPage!="number"))return{nextPage:{tool:"npmSearch",query:{keywords:e.keywords,...e.registry?{registry:e.registry}:{},page:t.nextPage,...typeof e.pageSize=="number"?{pageSize:e.pageSize}:{}},why:`Continue npm keyword discovery on page ${t.nextPage}.`,confidence:"exact"}}}var Yh=b(()=>{"use strict";ce()});var ZE={};Pn(ZE,{compactPackageRepositories:()=>JE,formatPackageData:()=>YE,normalizeRepoUrl:()=>KE,searchPackages:()=>nG});function JH(e){return"error"in e}function Ou(e){return"npmUrl"in e}function ZH(e){return Ou(e)&&e.path?e.path:e.name}function qH(e){return Ou(e)?e.repoUrl:e.repository}function eG(e){if(!e)return;let t=e.replace(/^\.\//,"").replace(/^\//,"");return t.length>0?t:void 0}function KE(e){if(!e)return;let t=e.trim();if(!t)return;t=t.replace(/^git\+/,"");let n=s=>s.replace(/\.git$/,""),r=t.match(/^(github|gitlab|bitbucket):(.+)$/i);if(r&&r[1]&&r[2]){let s=tG[r[1].toLowerCase()];return n(`https://${s}/${r[2]}`)}let o=t.match(/^[^@/]+@([^:/]+):(.+)$/);if(o&&o[1]&&o[2])return n(`https://${o[1]}/${o[2]}`);let i=t.match(/^(?:ssh|git|https?):\/\/(.+)$/);if(i&&i[1]){let s=i[1].replace(/^[^@/]+@/,"");return n(`https://${s}`)}return n(t)}function Jh(e){if(!e)return;let t=e.match(/^https:\/\/github\.com\/([^/]+)\/([^/#?]+)/i);if(!(!t||!t[1]||!t[2]))return{owner:t[1],repo:t[2]}}function XE(e,t){let n=Jh(e);if(!n)return;let{owner:r,repo:o}=n,i={viewTree:{tool:"ghSearch",query:{operation:"tree",owner:r,repo:o,...t?{path:t}:{}}},searchRepositoryCode:{tool:"ghSearch",query:{operation:"code",owner:r,repo:o}}};Kh("ghCloneRepo").enabled&&(i.cloneRepo={tool:"ghCloneRepo",query:{owner:r,repo:o,...t?{sparsePath:t}:{}}});for(let[s,a]of Object.entries(i))Kh(a.tool).enabled||delete i[s];return i}function YE(e){let t=ZH(e),n=KE(qH(e)),r={name:t};Ou(e)&&(e.version&&e.version!=="unknown"&&(r.version=e.version),e.description&&(r.description=e.description),e.license&&(r.license=e.license),typeof e.weeklyDownloads=="number"&&(r.downloads=e.weeklyDownloads)),n&&(r.repository=n);let o=eG(Ou(e)?e.repositoryDirectory:void 0);o&&(r.repositoryDirectory=o);let i=XE(n,o);return i&&(r.next=i),r.version&&Jh(n)&&(r.warnings=[`npm version ${r.version} is the registry's latest publish and may not correspond to a release/tag in the linked repository \u2014 verify against the repo's releases or tags before citing it as the repo's latest release.`]),r}function JE(e){if(e.length<=1)return{packages:e};let t={},n=new Map,r=1,o=e.map(i=>{if(!i.repository)return i;let s=Jh(i.repository);if(!s)return i;let a=`${i.repository}\0${i.repositoryDirectory??""}`,c=n.get(a);c||(c=`r${r++}`,n.set(a,c),t[c]={repository:i.repository,owner:s.owner,repo:s.repo,...i.repositoryDirectory?{repositoryDirectory:i.repositoryDirectory}:{},next:XE(i.repository,i.repositoryDirectory)});let{repository:l,repositoryDirectory:d,next:u,...p}=i;return{...p,repositoryId:c}});return Object.keys(t).length?{packages:o,repositories:t}:{packages:e}}async function nG(e){return Ce(e.queries,async t=>{try{let n=Ze(Pu,t);if(n.ok===!1)return n.error;t=n.data;let r=t.packageName??Qh(t.keywords),o=Array.isArray(t.keywords);if(!r)return D("Provide a packageName or keywords for package search",t);let i=await QE({name:r,registry:t.registry,mode:o?"keywords":"exact",page:t.page,...o&&typeof t.pageSize=="number"?{itemsPerPage:t.pageSize}:{},goal:t.goal,reasoning:t.reasoning});if(JH(i))return!o&&Wh(i.error)?Se(t,{packages:[],hints:[`No package named "${r}". Check spelling and scope.`]},!1,N.PACKAGE_SEARCH,{rawResponse:i}):D(i.error,t,{rawResponse:i});let a=i.packages.map(YE),c=a.length>0,l=Xh(t,i.totalFound,a.length,o),d=JE(a),u=VE({...t,registry:i.registry??t.registry},l),p={...d,pagination:l,...l.continuationUnavailable?{terminalLimit:!0}:{},...u?{next:u}:{}};return Se(t,p,c,N.PACKAGE_SEARCH,{rawResponse:i.rawResponseChars??i})}catch(n){return D(n,t,{toolName:N.PACKAGE_SEARCH})}},{toolName:N.PACKAGE_SEARCH,keysPriority:["packages","pagination","error"]},e)}var tG,Zh=b(()=>{"use strict";Tu();$h();Vh();ht();Be();Ke();WE();Yh();tG={github:"github.com",gitlab:"gitlab.com",bitbucket:"bitbucket.org"}});import{z as aa}from"zod";var Yr,hi,gi,rG,oG,qh,iG,ca,qE,eg,sG,tg,aG,ng,cG,lG,yr,eA,Fu=b(()=>{"use strict";gf();Pt();Br();Sf();Yr=e=>aa.literal(e).describe("Required operation selector."),hi=e=>_e(e,"owner"),gi=e=>_e(e,"repo"),rG=bf.extend({operation:Yr("pullRequests")}).strict(),oG=Fs.extend({operation:Yr("issues"),owner:hi(Fs.shape),repo:gi(Fs.shape)}).strict(),qh=Rf.omit({includeDiff:!0,filePage:!0,charOffset:!0,charLength:!0}),iG=qh.extend({operation:Yr("commits"),owner:hi(qh.shape),repo:gi(qh.shape)}).strict().superRefine(Vo),ca=aa.discriminatedUnion("operation",[rG,oG,iG]).describe("Search or list GitHub pull requests, issues, or commits using one strict operation branch."),qE=ge(ca),eg=Dl.omit({prNumber:!0}),sG=eg.extend({operation:Yr("pullRequest"),owner:hi(eg.shape),repo:gi(eg.shape),number:Dl.shape.prNumber}).strict(),tg=Hl.omit({issueNumber:!0,matchString:!0,commentBodyOffset:!0,minify:!0}),aG=tg.extend({operation:Yr("issue"),owner:hi(tg.shape),repo:gi(tg.shape),number:Hl.shape.issueNumber}).strict(),ng=Jo.omit({base:!0,head:!0,page:!0}),cG=ng.extend({operation:Yr("commit"),owner:hi(ng.shape),repo:gi(ng.shape),ref:aa.string().min(1).describe("Commit SHA or ref to retrieve exactly."),fileBatch:aa.number().int().min(1).max(30).optional().describe("Provider file batch from next.nextFilePage; copy unchanged.")}).strict(),lG=Jo.extend({operation:Yr("compare"),owner:hi(Jo.shape),repo:gi(Jo.shape)}).strict(),yr=aa.discriminatedUnion("operation",[sG,aG,cG,lG]).describe("Retrieve one GitHub pull request, issue, commit, or ref comparison using one strict operation branch."),eA=ge(yr)});async function tA(e,t){try{let n=await Fc({owner:e.owner,repo:e.repo,ref:e.ref,fileBatch:e.fileBatch},t),r=n.data,o=r.files??[],i=e.path,s=i?o.filter(h=>h.filename===i||h.previous_filename===i||h.filename.startsWith(i.endsWith("/")?i:`${i}/`)):o,a=r.commit.author,c=r.commit.committer,l=r.author?.login,d=r.committer?.login,u=r.commit.message,p={type:"commit",owner:e.owner,repo:e.repo,ref:e.ref,sha:r.sha,message:u,messageHeadline:u.split(`
|
|
47
|
+
`)[0]??u,author:{name:a?.name??"unknown",email:a?.email??"",...l?{login:l}:{},...a?.date?{date:a.date}:{}},...c?{committer:{name:c.name??"unknown",email:c.email??"",...d?{login:d}:{},...c.date?{date:c.date}:{}}}:{},parents:r.parents.map(h=>h.sha),...r.stats?.additions===void 0?{}:{additions:r.stats.additions},...r.stats?.deletions===void 0?{}:{deletions:r.stats.deletions},changedFiles:s.length,changedFilesCountScope:"providerBatch",...n.collectionState.hasMore?{isPartial:!0,partialReasons:["providerBatch"]}:{},...n.terminalLimit?{isPartial:!0,terminalLimit:!0,partialReasons:["providerFileLimit"],providerLimit:{reason:"providerFileLimit",maxFiles:ss}}:{}};if(!e.includeDiff)return{data:{...p,...n.collectionState.hasMore?{filesPagination:{currentPage:1,totalPages:1,itemsPerPage:100,totalFiles:s.length,hasMore:!0,nextFilePage:1}}:{}},status:200};let f=In(s,{filePage:e.filePage,itemsPerPage:e.itemsPerPage,charOffset:e.charOffset,charLength:e.charLength??12e3}),m={...f.filesPagination,countScope:"providerBatch",fileBatch:n.collectionState.page,...!f.filesPagination.hasMore&&n.collectionState.hasMore?{hasMore:!0,nextFilePage:1,nextFileBatch:n.collectionState.page+1}:{}};return{data:{...p,...f,filesPagination:m},status:200}}catch(n){return ne(n)}}var nA=b(()=>{"use strict";Ed();tt();Ao()});function Bn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ua(e,t){let n=Array.isArray(e)?e.filter(r=>typeof r=="string"):[];return[...new Set([...n,t])]}function pG(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 dG(e,t){return["filePage","commentPage","commitPage","reviewPage","collectionPages","charOffset","commentBodyOffset"].every(n=>e[n]===void 0||JSON.stringify(e[n])===JSON.stringify(t[n]))}function rg(e,t){let n=t==="pullRequest"?"pullRequests":"issues",r=e[n];if(!Array.isArray(r)||r.length===0||!Bn(r[0]))return e;let o=r[0].contentPagination;if(!Bn(o))return e;let s={...Bn(e.next)?e.next:{}},a={},c=!1,l=!1;for(let[u,p]of Object.entries(o)){if(!Bn(p)){a[u]=p;continue}let{nextQuery:f,...m}=p,h=u;if(m.hasMore===!0&&h in rA){c=!0;let y=Bn(f)?yr.safeParse(f):void 0,g=t==="issue"&&h==="commentBody"?"charOffset":uG[h],R=Bn(f)&&typeof f[g]=="number";y?.success&&R&&dG(f,y.data)?s[rA[h]]={tool:Ee,query:y.data,why:pG(h),confidence:"exact"}:(l=!0,m.continuationUnavailable={reason:R?"schemaLimit":"missingCursor"})}a[u]=m}if(!c)return e;let d=[...r];return d[0]={...r[0],contentPagination:a},{...e,[n]:d,isPartial:!0,partialReasons:ua(e.partialReasons,"contentPagination"),...l?{terminalLimit:!0}:{},...Object.keys(s).length>0?{next:s}:{}}}function oA(e,t){let r=(Array.isArray(e.commits)?e.commits:[]).find(a=>Bn(a)&&a.messageTruncated===!0);if(!Bn(r)||typeof r.sha!="string")return e;let o={operation:"commit",owner:t.owner,repo:t.repo,ref:r.sha},i=yr.safeParse(o);if(!i.success)return e;let s=Bn(e.next)?e.next:{};return{...e,isPartial:!0,partialReasons:ua(e.partialReasons,"commitMessageTruncated"),next:{...s,readCommit:{tool:Ee,query:i.data,why:`Read the complete message for commit ${r.sha}.`,confidence:"exact"}}}}var rA,uG,og=b(()=>{"use strict";he();Fu();rA={body:"continueBody",changedFiles:"nextChangedFilesPage",comments:"nextCommentsPage",commentBody:"continueCommentBody",reviews:"nextReviewsPage",reviewBody:"continueReviewBody",commits:"nextCommitsPage",patches:"continuePatch",filePaths:"nextFilePathsPage"},uG={body:"charOffset",changedFiles:"filePage",comments:"commentPage",commentBody:"commentBodyOffset",reviews:"reviewPage",reviewBody:"charOffset",commits:"commitPage",patches:"charOffset",filePaths:"filePage"}});function Mu(e,t,n){let r=n==="commits"?oA(e,t):e,o=r.incompleteResults===!0,i=ag(r.next),s=typeof t.page=="number"&&Number.isInteger(t.page)?t.page:1,a=o?{...r,isPartial:!0,partialReasons:ua(r.partialReasons,"providerIncompleteResults"),next:{...i,retry:{tool:fe,query:ef(t,n,s),why:`Retry the same ${n} provider page because the provider reported incomplete results.`,confidence:"exact"}}}:r,c=a.pagination;if(!c||typeof c!="object")return a;let l=c,d=l.totalMatchesCapped===!0,u=d?mG(a):a;if(l.hasMore!==!0)return u;let p=l.nextPage;if(typeof p!="number"||!Number.isInteger(p))return ig(u,l,{reason:"missingProviderCursor"});if(p>1e3)return ig(u,l,{reason:"schemaPageLimit",maxPage:1e3});let f=typeof l.perPage=="number"&&l.perPage>0?l.perPage:typeof t.pageSize=="number"&&t.pageSize>0?t.pageSize:void 0;return d&&f!==void 0&&(p-1)*f>=sg?ig(u,l,{reason:"providerResultCap",maxResults:sg}):{...u,next:{...ag(u.next),nextPage:{tool:fe,query:ef(t,n,p),why:`Continue ${n} search/list results on page ${p}.`,confidence:"exact"}}}}function mG(e){return{...e,isPartial:!0,terminalLimit:!0,partialReasons:ua(e.partialReasons,"providerResultCap"),providerLimit:{reason:"providerResultCap",maxResults:sg}}}function ig(e,t,n){let{nextPage:r,...o}=t,{nextPage:i,...s}=ag(e.next);return{...e,terminalLimit:!0,pagination:{...o,continuationUnavailable:n},...Object.keys(s).length>0?{next:s}:{}}}function ag(e){return e&&typeof e=="object"?e:{}}var sg,iA=b(()=>{"use strict";ce();he();Ps();og();sg=1e3});var cg={};Pn(cg,{getMultipleGitHubHistoryItems:()=>yG,searchMultipleGitHubHistory:()=>gG});function sA(e){return Ze(Ol,e)}function aA(e){let{operation:t,...n}=e;return n}async function fG(e,t,n){let r=Ze(ca,e);if(r.ok===!1)return r.error;let o=r.data,i=o.operation,s={...aA(o),type:i==="pullRequests"?"prs":i==="issues"?"issues":"commits"},a=sA(s);return a.ok===!1?a.error:i==="pullRequests"?Mu(await Os(s,a.data,n,fe),e,i):i==="issues"?Mu(await vs(s,a.data,t.authInfo,fe),e,i):Mu(await Is(s,a.data,t.authInfo,fe),e,i)}async function hG(e,t,n){let r=Ze(yr,e);if(r.ok===!1)return r.error;let o=r.data;if(o.operation==="commit"){let c=await tA({owner:String(o.owner),repo:String(o.repo),ref:String(o.ref),...typeof o.fileBatch=="number"?{fileBatch:o.fileBatch}:{},...typeof o.includeDiff!="boolean"?{}:{includeDiff:o.includeDiff},...typeof o.path!="string"?{}:{path:o.path},...typeof o.filePage!="number"?{}:{filePage:o.filePage},...typeof o.pageSize!="number"?{}:{itemsPerPage:o.pageSize},...typeof o.charOffset!="number"?{}:{charOffset:o.charOffset},...typeof o.charLength!="number"?{}:{charLength:o.charLength}},t.authInfo);return vt(c)?D(c,e,{toolName:Ee}):Se(e,Go(c.data,e),!0,Ee)}let s={...aA(o),...o.operation==="pullRequest"?{type:"prs",prNumber:o.number,number:void 0}:o.operation==="issue"?{type:"issues",issueNumber:o.number,number:void 0}:{type:"commits"}};delete s.number;let a=sA(s);return a.ok===!1?a.error:o.operation==="pullRequest"?rg(await Os(s,a.data,n,Ee),o.operation):o.operation==="issue"?rg(await vs(s,a.data,t.authInfo,Ee),o.operation):Is(s,a.data,t.authInfo,Ee)}function cA(e,t,n){let r=ot(e.authInfo);return Ce(e.queries,async o=>{try{return await n(o,e,r)}catch(i){return qe(i,o,void 0,t)}},{toolName:t},e)}function gG(e){return cA(e,fe,fG)}function yG(e){return cA(e,Ee,hG)}var lg=b(()=>{"use strict";nA();Mr();ht();qt();he();Be();cf();af();uf();Fu();Fl();Pl();og();iA()});import{withSecurityValidation as UA,withBasicSecurityValidation as $A}from"@octocodeai/octocode-engine/security";function wg(e,t,n){let r=UA(e,(o,i)=>t(o,i),n);return(o,i)=>r(o,{authInfo:i?.http?.authInfo,sessionId:i?.sessionId,signal:i?.mcpReq.signal})}function Pg(e,t,n){let r=$A((o,i)=>e(o,i),t,n);return(o,i)=>r(o,{signal:i?.mcpReq.signal})}ce();kt();Zr();jn();Pi();de();Bp();dc();nd();id();Ip();tt();fd();md();pd();qp();vd();Rd();cs();Po();Hd();Nc();Qi();oc();Md();Dc();Qd();Jd();Wd();Kd();tr();Zd();Kc();tm();am();nm();em();sm();Nr();hs();Pt();Xn();Qa();$i();or();Tr();oo();wr();gm();km();import{redactPath as Mre}from"@octocodeai/octocode-engine/pathUtils";ir();Me();import{z as Rs}from"zod";var yO=rt({name:"ghCloneRepo",type:"Github",shortDescription:"Clone a GitHub repo or subtree locally for repeated reads, search, or LSP.",instructions:Ae.ghCloneRepo,schema:{branch:"Branch, tag, or full 40-character commit SHA to check out; defaults to the repository default branch.",sparsePath:"Bound checkout to a repo-relative file/dir.",forceRefresh:"Bypass cached clone."}}),LS=V(yO.schema,{...se,owner:Rs.string(),repo:Rs.string(),branch:Rs.string().optional(),sparsePath:Rs.string().optional(),forceRefresh:Rs.boolean().optional()});Pt();Nn();var _m=Xe(LS),IS=ge(_m);Dm();Nm();pl();Jm();wl();Zm();tf();he();ht();Be();qt();af();cf();uf();Fl();async function Ml(e){let{queries:t,authInfo:n}=e,r=ot(n);return Ce(t,async(o,i)=>{try{let s=Ze(Ol,o);if(s.ok===!1)return s.error;let a=s.data.type;return a==="issues"?await vs(o,s.data,n):a==="commits"?await Is(o,s.data,n):await Os(o,s.data,r)}catch(s){return qe(s,o,void 0,fe)}},{toolName:fe,keysPriority:["pullRequests","issues","pagination","totalCount","error"]},e)}Fl();Sf();function Cf(e,t){return{...e,queries:e.queries.map(n=>({...n,type:t}))}}function lJ(e){return Ml(Cf(e,"prs"))}function uJ(e){return Ml(Cf(e,"issues"))}function pJ(e){return Ml(Cf(e,"commits"))}Tc();Af();Tf();$l();nh();cu();wh();fu();Nh();xu();Ah();ea();ui();Zh();Vh();Yh();Tu();qt();Hm();jm();lf();Im();Qm();ir();he();he();xu();pl();wl();cu();$l();fu();Tu();Fu();var la=[{name:Dt,title:"GitHub Search",description:Ae.ghSearch,schema:xs,inputSchema:OC},{name:pe.GITHUB_FETCH_CONTENT,title:"GitHub File Content Fetch",description:Ae.ghGetFileContent,schema:ul,inputSchema:HS},{name:fe,title:"GitHub History Search",description:Ae.ghSearchHistory,schema:ca,inputSchema:qE},{name:Ee,title:"GitHub History Item",description:Ae.ghGetHistoryItem,schema:yr,inputSchema:eA},{name:pe.PACKAGE_SEARCH,title:"Package Search",description:Ae.npmSearch,schema:Pu,inputSchema:OE},{name:pe.GITHUB_CLONE_REPO,title:"Clone / Fetch GitHub Repository Locally",description:Ae.ghCloneRepo,schema:_m,inputSchema:IS},{name:dt,title:"Local Search",description:Ae.localSearch,schema:Zs,inputSchema:RT},{name:yn,title:"Local Analyze Graph",description:Ae.localAnalyzeGraph,schema:si,inputSchema:sP},{name:pe.LOCAL_FETCH_CONTENT,title:"Local Fetch Content",description:Ae.localGetFileContent,schema:Ul,inputSchema:Ux},{name:we,title:"Get Semantic Content",description:Ae.lspGetSemantics,schema:Cu,inputSchema:LE}];he();he();var pa={security:"remote",requiresServerRuntime:!0,requiresProviders:!0},bG={[Dt]:{isDefault:!0,isLocal:!1,type:"search",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(Jm(),FC))).executeGitHubSearch(e),...pa}},[pe.GITHUB_FETCH_CONTENT]:{isDefault:!0,isLocal:!1,type:"content",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(Dm(),qS))).fetchMultipleGitHubFileContents(e),...pa}},[fe]:{isDefault:!0,isLocal:!1,type:"history",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(lg(),cg))).searchMultipleGitHubHistory(e),...pa}},[Ee]:{isDefault:!0,isLocal:!1,type:"history",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(lg(),cg))).getMultipleGitHubHistoryItems(e),...pa}},[pe.PACKAGE_SEARCH]:{isDefault:!0,isLocal:!1,type:"search",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(Zh(),ZE))).searchPackages(e),security:"remote",requiresServerRuntime:!0}},[pe.GITHUB_CLONE_REPO]:{isDefault:!0,isLocal:!0,isClone:!0,type:"content",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(km(),AS))).executeCloneRepo(e),timeoutMs:15e4,...pa}},[dt]:{isDefault:!0,isLocal:!0,type:"search",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(wh(),ST))).executeLocalSearch(e),security:"basic"}},[yn]:{isDefault:!0,isLocal:!0,type:"search",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(nh(),aP))).executeAnalyzeGraph(e),security:"basic"}},[pe.LOCAL_FETCH_CONTENT]:{isDefault:!0,isLocal:!0,type:"content",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(Af(),$x))).executeFetchContent(e),security:"basic"}},[we]:{isDefault:!0,isLocal:!0,type:"content",direct:{executionFn:async e=>(await Promise.resolve().then(()=>(Nh(),kE))).executeLspGetSemantics(e),security:"basic",requiresServerRuntime:!0}}};function RG(e){let t=bG[e.name];if(!t)throw new Error(`Missing runtime configuration for ${e.name}`);return{name:e.name,title:e.title,description:e.description,...t,direct:{schema:e.schema,inputSchema:e.inputSchema,...t.direct}}}function SG(){let e=new Map(la.map(f=>{let m=RG(f);return[m.name,m]})),t=f=>{let m=e.get(f);if(!m)throw new Error(`Missing direct-tool specification for ${f}`);return m},n=t(Dt),r=t(pe.GITHUB_FETCH_CONTENT),o=t(fe),i=t(Ee),s=t(pe.PACKAGE_SEARCH),a=t(pe.GITHUB_CLONE_REPO),c=t(dt),l=t(yn),d=t(pe.LOCAL_FETCH_CONTENT),u=t(we),p=la.map(f=>t(f.name));return{GITHUB_SEARCH:n,GITHUB_FETCH_CONTENT:r,GITHUB_SEARCH_HISTORY:o,GITHUB_GET_HISTORY_ITEM:i,PACKAGE_SEARCH:s,GITHUB_CLONE_REPO:a,LOCAL_SEARCH:c,LOCAL_ANALYZE_GRAPH:l,LOCAL_FETCH_CONTENT:d,LSP_GET_SEMANTIC_CONTENT:u,ALL_TOOLS:p}}var ln=SG(),fte=ln.GITHUB_SEARCH,hte=ln.GITHUB_FETCH_CONTENT,gte=ln.GITHUB_SEARCH_HISTORY,yte=ln.GITHUB_GET_HISTORY_ITEM,bte=ln.PACKAGE_SEARCH,Rte=ln.GITHUB_CLONE_REPO,Ste=ln.LOCAL_SEARCH,Cte=ln.LOCAL_ANALYZE_GRAPH,xte=ln.LOCAL_FETCH_CONTENT,wte=ln.LSP_GET_SEMANTIC_CONTENT,lA=ln.ALL_TOOLS;Yi();ir();ir();function Ete(e){return Object.prototype.hasOwnProperty.call(Ae,e)}Ke();Yi();import{SYSTEM_PROMPT as wG}from"@octocodeai/octocode-core";he();he();var uA=["GitHub","Local Code","Package","Other"],pA=new Map([Dt,fe,Ee,pe.GITHUB_FETCH_CONTENT,pe.GITHUB_CLONE_REPO,dt,yn,pe.LOCAL_FETCH_CONTENT,we,pe.PACKAGE_SEARCH].map((e,t)=>[e,t])),un=class extends Error{constructor(n,r=[]){super(n);this.details=r;this.name="DirectToolInputError"}details},CG=["goal","reasoning"],yi=new Set([...CG]);function xG(e){return{name:e.name,title:e.title,description:e.description,schema:e.schema,inputSchema:e.inputSchema}}var mA=la.map(e=>xG(e)),fA=[...mA];function St(e){return mA.find(t=>t.name===e)}function dA(e){return e.startsWith("gh")?"GitHub":e.startsWith("local")||e.startsWith("lsp")?"Local Code":e===pe.PACKAGE_SEARCH?"Package":"Other"}function vte(e){return[...e].sort((t,n)=>{let r=uA.indexOf(dA(t)),o=uA.indexOf(dA(n));if(r!==o)return r-o;let i=pA.get(t)??Number.MAX_SAFE_INTEGER,s=pA.get(n)??Number.MAX_SAFE_INTEGER;return i!==s?i-s:t.localeCompare(n)})}var ug={systemPrompt:wG,toolNames:Nt,baseSchema:Xi,tools:Object.fromEntries(fA.map(e=>[e.name,{description:e.description}]))};var da=null;function hA(){return da||(da=ug),da}async function Hte(){return hA()}async function Gte(){hA()}function Bte(){return da}function zte(){da=null}import{z as gA}from"zod";var PG=["goal","reasoning"];function Qte(e){let t=St(e);if(!t)return"{}";try{return JSON.stringify(gA.toJSONSchema(t.inputSchema,{io:"input"}),null,2)}catch{return JSON.stringify(gA.toJSONSchema(t.schema,{io:"input"}),null,2)}}function Wte(e){return JSON.stringify(e??{},null,2)}function Vte(e){return St(e)?[...PG]:[]}function Kte(e,t){return St(e)?.description??e}import{z as dg}from"zod";function Hu(e){let t=St(e);if(!t)return[];let n=dg.toJSONSchema(t.schema,{io:"input"});if(!Wt(n))return[];let r=Gu(n),o=RA(r),i=SA(r,o);return Du(o,i)}function Zte(e){let t=St(e);if(!t)return{};let n=dg.toJSONSchema(t.schema,{io:"input"});if(!Wt(n))return{};let r=new Map;for(let o of Gu(n)){if(!Ft(o.properties))continue;let i=o.properties.operation;if(!Wt(i)||typeof i.const!="string")continue;let s=r.get(i.const)??[];s.push(o),r.set(i.const,s)}return Object.fromEntries([...r].map(([o,i])=>{let s=RA(i),a=SA(i,s);return[o,Du(s,a).filter(c=>!yi.has(c.name)&&c.name!=="operation")]}))}function bA(e,t){let n=St(e);if(!n)return new Set;let r=dg.toJSONSchema(n.schema,{io:"input"});if(!Wt(r))return new Set;let o=Gu(r),i=o.filter(a=>TG(a,t)),s=i.length>0?i:o;return new Set(s.flatMap(a=>Ft(a.properties)?Object.keys(a.properties):[]))}function TG(e,t){if(!Ft(e.properties))return!0;for(let[n,r]of Object.entries(t)){let o=e.properties[n];if(Wt(o)&&("const"in o&&r!==o.const||Array.isArray(o.enum)&&!o.enum.some(i=>i===r)))return!1}return!0}function EG(e){let t=[],n=typeof e.minimum=="number"?e.minimum:void 0,r=typeof e.maximum=="number"?e.maximum:void 0;return n!==void 0&&r!==void 0?t.push(`${n}-${r}`):n!==void 0?t.push(`>=${n}`):r!==void 0&&t.push(`<=${r}`),"default"in e&&t.push(`default ${JSON.stringify(e.default)}`),t.length>0?t.join(", "):void 0}function Nu(e){if("const"in e)return`enum(${String(e.const)})`;if(Array.isArray(e.enum)&&e.enum.length>0)return`enum(${e.enum.map(String).join(", ")})`;if(e.type==="array"){let n=Wt(e.items)?e.items:void 0;return`array<${n?Nu(n):"value"}>`}let t=Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:void 0;if(t){let n=t.filter(Wt).map(Nu).filter(r=>r!=="value");if(n.length>0)return[...new Set(n)].join(" | ")}return Array.isArray(e.type)?e.type.join(" | "):typeof e.type=="string"?e.type:"value"}function Gu(e){return Ft(e.properties)?[e]:(Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:[]).filter(Wt).flatMap(n=>Gu(n))}function RA(e){let t=new Map;for(let n of e)if(Ft(n.properties))for(let[r,o]of Object.entries(n.properties)){if(!Wt(o))continue;let i=t.get(r)??[];i.push(o),t.set(r,i)}return Object.fromEntries([...t].map(([n,r])=>{let o=r.filter(s=>"const"in s).map(s=>s.const);return o.length===r.length?[n,{enum:[...new Set(o)],description:n==="operation"?"Required operation selector.":r[0]?.description}]:new Set(r.map(Nu)).size>1?[n,{anyOf:r}]:[n,r[0]??{}]}))}function SA(e,t){if(e.length===0)return new Set;let n=e.map(o=>new Set(Array.isArray(o.required)?o.required:[])),r=[...n[0]??new Set].filter(o=>n.every(i=>i.has(o)));return new Set(r.filter(o=>!yi.has(o)&&!pg(t[o])))}function Du(e,t,n=""){let r=[];for(let[o,i]of Object.entries(e)){if(!n&&yi.has(o))continue;let s=Wt(i)?i:{},a=n?`${n}.${o}`:o;if(r.push({name:a,required:t.has(o),type:Nu(s),constraints:EG(s),description:typeof s.description=="string"?s.description:void 0}),Ft(s.properties)){let l=new Set(Array.isArray(s.required)?s.required.filter(d=>typeof d=="string"?!pg(s.properties?.[d]):!1):[]);r.push(...Du(s.properties,l,a))}let c=s.type==="array"&&Wt(s.items)?s.items:void 0;if(c&&Ft(c.properties)){let l=new Set(Array.isArray(c.required)?c.required.filter(d=>typeof d=="string"?!pg(c.properties?.[d]):!1):[]);r.push(...Du(c.properties,l,a))}}return r}function CA(e,t){if(t.startsWith("array<")){let n=t.slice(6,-1);return[yA(e,n)]}return yA(e,t)}function yA(e,t){if(t.startsWith("enum("))return/^enum\(([^,)]+)/.exec(t)?.[1]??e;if(t==="integer"||t==="number")return e==="lineHint"?42:5;if(t==="boolean")return!0;switch(e){case"keywords":case"keywordsToSearch":case"query":case"text":return"runCLI";case"path":return".";case"uri":return"/path/to/file.ts";case"owner":return"bgauryy";case"repo":return"octocode";case"extension":return"ts";case"filename":return"package.json";case"language":return"TypeScript";case"symbolName":return"myFunction";case"name":case"packageName":return"zod";default:return e}}function Ft(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Wt(e){return Ft(e)}function pg(e){return Wt(e)&&"default"in e}he();he();he();function xA(e){return e!==Dt?[]:[{label:"code search",query:{operation:"code",keywords:["localSearch"],owner:"bgauryy",repo:"octocode",pageSize:5}},{label:"repository search",query:{operation:"repositories",keywords:["code research"],language:"TypeScript",pageSize:5}},{label:"repository tree",query:{operation:"tree",owner:"bgauryy",repo:"octocode",path:"packages",maxDepth:2}}]}function wA(e){let t=xA(e);return t.length>0?t:e===fe?[{label:"PR search (list)",query:{operation:"pullRequests",owner:"bgauryy",repo:"octocode",keywords:["localSearch"],concise:!0,pageSize:5}},{label:"issue search (list)",query:{operation:"issues",owner:"bgauryy",repo:"octocode",keywords:["schema"],state:"open",pageSize:5}},{label:"commit history",query:{operation:"commits",owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src",since:"6m",pageSize:10}}]:e===pe.GITHUB_CLONE_REPO?[{label:"full repo clone",query:{owner:"bgauryy",repo:"octocode"}},{label:"subtree clone",query:{owner:"bgauryy",repo:"octocode",sparsePath:"packages/octocode-tools-core"}}]:e===dt?[{label:"text anchors",query:{operation:"text",path:"/ABS/repo/src",searchText:"buildDirectToolCommandPatterns",maxFiles:20}},{label:"structural matches",query:{operation:"structural",path:"/ABS/repo/src",pattern:"eval($X)",langType:"typescript"}},{label:"file discovery",query:{operation:"files",path:"/ABS/repo",names:["package.json"],entryType:"f"}},{label:"tree orientation",query:{operation:"tree",path:"/ABS/repo/src",maxDepth:2}}]:e===pe.LOCAL_FETCH_CONTENT?[{label:"exact line range",query:{path:"/ABS/repo/packages/octocode-tools-core/package.json",startLine:1,endLine:30,minify:"none"}},{label:"matched slice",query:{path:"/ABS/repo/packages/octocode-tools-core/src/tools/directToolCatalog/toolCommandPatternQueries.ts",matchString:"buildKnownDirectToolCommandPatternQueries",contextLines:8,minify:"standard"}}]:e===yn?[{label:"dead code from detected entrypoints",query:{operation:"deadCode",path:"/ABS/repo",limit:20}},{label:"cycles",query:{operation:"cycles",path:"/ABS/repo",limit:20}},{label:"dependencies of one file",query:{operation:"dependencies",path:"/ABS/repo",file:"src/index.ts",depth:2}},{label:"dependents of one file",query:{operation:"dependents",path:"/ABS/repo",file:"src/index.ts",depth:2}},{label:"shortest dependency path",query:{operation:"path",path:"/ABS/repo",file:"src/index.ts",target:"src/responses.ts"}},{label:"reachability from detected entrypoints",query:{operation:"reachability",path:"/ABS/repo",limit:20}}]:e===pe.GITHUB_FETCH_CONTENT?[{label:"matched slice (cheap read of one function)",query:{owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src/responses.ts",matchString:"export function cleanJsonObject",contextLines:8}},{label:"symbols outline (unknown/large file)",query:{owner:"bgauryy",repo:"octocode",path:"packages/octocode-tools-core/src/responses.ts",minify:"symbols"}}]:e===Ee?[{label:"pull request detail",query:{operation:"pullRequest",owner:"bgauryy",repo:"octocode",number:1,content:{body:!0,patches:{mode:"all"}}}},{label:"issue detail",query:{operation:"issue",owner:"bgauryy",repo:"octocode",number:1,content:{body:!0,comments:{discussion:!0}}}},{label:"exact commit",query:{operation:"commit",owner:"bgauryy",repo:"octocode",ref:"main"}},{label:"compare two refs (base...head)",query:{operation:"compare",owner:"bgauryy",repo:"octocode",base:"main",head:"update-tools"}}]:e===pe.PACKAGE_SEARCH?[{label:"exact package \u2192 source repo",query:{packageName:"zod"}},{label:"keyword discovery (paged candidates)",query:{keywords:["schema","validation"],page:1}}]:e===we?[{label:"symbol outline (absolute uri)",query:{uri:"/ABS/packages/octocode-tools-core/src/scheme/pagination.ts",type:"documentSymbols"}},{label:"semantic definition (absolute uri + lineHint)",query:{uri:"/ABS/packages/octocode-tools-core/src/scheme/pagination.ts",type:"definition",symbolName:"buildNextPageContinuation",lineHint:72}}]:[]}function PA(e,t){return`tools ${e} --queries '${JSON.stringify(t)}'`}function AG(e){let t=wA(e);if(t.length>0)return t.map(r=>({...r,command:PA(e,r.query)}));let n=LG(e);return Object.keys(n).length===0?[]:[{label:"schema-derived",query:n,command:PA(e,n)}]}function lne(e){return AG(e)[0]?.query??{}}function LG(e){if(!St(e))return{};let t=Hu(e),n=t.filter(i=>!i.name.includes(".")),r=kG(n),o={};for(let i of r)o[i.name]=CA(i.name,i.type);return e.startsWith("lsp")&&t.some(i=>i.name==="uri")&&(o.uri??="uri"),e===we&&(o.type??="definition",o.symbolName??="symbolName",o.lineHint??=1),o}var TA=4,mg=new Map([["keywords",10],["keywordsToSearch",11],["query",12],["text",13],["packageName",14],["name",15],["uri",20],["type",21],["owner",30],["repo",31],["extension",32],["filename",33],["language",34],["path",40],["target",50],["from",51],["scope",52],["pattern",60],["rule",61],["op",80],["operation",81],["minify",90]]),EA=new Set(["page","itemsPerPage","limit","pageSize","matchPage","maxFiles","maxMatchesPerFile","matchContentLength","responseCharLength","responseCharOffset"]);function kG(e){let t=e.filter(i=>i.required),n=new Map;for(let i of t)n.set(i.name,i);let r=e.filter(i=>!i.required&&_G(i)).sort(vG),o=Math.max(TA,t.length);for(let i of r){if(n.size>=o)break;n.set(i.name,i)}return n.size>0?[...n.values()]:e.filter(i=>!EA.has(i.name)).filter(i=>i.type!=="boolean").slice(0,TA)}function _G(e){return EA.has(e.name)||e.type==="boolean"?!1:IG(e)?mg.has(e.name):!0}function vG(e,t){let n=mg.get(e.name)??Number.MAX_SAFE_INTEGER,r=mg.get(t.name)??Number.MAX_SAFE_INTEGER;return n!==r?n-r:e.name.localeCompare(t.name)}function IG(e){return e.constraints?.includes("default ")===!0}import{z as _A}from"zod";var OG={ghSearch:["Use only fields listed for the selected operation.","match: code=file|path; repositories=name|description|readme.","code cannot select branch; it searches GitHub's indexed default branch."],localSearch:["text needs searchText.","structural needs exactly one of pattern or rule.","Fields from different operations cannot be mixed."],localAnalyzeGraph:["dependencies | dependents -> requires file; depth applies.","path -> requires file + target.","deadCode/reachability use entrypoints and includeTests as roots."],localGetFileContent:["Choose fullContent, a line range, or matchString.","A line range needs startLine and endLine.","matchString options apply with matchString."],lspGetSemantics:["workspaceSymbol needs symbolName and may use workspaceRoot.","documentSymbols/diagnostic need uri.","definition | references | hover | callers | callees | callHierarchy | implementation | typeDefinition | supertypes | subtypes -> requires uri + symbolName + lineHint."],ghGetFileContent:["Optionally choose fullContent, a line range, or matchString; extraction modes are exclusive.","A line range needs startLine and endLine.","matchString options apply with matchString.",'type:"directory" materializes; extraction fields read files.'],npmSearch:["Set exactly one non-empty packageName or keywords.","page applies only to keyword discovery."]};function fg(e){return[...OG[e]??[]]}var FG={ghSearch:[{name:"code",when:"Search code contents or file paths",requires:["operation"],excludes:["branch"],fields:["keywords","owner","repo","extension","filename","path","language","match","pageSize","page","concise"],example:{operation:"code",keywords:["toolSchemas"],owner:"bgauryy",repo:"octocode"}},{name:"repositories",when:"Discover repositories",requires:["operation"],fields:["keywords","topics","language","owner","stars","forks","goodFirstIssues","updated","created","size","match","sort","pageSize","page","archived","visibility","license","concise"],example:{operation:"repositories",keywords:["octocode"]}},{name:"tree",when:"Browse a known repository tree",requires:["operation","owner","repo"],fields:["owner","repo","branch","path","maxDepth","page","pageSize","include"],example:{operation:"tree",owner:"bgauryy",repo:"octocode",path:"packages",maxDepth:2}}],localSearch:[{name:"text",when:"Search lexical text or regular expressions",requires:["operation","path","searchText"],example:{operation:"text",path:".",searchText:"toolSchemas"}},{name:"structural",when:"Match AST structure",requires:["operation","path","pattern"],example:{operation:"structural",path:".",pattern:"console.log($A)",langType:"typescript"}},{name:"files",when:"Discover paths by name or metadata",requires:["operation","path"],example:{operation:"files",path:".",names:["*.ts"]}},{name:"tree",when:"Browse a directory tree",requires:["operation","path"],example:{operation:"tree",path:".",maxDepth:5}}],localAnalyzeGraph:[{name:"dependencies",when:"Find files imported by a file",requires:["path","operation","file"],example:{path:".",operation:"dependencies",file:"src/index.ts"}},{name:"dependents",when:"Find files importing a file",requires:["path","operation","file"],example:{path:".",operation:"dependents",file:"src/index.ts"}},{name:"path",when:"Find a shortest dependency path",requires:["path","operation","file","target"],example:{path:".",operation:"path",file:"src/a.ts",target:"src/b.ts"}},{name:"cycles",when:"Find dependency cycles",requires:["path","operation"],example:{path:".",operation:"cycles"}},{name:"deadCode",when:"Find unreachable file candidates",requires:["path","operation"],example:{path:".",operation:"deadCode"}},{name:"reachability",when:"Classify files from explicit or inferred roots",requires:["path","operation"],example:{path:".",operation:"reachability",entrypoints:["src/index.ts"]}}],lspGetSemantics:[{name:"anchored",when:"Query a named symbol near a source line",requires:["uri","type","symbolName","lineHint"],example:{uri:"src/index.ts",type:"definition",symbolName:"main",lineHint:1}},{name:"document",when:"Query a whole document",requires:["uri","type"],example:{uri:"src/index.ts",type:"documentSymbols"}},{name:"workspace",when:"Search symbols across the workspace",requires:["workspaceRoot","type","symbolName"],example:{workspaceRoot:".",type:"workspaceSymbol",symbolName:"Schema"}}]};function AA(e){return FG[e]??[]}import{z as MG}from"zod";function Bu(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function LA(e){return Bu(e.properties)?[e]:(Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:[]).filter(Bu).flatMap(LA)}function NG(e){let t=St(e)?.schema;if(!t)return new Map;let n=MG.toJSONSchema(t),r=new Map;for(let o of LA(n)){if(!Bu(o.properties))continue;let i=o.properties.operation;if(!Bu(i)||typeof i.const!="string")continue;let s=r.get(i.const)??new Set;for(let a of Object.keys(o.properties))["goal","reasoning","operation"].includes(a)||s.add(a);r.set(i.const,s)}return new Map([...r].map(([o,i])=>[o,[...i]]))}function hg(e){if(e==="ghSearch"){let[t,...n]=fg(e);return[...t?[t]:[],"code and repositories need at least one search term or scope filter.",...n]}return e==="localSearch"?["text needs searchText.","structural needs exactly one of pattern or rule.","Fields from different operations cannot be mixed."]:e==="ghSearchHistory"?["Choose pullRequests, issues, or commits; fields cannot cross operations.","issues and commits require owner+repo; pullRequests may search globally.","Search/list operations reject exact identities, content, and diff pagination."]:e==="ghGetHistoryItem"?["Every operation requires owner+repo.","pullRequest and issue need number; commit needs ref; compare needs base+head.","Fields and pagination axes cannot cross operations."]:fg(e)}function kA(e){let t=NG(e);return(e==="ghSearchHistory"?[{name:"pullRequests",when:"Search or list pull requests",requires:["operation"],example:{operation:"pullRequests",keywords:["schema"]}},{name:"issues",when:"Search or list issues",requires:["operation","owner","repo"],example:{operation:"issues",owner:"o",repo:"r"}},{name:"commits",when:"List commit history",requires:["operation","owner","repo"],example:{operation:"commits",owner:"o",repo:"r"}}]:e==="ghGetHistoryItem"?[{name:"pullRequest",when:"Retrieve one pull request",requires:["operation","owner","repo","number"],example:{operation:"pullRequest",owner:"o",repo:"r",number:1}},{name:"issue",when:"Retrieve one issue",requires:["operation","owner","repo","number"],example:{operation:"issue",owner:"o",repo:"r",number:1}},{name:"commit",when:"Retrieve one commit",requires:["operation","owner","repo","ref"],example:{operation:"commit",owner:"o",repo:"r",ref:"main"}},{name:"compare",when:"Compare two refs",requires:["operation","owner","repo","base","head"],example:{operation:"compare",owner:"o",repo:"r",base:"main",head:"next"}}]:AA(e)).map(r=>({...r,...e==="localSearch"&&r.name==="structural"?{requires:["operation","path"]}:{},...e==="lspGetSemantics"&&r.name==="workspace"?{requires:["type","symbolName"]}:{},...t.has(r.name)?{fields:t.get(r.name)}:{}}))}function xne(e,t,n={}){if(typeof t!="string")return null;let r;try{r=JSON.parse(t)}catch{throw new un("Tool input must be valid JSON.")}return DG(e,r,n)}function DG(e,t,n={}){let r=BG(e,t,n),o=St(e);if(!o)throw new un(`Unknown tool: ${e}`);let i=o.inputSchema.safeParse(r);if(!i.success)throw new un("Check the query fields.",[...HG(e),...GG(i.error)]);return i.data}function HG(e){if(e==="npmSearch")return hg(e).slice(0,1);if(e==="localSearch"){let t=kA(e).map(n=>n.name);return t.length>0?[`operation must be one of ${t.map((n,r)=>r===t.length-1&&t.length>1?`or ${n}`:n).join(", ")}.`]:[]}if(e==="lspGetSemantics"){let t=hg(e);return t.length>0?[t.join(" ")]:[]}return[]}function GG(e){let t=n=>{let r=n.errors;if(n.code!=="invalid_union"||!Array.isArray(r))return[n];let o=r.filter(s=>Array.isArray(s));return o.length===0?[n]:o.reduce((s,a)=>a.length<s.length?a:s).map(s=>({...s,path:[...n.path,...s.path]}))};return e.issues.flatMap(t).map(n=>`${n.path.length>0?n.path.join("."):"input"}: ${n.message}`)}function BG(e,t,n){let r;if(Array.isArray(t))r=t;else if(Ft(t)&&Array.isArray(t.queries))r=t.queries;else if(Ft(t))r=[t];else throw new un('Tool input must be a JSON object, an array of query objects, or { "queries": [...] }.');if(r.length===0)throw new un("At least one query is required.");let o=Ft(t)&&Array.isArray(t.queries)?Object.fromEntries(Object.entries(t).filter(([s])=>s!=="queries")):{},i=r.map((s,a)=>zG(e,WG(e,s,a,n),{sourceLabel:n.sourceLabel}));return{...o,queries:i}}function zG(e,t,n){let r={...t},o=n.sourceLabel??"direct tool execution",i=jG(e,o);return(typeof r.goal!="string"||r.goal.trim().length===0)&&(r.goal=i),(typeof r.reasoning!="string"||r.reasoning.trim().length===0)&&(r.reasoning=`Executed via ${o} tool command`),r}function jG(e,t){return`Execute ${e} via ${t}`}function UG(e,t){let n=e.length+1,r=t.length+1,o=Array.from({length:n*r},()=>0);for(let i=0;i<n;i++)o[i*r]=i;for(let i=0;i<r;i++)o[i]=i;for(let i=1;i<n;i++)for(let s=1;s<r;s++){let a=e[i-1]===t[s-1]?0:1;o[i*r+s]=Math.min(o[(i-1)*r+s]+1,o[i*r+s-1]+1,o[(i-1)*r+s-1]+a)}return o[n*r-1]}function $G(e,t){let n=e.toLowerCase(),r,o=Number.POSITIVE_INFINITY,i,s=Number.POSITIVE_INFINITY;for(let a of t){let c=a.toLowerCase(),l=UG(n,c);if(c.includes(n)||n.includes(c)){l<o&&(r=a,o=l);continue}if(n.length<3)continue;let d=Math.max(2,Math.floor(a.length/3));l<=d&&l<s&&(i=a,s=l)}return r??i}var QG={npmSearch:{name:"packageName"},lspGetSemantics:{op:"type",line:"lineHint",path:"uri",itemsPerPage:"pageSize",limit:""},localGetFileContent:{filePath:"path"},localSearch:{itemsPerPage:"pageSize",maxResults:["maxFiles","limit","pageSize"],keywords:"searchText",language:"langType",regexType:"regex",sortBy:"sort",sortReverse:"reverse"},ghGetFileContent:{matchStringContextLines:"contextLines",minified:"minify"},ghSearch:{itemsPerPage:"pageSize",limit:"",topicsToSearch:"topics"},localAnalyzeGraph:{itemsPerPage:"pageSize",maxResults:"limit",maxDepth:"depth"}};function WG(e,t,n,r={}){if(!Ft(t))throw new un("Tool input must be a JSON object or an array of objects.");let o=new Set([...Hu(e).filter(a=>!a.name.includes(".")).map(a=>a.name),...vA(St(e)?.schema),...yi]),i={},s=[];for(let[a,c]of Object.entries(t)){if(o.has(a)){i[a]=c;continue}s.push(a)}if(s.length>0&&o.size>0&&(r.onUnknownFields?.(s,n),r.rejectUnknownFields===!0)){let a=bA(e,t),c=s.map(l=>{let d=QG[e]?.[l],p=(Array.isArray(d)?d:d===void 0?[]:[d]).find(f=>a.has(f))??$G(l,a);return p?`'${l}' \u2192 did you mean '${p}'?`:""}).filter(Boolean);throw new un(`Unknown field(s): ${s.join(", ")}`,[...c,`Remove unknown field(s) from query ${n+1}: ${s.join(", ")}`,`Run tools ${e} --scheme to see valid fields.`])}return i}function vA(e){if(!e)return[];if(e instanceof _A.ZodObject)return Object.keys(e.shape);let t=e.options,n=e instanceof _A.ZodUnion?e.options:Array.isArray(t)?t:[];return n.length>0?[...new Set(n.flatMap(r=>vA(r)))]:[]}Xn();Kc();Qa();pn();import{getConfigSync as JG}from"@octocodeai/config";hs();import{ContentSanitizer as KG}from"@octocodeai/octocode-engine/security";function IA(e){if(e instanceof Error){let t=e.code;return{name:e.name||"Error",message:e.message||String(e),code:typeof t=="string"?t:void 0}}if(typeof e=="string")return{name:"Error",message:e};if(e&&typeof e=="object"){let t=e,n=typeof t.message=="string"?t.message:VG(t)??"Unknown error",r=typeof t.name=="string"?t.name:"Error",o=typeof t.code=="string"?t.code:void 0;return{name:r,message:n,code:o}}return{name:"Error",message:e===void 0?"undefined":String(e)}}function VG(e){try{return JSON.stringify(e)}catch{return}}var XG="[content withheld: sanitization failed \u2014 retry the call; if this persists, report it]";function gg(e,t="full"){let n=t==="structured"&&e.structuredContent!=null&&!e.isError?{...e,content:[]}:e;if(n.structuredContent)try{n={...n,structuredContent:Mn(n.structuredContent)}}catch{n={...n,structuredContent:{results:[],status:"error",code:"SANITIZATION_FAILED",error:"structuredContent withheld: sanitization failed \u2014 retry the call; if this persists, report it"},isError:!0}}return n.content?.length&&(n={...n,content:n.content.map(r=>{if(r.type==="text"&&"text"in r&&typeof r.text=="string")try{let{content:o}=KG.sanitizeContent(r.text);return{...r,text:o}}catch{return{...r,text:XG}}return r})}),n}var YG="TOOL_CALLBACK_EXCEPTION";function yg(e,t){let n=IA(t),r={content:[{type:"text",text:`error: tool "${e}" threw an exception
|
|
48
|
+
message: ${n.message}`}],structuredContent:{results:[],status:"error",tool:e,code:YG,error:{name:n.name,message:n.message,code:n.code}},isError:!0};try{return gg(r)}catch{return r}}var zu=null,ju=null,Uu=null,ZG=Hy;function qG(e){let t=e;return n=>t(n)}function eB(e){let{direct:t}=e;return{name:e.name,title:e.title,description:e.description,schema:t.schema,inputSchema:t.inputSchema,execute:qG(t.executionFn),security:t.security,isLocal:e.isLocal,isDefault:e.isDefault,isClone:e.isClone,requiresServerRuntime:t.requiresServerRuntime,requiresProviders:t.requiresProviders,timeoutMs:t.timeoutMs}}var tB=lA.map(eB);function nB(e){return tB.find(t=>t.name===e)}async function rB(e,t,n){try{let r=nB(e);if(!r)throw new Error(`Unknown tool: ${e}`);let o=oB(r,t);return sB(r),await iB(r),await aB(r,o,n?.resultProjection)}catch(r){return yg(e,r)}}function oB(e,t){let n=e.inputSchema.safeParse(t);if(!n.success)throw n.error;return n.data}async function iB(e){e.requiresServerRuntime||(Uu||(Uu=uo(Kt()).then(()=>{}).catch(t=>{throw Uu=null,t})),await Uu),e.requiresServerRuntime&&(zu||(zu=ZG().catch(t=>{throw zu=null,t})),await zu),e.requiresProviders&&(ju||(ju=qR().then(()=>{}).catch(t=>{throw ju=null,t})),await ju)}function sB(e){let t=JG(),n=t.tools.enabled??[],r=t.tools.disabled??[];if(e.isLocal&&!t.local.enabled){let o=new Error(`Tool "${e.name}" requires local tools. Set ENABLE_LOCAL=true to use it.`);throw o.code="localToolsDisabled",o}if(e.isClone&&!t.local.enableClone){let o=new Error(`Tool "${e.name}" requires clone support. Set ENABLE_CLONE=true to use it.`);throw o.code="cloneDisabled",o}if(n.length>0&&!n.includes(e.name)){let o=new Error(`Tool "${e.name}" is outside the TOOLS_TO_RUN allowlist.`);throw o.code="toolNotEnabled",o}if(!e.isDefault&&!n.includes(e.name)){let o=new Error(`Tool "${e.name}" is opt-in. Add it to TOOLS_TO_RUN or .octocoderc tools.enabled.`);throw o.code="toolNotEnabled",o}if(n.length===0&&r.includes(e.name)){let o=new Error(`Tool "${e.name}" is disabled by DISABLE_TOOLS.`);throw o.code="toolDisabled",o}}async function aB(e,t,n){try{let r=e.security==="remote"?await cB(e,t):await lB(e,t);return gg(r,n)}catch(r){return yg(e.name,r)}}async function cB(e,t){return wg(e.name,async(r,o)=>e.execute({...r,authInfo:o.authInfo,sessionId:o.sessionId,signal:o.signal}),{timeoutMs:e.timeoutMs})(t)}async function lB(e,t){return Pg(e.execute,e.name,{timeoutMs:e.timeoutMs})(t)}he();Be();var Gne={success:"\u2705",empty:"\u{1F4ED}",error:"\u274C",partial:"\u26A0\uFE0F",searching:"\u{1F50D}",loading:"\u23F3",info:"\u2139\uFE0F",file:"\u{1F4C4}",folder:"\u{1F4C1}",page:"\u{1F4C3}",definition:"\u{1F3AF}",reference:"\u{1F517}",call:"\u{1F4DE}"};xf();function zne(e,t){if(!e&&!t)return 0;if(!e)return 1;if(!t)return-1;let n=Date.parse(e),r=Date.parse(t);return Number.isNaN(n)&&Number.isNaN(r)?0:Number.isNaN(n)?1:Number.isNaN(r)?-1:r-n}Zo();Ir();Pm();yh();import{getConfigSync as OA}from"@octocodeai/config";function $ne(){return process.env.VSCODE_PID||process.env.VSCODE_IPC_HOOK?"vscode":process.env.CURSOR_CHANNEL||process.env.CURSOR_TRACE_ID?"cursor":"standalone"}function Qne(){try{return OA().local.enabled}catch{return!1}}function Wne(){try{if(!OA().local.enabled)return"Local tools are disabled (ENABLE_LOCAL=false). MCP LSP tools are unavailable."}catch{}return null}Au();bs();import{validateCommand as uB}from"@octocodeai/octocode-engine/commandValidator";async function Yne(e,t=[],n={}){let r=uB(e,t);if(!r.isValid)throw new Error(`Command validation failed: ${r.error||"Command not allowed"}`);let o=Zc(t);if(!o.valid)throw new Error(`Argument validation failed: ${o.error||"Invalid arguments"}`);let{timeout:i=3e4,cwd:s,env:a,maxOutputSize:c=10*1024*1024,tolerateOutputLimit:l=!1}=n,d=await Hr(e,t,{timeout:i,cwd:s,env:a,maxOutputSize:c});if(d.outputLimitExceeded&&l)return{success:!0,code:d.exitCode,stdout:d.stdout,stderr:d.stderr,truncated:!0};if(d.error)throw d.error;return{success:d.success,code:d.exitCode,stdout:d.stdout,stderr:d.stderr}}ys();bs();ad();Us();nn();Oe();Ve();Ki();import{DISCOVERY_IGNORED_FILE_EXTENSIONS as Xie,DISCOVERY_IGNORED_FILE_NAMES as Yie,DISCOVERY_IGNORED_FOLDER_NAMES as Jie,getDiscoveryExtension as Zie,shouldIgnoreDiscoveryDir as qie,shouldIgnoreDiscoveryFile as ese}from"@octocodeai/octocode-engine/security";ac();Ki();co();function tre(){nt.flushAll(),So.flushAll(),Ct.clear(),Re.hits=0,Re.misses=0,Re.sets=0,Re.totalKeys=0,Re.lastReset=new Date,Ly()}function br(e){let t=nt.keys(),n=0;for(let r of t){let i=r.match(/^v\d+-([^:]+):/)?.[1];!i||!i.startsWith(e)||nt.del(r)>0&&n++}return n>0&&(Re.totalKeys=nt.keys().length),n}function nre(){return br("local-")}function rre(){return br("lsp-")}function ore(){let e=0;return e+=br("gh-api-"),e+=br("bb-api-"),e+=br("gh-repo-"),e+=br("bb-repo-"),e+=br("github-user"),e+=br("npm-search"),So.flushAll(),e}function ire(){let e=Re.hits+Re.misses,t=Ay();return{...Re,hitRate:e>0?Re.hits/e*100:0,cacheSize:nt.keys().length,diskHits:t.hits,diskMisses:t.misses,diskSets:t.sets,diskErrors:t.errors,diskEvictions:t.evictions}}co();var are=5;var bi=new Map,Rg=5,ma=3e4;function fa(e){try{return new URL(e).host||e}catch{return e}}var bg=class extends Error{retryable=!1;host;retryAfterMs;constructor(t,n){super(`Circuit open for ${t}: too many recent failures \u2014 failing fast, retry in ~${Math.ceil(n/1e3)}s.`),this.name="CircuitOpenError",this.host=t,this.retryAfterMs=n}};function FA(e,t=Date.now()){let n=bi.get(fa(e));if(!(!n||n.state==="closed")&&n.state==="open"){let r=t-n.openedAt;if(r<ma)throw new bg(fa(e),ma-r);n.state="half-open"}}function Sg(e){let t=bi.get(fa(e));t&&(t.failures=0,t.state="closed")}function MA(e,t=Date.now()){let n=fa(e),r=bi.get(n)??{failures:0,state:"closed",openedAt:0};r.state==="half-open"?(r.state="open",r.openedAt=t):(r.failures+=1,r.failures>=Rg&&(r.state="open",r.openedAt=t)),bi.set(n,r)}function cre(){bi.clear(),Rg=5,ma=3e4}function lre(e){typeof e.failureThreshold=="number"&&(Rg=e.failureThreshold),typeof e.cooldownMs=="number"&&(ma=e.cooldownMs)}function ure(e,t=Date.now()){let n=bi.get(fa(e));return!n||n.state==="closed"?!1:n.state==="open"?t-n.openedAt<ma:!1}Ia();kt();$i();var pB=6e4;function NA(e){let t=e.get("Retry-After");if(!t)return;let n=parseInt(t,10);return isNaN(n)?void 0:n}function dB(e,t,n,r){e&&qn({limit_type:"primary",retry_after_seconds:NA(r),api_method:t,api_url:n,provider:e})}function mB(e,t,n,r,o){e.body?.cancel?.().catch(()=>{});let i=new Error(xi.FETCH_HTTP_ERROR.message(e.status,e.statusText));return i.status=e.status,i.headers=e.headers,r&&e.status!==404&&pb(r),e.status===429&&dB(o,t,n,e.headers),i.retryable=e.status===429||e.status===408||e.status>=500&&e.status<600,i}function fB(e,t,n,r){let o=Math.min(t*Math.pow(2,e-1),n);if(o+=Math.floor(Math.random()*t),r&&r.headers&&typeof r.headers.get=="function"){let i=NA(r.headers);i!==void 0&&(o=Math.min(i*1e3,n))}return o}async function gre(e,t={}){let{maxRetries:n=3,initialDelayMs:r=1e3,maxDelayMs:o=pB,headers:i={},method:s="GET",includeVersion:a=!1,signal:c,rateLimitProvider:l,packageRegistry:d}=t,u=e;if(a){let y=e.includes("?")?"&":"?";u=`${e}${y}version=${encodeURIComponent(xr)}`}let p={"User-Agent":`Octocode-MCP/${xr}`,...i},f=globalThis.fetch;if(!f)throw new Error(xi.FETCH_NOT_AVAILABLE.message);FA(u);let m,h=n+1;for(let y=1;y<=h;y++){if(c?.aborted)throw new Error("Request aborted");try{let g=await f(u,{method:s,headers:p,signal:c});if(!g.ok)throw mB(g,s,u,d,l);if(g.status===204)return Sg(u),null;let R=await g.json();return Sg(u),R}catch(g){let R=g;if(c?.aborted||g instanceof Error&&g.name==="AbortError")throw new Error("Request aborted",{cause:g});if(R&&R.retryable===!1)throw g;if(m=g instanceof Error?g:new Error(String(g)),y===h)break;let S=fB(y,r,o,R);await new Promise(C=>setTimeout(C,S))}}throw MA(u),new Error(xi.FETCH_FAILED_AFTER_RETRIES.message(h,m?.message||""))}$h();sa();Uh();oa();wc();es();Cc();Gc();Lc();import{z as Q}from"zod";var $u=Q.object({text:Q.string()}),hB=Q.object({match:Q.object({text:Q.string()}).optional(),start:Q.number(),end:Q.number()}),gB=Q.object({type:Q.literal("match"),data:Q.object({path:$u,lines:Q.object({text:Q.string()}),line_number:Q.number(),absolute_offset:Q.number(),submatches:Q.array(hB)})}),yB=Q.object({type:Q.literal("context"),data:Q.object({path:$u,lines:Q.object({text:Q.string()}),line_number:Q.number(),absolute_offset:Q.number()})}),bB=Q.object({type:Q.literal("begin"),data:Q.object({path:$u})}),RB=Q.object({type:Q.literal("end"),data:Q.object({path:$u,stats:Q.object({elapsed:Q.object({human:Q.string()}),searches:Q.number(),searches_with_match:Q.number()}).optional()})}),SB=Q.object({type:Q.literal("summary"),data:Q.object({elapsed_total:Q.object({human:Q.string()}),stats:Q.object({elapsed:Q.object({human:Q.string()}),searches:Q.number(),searches_with_match:Q.number(),bytes_searched:Q.number(),bytes_printed:Q.number(),matched_lines:Q.number(),matches:Q.number()})})}),Rre=Q.discriminatedUnion("type",[gB,yB,bB,RB,SB]);Em();ht();ue();Yc();Ss();rl();Mr();Am();lu();sp();import{securityRegistry as Fse,ContentSanitizer as Mse}from"@octocodeai/octocode-engine/security";import{maskSensitiveData as Dse}from"@octocodeai/octocode-engine/mask";import{configureSecurity as Gse}from"@octocodeai/octocode-engine/withSecurityValidation";import Si from"node:os";import DA from"node:path";var ha=Si.platform()==="win32",Cg=Si.platform()==="darwin",xg=Si.platform()==="linux",Ri=Si.homedir();function HA(){return ha?process.env.APPDATA||DA.join(Ri,"AppData","Roaming"):Ri}function GA(){return ha?process.env.LOCALAPPDATA||DA.join(Ri,"AppData","Local"):Ri}function BA(){return Cg?"macOS":ha?"Windows":xg?"Linux":Si.platform()}function zA(){return Si.arch()}Ui();import{z as Ie}from"zod";var CB=Ie.looseObject({$schema:Ie.string().optional(),version:Ie.number().int().optional(),github:Ie.record(Ie.string(),Ie.unknown()).optional(),local:Ie.record(Ie.string(),Ie.unknown()).optional(),tools:Ie.record(Ie.string(),Ie.unknown()).optional(),network:Ie.record(Ie.string(),Ie.unknown()).optional(),lsp:Ie.record(Ie.string(),Ie.unknown()).optional(),output:Ie.record(Ie.string(),Ie.unknown()).optional()});pn();Oa();import{z as Kse}from"zod";export{vB as ALL_ERROR_CODES,lA as ALL_TOOLS,IS as BulkCloneRepoLocalSchema,LE as BulkLspGetSemanticsQuerySchema,_y as CACHE_MAINTENANCE_INTERVAL_MS,Wu as CONFIG_ERRORS,gs as CORE_ALLOWED_ENV_VARS,An as CREDENTIALS_FILE,bg as CircuitOpenError,_m as CloneRepoQueryLocalSchema,Jo as CommitCompareQueryShape,Rf as CommitHistoryQueryShape,Mse as ContentSanitizer,SJ as DEFAULTS,are as DEFAULT_CIRCUIT_FAILURE_THRESHOLD,kB as DEFAULT_MATCH_SNIPPET_CHARS,Rv as DIFF_PREVIEW_MAX_LINES,yi as DIRECT_TOOL_AUTO_FILLED_FIELDS,uA as DIRECT_TOOL_CATEGORIES,mA as DIRECT_TOOL_DEFINITIONS,fA as DIRECT_TOOL_DISCOVERY_DEFINITIONS,Xie as DISCOVERY_IGNORED_FILE_EXTENSIONS,Yie as DISCOVERY_IGNORED_FILE_NAMES,Jie as DISCOVERY_IGNORED_FOLDER_NAMES,un as DirectToolInputError,Z as ERROR_CODES,De as ERROR_MESSAGES,xi as FETCH_ERRORS,Sr as FILE_OPERATION_ERRORS,HS as FileContentBulkQueryLocalSchema,PO as FileContentQueryBaseLocalSchema,ul as FileContentQueryLocalSchema,Rte as GITHUB_CLONE_REPO,hte as GITHUB_FETCH_CONTENT,Ag as GITHUB_FILE_CONTENT_DEFAULT_CHAR_LENGTH,yte as GITHUB_GET_HISTORY_ITEM,Ee as GITHUB_GET_HISTORY_ITEM_TOOL_NAME,fte as GITHUB_SEARCH,Pe as GITHUB_SEARCH_DEFAULT_LIMIT,gte as GITHUB_SEARCH_HISTORY,fe as GITHUB_SEARCH_HISTORY_TOOL_NAME,Te as GITHUB_SEARCH_MAX_LIMIT,TB as GITHUB_SEARCH_MAX_PAGES,Dt as GITHUB_SEARCH_TOOL_NAME,EB as GITHUB_STRUCTURE_DEFAULT_ENTRIES_PER_PAGE,AB as GITHUB_STRUCTURE_MAX_ENTRIES_PER_PAGE,Vc as GitHubProvider,_5 as GitHubPullRequestSearchBulkQueryLocalSchema,Ol as GitHubPullRequestSearchQueryLocalSchema,OC as GitHubSearchBulkQuerySchema,xs as GitHubSearchQuerySchema,Ri as HOME,Hl as IssueDetailQueryShape,Fs as IssueListQueryShape,mn as KEY_FILE,Cte as LOCAL_ANALYZE_GRAPH,yn as LOCAL_ANALYZE_GRAPH_TOOL_NAME,ya as LOCAL_DEFAULT_FILES_PER_PAGE,xte as LOCAL_FETCH_CONTENT,ba as LOCAL_MAX_DEPTH,LB as LOCAL_MAX_FILES_PER_PAGE,Vt as LOCAL_MAX_LIMIT,Ste as LOCAL_SEARCH,dt as LOCAL_SEARCH_TOOL_NAME,W as LOCAL_TOOL_ERROR_CODES,Lg as LOCAL_TOOL_ERROR_REGISTRY,we as LSP_GET_SEMANTICS_TOOL_NAME,wte as LSP_GET_SEMANTIC_CONTENT,sP as LocalAnalyzeGraphBulkQuerySchema,si as LocalAnalyzeGraphQuerySchema,Ux as LocalFetchContentBulkQuerySchema,Ul as LocalFetchContentQuerySchema,RT as LocalSearchBulkQuerySchema,Zs as LocalSearchQuerySchema,KA as LocalToolErrorCategory,Cu as LspGetSemanticsQuerySchema,Qk as MAX_BRANCH_CACHE_SIZE,Jr as MAX_CHAR_LENGTH,Eg as MAX_CONTEXT_LINES,Vi as MAX_DIRECTORY_FILES,Tn as MAX_MATCH_CONTENT_LENGTH,B as MAX_PAGE_NUMBER,pc as MAX_TOTAL_SIZE,_p as NETWORK_ERROR_PATTERNS,GE as NpmDeprecationOutputSchema,HE as NpmRegistrySearchSchema,OE as NpmSearchBulkQueryLocalSchema,Pu as NpmSearchQueryLocalSchema,DE as NpmViewResultSchema,Xu as OCTOCODE_DIR,ut as OCTOCODE_HOME,CB as OctocodeConfigSchema,Gk as OctokitWithThrottling,bte as PACKAGE_SEARCH,wi as PROMISE_ERRORS,NR as PROVIDER_CAPABILITIES,tS as PROXY_ENV_VARS,ga as PR_CONTENT_DEFAULT_ITEMS_PER_PAGE,Tg as PR_CONTENT_MAX_ITEMS_PER_PAGE,Ae as PUBLIC_TOOL_DESCRIPTIONS,Lm as ProviderInitializationError,Dl as PullRequestDetailQueryShape,bf as PullRequestListQueryShape,rc as RATE_LIMIT_CONFIG,vp as RATE_LIMIT_PATTERNS,zn as REPOSITORY_ERRORS,rn as RESOURCE_LIMITS,Rre as RipgrepJsonMessageSchema,ct as SEARCH_ERRORS,kT as SEMANTIC_CONTENT_TYPES,qV as SENSITIVE_ENV_VARS,mo as SESSION_FILE,WA as STARTUP_ERRORS,pe as STATIC_TOOL_NAMES,fo as STATS_FILE,Pb as STATUS_TO_ERROR_CODE,sJ as SearchCommitsBulkLocalSchema,iJ as SearchCommitsLocalSchema,oJ as SearchIssuesBulkLocalSchema,rJ as SearchIssuesLocalSchema,nJ as SearchPullRequestsBulkLocalSchema,tJ as SearchPullRequestsLocalSchema,Gne as StatusEmojis,Fo as TOOLING_ALLOWED_ENV_VARS,VA as TOOL_ERRORS,QA as TOOL_METADATA_ERRORS,N as TOOL_NAMES,Je as ToolError,lt as ToolErrors,Ci as VALIDATION_ERRORS,zte as _resetMetadataState,ub as _resetSessionState,pz as _resetTokenResolvers,uz as _setTokenResolvers,cF as applyConfiguredAllowedRoots,ld as applyContentPagination,ts as applyPagination,gd as applyPartialContentFilter,TR as applyStructurePagination,FA as assertCircuitAvailable,ee as attachRawResponseChars,Xi as baseSchemaDescriptions,c$ as buildBlockBoundaryHint,Jc as buildChildProcessEnv,Dp as buildCodeSearchQuery,F$ as buildDiffPreview,AG as buildDirectToolCommandPatterns,lne as buildDirectToolExampleQuery,CM as buildEntryPaginationHints,CA as buildExampleValue,sI as buildGitHubPullRequestsSearchParams,JS as buildGithubFetchContentFinalizer,Ud as buildIssueSearchQuery,Xh as buildPackagePagination,kv as buildPullRequestSearchCacheKey,Od as buildPullRequestSearchQuery,Hp as buildRepoSearchQuery,yA as buildScalarExampleValue,yg as buildToolErrorResult,$s as buildWalkWarnings,cv as byteSlice,Sc as byteToCharIndex,qb as charToByteIndex,bJ as checkLargeOutputSafety,k9 as checkNpmAvailability,KH as checkNpmDeprecation,UH as checkNpmRegistryReachable,gh as checkRegexSafety,J as clampedInt,fs as cleanJsonObject,dz as cleanup,lp as cleanupStaleMaterializationArtifacts,tre as clearAllCache,W1 as clearDiskCache,rre as clearLSPToolCache,nre as clearLocalToolCache,Xz as clearOctokitInstances,OV as clearProviderCache,ore as clearRemoteAPICache,uS as cloneRepo,Du as collectDisplayFields,zS as collectFlatErrors,XI as commonDirPrefix,Lh as compactLocation,JE as compactPackageRepositories,Hn as compactResolvedSymbol,zne as compareIsoDateDescending,ug as completeMetadata,xS as computeQueryTimeout,lre as configureCircuitBreaker,Gse as configureSecurity,Io as contextLinesField,t$ as convertByteMatchToChar,Ht as countLines,j as countSerializedChars,hd as createBasePRTransformation,so as createCacheMeta,ta as createCallItemKey,D as createErrorResult,Fn as createGitHubProviderError,zc as createGitHubProviderErrorFromResult,ot as createLazyProviderContext,cd as createPaginationInfo,fO as createProviderExecutionContext,ge as createRelaxedBulkQuerySchema,_o as createResponseFormat,HV as createResult,F8 as createSafeRegExp,Se as createSuccessResult,Aa as decrypt,Kg as deleteCredentials,lb as deleteSession,EG as describeSchemaConstraints,Nu as describeSchemaType,$ne as detectEnvironment,Ea as encrypt,_g as ensureClone,Ha as ensureCloneParentDir,wa as ensureHome,$n as ensureOctocodeDir,YA as ensureRepos,Ku as ensureTmp,JA as ensureTree,So as etagSoftCache,Ba as evictExpiredClones,ao as evictExpiredTrees,SM as executeAnalyzeGraph,Ce as executeBulkOperation,gO as executeCloneRepo,rB as executeDirectTool,xF as executeFetchContent,E0 as executeGitHubSearch,tD as executeLocalSearch,PH as executeLspGetSemantics,NE as executeNpmCommand,Zt as executeProviderOperation,Y2 as executeProviderOperations,SS as executeWithErrorIsolation,zt as executeWithToolBoundary,Ro as extractEtag,Pc as extractMatchingLines,Px as fallbackOnBestEffortFailure,Bx as fetchContent,td as fetchDirectoryContents,ps as fetchDirectoryContentsRecursivelyAPI,od as fetchFileContentToDisk,ud as fetchFileTimestamp,aR as fetchGitHubFileContentAPI,wQ as fetchGitHubPullRequestByNumberAPI,_d as fetchGitHubPullRequestByNumberAPIInternal,CR as fetchHistory,YO as fetchMultipleGitHubFileContents,Zp as fetchRawGitHubFileContent,gre as fetchWithRetries,cR as filterPatch,St as findDirectToolDefinition,rs as findNextBlockBoundary,eb as flushSession,tb as flushSessionSync,Qh as foldKeywords,SL as formatBytes,GV as formatCallToolResultForOutput,PA as formatDirectToolCommandPattern,Wte as formatDirectToolMetadataSchemaText,Qte as formatDirectToolSchemaText,GG as formatDirectToolValidationIssues,ai as formatFileSize,No as formatFinalizedResponse,wo as formatPRForResponse,YE as formatPackageData,Th as gatherIncomingCallsRecursive,Eh as gatherOutgoingCallsRecursive,q as generateCacheKey,yW as generatePaginationHints,Hc as generateStructurePaginationHints,Rp as getActiveProvider,Sp as getActiveProviderConfig,HA as getAppDataPath,zA as getArchitecture,eR as getByteLength,fp as getCacheMaintenanceDelayMs,My as getCacheMaintenanceMarkerPath,ire as getCacheStats,UL as getCacheTTL,Fa as getCloneBaseDir,ap as getCloneDir,Cr as getCredentials,qg as getCredentialsFilePath,_a as getCredentialsSync,Un as getDefaultOctocodeHome,bA as getDirectToolAllowedFieldNames,Vte as getDirectToolAutoFilledFields,dA as getDirectToolCategory,Kte as getDirectToolDescription,Hu as getDirectToolDisplayFields,hg as getDirectToolSchemaRelations,kA as getDirectToolSchemaVariants,Zte as getDirectToolVariantDisplayFields,Li as getDirectorySizeBytes,Zie as getDiscoveryExtension,wy as getDiskCacheEntryPath,mp as getDiskCacheRoot,Ay as getDiskCacheStats,GR as getFileContent,La as getGhCliToken,bp as getGitHubToken,GA as getLocalAppDataPath,Wne as getLspEnvironmentHint,$L as getMaxCacheSizeBytes,QL as getMaxCloneCount,Bte as getMetadataOrNull,jH as getNpmRegistryUrl,Kt as getOctocodeDir,Y as getOctokit,nb as getOrCreateSession,vr as getOutputCharLimit,Eb as getOwnerQualifier,BA as getPlatformName,cm as getProvider,me as getRawResponseChars,us as getRecursiveFetchFailureCount,YR as getRepoStructure,Er as getServerConfig,rb as getSessionId,ey as getToken,fz as getTokenSource,ty as getTokenSync,op as getTokenWithRefresh,Ma as getTreeBaseDir,vi as getTreeDir,qe as handleCatchError,ne as handleGitHubAPIError,eS as handleProviderError,Jg as hasCredentials,Zg as hasCredentialsSync,vY as hasExpensiveContentRequest,pg as hasSchemaDefault,gb as hashGitHubToken,nl as hoistSharedFields,xJ as ignoreBestEffortFailure,ib as incrementErrors,qa as incrementGitHubCacheHits,ec as incrementGitHubCacheRateLimits,ab as incrementPackageRegistryFailures,sb as incrementRateLimitByProvider,Ja as incrementRateLimits,ob as incrementToolCalls,Za as incrementToolCharSavings,Hy as initialize,qR as initializeProviders,Gte as initializeToolMetadata,Ai as invalidateCredentialsCache,XV as invokeCallbackSafely,io as isCacheHit,dy as isCacheValid,ure as isCircuitOpen,Gy as isCloneEnabled,dp as isDiskCacheEnabled,VH as isExactPackageName,vt as isGitHubAPIError,Kv as isGitHubAPISuccess,Wt as isJsonSchemaObject,xg as isLinux,mz as isLocalEnabled,Zj as isLocalTool,Cg as isMac,ns as isMidBlockCut,hn as isNoResultsSearchError,Wh as isPackageNotFoundError,dO as isProviderError,sl as isProviderSuccess,Ft as isRecord,Ti as isRefreshTokenExpired,Xv as isRepository,En as isTokenExpired,Vu as isToolError,Ete as isToolInMetadata,ha as isWindows,Oo as lineNumberField,Xg as listStoredHosts,Yg as listStoredHostsSync,Hte as loadToolContent,tC as mapCodeSearchProviderResult,eC as mapCodeSearchToolQuery,BS as mapFileContentProviderResult,GS as mapFileContentToolQuery,lx as mapPullRequestProviderResultData,cx as mapPullRequestToolQuery,fC as mapRepoSearchProviderRepositories,mC as mapRepoSearchToolQuery,CC as mapRepoStructureProviderResult,$m as mapRepoStructureToolQuery,Dse as maskSensitiveData,IA as normalizeError,is as normalizeOwnerRepo,MC as normalizePullRequestContentRequest,KE as normalizeRepoUrl,bo as normalizeResponseHeaders,wt as offsetField,oh as paginateEntries,js as parseFileSize,mt as parseGitHubProjectId,Mc as parseHasMore,et as paths,DG as prepareDirectToolInput,xne as prepareDirectToolInputFromJsonText,sR as processFileContentAPI,al as providerSupports,vb as rateLimitWarning,Fi as readCacheMeta,Ln as readCredentialsStore,ja as readDiskCache,MA as recordCircuitFailure,Sg as recordCircuitSuccess,pb as recordPackageRegistryFailure,qn as recordRateLimit,Mre as redactPath,ny as refreshAuthToken,tl as relativizeResultPaths,Bt as relaxedPageNumberField,Ga as removeCloneDir,cre as resetCircuitBreaker,Ly as resetDiskCacheStats,cb as resetSessionStats,ep as resetTokenResolution,re as resolveCacheAuthFingerprint,pt as resolveDefaultBranch,li as resolveFileAnchor,ME as resolveNpmConfigRoot,wT as resolveSymbolAnchor,tp as resolveToken,Wn as resolveTokenFull,np as resolveTokenWithRefresh,uo as runCacheMaintenanceIfDue,Yne as safeExec,Ze as safeParseOrError,gg as sanitizeCallToolResult,Mn as sanitizeStructuredContent,DR as searchCode,Ib as searchGitHubCodeAPI,SR as searchGitHubPullRequestsAPI,PR as searchGitHubReposAPI,pJ as searchMultipleGitHubCommits,uJ as searchMultipleGitHubIssues,Ml as searchMultipleGitHubPullRequests,lJ as searchMultipleGitHubPullRequestsSplit,jh as searchNpmPackage,QE as searchPackage,nG as searchPackages,BR as searchPullRequests,HR as searchRepos,Fse as securityRegistry,o$ as serializeForPagination,XC as shapePullRequestForContent,yd as shouldEnrichPullRequestFromSearch,qie as shouldIgnoreDiscoveryDir,ese as shouldIgnoreDiscoveryFile,Qne as shouldUseMCPLsp,$d as shouldUseSearchForIssues,Fd as shouldUseSearchForPRs,i$ as sliceByCharRespectLines,sd as sliceContent,xc as snapToSemanticBoundary,vte as sortDirectToolNames,nS as spawnCheckSuccess,i2 as spawnCollectStdout,Hr as spawnWithTimeout,os as splitLines,ez as startCacheGC,tz as stopCacheGC,rp as storeCredentials,rh as summarizeEntries,Q1 as sweepDiskCacheIfDue,Ey as sweepDiskCacheNow,Ch as toLegacyTextQuery,kg as toToolError,qv as transformCodeSearchResult,nI as transformFileContentResult,as as transformPullRequestItemFromREST,kd as transformPullRequestItemFromSearch,iI as transformPullRequestResult,eI as transformRepoSearchResult,mI as transformRepoStructureResult,lR as trimDiffContext,ro as tryRecoverStaleCloneLock,_t as updateSessionStats,va as updateToken,Zc as validateArgs,Tt as validateToolPath,Yd as viewGitHubRepositoryStructureAPI,Pg as withBasicSecurityValidation,oe as withDataCache,mc as withDataCacheConditional,wg as withSecurityValidation,py as writeCacheMeta,no as writeCloneLockMeta,Ni as writeDiskCache,Kse as z};
|