@octocodeai/octocode-tools-core 16.3.0 → 16.6.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 +564 -0
- package/dist/config.d.ts +7 -0
- package/dist/direct.js +39 -41
- package/dist/errors/pathUtils.d.ts +1 -1
- package/dist/github/directoryFetch.d.ts +2 -1
- package/dist/github/githubAPI.d.ts +32 -1
- package/dist/github/history.d.ts +3 -0
- package/dist/github/prTransformation.d.ts +1 -1
- package/dist/github/repoStructureRecursive.d.ts +6 -0
- package/dist/index.d.ts +16 -30
- package/dist/index.js +44 -46
- package/dist/oql/adapters/compile.d.ts +25 -0
- package/dist/oql/adapters/github.d.ts +3 -0
- package/dist/oql/adapters/local.d.ts +7 -0
- package/dist/oql/adapters/materialize.d.ts +11 -0
- package/dist/oql/adapters/pagination.d.ts +21 -0
- package/dist/oql/adapters/researchTargets.d.ts +50 -0
- package/dist/oql/adapters/resultMap.d.ts +20 -0
- package/dist/oql/adapters/ruleYaml.d.ts +11 -0
- package/dist/oql/adapters/runner.d.ts +14 -0
- package/dist/oql/adapters/v2.d.ts +32 -0
- package/dist/oql/capabilities.d.ts +31 -0
- package/dist/oql/defaults.d.ts +26 -0
- package/dist/oql/diagnostics.d.ts +25 -0
- package/dist/oql/diffLanes.d.ts +29 -0
- package/dist/oql/envelope.d.ts +19 -0
- package/dist/oql/features.d.ts +7 -0
- package/dist/oql/index.d.ts +26 -0
- package/dist/oql/index.js +49 -0
- package/dist/oql/normalize.d.ts +5 -0
- package/dist/oql/planner.d.ts +7 -0
- package/dist/oql/research/analyze.d.ts +134 -0
- package/dist/oql/research/packets.d.ts +80 -0
- package/dist/oql/run.d.ts +32 -0
- package/dist/oql/schema.d.ts +1018 -0
- package/dist/oql/schemeText.d.ts +138 -0
- package/dist/oql/shorthand.d.ts +177 -0
- package/dist/oql/targetParams.d.ts +20 -0
- package/dist/oql/transformers/contract.d.ts +19 -0
- package/dist/oql/transformers/github/code.d.ts +17 -0
- package/dist/oql/transformers/github/common.d.ts +8 -0
- package/dist/oql/transformers/language.d.ts +1 -0
- package/dist/oql/transformers/registry.d.ts +16 -0
- package/dist/oql/transformers/types.d.ts +11 -0
- package/dist/oql/types.d.ts +633 -0
- package/dist/oql/v2params.d.ts +22 -0
- package/dist/providers/providerQueries.d.ts +9 -0
- package/dist/providers/providerResults.d.ts +2 -0
- package/dist/providers/types.d.ts +1 -1
- package/dist/schema.d.ts +13 -0
- package/dist/schema.js +8 -0
- package/dist/scheme/coreSchemas.d.ts +5 -5
- package/dist/scheme/fields.d.ts +6 -6
- package/dist/serverConfig.d.ts +1 -2
- package/dist/session.d.ts +2 -24
- package/dist/shared/config/defaults.d.ts +14 -0
- package/dist/shared/config/index.d.ts +9 -0
- package/dist/shared/config/index.js +9 -0
- package/dist/shared/config/loader.d.ts +7 -0
- package/dist/shared/config/resolver.d.ts +2 -0
- package/dist/shared/config/resolverCache.d.ts +12 -0
- package/dist/shared/config/resolverSections.d.ts +10 -0
- package/dist/shared/config/runtimeSurface.d.ts +21 -0
- package/dist/shared/config/schemas.d.ts +11 -0
- package/dist/shared/config/types.d.ts +92 -0
- package/dist/shared/config/validator.d.ts +2 -0
- package/dist/shared/credentials/constants.d.ts +2 -0
- package/dist/shared/credentials/credentialCache.d.ts +13 -0
- package/dist/shared/credentials/credentialEncryption.d.ts +10 -0
- package/dist/shared/credentials/credentialUtils.d.ts +4 -0
- package/dist/shared/credentials/envTokens.d.ts +9 -0
- package/dist/shared/credentials/ghCli.d.ts +1 -0
- package/dist/shared/credentials/index.d.ts +3 -0
- package/dist/shared/credentials/index.js +8 -0
- package/dist/shared/credentials/schemas.d.ts +22 -0
- package/dist/shared/credentials/storage.d.ts +30 -0
- package/dist/shared/credentials/testing.d.ts +2 -0
- package/dist/shared/credentials/testing.js +8 -0
- package/dist/shared/credentials/tokenRefresh.d.ts +24 -0
- package/dist/shared/credentials/tokenResolution.d.ts +30 -0
- package/dist/shared/credentials/types.d.ts +28 -0
- package/dist/shared/fs-utils.d.ts +2 -0
- package/dist/shared/fs-utils.js +8 -0
- package/dist/shared/index.d.ts +6 -0
- package/dist/shared/languageSelectors.d.ts +23 -0
- package/dist/shared/paths.d.ts +31 -0
- package/dist/shared/paths.js +8 -0
- package/dist/shared/platform/index.d.ts +1 -0
- package/dist/shared/platform/index.js +8 -0
- package/dist/shared/platform/platform.d.ts +8 -0
- package/dist/shared/session/index.d.ts +5 -0
- package/dist/shared/session/index.js +8 -0
- package/dist/shared/session/schemas.d.ts +103 -0
- package/dist/shared/session/sessionCache.d.ts +9 -0
- package/dist/shared/session/sessionDiskIO.d.ts +6 -0
- package/dist/shared/session/statsDefaults.d.ts +4 -0
- package/dist/shared/session/storage.d.ts +20 -0
- package/dist/shared/session/types.d.ts +53 -0
- package/dist/tools/directToolCatalog.d.ts +15 -56
- package/dist/tools/directToolCatalog.exec.d.ts +11 -0
- package/dist/tools/directToolCatalog.meta.d.ts +82 -0
- package/dist/tools/github_clone_repo/cache.d.ts +5 -1
- package/dist/tools/github_clone_repo/scheme.d.ts +56 -9
- package/dist/tools/github_clone_repo/types.d.ts +3 -1
- package/dist/tools/github_fetch_content/scheme.d.ts +112 -4
- package/dist/tools/github_fetch_content/types.d.ts +39 -0
- package/dist/tools/github_search_code/scheme.d.ts +6 -6
- package/dist/tools/github_search_pull_requests/contentResponse.d.ts +0 -1
- package/dist/tools/github_search_pull_requests/execution.d.ts +1 -11
- package/dist/tools/github_search_pull_requests/scheme.d.ts +6 -2
- package/dist/tools/github_search_repos/scheme.d.ts +7 -6
- package/dist/tools/github_view_repo_structure/execution.d.ts +0 -9
- package/dist/tools/github_view_repo_structure/scheme.d.ts +10 -6
- package/dist/tools/local_binary_inspect/archiveOps.d.ts +2 -0
- package/dist/tools/local_binary_inspect/binaryInspector.d.ts +48 -7
- package/dist/tools/local_binary_inspect/binaryOps.d.ts +16 -7
- package/dist/tools/local_binary_inspect/scheme.d.ts +10 -7
- package/dist/tools/local_fetch_content/scheme.d.ts +2 -2
- package/dist/tools/local_find_files/scheme.d.ts +2 -2
- package/dist/tools/local_ripgrep/lspBoost.d.ts +54 -0
- package/dist/tools/local_ripgrep/rankingProfile.d.ts +113 -0
- package/dist/tools/local_ripgrep/ripgrepResultBuilder.d.ts +10 -1
- package/dist/tools/local_ripgrep/scheme.d.ts +29 -4
- package/dist/tools/local_ripgrep/structuralSearch.d.ts +3 -4
- package/dist/tools/local_view_structure/scheme.d.ts +2 -2
- package/dist/tools/local_view_structure/structureFilters.d.ts +1 -3
- package/dist/tools/local_view_structure/structureResponse.d.ts +1 -0
- package/dist/tools/lsp/semantic_content/scheme.d.ts +174 -10
- package/dist/tools/lsp/shared/callHierarchyTraversal.d.ts +2 -2
- package/dist/tools/lsp/shared/resolveSymbolAnchor.d.ts +2 -2
- package/dist/tools/lsp/shared/semanticTypes.d.ts +36 -6
- package/dist/tools/oql_search/execution.d.ts +7 -0
- package/dist/tools/package_search/execution.d.ts +10 -0
- package/dist/tools/package_search/scheme.d.ts +9 -7
- package/dist/tools/providerMappers.d.ts +24 -5
- package/dist/tools/toolConfig.d.ts +1 -0
- package/dist/tools/toolMetadata/proxies.d.ts +0 -6
- package/dist/tools/toolNames.d.ts +2 -0
- package/dist/tools/utils.d.ts +3 -7
- package/dist/types/bulk.d.ts +0 -2
- package/dist/types/execution.d.ts +1 -2
- package/dist/types/server.d.ts +0 -1
- package/dist/types/session.d.ts +0 -19
- package/dist/types/toolResults.d.ts +2 -3
- package/dist/utils/contextUtils.d.ts +49 -2
- package/dist/utils/core/lines.d.ts +16 -0
- package/dist/utils/core/types.d.ts +12 -1
- package/dist/utils/file/filters.d.ts +2 -11
- package/dist/utils/markdownOutline.d.ts +10 -0
- package/dist/utils/parsers/diff.d.ts +18 -0
- package/dist/utils/response/error.d.ts +38 -4
- package/dist/utils/response/groupedFinalizer.d.ts +0 -25
- package/package.json +51 -14
- package/dist/commands/BaseCommandBuilder.d.ts +0 -14
- package/dist/commands/FindCommandBuilder.d.ts +0 -23
- package/dist/commands/LsCommandBuilder.d.ts +0 -15
- package/dist/commands/RipgrepCommandBuilder.d.ts +0 -27
- package/dist/hints/dynamic.d.ts +0 -6
- package/dist/hints/index.d.ts +0 -2
- package/dist/hints/types.d.ts +0 -1
- package/dist/tools/github_clone_repo/hints.d.ts +0 -2
- package/dist/tools/github_fetch_content/hints.d.ts +0 -2
- package/dist/tools/github_search_code/hints.d.ts +0 -2
- package/dist/tools/github_search_pull_requests/hints.d.ts +0 -2
- package/dist/tools/github_search_repos/hints.d.ts +0 -2
- package/dist/tools/github_view_repo_structure/hints.d.ts +0 -2
- package/dist/tools/local_fetch_content/hints.d.ts +0 -2
- package/dist/tools/local_find_files/hints.d.ts +0 -2
- package/dist/tools/local_ripgrep/grepFallbackExecutor.d.ts +0 -3
- package/dist/tools/local_ripgrep/hints.d.ts +0 -2
- package/dist/tools/local_ripgrep/ripgrepParser.d.ts +0 -9
- package/dist/tools/local_view_structure/hints.d.ts +0 -2
- package/dist/tools/local_view_structure/structureParser.d.ts +0 -3
- package/dist/tools/local_view_structure/structureWalker.d.ts +0 -24
- package/dist/tools/lsp/semantic_content/hints.d.ts +0 -4
- package/dist/tools/package_search/hints.d.ts +0 -2
- package/dist/types/metadata.d.ts +0 -69
- package/dist/utils/exec/commandAvailability.d.ts +0 -19
- package/dist/utils/exec/ripgrepBinary.d.ts +0 -3
- package/dist/utils/pagination/outputSizeLimit.d.ts +0 -16
- package/dist/utils/response/structuredPagination.d.ts +0 -9
package/dist/index.js
CHANGED
|
@@ -5,60 +5,58 @@ 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
|
-
var
|
|
9
|
-
`)[0]??"").trim();if(r&&Ze(r))return r}}catch{}return null}function Vi(){let e=process.platform,t=process.arch;return e==="darwin"&&t==="arm64"?"darwin-arm64":e==="darwin"&&t==="x64"?"darwin-x64":e==="linux"&&t==="arm64"?"linux-arm64":e==="linux"&&t==="x64"?"linux-x64":e==="win32"&&t==="x64"?"windows-x64":null}var In=class extends Ln{constructor(){super(On()),this.addFlag("--no-config")}simple(t,n){return this.addFlag("-n"),this.addFlag("--column"),this.addFlag("-S"),this.addOption("--color","never"),this.addOption("--sort","path"),this.addArg("--"),this.addArg(t),this.addArg(n),this}filesOnly(){return this.addFlag("-l"),this}context(t){return this.addOption("-C",t),this}include(t){return this.addOption("-g",t),this}exclude(t){return this.addOption("-g",`!${t}`),this}excludeDir(t){return this.addOption("-g",`!${t}/`),this}type(t){return this.addOption("-t",t),this}fixedString(){return this.addFlag("-F"),this}perlRegex(){return this.addFlag("-P"),this}maxMatches(t){return this.addOption("-m",t),this}fromQuery(t){return this._applyMatchFlags(t),this._applyContextFlags(t),this.addFlag("-n"),this.addFlag("--column"),this._applyOutputModeFlags(t),this._applyFilterFlags(t),this._isPlainTextOutput(t)||this.addFlag("--json"),this._applyExecutionFlags(),this._applySortFlags(t),this._applyDiagnosticFlags(t),this.addArg("--"),this.addArg(t.keywords??""),this.addArg(t.path),this}_isPlainTextOutput(t){return!!(t.filesOnly||t.filesWithoutMatch||t.countLinesPerFile||t.countMatchesPerFile)}_applyMatchFlags(t){t.fixedString?this.addFlag("-F"):t.perlRegex&&this.addFlag("-P"),t.caseSensitive?this.addFlag("-s"):t.caseInsensitive?this.addFlag("-i"):this.addFlag("-S"),t.wholeWord&&this.addFlag("-w"),t.invertMatch&&this.addFlag("-v")}_applyContextFlags(t){t.contextLines!==void 0&&t.contextLines>0&&this.addOption("-C",t.contextLines)}_applyOutputModeFlags(t){t.filesOnly?this.addFlag("-l"):t.filesWithoutMatch?this.addFlag("--files-without-match"):t.countMatchesPerFile?this.addFlag("--count-matches"):t.countLinesPerFile&&this.addFlag("-c")}_applyFilterFlags(t){if(t.langType&&this.addOption("-t",t.langType),t.include&&t.include.length>0){let n=this._consolidateGlobs(t.include);for(let r of n)this.addOption("-g",r)}if(t.exclude&&t.exclude.length>0)for(let n of t.exclude)this.addOption("-g",`!${n}`);if(t.excludeDir&&t.excludeDir.length>0)for(let n of t.excludeDir)this.addOption("-g",`!${n}/`);t.noIgnore&&this.addFlag("--no-ignore"),t.hidden&&this.addFlag("--hidden"),t.multiline&&(this.addFlag("-U"),t.multilineDotall&&this.addFlag("--multiline-dotall"))}_applyExecutionFlags(){this.addOption("-j",4)}_applySortFlags(t){let n=t.sort||"path";t.sortReverse?(this.clearSortOption(),this.addOption("--sortr",n)):(this.clearSortrOption(),this.addOption("--sort",n))}_applyDiagnosticFlags(t){this.addOption("--color","never")}_consolidateGlobs(t){let n=/^\*\.([a-zA-Z0-9]+)$/,r=[],o=[];for(let s of t){let a=s.match(n);a&&a[1]?r.push(a[1]):o.push(s)}let i=[];return r.length>1?i.push(`*.{${r.join(",")}}`):r.length===1&&i.push(`*.${r[0]}`),i.push(...o),i}clearSortOption(){let t=this.args.indexOf("--sort");t!==-1&&t<this.args.length-1&&this.args.splice(t,2)}clearSortrOption(){let t=this.args.indexOf("--sortr");t!==-1&&t<this.args.length-1&&this.args.splice(t,2)}};var De=30,me=100,WC=10,KC=100,Wi=200,bt=20,Ki=100,Yi=20,kn=50,It=1e4,kt=20,vn=1e3,Xi=100,vt=5e4,Ji=8e3,Fn=1e5;var Qr={NOT_INITIALIZED:{code:"CONFIG_NOT_INITIALIZED",message:"Configuration not initialized. Call initialize() and await its completion before calling getServerConfig()."}},at={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"}},ct={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})`}},jd={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"}},Ae={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}`}},We={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"}},ne={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}`}},Vd={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}`}},lt={TIMEOUT:{code:"PROMISE_TIMEOUT",message:(e,t)=>`Promise ${e} timed out after ${t}ms`},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"}},Mn={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}`}},XC={...Qr,...at,...ct,...jd,...Ae,...We,...ne,...Vd,...lt,...Mn};var B={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"},Wd=(i=>(i.FILE_SYSTEM="FILE_SYSTEM",i.VALIDATION="VALIDATION",i.SEARCH="SEARCH",i.PAGINATION="PAGINATION",i.EXECUTION="EXECUTION",i))(Wd||{}),Zi={[B.PATH_VALIDATION_FAILED]:{code:B.PATH_VALIDATION_FAILED,category:"VALIDATION",description:"Path validation failed - invalid or unsafe path",recoverability:"user-action-required"},[B.FILE_ACCESS_FAILED]:{code:B.FILE_ACCESS_FAILED,category:"FILE_SYSTEM",description:"Cannot access file - may not exist or lack permissions",recoverability:"unrecoverable"},[B.FILE_READ_FAILED]:{code:B.FILE_READ_FAILED,category:"FILE_SYSTEM",description:"Failed to read file contents",recoverability:"unrecoverable"},[B.FILE_TOO_LARGE]:{code:B.FILE_TOO_LARGE,category:"FILE_SYSTEM",description:"File exceeds size limits for operation",recoverability:"user-action-required"},[B.BINARY_FILE_UNSUPPORTED]:{code:B.BINARY_FILE_UNSUPPORTED,category:"FILE_SYSTEM",description:"Binary file is not supported by text content reader",recoverability:"user-action-required"},[B.NO_MATCHES]:{code:B.NO_MATCHES,category:"SEARCH",description:"Search pattern found no matches",recoverability:"user-action-required"},[B.OUTPUT_TOO_LARGE]:{code:B.OUTPUT_TOO_LARGE,category:"PAGINATION",description:"Output exceeds size limits",recoverability:"user-action-required"},[B.COMMAND_NOT_AVAILABLE]:{code:B.COMMAND_NOT_AVAILABLE,category:"EXECUTION",description:"Required CLI command is not installed or not in PATH",recoverability:"user-action-required"},[B.COMMAND_EXECUTION_FAILED]:{code:B.COMMAND_EXECUTION_FAILED,category:"EXECUTION",description:"System command execution failed",recoverability:"unrecoverable"},[B.COMMAND_TIMEOUT]:{code:B.COMMAND_TIMEOUT,category:"EXECUTION",description:"Command execution timed out",recoverability:"user-action-required"},[B.TOOL_EXECUTION_FAILED]:{code:B.TOOL_EXECUTION_FAILED,category:"EXECUTION",description:"Generic tool execution failure",recoverability:"unrecoverable"}};var Pe=class e extends Error{errorCode;category;recoverability;context;constructor(t,n,r,o){let i=Zi[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}
|
|
10
|
-
Caused by: ${o.stack}`),Object.setPrototypeOf(this,e.prototype)}isRecoverable(){return this.recoverability==="recoverable"}requiresUserAction(){return this.recoverability==="user-action-required"}toJSON(){return{name:this.name,errorCode:this.errorCode,category:this.category,message:this.message,recoverability:this.recoverability,context:this.context,stack:this.stack}}};function jr(e){return e instanceof Pe}function qi(e,t=B.TOOL_EXECUTION_FAILED,n){if(jr(e))return e;if(e instanceof Error)return new Pe(t,e.message,n,e);let r=String(e);return new Pe(t,r,n)}import{redactPath as nn}from"octocode-security/pathUtils";var Fe={pathValidationFailed:(e,t,n)=>new Pe(B.PATH_VALIDATION_FAILED,t||`Path validation failed: ${nn(e,n)}`,{path:e}),fileAccessFailed:(e,t,n)=>{let r=nn(e,n),o=`Cannot access file: ${r}`,i=t?.code;return i==="ENOENT"?o=`File not found: ${r}. Verify the path exists using localFindFiles.`:i==="EACCES"?o=`Permission denied: ${r}. Check file permissions.`:i==="EISDIR"?o=`Path is a directory: ${r}. Use localViewStructure instead.`:i==="ENOTDIR"?o=`Invalid path: ${r}. A component of the path is not a directory.`:i==="ENAMETOOLONG"&&(o=`Path too long: ${r}`),new Pe(B.FILE_ACCESS_FAILED,o,{path:e,errorCode:i},t)},fileReadFailed:(e,t,n)=>new Pe(B.FILE_READ_FAILED,`Failed to read file: ${nn(e,n)}`,{path:e,errorCode:t?.code},t),fileTooLarge:(e,t,n)=>new Pe(B.FILE_TOO_LARGE,(()=>{let r=o=>Number.isInteger(o)?`${o}KB`:`${o.toFixed(1)}KB`;return`File too large: ${r(t)} (limit: ${r(n)})`})(),{path:e,sizeKB:t,limitKB:n}),binaryFileUnsupported:e=>new Pe(B.BINARY_FILE_UNSUPPORTED,`Binary file unsupported: ${nn(e)}`,{path:e}),outputTooLarge:(e,t)=>new Pe(B.OUTPUT_TOO_LARGE,`Output too large: ${e} (limit: ${t})`,{size:e,limit:t}),commandNotAvailable:(e,t)=>new Pe(B.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 Pe(B.COMMAND_EXECUTION_FAILED,n?`Command '${e}' failed: ${n}`:`Command execution failed: ${e}`,{command:e,stderr:n},t),toolExecutionFailed:(e,t)=>new Pe(B.TOOL_EXECUTION_FAILED,`Tool execution failed: ${e}`,{toolName:e},t)};import{Octokit as ip}from"octokit";import{throttling as sp}from"@octokit/plugin-throttling";import{createHash as ap}from"crypto";import{resolveTokenFull as es,getConfigSync as ts,invalidateConfigCache as Yd}from"octocode-shared";var qe="16.2.0";import{maskSensitiveData as Xd}from"octocode-security/mask";var St=null,Ft=null,Vr=es;function mP(e){e.resolveTokenFull&&(Vr=e.resolveTokenFull)}function fP(){Vr=es}var Jd=new Set(["env:OCTOCODE_TOKEN","env:GH_TOKEN","env:GITHUB_TOKEN","octocode-storage","gh-cli","none"]);async function Wr(){try{let e=await Vr({hostname:"github.com"});if(e?.token){let t=e.source??"none";return{token:e.token,source:Jd.has(t)?t:"none"}}return{token:null,source:"none"}}catch{return{token:null,source:"none"}}}async function ns(){if(St!==null)return;if(Ft!==null)return Ft;let e=(async()=>{let t=ts(),n=await Wr();St={version:qe,githubApiUrl:t.github.apiUrl,toolsToRun:t.tools.enabled??void 0,enableTools:t.tools.enableAdditional??void 0,disableTools:t.tools.disabled??void 0,timeout:t.network.timeout,maxRetries:t.network.maxRetries,loggingEnabled:t.telemetry.logging,enableLocal:t.local.enabled,enableClone:t.local.enableClone,outputFormat:t.output.format,tokenSource:n.source}})();Ft=e;try{await e}catch(t){throw Ft===e&&(St=null,Ft=null),t}}function hP(){St=null,Ft=null,Yd()}function Nn(){if(!St){let e=Xd(Qr.NOT_INITIALIZED.message);throw new Error(e)}return St}async function rs(){return(await Wr()).token}function gP(){return Nn().enableLocal}function Hn(){let e=Nn();return e.enableLocal&&e.enableClone}function os(){return St?.loggingEnabled??!1}async function yP(){return(await Wr()).source}function rn(){return"github"}function Kr(){let e=ts().github.apiUrl;return{provider:"github",baseUrl:e!=="https://api.github.com"?e:void 0}}import{getOrCreateSession as ep,incrementToolCalls as tp,incrementErrors as np,incrementRateLimits as rp,incrementGitHubCacheRateLimits as op,updateSessionStats as ss}from"octocode-shared";import{completeMetadata as Zd}from"@octocodeai/octocode-core";var Re="lspGetSemantics",is=["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation"];function Mt(e){return{name:e.name,uri:e.uri,foundAtLine:e.foundAtLine,...e.orderHint!==void 0&&{orderHint:e.orderHint},...e.isAmbiguous===!0&&{isAmbiguous:!0}}}function Yr(e){return{uri:e.uri,...e.content!==void 0&&{content:e.content},...e.displayRange&&{displayRange:e.displayRange},...e.isDefinition&&{isDefinition:!0}}}var K=Zd.toolNames,qd=new Set([K.LOCAL_RIPGREP,K.LOCAL_FETCH_CONTENT,K.LOCAL_FIND_FILES,K.LOCAL_VIEW_STRUCTURE,K.LOCAL_BINARY_INSPECT,Re]);function Xr(e){return qd.has(e)}var Jr=class{session;logEndpoint="https://octocode-mcp-host.onrender.com/log";constructor(){this.session=ep()}getSessionId(){return this.session.sessionId}getSession(){return this.session}async logInit(){await this.sendLog("init",{})}async logToolCall(t,n,r,o,i){let s=tp(1);s.session&&(this.session=s.session);let a={tool_name:t,repos:Xr(t)?[]:n.map(()=>"[redacted]"),provider:Xr(t)?void 0:rn()};await this.sendLog("tool_call",a)}async logError(t,n){let r=np(1);r.session&&(this.session=r.session),await this.sendLog("error",{error:`${t}:${n}`})}async logRateLimit(t){let n=t.provider?ss({rateLimits:1,rateLimitsByProvider:{[t.provider]:1}}):rp(1);if(n.session&&(this.session=n.session),t.provider==="github"){let r=op(1);r.session&&(this.session=r.session)}await this.sendLog("rate_limit",t)}logPackageRegistryFailure(t){let n=ss({packageRegistryFailures:{[t]:1}});n.session&&(this.session=n.session)}async sendLog(t,n){if(!(t!=="init"&&!os()))try{let r={sessionId:this.session.sessionId,intent:t,data:n,timestamp:new Date().toISOString(),version:qe};await fetch(this.logEndpoint,{method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json"},signal:AbortSignal.timeout(5e3)})}catch{}}},on=null;function _P(){return on||(on=new Jr),on}function Nt(){return on}async function AP(){let e=Nt();e&&await e.logInit()}async function LP(e,t,n,r,o){let i=Nt();i&&await i.logToolCall(e,t,n,r,o)}async function OP(e){let t=Nt();t&&await t.logToolCall(e,[],void 0,void 0,void 0)}async function D(e,t){let n=Nt();n&&await n.logError(e,t)}async function ut(e){let t=Nt();t&&await t.logRateLimit(e)}function as(e){let t=Nt();t&&t.logPackageRegistryFailure(e)}function IP(){on=null}function cp(e){return ap("sha256").update(e).digest("hex").substring(0,16)}var lp=ip.plugin(sp),up=300*1e3,Zr=50,dp=60*1e3;function qr(e){return Date.now()-e.createdAt>up}var Ge=new Map,Ht=null,dt=null;function ms(){for(let[e,t]of Ge.entries())qr(t)&&Ge.delete(e);if(Ge.size>Zr){let e=[...Ge.entries()].filter(([n])=>n!=="DEFAULT").sort((n,r)=>n[1].createdAt-r[1].createdAt),t=Ge.size-Zr;for(let n=0;n<t&&n<e.length;n++){let r=e[n];r&&Ge.delete(r[0])}}}function pp(){dt||(dt=setInterval(ms,dp),typeof dt=="object"&&"unref"in dt&&dt.unref())}var cs=3,ls=60;function us(e,t,n){ut({limit_type:e,retry_after_seconds:t,api_method:n.method,api_url:n.url,provider:"github"})}var mp=()=>({onRateLimit:(e,t,n,r)=>(us("primary",e,t),r<cs&&e<ls),onSecondaryRateLimit:(e,t,n,r)=>(us("secondary",e,t),r<cs&&e<ls)});function ds(e){let t=Nn(),n=t.githubApiUrl,r={debug:()=>{},info:()=>{},warn:()=>{},error:(...i)=>console.error(...i)},o={userAgent:`octocode-mcp/${qe}`,baseUrl:n,request:{timeout:t.timeout||3e4,log:r},throttle:mp(),log:r,...e&&{auth:e}};return new lp(o)}async function re(e){if(pp(),e?.token){let n=cp(e.token),r=Ge.get(n);if(r&&!qr(r))return r.client;Ge.size>=Zr&&ms();let o=ds(e.token);return Ge.set(n,{client:o,createdAt:Date.now()}),o}let t=Ge.get("DEFAULT");return t&&!qr(t)?t.client:Ht||(Ht=(async()=>{try{let n=await rs(),r=ds(n??void 0);return Ge.set("DEFAULT",{client:r,createdAt:Date.now()}),r}finally{Ht=null}})(),Ht)}var fp=200,Dt=new Map;async function $e(e,t,n){let r=`${e}/${t}`,o=Dt.get(r);if(o)return o;let i=await re(n);try{let{data:a}=await i.rest.repos.get({owner:e,repo:t}),c=a.default_branch;return ps(r,c),c}catch{}let s=["main","master"];for(let a of s)try{return await i.rest.repos.getBranch({owner:e,repo:t,branch:a}),ps(r,a),a}catch{}throw new Error(`Could not determine default branch for ${e}/${t}. The repository may not exist, require authentication, or be inaccessible.`)}function ps(e,t){if(Dt.size>=fp){let n=Dt.keys().next().value;n!==void 0&&Dt.delete(n)}Dt.set(e,t)}function $P(){Ge.clear(),Ht=null,Dt.clear(),dt&&(clearInterval(dt),dt=null)}import{ContentSanitizer as Zp}from"octocode-security/contentSanitizer";import{createRequire as hp}from"node:module";var gp=hp(import.meta.url),fs="@octocodeai/octocode-context-utils",Dn,yp=()=>gp(fs),eo=class extends Error{constructor(n){super(`Failed to load native dependency ${fs}`);this.cause=n;this.name="ContextUtilsLoadError"}cause};function ue(){if(Dn)return Dn;try{return Dn=yp(),Dn}catch(e){throw new eo(e)}}var z={applyContentViewMinification(e,t){return ue().applyContentViewMinification(e,t)},applyMinification(e,t){return ue().applyMinification(e,t)},minifyContent(e,t){return ue().minifyContent(e,t)},minifyContentSync(e,t){return ue().minifyContentSync(e,t)},minifyContentResult(e,t){return ue().minifyContentResult(e,t)},minifyMarkdownCore(e){return ue().minifyMarkdownCore(e)},extractSignatures(e,t){return ue().extractSignatures(e,t)},structuralSearch(e,t,n,r){return ue().structuralSearch(e,t,n,r)},getSemanticBoundaryOffsets(e,t){return ue().getSemanticBoundaryOffsets(e,t)},jsonToYamlString(e,t){return ue().jsonToYamlString(e,t)},parseRipgrepJson(e,t){return ue().parseRipgrepJson(e,t)},queryFileSystem(e){return ue().queryFileSystem(e)},extractMatchingLines(e,t,n){return ue().extractMatchingLines(e,t,n)},filterPatch(e,t){return ue().filterPatch(e,t)},charToByteOffset(e,t){return ue().charToByteOffset(e,t)},byteToCharOffset(e,t){return ue().byteToCharOffset(e,t)},byteSliceContent(e,t,n){return ue().byteSliceContent(e,t,n)},sliceContent(e,t,n,r){return ue().sliceContent(e,t,n,r)},get SIGNATURES_ONLY_HINT(){return ue().SIGNATURES_ONLY_HINT}};import{RequestError as gs}from"octokit";var j={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={[j.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."},[j.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."},[j.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},[j.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)."},[j.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."},[j.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."},[j.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."},[j.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."},[j.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."},[j.UNKNOWN]:{message:"Unknown error occurred",explanation:"An unexpected error occurred that does not match known error patterns."}},hs={401:j.AUTH_REQUIRED,403:j.FORBIDDEN_PERMISSIONS,404:j.NOT_FOUND,422:j.INVALID_REQUEST,502:j.SERVER_UNAVAILABLE,503:j.SERVER_UNAVAILABLE,504:j.SERVER_UNAVAILABLE},to={CONNECTION_FAILED:["ENOTFOUND","ECONNREFUSED"],TIMEOUT:["timeout"]},no={SECONDARY:/\bsecondary rate\b/i,GRAPHQL_TYPE:"RATE_LIMITED"},Gn={RESET_BUFFER_SECONDS:1,SECONDARY_FALLBACK_SECONDS:60};var Rp=["cannot be searched","do not exist","does not exist","could not be found","cannot be found"];function Ct(e){if(!(e instanceof gs)||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 Rp.some(o=>r.includes(o))})}function Z(e){return e instanceof gs?bp(e):e instanceof Error?_p(e):{error:typeof e=="string"?e:de[j.UNKNOWN].message,type:"unknown"}}function bp(e){let{status:t,message:n,response:r}=e;if(t===403)return Cp(n,r);if(t===429)return Sp(n,r);let o=hs[t];return o?xp(o,t):Gt(j.UNKNOWN,{error:n||de[j.UNKNOWN].message,status:t})}function ro(e,t){let n=e?.[t],r=n===void 0?NaN:parseInt(String(n),10);return isNaN(r)?void 0:r}function Sp(e,t){let n=t?.headers,r=ro(n,"retry-after"),o=ro(n,"x-ratelimit-reset"),i=ro(n,"x-ratelimit-remaining")??0,s=o?new Date(o*1e3):null,a=r??(s?Math.max(Math.ceil((s.getTime()-Date.now())/1e3)+Gn.RESET_BUFFER_SECONDS,0):void 0);return ut({limit_type:"primary",retry_after_seconds:a,rate_limit_remaining:i,rate_limit_reset_ms:s?s.getTime():void 0,provider:"github"}),Gt(j.RATE_LIMIT_PRIMARY,{error:e||de[j.RATE_LIMIT_PRIMARY].messageWithoutTime,status:429,rateLimitRemaining:i,rateLimitReset:s?s.getTime():void 0,retryAfter:a,scopesSuggestion:de[j.RATE_LIMIT_PRIMARY].suggestion})}function Cp(e,t){let n=t?.headers;if(no.SECONDARY.test(e))return Pp(n);let r=n?.["x-ratelimit-remaining"],o=wp(t);return r==="0"||o?Ep(n):Tp(n)}function Pp(e){let t=Number(e?.["retry-after"]),n=isNaN(t)?Gn.SECONDARY_FALLBACK_SECONDS:t;return ut({limit_type:"secondary",retry_after_seconds:n,provider:"github"}),Gt(j.RATE_LIMIT_SECONDARY,{error:de[j.RATE_LIMIT_SECONDARY].message(n),status:403,rateLimitRemaining:0,retryAfter:n,scopesSuggestion:de[j.RATE_LIMIT_SECONDARY].suggestion})}function Ep(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)+Gn.RESET_BUFFER_SECONDS,0):void 0,i=r?de[j.RATE_LIMIT_PRIMARY].messageWithTime(r,o):de[j.RATE_LIMIT_PRIMARY].messageWithoutTime;return ut({limit_type:"primary",retry_after_seconds:o,rate_limit_remaining:0,rate_limit_reset_ms:r?r.getTime():void 0,provider:"github"}),Gt(j.RATE_LIMIT_PRIMARY,{error:i,status:403,rateLimitRemaining:0,rateLimitReset:r?r.getTime():void 0,retryAfter:o,scopesSuggestion:de[j.RATE_LIMIT_PRIMARY].suggestion})}function Tp(e){let t=e?.["x-accepted-oauth-scopes"],n=e?.["x-oauth-scopes"],r=de[j.FORBIDDEN_PERMISSIONS].suggestion;return t&&n&&(r=Ap(String(t),String(n))),Gt(j.FORBIDDEN_PERMISSIONS,{error:de[j.FORBIDDEN_PERMISSIONS].message,status:403,scopesSuggestion:r})}function wp(e){return e?.data?.errors?.some(n=>n.type===no.GRAPHQL_TYPE)??!1}function xp(e,t){let n=de[e];return Gt(e,{error:n.message,status:t,..."suggestion"in n&&{scopesSuggestion:n.suggestion}})}function _p(e){return to.CONNECTION_FAILED.some(t=>e.message.includes(t))?{error:de[j.NETWORK_CONNECTION_FAILED].message,type:"network",scopesSuggestion:de[j.NETWORK_CONNECTION_FAILED].suggestion}:to.TIMEOUT.some(t=>e.message.includes(t))?{error:de[j.REQUEST_TIMEOUT].message,type:"network",scopesSuggestion:de[j.REQUEST_TIMEOUT].suggestion}:{error:e.message,type:"unknown"}}function Gt(e,t){return{type:"http",...t}}function Ap(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[j.FORBIDDEN_PERMISSIONS].suggestionWithScopes(o):de[j.FORBIDDEN_PERMISSIONS].fallbackSuggestion}function Lp(e){return`user:${e}`}var Op=/[@/]/,Ip=/(?:^|\/)([^/]+\.[A-Za-z][A-Za-z0-9]{0,9})$/,kp=/^[A-Za-z0-9_-]+$/;function ys(e){return e.startsWith('"')||kp.test(e)?e:`"${e.replace(/"/g,'\\"')}"`}var sn=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(Lp(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=Op.test(t)&&!t.startsWith('"')?`"${t}"`:t;this.queryParts.push(`${n}:${o}`)}return this}build(){return this.queryParts.join(" ").trim()}},oo=class extends sn{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(ys))}return this}addSearchFilters(t){let n=t.path,r=t.filename,o=typeof n=="string"&&!r?n.match(Ip):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}},io=class extends sn{addQueryTerms(t){return Array.isArray(t.keywords)&&t.keywords.length>0&&this.queryParts.push(...t.keywords.map(ys)),this}addRepoFilters(t){this.addArrayFilter(t.topicsToSearch,"topic"),this.addSimpleFilter(t.stars,"stars"),this.addSimpleFilter(t.size,"size"),this.addSimpleFilter(t.created,"created"),t.updated&&this.queryParts.push(`pushed:${t.updated}`),t.language&&this.queryParts.push(`language:${t.language}`);let n=t;return typeof n.forks=="string"&&this.queryParts.push(`forks:${n.forks}`),typeof n.license=="string"&&this.queryParts.push(`license:${n.license}`),typeof n.goodFirstIssues=="string"&&this.queryParts.push(`good-first-issues:${n.goodFirstIssues}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="name"?this.queryParts.push("in:name"):r==="description"?this.queryParts.push("in:description"):r==="readme"&&this.queryParts.push("in:readme")}),this}addQualityFilters(t){let n=t,r=n?.archived;this.queryParts.push(r===!0?"archived:true":"is:not-archived");let o=n?.visibility;return o==="public"?this.queryParts.push("is:public"):o==="private"&&this.queryParts.push("is:private"),this}},so=class extends sn{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 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.involves,"involves"),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}addEngagementFilters(t){return this.addSimpleFilter(t.comments,"comments"),this.addSimpleFilter(t.reactions,"reactions"),this.addSimpleFilter(t.interactions,"interactions"),this}addReviewFilters(t){return t.review&&this.queryParts.push(`review:${t.review}`),this}addOrganizationFilters(t){return this.addArrayFilter(t.label,"label",!0),t.milestone&&this.queryParts.push(`milestone:"${t.milestone}"`),this}addNegativeFilters(t){return t["no-assignee"]&&this.queryParts.push("no:assignee"),t["no-label"]&&this.queryParts.push("no:label"),t["no-milestone"]&&this.queryParts.push("no:milestone"),t["no-project"]&&this.queryParts.push("no:project"),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["team-mentions"]&&this.queryParts.push(`team:${t["team-mentions"]}`),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 Rs(e){return new oo().addQueryTerms(e).addSearchFilters(e).addOwnerRepo(e).addMatchFilters(e).build()}function bs(e){return new io().addQueryTerms(e).addOwnerRepo(e).addRepoFilters(e).addMatchFilters(e).addQualityFilters(e).build()}function Ss(e){return new so().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addBranchFilters(e).addDateFilters(e).addEngagementFilters(e).addReviewFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function Cs(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.involves!==void 0||e["reviewed-by"]!==void 0||e["review-requested"]!==void 0||e.reactions!==void 0||e.comments!==void 0||e.interactions!==void 0||e["no-assignee"]!==void 0||e["no-label"]!==void 0||e["no-milestone"]!==void 0||e["no-project"]!==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["team-mentions"]!==void 0||e.project!==void 0||e.created!==void 0||e.updated!==void 0||e["merged-at"]!==void 0||e.closed!==void 0||e.merged!==void 0||e.match!==void 0&&e.match.length>0||e.sort==="comments"||e.sort==="reactions"||Array.isArray(e.owner)||Array.isArray(e.repo)}import vp from"node-cache";import Fp from"crypto";import{incrementGitHubCacheHits as Mp}from"octocode-shared";var Np="v1",Hp=300*1e3,Ue=new vp({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1}),be={hits:0,misses:0,sets:0,totalKeys:0,lastReset:new Date},Ps={"gh-api-code":3600,"gh-api-repos":7200,"gh-api-prs":1800,"gh-api-file-content":300,"gh-repo-structure-api":7200,"github-user":900,"npm-search":14400,default:86400},$t=new Map;function Dp(e){return e.match(/^v\d+-([^:]+):/)?.[1]}function Gp(e){return e.startsWith("gh-api-")||e.startsWith("gh-repo-")||e==="github-user"}function $p(e){let t=Dp(e);if(!(!t||!Gp(t)))try{Mp(t,1)}catch{}}function Up(){let e=Date.now();for(let[t,n]of $t.entries())e-n.startedAt>Hp&&$t.delete(t)}var Bp=new Set([]);function zp(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(Bp.has(o)){n=!0;continue}r[o]=t[o]}return n?r:e}function Ee(e,t,n){let r=ao(zp(t)),o=n?`${n}:${r}`:r,i=Fp.createHash("sha256").update(o).digest("hex");return`${Np}-${e}:${i}`}function ao(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=>ao(o,t)).join(",")}]`:`{${Object.keys(e).sort().map(o=>{let i=e[o];return`"${o}":${ao(i,t)}`}).join(",")}}`)}function Qp(e){return Ps[e]||Ps.default}function jp(e,t,n){try{return Ue.set(e,t,n),be.sets++,be.totalKeys=Ue.keys().length,!0}catch{try{let r=Ue.keys();for(let o of r)Ue.get(o);return Ue.set(e,t,n),be.sets++,be.totalKeys=Ue.keys().length,!0}catch{return!1}}}async function Te(e,t,n={}){if(n.skipCache)return await t();if(!n.forceRefresh)try{let i=Ue.get(e);if(i!==void 0)return be.hits++,$p(e),i}catch{}Up();let r=$t.get(e);if(r)return r.promise;let o=(async()=>{try{let i=await t();if(n.forceRefresh||be.misses++,(n.shouldCache??(()=>!0))(i)){let a=n.ttl;if(!a){let l=e.match(/^v\d+-([^:]+):/)?.[1]??"default";a=Qp(l)}jp(e,i,a)}return i}finally{$t.delete(e)}})();return $t.set(e,{promise:o,startedAt:Date.now()}),o}function qP(){Ue.flushAll(),$t.clear(),be.hits=0,be.misses=0,be.sets=0,be.totalKeys=0,be.lastReset=new Date}function pt(e){let t=Ue.keys(),n=0;for(let r of t){let i=r.match(/^v\d+-([^:]+):/)?.[1];!i||!i.startsWith(e)||Ue.del(r)>0&&n++}return n>0&&(be.totalKeys=Ue.keys().length),n}function eE(){return pt("local-")}function tE(){return pt("lsp-")}function nE(){let e=0;return e+=pt("gh-api-"),e+=pt("bb-api-"),e+=pt("gh-repo-"),e+=pt("bb-repo-"),e+=pt("github-user"),e+=pt("npm-search"),e}function rE(){let e=be.hits+be.misses;return{...be,hitRate:e>0?be.hits/e*100:0,cacheSize:Ue.keys().length}}var Es=[".github",".git",".vscode",".devcontainer",".config",".cargo",".changeset",".husky",".aspect",".eslint-plugin-local",".yarn",".gemini",".ng-dev",".configurations",".tx","dist","build","out","output","target","release","node_modules","vendor","third_party","tmp","temp","cache",".cache",".tmp",".pytest_cache",".tox",".venv",".mypy_cache",".next",".svelte-kit",".turbo",".angular",".dart_tool","__pycache__",".ruff_cache",".nox","htmlcov","cover",".gradle",".m2",".sbt",".bloop",".metals",".bsp","bin","obj","TestResults","BenchmarkDotNet.Artifacts",".vendor-new","Godeps","composer.phar",".phpunit.result.cache",".bundle",".byebug_history",".rspec_status",".mvn",".aws",".gcp","fastlane","DerivedData","xcuserdata","local.properties",".navigation","captures",".externalNativeBuild",".cxx",".idea",".idea_modules",".vs",".history","coverage",".nyc_output","logs","log",".DS_Store"],Vp=["package-lock.json",".secrets",".secret","secrets.json","secrets.yaml","secrets.yml","credentials.json","credentials.yaml","credentials.yml","auth.json","auth.yaml","auth.yml","api-keys.json","api_keys.json","service-account.json","service_account.json","private-key.pem","private_key.pem","id_rsa","id_dsa","id_ecdsa","id_ed25519","keyfile","keyfile.json","gcloud-service-key.json","firebase-adminsdk.json","google-services.json","GoogleService-Info.plist",".DS_Store","Thumbs.db","db.sqlite3","db.sqlite3-journal",".eslintcache",".stylelintcache",".node_repl_history",".yarn-integrity","celerybeat-schedule","celerybeat.pid","ThirdPartyNoticeText.txt","ThirdPartyNotices.txt","cglicenses.json","cgmanifest.json"],Wp=[".lock",".log",".tmp",".temp",".cache",".bak",".backup",".orig",".swp",".swo",".rej",".pid",".seed",".old",".save",".temporary",".exe",".dll",".so",".dylib",".a",".lib",".o",".obj",".bin",".class",".pdb",".dSYM",".pyc",".pyo",".pyd",".jar",".war",".ear",".nar",".db",".sqlite",".sqlite3",".mdb",".accdb",".zip",".tar",".gz",".bz2",".xz",".lz",".lzma",".Z",".tgz",".rar",".7z",".deb",".rpm",".pkg",".dmg",".msi",".appx",".snap",".map",".d.ts.map",".min.js",".min.css",".key",".pem",".p12",".pfx",".crt",".cer",".der",".csr",".jks",".keystore",".truststore",".kate-swp",".gnome-desktop",".sublime-project",".sublime-workspace",".iml",".iws",".ipr",".patch",".diff",".prof",".profile",".trace",".perf",".coverage",".egg-info",".egg",".mo",".pot",".setup",".paket.template"];function an(e){return Es.includes(e)}function Ut(e){let t=e.split("/").pop()||"";for(let r of Wp)if(t.endsWith(r))return!0;if(Vp.includes(t))return!0;let n=e.split("/");for(let r of n)if(Es.includes(r))return!0;return!1}function iE(e,t){let n=e.split(".");if(n.length<=1||n.length===2&&n[0]==="")return t?.fallback??"";let r=n[n.length-1];return t?.lowercase?r.toLowerCase():r}import{completeMetadata as co}from"@octocodeai/octocode-core";var S=new Proxy({},{get(e,t){return co.toolNames[t]},ownKeys(){return Object.keys(co.toolNames)},getOwnPropertyDescriptor(e,t){let n=co.toolNames;if(t in n)return{enumerable:!0,configurable:!0,value:n[t]}}});import{completeMetadata as Kp}from"@octocodeai/octocode-core";var lo=new Proxy({},{get(e,t){return Kp.tools[t]?.description??""}});import{completeMetadata as Yp}from"@octocodeai/octocode-core";function uo(e){return Object.prototype.hasOwnProperty.call(Yp.tools,e)}import{completeMetadata as Xp}from"@octocodeai/octocode-core";function po(){return Xp.baseSchema}var Jp=new Proxy({},{get(e,t){return po()[t]},ownKeys(){return Array.from(new Set([...Reflect.ownKeys(po())]))},getOwnPropertyDescriptor(e,t){let n=po();if(t in n)return{enumerable:!0,configurable:!0,value:n[t]}}});import{completeMetadata as et}from"@octocodeai/octocode-core";function Ts(e){return et.tools[e]?.hints??{hasResults:[],empty:[]}}var gE=new Proxy({},{get(e,t){if(typeof t=="string")return t==="base"?et.baseHints:Ts(t)},ownKeys(){return["base",...Object.keys(et.tools)]},getOwnPropertyDescriptor(e,t){if(typeof t=="string"&&(t==="base"||t in et.tools))return{enumerable:!0,configurable:!0,value:t==="base"?et.baseHints:Ts(t)}}}),yE=new Proxy([],{get(e,t){return et.genericErrorHints[t]}});function RE(e,t){return et.tools[e]?.hints?.[t]??[]}function bE(e,t){return et.tools[e]?.hints?.dynamic?.[t]??[]}function SE(){return et.genericErrorHints}var ws=Symbol.for("octocode.rawResponseChars");function G(e){if(typeof e=="string")return e.length;try{return JSON.stringify(e)?.length??0}catch{return String(e).length}}function xs(e){if(!(typeof e!="number"||!Number.isFinite(e)))return Math.max(0,e)}function U(e,t){let n=typeof t=="number"?xs(t):G(t);if(n===void 0)return e;try{Object.defineProperty(e,ws,{value:n,enumerable:!1,configurable:!0})}catch{}return e}function ee(e){if(!(typeof e!="object"||e===null))return xs(e[ws])}function $n(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}var _s=30;async function As(e,t,n){let r=Ee("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},n);return await Te(r,async()=>await qp(e,t),{shouldCache:i=>"data"in i&&!i.error})}async function qp(e,t){try{let n=await re(t);if(e.keywords&&e.keywords.length>0&&e.keywords.filter(y=>y&&y.trim()).length===0)return await D(S.GITHUB_SEARCH_CODE,ne.QUERY_EMPTY.code),{error:ne.QUERY_EMPTY.message,type:"http",status:400};let r=Rs(e);if(!r.trim())return await D(S.GITHUB_SEARCH_CODE,ne.QUERY_EMPTY.code),{error:ne.QUERY_EMPTY.message,type:"http",status:400};let o=Math.min(typeof e.limit=="number"?e.limit:_s,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 em(a.data.items,a.data.total_count),l=c.total_count,d=Math.min(l,1e3),u=Math.min(Math.ceil(d/o),10),m=Math.min(i,Math.max(1,u)),p=m<u,f=Math.min(d,u*o);return{data:{total_count:c.total_count,items:c.items,repository:c.repository,matchLocations:c.matchLocations,minified:c.minified,minificationFailed:c.minificationFailed,minificationTypes:c.minificationTypes,_researchContext:c._researchContext,pagination:{currentPage:m,totalPages:u,perPage:o,totalMatches:d,reportedTotalMatches:l,reachableTotalMatches:f,totalMatchesKind:"reported",totalMatchesCapped:l>d,hasMore:p,uniqueFileCount:c._researchContext?.uniqueFileCount}},status:200,headers:$n(a.headers),rawResponseChars:G(a.data)}}catch(n){if(Ct(n)){let o=Math.min(typeof e.limit=="number"?e.limit:_s,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 Z(n)}}async function em(e,t){let n=tm(e),r=new Set,o=!1,i=[],s=new Set,a=e.filter(p=>!Ut(p.path)),c=0,l=0,d=await Promise.allSettled(a.map(async p=>{s.add(p.path);let f=[],h=await Promise.allSettled((p.text_matches||[]).map(async T=>{let P=T.fragment,x=Zp.sanitizeContent(P||"",p.path);P=x.content,x.hasSecrets&&r.add(`Secrets detected in ${p.path}: ${x.secretsDetected.join(", ")}`),x.warnings.length>0&&x.warnings.forEach(I=>r.add(`${p.path}: ${I}`));try{let I=await z.minifyContent(P||"",p.path);P=I.content,I.failed?o=!0:I.type!=="failed"&&(f.push(I.type),i.push(I.type))}catch{o=!0}return{context:P||"",positions:T.matches?.map(I=>Array.isArray(I.indices)&&I.indices.length>=2?[I.indices[0],I.indices[1]]:[0,0])||[]}})),y=h.filter(T=>T.status==="fulfilled").map(T=>T.value),b=h.filter(T=>T.status==="rejected").length;b>0&&(l+=b);let g=p,C=Array.from(new Set(f));return{path:p.path,matches:y,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},...C.length>0&&{minificationType:C.join(",")}}})),u=d.filter(p=>p.status==="fulfilled").map(p=>p.value);c=d.filter(p=>p.status==="rejected").length;let m={items:u,total_count:t!==void 0?t:a.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&&(m.repository={name:n.full_name,url:n.url,createdAt:n.created_at||void 0,updatedAt:n.updated_at||void 0,pushedAt:n.pushed_at||void 0}),c>0&&r.add(`${c} item(s) dropped due to processing errors`),l>0&&r.add(`${l} match(es) dropped due to processing errors`),r.size>0&&(m.matchLocations=Array.from(r)),m.minified=!o,m.minificationFailed=o,i.length>0&&(m.minificationTypes=Array.from(new Set(i))),m}function tm(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{writeFileSync as Pm,mkdirSync as Fs,existsSync as Vn,rmSync as Em,readdirSync as Tm,statSync as wm}from"node:fs";import{join as ho,dirname as xm,resolve as Ms,sep as Ns}from"node:path";import{getOctocodeDir as _m}from"octocode-shared";import{existsSync as un,readFileSync as nm,writeFileSync as rm,mkdirSync as om,rmSync as ln,readdirSync as im,statSync as sm}from"node:fs";import{join as Ke}from"node:path";import{createHash as am}from"node:crypto";import{getDirectorySizeBytes as cm}from"octocode-shared";var lm=1440*60*1e3,um=600*1e3,dm=2*1024*1024*1024,pm=50,Os=".octocode-clone-meta.json",Bt=null;function Is(e){return Ke(e,"repos")}function mm(e){return e?`__sp_${am("sha256").update(e).digest("hex").substring(0,6)}`:""}function Un(e,t,n,r,o){let i=`${r}${mm(o)}`;return Ke(Is(e),t,n,i)}function fm(e){return typeof e=="object"&&e!==null}function hm(e){if(!fm(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")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),t}function mo(e){let t=Ke(e,Os);if(!un(t))return null;try{return hm(JSON.parse(nm(t,"utf-8")))}catch{return null}}function Bn(e,t){try{rm(Ke(e,Os),JSON.stringify(t,null,2),"utf-8")}catch{}}function ks(e){return Date.now()<new Date(e.expiresAt).getTime()}function zn(e){let t=mo(e);return t?ks(t)?un(e)?{hit:!0,meta:t}:{hit:!1}:{hit:!1}:{hit:!1}}function gm(){let e=process.env.OCTOCODE_CACHE_TTL_MS;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return lm}function ym(){let e=process.env.OCTOCODE_MAX_CACHE_SIZE;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return dm}function Rm(){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 pm}function Qn(e,t,n,r,o,i){let s=new Date;return{clonedAt:s.toISOString(),expiresAt:new Date(s.getTime()+gm()).toISOString(),owner:e,repo:t,branch:n,source:r,...o?{sparsePath:o}:{},...i!=null?{sizeBytes:i}:{}}}function jn(e){let t=Ke(e,"..");try{un(t)||om(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 fo(e){try{un(e)&&ln(e,{recursive:!0,force:!0})}catch{}}function cn(e){try{return sm(e).isDirectory()}catch{return!1}}function Pt(e){try{return im(e)}catch{return[]}}function*vs(e){for(let t of Pt(e)){let n=Ke(e,t);if(cn(n))for(let r of Pt(n)){let o=Ke(n,r);if(cn(o))for(let i of Pt(o)){let s=Ke(o,i);cn(s)&&(yield s)}}}}function Ls(e){for(let t of[...Pt(e)]){let n=Ke(e,t);if(cn(n)){for(let r of[...Pt(n)]){let o=Ke(n,r);if(cn(o)&&Pt(o).length===0)try{ln(o,{recursive:!0,force:!0})}catch{}}if(Pt(n).length===0)try{ln(n,{recursive:!0,force:!0})}catch{}}}}function bm(e){let t=0;for(let n of vs(e))try{let r=mo(n);(!r||!ks(r))&&(ln(n,{recursive:!0,force:!0}),t++)}catch{}return t}function Sm(e){let t=[];for(let n of vs(e)){let r=mo(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??cm(n)})}return t}function Cm(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{ln(s.branchDir,{recursive:!0,force:!0}),i++,r-=s.sizeBytes,o-=1}catch{}}return i}function zt(e){let t=Is(e);if(!un(t))return 0;let n=0;try{n+=bm(t)}catch{return n}Ls(t);let r=Cm(Sm(t),ym(),Rm());return n+=r,r>0&&Ls(t),n}function VE(e){Bt||(zt(e),Bt=setInterval(()=>{zt(e)},um),Bt.unref())}function WE(){Bt&&(clearInterval(Bt),Bt=null)}var Am=50,Lm=5*1024*1024,Om=300*1024,Im=5,km=1e4,vm=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"]);async function Ds(e,t,n,r,o,i=!1){let s=_m(),a=Un(s,e,t,r),c=Ms(ho(a,n));if(!c.startsWith(a+Ns)&&c!==a)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let l=zn(a);if(l.hit){if(l.meta.source==="clone"){if(Vn(c)){let T=Hs(c,a);return{localPath:c,files:T.files,fileCount:T.fileCount,totalSize:T.totalSize,cached:!0,expiresAt:l.meta.expiresAt,owner:e,repo:t,branch:r,directoryPath:n}}throw new Error(`Path "${n}" not found in the cloned repository (${e}/${t}@${r}). To refresh the clone, use ghCloneRepo with forceRefresh: true.`)}if(!i&&Vn(c)){let T=Hs(c,a);return{localPath:c,files:T.files,fileCount:T.fileCount,totalSize:T.totalSize,cached:!0,expiresAt:l.meta.expiresAt,owner:e,repo:t,branch:r,directoryPath:n}}}let d=await re(o),{data:u}=await d.rest.repos.getContent({owner:e,repo:t,path:n,ref:r});if(!Array.isArray(u))throw new Error(`Path "${n}" is not a directory. Use type "file" to fetch file content.`);let m=u.filter(C=>{if(C.type!=="file"||!C.download_url||C.size>Om)return!1;let T=Hm(C.name);return!vm.has(T)}).slice(0,Am),p=o?.token,f=await Fm(m,Im,p),h=0,y=[];for(let{entry:C,content:T}of f){if(h+T.length>Lm)break;h+=T.length,y.push({entry:C,content:T})}zt(s),jn(a),Vn(c)&&Em(c,{recursive:!0,force:!0}),Fs(c,{recursive:!0,mode:448});let b=[];for(let{entry:C,content:T}of y){let P=Ms(ho(a,C.path));if(!P.startsWith(a+Ns))continue;let x=xm(P);Vn(x)||Fs(x,{recursive:!0,mode:448}),Pm(P,T,"utf-8"),b.push({path:C.path,size:T.length,type:"file"})}let g=Qn(e,t,r,"directoryFetch");return Bn(a,g),{localPath:c,files:b,fileCount:b.length,totalSize:h,cached:!1,expiresAt:g.expiresAt,owner:e,repo:t,branch:r,directoryPath:n}}async function Fm(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 Nm(a.download_url,n);return{entry:a,content:c}}));for(let a of s)a.status==="fulfilled"&&r.push(a.value)}return r}var Mm=new Set(["raw.githubusercontent.com","objects.githubusercontent.com","github.com"]);async function Nm(e,t){try{let o=new URL(e);if(!Mm.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(),km);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 Hs(e,t){let n=[],r=0;function o(i){let s;try{s=Tm(i)}catch{return}for(let a of s){if(a.startsWith("."))continue;let c=ho(i,a);try{let l=wm(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 Hm(e){let t=e.lastIndexOf(".");return t===-1?"":e.substring(t).toLowerCase()}import{RequestError as Gs}from"octokit";async function Dm(e,t,n,r,o,i,s,a){let c=await $e(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 d=Z(t),u=s===c?void 0:`Branch '${s}' not found. Default branch is '${c}'. Ask user: Do you want to get the file from '${c}' instead?`,m=await Qs(e,r,o,i,s||c);return m.length>0&&(d.hints=[...d.hints||[],...zs(i,m)]),{...d,...u&&{scopesSuggestion:u}}}async function Gm(e,t,n,r,o,i){let s=Z(t),a=await Qs(e,n,r,o,i||"main");return a.length>0&&(s.hints=[...s.hints||[],...zs(o,a)]),s}async function $s(e,t){let n=e.replace(/\s/g,"");if(!n)return await D(S.GITHUB_FETCH_CONTENT,Ae.FILE_EMPTY.code),{error:Ae.FILE_EMPTY.message,type:"unknown",status:404};try{let r=Buffer.from(n,"base64");return r.indexOf(0)!==-1?(await D(S.GITHUB_FETCH_CONTENT,Ae.BINARY_FILE.code),{error:Ae.BINARY_FILE.message,type:"unknown",status:415}):{data:r.toString("utf-8"),status:200}}catch{return await D(S.GITHUB_FETCH_CONTENT,Ae.DECODE_FAILED.code),{error:Ae.DECODE_FAILED.message,type:"unknown",status:422}}}async function Us(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"?$s(s,o):a==="utf-8"?{data:s,status:200}:{error:`Unsupported blob encoding: ${a}`,type:"unknown",status:415}}catch(i){return Z(i)}}async function $m(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 $e(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(m=>m.name===a&&m.type==="file");if(!d)return{error:`File ${a} not found in ${s||"root"}`,type:"unknown",status:404};let u=await Us(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 Z(s)}}async function Bs(e,t){try{let n=await re(t),{owner:r,repo:o,path:i,branch:s}=e,a={owner:r,repo:o,path:i,...s&&{ref:s}},c,l=s;try{c=await n.rest.repos.getContent(a)}catch(u){if(u instanceof Gs&&u.status===404)if(s){let m=await Dm(n,u,a,r,o,i,s,t);if("result"in m)c=m.result,l=m.actualBranch;else return m}else return await Gm(n,u,r,o,i,s);else{if(u instanceof Gs&&u.status===413)return await $m(n,r,o,i,s||l,t);throw u}}let d=c.data;if(Array.isArray(d))return await D(S.GITHUB_FETCH_CONTENT,Ae.PATH_IS_DIRECTORY.code),{error:Ae.PATH_IS_DIRECTORY.message(S.GITHUB_VIEW_REPO_STRUCTURE),type:"unknown",status:400};if("content"in d&&d.type==="file"){let u=typeof d.content=="string"?d.content:"",m=d.size??0,p;if(u.length>0)p=await $s(u,i);else if(m>0&&"sha"in d&&typeof d.sha=="string"&&d.sha)p=await Us(n,r,o,d.sha,i);else return await D(S.GITHUB_FETCH_CONTENT,Ae.FILE_EMPTY.code),{error:Ae.FILE_EMPTY.message,type:"unknown",status:404};if("error"in p)return p;if(!l&&!s)try{l=await $e(r,o,t)}catch{}return{data:{rawContent:p.data,branch:l||void 0,resolvedRef:l||s||"HEAD"},status:200,rawResponseChars:G(d)}}return await D(S.GITHUB_FETCH_CONTENT,Ae.UNSUPPORTED_TYPE.code),{error:Ae.UNSUPPORTED_TYPE.message(d.type),type:"unknown",status:415}}catch(n){return Z(n)}}function zs(e,t){let n=e.split("/").pop()||"",r=t.some(i=>{let s=i.split("/").pop()||"";return s.toLowerCase()===n.toLowerCase()&&s!==n}),o=[];return r&&o.push("GitHub Contents API paths are case-sensitive. Verify exact file casing with ghViewRepoStructure."),o.push(`Did you mean: ${t.join(", ")}?`),o}async function Qs(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(p=>p.name.toLowerCase()===s.toLowerCase());d&&l.push(d.path);let u=s.replace(/\.[^/.]+$/,"");return c.filter(p=>p.name===s?!1:!!p.name.startsWith(u+".")).forEach(p=>l.push(p.path)),l.length===0&&u.length>=3&&c.filter(f=>{let h=f.name.replace(/\.[^/.]+$/,"");return h!==u&&h.length>=3&&(u.startsWith(h)||h.startsWith(u))}).forEach(f=>l.push(f.path)),Array.from(new Set(l)).slice(0,3)}catch{return[]}}import{getConfigSync as Um}from"octocode-shared";import{DEFAULT_OUTPUT_CONFIG as Bm}from"octocode-shared";function we(){try{return Um().output.pagination.defaultCharLength}catch{return Bm.pagination.defaultCharLength}}var js=1e5;function Vs(e){let t=Math.min(Math.max(we(),1),js),n=Math.max(Math.floor(e)||0,1);return Math.min(t*n,js)}import{ContentSanitizer as Xs}from"octocode-security/contentSanitizer";function zm(e,t,n){return z.byteSliceContent(e,t,n)}function Wn(e,t){return z.byteToCharOffset(e,t)}function Ws(e,t){return z.charToByteOffset(e,t)}function Ks(e){return z.charToByteOffset(e,e.length)}function fT(e,t,n){let r=zm(e,t,t+n);return{charOffset:Wn(e,t),charLength:r.length,text:r}}function go(e,t,n,r){return z.sliceContent(e,t,n,r)}function tt(e,t=0,n,r={}){let o=r.mode??"characters",i=e.length,s=Ks(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,d,u,m,p,f,h;if(o==="bytes"){let y=Math.min(t,s),b=Math.min(y+n,s);u=Wn(e,y),m=Wn(e,b),m<i&&Ws(e,m)<b&&(m+=1);let g=go(e,u,m-u);c=g.text,u=g.charOffset,m=g.charOffset+g.charLength,l=g.byteOffset,d=g.byteOffset+g.byteLength,p=d<s;let C=r.actualOffset??y;f=Math.floor(C/a)+1,h=Math.max(f,Math.ceil(s/a))}else{let y=go(e,t,n);c=y.text,u=y.charOffset,m=y.charOffset+y.charLength,l=y.byteOffset,d=y.byteOffset+y.byteLength,p=m<i;let b=r.actualOffset??u;f=Math.floor(b/a)+1,h=Math.max(f,Math.ceil(i/a))}return{paginatedContent:c,byteOffset:l,byteLength:d-l,totalBytes:s,nextByteOffset:p?d:void 0,charOffset:u,charLength:c.length,totalChars:i,nextCharOffset:p?m:void 0,hasMore:p,estimatedTokens:Math.ceil(c.length/4),currentPage:f,totalPages:h}}function yT(e,t=!1){return t?JSON.stringify(e,null,2):JSON.stringify(e)}function dn(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 RT(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 gP=Object.defineProperty;var y=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var hP=(e,t)=>{for(var n in t)gP(e,n,{get:t[n],enumerable:!0})};import{withSecurityValidation as yP,withBasicSecurityValidation as bP}from"@octocodeai/octocode-engine/security";function pf(e,t){let n=yP(e,(r,o,i)=>t(r,o,i));return(r,o)=>n(r,o)}function ff(e,t){let n=bP(r=>e(r),t);return(r,o)=>n(r,o)}var Oc=y(()=>{"use strict"});var ot,xe,sN,aN,mf,pn,gf,hf,Gi,Ut,Bn,Hi,yf,Qn,bf,zi,Rf,me=y(()=>{"use strict";ot=30,xe=100,sN=10,aN=100,mf=200,pn=20,gf=100,hf=20,Gi=50,Ut=1e4,Bn=20,Hi=1e3,yf=100,Qn=5e4,bf=8e3,zi=1e5,Rf=500});var vc,Yr,Xr,RP,jt,Un,qe,SP,Jr,CP,lN,ft=y(()=>{"use strict";vc={NOT_INITIALIZED:{code:"CONFIG_NOT_INITIALIZED",message:"Configuration not initialized. Call initialize() and await its completion before calling getServerConfig()."}},Yr={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"}},Xr={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})`}},RP={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"}},jt={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}`}},Un={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"}},qe={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}`}},SP={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}`}},Jr={TIMEOUT:{code:"PROMISE_TIMEOUT",message:(e,t)=>`Promise ${e} timed out after ${t}ms`},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"}},CP={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}`}},lN={...vc,...Yr,...Xr,...RP,...jt,...Un,...qe,...SP,...Jr,...CP}});var $,PP,Sf,jn=y(()=>{"use strict";$={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"},PP=(i=>(i.FILE_SYSTEM="FILE_SYSTEM",i.VALIDATION="VALIDATION",i.SEARCH="SEARCH",i.PAGINATION="PAGINATION",i.EXECUTION="EXECUTION",i))(PP||{}),Sf={[$.PATH_VALIDATION_FAILED]:{code:$.PATH_VALIDATION_FAILED,category:"VALIDATION",description:"Path validation failed - invalid or unsafe path",recoverability:"user-action-required"},[$.FILE_ACCESS_FAILED]:{code:$.FILE_ACCESS_FAILED,category:"FILE_SYSTEM",description:"Cannot access file - may not exist or lack permissions",recoverability:"unrecoverable"},[$.FILE_READ_FAILED]:{code:$.FILE_READ_FAILED,category:"FILE_SYSTEM",description:"Failed to read file contents",recoverability:"unrecoverable"},[$.FILE_TOO_LARGE]:{code:$.FILE_TOO_LARGE,category:"FILE_SYSTEM",description:"File exceeds size limits for operation",recoverability:"user-action-required"},[$.BINARY_FILE_UNSUPPORTED]:{code:$.BINARY_FILE_UNSUPPORTED,category:"FILE_SYSTEM",description:"Binary file is not supported by text content reader",recoverability:"user-action-required"},[$.NO_MATCHES]:{code:$.NO_MATCHES,category:"SEARCH",description:"Search pattern found no matches",recoverability:"user-action-required"},[$.OUTPUT_TOO_LARGE]:{code:$.OUTPUT_TOO_LARGE,category:"PAGINATION",description:"Output exceeds size limits",recoverability:"user-action-required"},[$.COMMAND_NOT_AVAILABLE]:{code:$.COMMAND_NOT_AVAILABLE,category:"EXECUTION",description:"Required CLI command is not installed or not in PATH",recoverability:"user-action-required"},[$.COMMAND_EXECUTION_FAILED]:{code:$.COMMAND_EXECUTION_FAILED,category:"EXECUTION",description:"System command execution failed",recoverability:"unrecoverable"},[$.COMMAND_TIMEOUT]:{code:$.COMMAND_TIMEOUT,category:"EXECUTION",description:"Command execution timed out",recoverability:"user-action-required"},[$.TOOL_EXECUTION_FAILED]:{code:$.TOOL_EXECUTION_FAILED,category:"EXECUTION",description:"Generic tool execution failure",recoverability:"unrecoverable"}}});function Ac(e){return e instanceof De}function Cf(e,t=$.TOOL_EXECUTION_FAILED,n){if(Ac(e))return e;if(e instanceof Error)return new De(t,e.message,n,e);let r=String(e);return new De(t,r,n)}var De,Bi=y(()=>{"use strict";jn();De=class e extends Error{errorCode;category;recoverability;context;constructor(t,n,r,o){let i=Sf[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 Zr}from"@octocodeai/octocode-engine/pathUtils";var Lc=y(()=>{"use strict"});var Xe,eo=y(()=>{"use strict";Bi();jn();Lc();Xe={pathValidationFailed:(e,t,n)=>new De($.PATH_VALIDATION_FAILED,t||`Path validation failed: ${Zr(e,n)}`,{path:e}),fileAccessFailed:(e,t,n)=>{let r=Zr(e,n),o=`Cannot access file: ${r}`,i=t?.code;return i==="ENOENT"?o=`File not found: ${r}. Verify the path exists using localFindFiles.`:i==="EACCES"?o=`Permission denied: ${r}. Check file permissions.`:i==="EISDIR"?o=`Path is a directory: ${r}. Use localViewStructure instead.`:i==="ENOTDIR"?o=`Invalid path: ${r}. A component of the path is not a directory.`:i==="ENAMETOOLONG"&&(o=`Path too long: ${r}`),new De($.FILE_ACCESS_FAILED,o,{path:e,errorCode:i},t)},fileReadFailed:(e,t,n)=>new De($.FILE_READ_FAILED,`Failed to read file: ${Zr(e,n)}`,{path:e,errorCode:t?.code},t),fileTooLarge:(e,t,n)=>new De($.FILE_TOO_LARGE,(()=>{let r=o=>Number.isInteger(o)?`${o}KB`:`${o.toFixed(1)}KB`;return`File too large: ${r(t)} (limit: ${r(n)})`})(),{path:e,sizeKB:t,limitKB:n}),binaryFileUnsupported:e=>new De($.BINARY_FILE_UNSUPPORTED,`Binary file unsupported: ${Zr(e)}. Use localBinaryInspect to read its format/strings, or localSearchCode to grep embedded strings.`,{path:e}),outputTooLarge:(e,t)=>new De($.OUTPUT_TOO_LARGE,`Output too large: ${e} (limit: ${t})`,{size:e,limit:t}),commandNotAvailable:(e,t)=>new De($.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 De($.COMMAND_EXECUTION_FAILED,n?`Command '${e}' failed: ${n}`:`Command execution failed: ${e}`,{command:e,stderr:n},t),toolExecutionFailed:(e,t)=>new De($.TOOL_EXECUTION_FAILED,`Tool execution failed: ${e}`,{toolName:e},t)}});function Pt(e){return e.toLowerCase().replace(/^https?:\/\//,"").replace(/\/$/,"")}function vt(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 to(e){if(!e.token.refreshTokenExpiresAt)return!1;let t=new Date(e.token.refreshTokenExpiresAt);return isNaN(t.getTime())?!0:new Date>=t}var Qi=y(()=>{"use strict"});function wP(e){let t=Pt(e),n=no.get(t);return!n||Date.now()-n.cachedAt>=xP?!1:n.credentials?!vt(n.credentials):!0}function ro(e){e?no.delete(Pt(e)):no.clear()}function Pf(e){let t=Pt(e);if(wP(t))return no.get(t).credentials}function xf(e,t){let n=Pt(e);no.set(n,{credentials:t,cachedAt:Date.now()})}var no,xP,wf=y(()=>{"use strict";Qi();no=new Map,xP=300*1e3});import $n from"node:os";import Tf from"node:path";function Ui(){return fn?process.env.APPDATA||Tf.join(At,"AppData","Roaming"):At}function Ef(){return fn?process.env.LOCALAPPDATA||Tf.join(At,"AppData","Local"):At}function kf(){return oo?"macOS":fn?"Windows":_c?"Linux":$n.platform()}function Of(){return $n.arch()}var fn,oo,_c,At,vf=y(()=>{"use strict";fn=$n.platform()==="win32",oo=$n.platform()==="darwin",_c=$n.platform()==="linux",At=$n.homedir()});var ji=y(()=>{"use strict";vf()});import{existsSync as qn,mkdirSync as Vn}from"node:fs";import{join as ke}from"node:path";function TP(e){let t=process.env[e];return t&&t.trim().length>0?t:void 0}function Af(){return fn?ke(Ui(),Ic):oo?ke(At,Ic):ke(TP("XDG_CONFIG_HOME")??ke(At,".config"),Ic)}function $i(){qn(ne.home)||Vn(ne.home,{recursive:!0,mode:Wn})}function EP(){Lf()}function io(){$i(),qn(ne.tmp)||Vn(ne.tmp,{recursive:!0,mode:Wn})}function Lf(){io(),qn(ne.clone)||Vn(ne.clone,{recursive:!0,mode:Wn})}function kP(){io(),qn(ne.tree)||Vn(ne.tree,{recursive:!0,mode:Wn})}function OP(){io(),qn(ne.binary)||Vn(ne.binary,{recursive:!0,mode:Wn})}function vP(){io(),qn(ne.unzip)||Vn(ne.unzip,{recursive:!0,mode:Wn})}var Ic,Wn,Ne,ne,mn=y(()=>{"use strict";ji();Ic=".octocode",Wn=448;Ne=Af(),ne={home:Ne,config:ke(Ne,".octocoderc"),credentials:ke(Ne,"credentials.json"),key:ke(Ne,".key"),session:ke(Ne,"session.json"),stats:ke(Ne,"stats.json"),tmp:ke(Ne,"tmp"),clone:ke(Ne,"tmp","clone"),tree:ke(Ne,"tmp","tree"),binary:ke(Ne,"tmp","binary"),repos:ke(Ne,"tmp","clone"),unzip:ke(Ne,"tmp","unzip"),cliConfig:ke(Ne,"config.json"),lspConfig:ke(Ne,"lsp-servers.json")}});import{z as we}from"zod";var AP,LP,_f,If=y(()=>{"use strict";AP=we.object({token:we.string(),tokenType:we.literal("oauth"),scopes:we.array(we.string()).optional(),refreshToken:we.string().optional(),expiresAt:we.string().optional(),refreshTokenExpiresAt:we.string().optional()}),LP=we.object({hostname:we.string(),username:we.string(),token:AP,gitProtocol:we.enum(["ssh","https"]),createdAt:we.string(),updatedAt:we.string()}),_f=we.object({version:we.number(),credentials:we.record(we.string(),LP)})});import{existsSync as qi,readFileSync as Mf,writeFileSync as Df,unlinkSync as Ff,statSync as _P,chmodSync as IP}from"node:fs";import{createCipheriv as FP,createDecipheriv as MP,randomBytes as Nf}from"node:crypto";function $t(){$i()}function Hf(){if($t(),qi(xt))return _P(xt).mode&511&63&&IP(xt,384),Buffer.from(Mf(xt,"utf8"),"hex");let e=Nf(32);return Df(xt,e.toString("hex"),{mode:384}),e}function Vi(e){let t=Hf(),n=Nf(DP),r=FP(Gf,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 Wi(e){let t=Hf(),[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=MP(Gf,t,i);a.setAuthTag(s);let c=a.update(o,"hex","utf8");return c+=a.final("utf8"),c}function _t(){if($t(),!qi(Lt))return{version:1,credentials:{}};try{let e=Mf(Lt,"utf8"),t=Wi(e),n=JSON.parse(t),r=_f.safeParse(n);return r.success?r.data:{version:1,credentials:{}}}catch{return{version:1,credentials:{}}}}function Mc(e){$t();let t=Vi(JSON.stringify(e,null,2));Df(Lt,t,{mode:384})}function zf(){try{qi(Lt)&&Ff(Lt),qi(xt)&&Ff(xt)}catch{}}var Fc,Lt,xt,Gf,DP,Bf=y(()=>{"use strict";mn();If();Fc=ne.home,Lt=ne.credentials,xt=ne.key,Gf="aes-256-gcm",DP=16});var Kn,qt,Dc=y(()=>{"use strict";Kn="178c6fc778ccc68e1d6a",qt="github.com"});import{refreshToken as NP}from"@octokit/oauth-methods";import{request as GP}from"@octokit/request";function HP(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 zP(e){return e==="github.com"||e===qt?"https://api.github.com":`https://${e}/api/v3`}async function Nc(e,t=qt,n=Kn){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(to(r))return{success:!1,error:"Refresh token has expired. Please login again."};try{let o=await NP({clientType:"github-app",clientId:n,clientSecret:"",refreshToken:r.token.refreshToken,request:GP.defaults({baseUrl:zP(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?HP(o.message):"Token refresh failed"}}}async function Qf(e,t=qt,n=Kn){let r=await e.getCredentials(t);if(!r||!r.token)return{token:null,source:"none"};if(!vt(r))return{token:r.token.token,source:"stored",username:r.username};if(r.token.refreshToken){let o=await Nc(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 Uf=y(()=>{"use strict";Qi();Dc()});function Ki(){for(let e of Yn){let t=process.env[e];if(t&&t.trim())return t.trim()}return null}function Gc(){for(let e of Yn){let t=process.env[e];if(t&&t.trim())return`env:${e}`}return null}function Hc(){return Ki()!==null}function jf(){for(let e of Yn){let t=process.env[e];if(t?.trim())return{token:t.trim(),source:`env:${e}`}}return null}var Yn,zc=y(()=>{"use strict";Yn=["OCTOCODE_TOKEN","GH_TOKEN","GITHUB_TOKEN"]});import{execFile as BP}from"child_process";function Yi(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=QP.filter(a=>!o.has(a)),s=i.length?`${i.join(":")}:${r}`:r;BP("gh",n,{encoding:"utf8",timeout:5e3,env:{...process.env,PATH:s}},(a,c)=>{if(a||!c){t(null);return}t(c.trim()||null)})})}var QP,Bc=y(()=>{"use strict";QP=["/opt/homebrew/bin","/usr/local/bin","/home/linuxbrew/.linuxbrew/bin"]});function $f(e){Xi=e}function Qc(){Xi=null}function UP(){if(!Xi)throw new Error("Token resolution not initialized. Call initTokenResolution() first.");return Xi}async function Vt(e){let t=e?.hostname??qt,n=e?.clientId??Kn,r=e?.getGhCliToken??Yi,o=jf();if(o)return{token:o.token,source:o.source,wasRefreshed:!1};let i=await UP().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{}return null}async function Uc(e=qt){let t=await Vt({hostname:e,getGhCliToken:()=>null});return t?{token:t.token,source:t.source}:null}async function jc(e=qt,t=Kn){let n=await Vt({hostname:e,clientId:t,getGhCliToken:()=>null});return n?{token:n.token,source:n.source,wasRefreshed:n.wasRefreshed,username:n.username}:null}var Xi,qf=y(()=>{"use strict";zc();Bc();Dc();Xi=null});async function $c(e){let t=Pt(e.hostname),n={...e,hostname:t,updatedAt:new Date().toISOString()};try{let r=_t();return r.credentials[t]=n,Mc(r),ro(t),{success:!0}}catch{throw new Error("Failed to store credentials")}}async function gn(e="github.com",t){let n=Pt(e);if(!t?.bypassCache){let i=Pf(n);if(i!==void 0)return i}let o=_t().credentials[n]||null;return xf(n,o),o}function Ji(e="github.com"){let t=Pt(e);return _t().credentials[t]||null}async function Vf(e="github.com"){let t=Pt(e),n=!1,r=_t();return r.credentials[t]&&(delete r.credentials[t],Object.keys(r.credentials).length===0?zf():Mc(r),n=!0),ro(t),{success:n,deletedFromFile:n}}async function Wf(){let e=_t();return Object.keys(e.credentials)}function Kf(){let e=_t();return Object.keys(e.credentials)}async function Yf(e="github.com"){return await gn(e)!==null}function Xf(e="github.com"){return Ji(e)!==null}async function Zi(e,t){let n=await gn(e);return n?(n.token=t,n.updatedAt=new Date().toISOString(),await $c(n),!0):!1}function Jf(){return Lt}async function Zf(e="github.com"){let t=await gn(e);return!t||!t.token||vt(t)?null:t.token.token}function em(e="github.com"){let t=Ji(e);return!t||!t.token||vt(t)?null:t.token.token}async function tm(e,t){return Nc({getCredentials:gn,updateToken:Zi},e,t)}async function qc(e,t){return Qf({getCredentials:gn,updateToken:Zi},e,t)}var Vc=y(()=>{"use strict";wf();Bf();Uf();qf();zc();Qi();$f({getTokenWithRefresh:qc})});var Wc=y(()=>{"use strict";Vc();Bc()});import{z as K}from"zod";var jP,$P,es,qP,ts,nm,rm,om=y(()=>{"use strict";jP=K.object({rawChars:K.number(),responseChars:K.number(),savedChars:K.number(),calls:K.number()}),$P=K.object({hits:K.record(K.string(),K.number()).default({}),rateLimits:K.number().default(0)}),es=K.record(K.string(),K.number()).default({}),qP=K.object({toolCalls:K.number(),errors:K.number(),rateLimits:K.number(),rateLimitsByProvider:es,rawChars:K.number(),responseChars:K.number(),savedChars:K.number(),charSavingsCalls:K.number(),githubCacheHits:K.number(),githubCacheRateLimits:K.number(),packageRegistryFailures:K.number().default(0),packageRegistryFailuresByRegistry:es}),ts=K.object({toolCalls:K.number(),errors:K.number(),rateLimits:K.number(),rateLimitsByProvider:es,charsSavedByTool:K.record(K.string(),jP).default({}),githubCacheHits:$P.default({hits:{},rateLimits:0}),packageRegistryFailures:es,totalUsage:qP.optional()}),nm=K.object({version:K.literal(1),sessionId:K.string(),createdAt:K.string(),lastActiveAt:K.string(),stats:ts.optional()}),rm=K.object({version:K.literal(1),stats:ts})});function im(e){return Object.values(e).reduce((t,n)=>t+n,0)}function VP(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:im(n.hits),githubCacheRateLimits:n.rateLimits,packageRegistryFailures:im(o),packageRegistryFailuresByRegistry:o}}function It(e){let t={...e,rateLimitsByProvider:e.rateLimitsByProvider??{},charsSavedByTool:e.charsSavedByTool??{},githubCacheHits:e.githubCacheHits??{hits:{},rateLimits:0},packageRegistryFailures:e.packageRegistryFailures??{}};return{...t,totalUsage:VP(t)}}function so(){return It({toolCalls:0,errors:0,rateLimits:0,rateLimitsByProvider:{},charsSavedByTool:{},githubCacheHits:{hits:{},rateLimits:0},packageRegistryFailures:{}})}var Kc=y(()=>{"use strict"});import{existsSync as Yc,readFileSync as am,writeFileSync as WP,unlinkSync as KP,renameSync as YP}from"node:fs";function sm(e,t){let n=`${e}.tmp`;WP(n,JSON.stringify(t,null,2),{mode:384}),YP(n,e)}function XP(e){let{stats:t,...n}=e;return n}function JP(e){let t=JSON.parse(e),n=rm.safeParse(t);if(n.success)return It(n.data.stats);let r=ts.safeParse(t);return r.success?It(r.data):null}function ZP(e){let t=e?It(e):so();if(!Yc(yn))return t;try{let n=am(yn,"utf8"),r=JP(n);return r||t}catch{return t}}function ns(e){$t(),sm(yn,{version:e.version,stats:It(e.stats)}),sm(hn,XP(e))}function cm(){if(!Yc(hn))return null;try{let e=am(hn,"utf8"),t=JSON.parse(e),n=nm.safeParse(t);return n.success?{...n.data,stats:ZP(n.data.stats)}:null}catch{return null}}function lm(){let e=!1;for(let t of[hn,yn])if(Yc(t))try{KP(t),e=!0}catch{return!1}return e}var hn,yn,rs=y(()=>{"use strict";Vc();mn();om();Kc();hn=ne.session,yn=ne.stats});function tx(){Xc||(Xc=!0,ao=()=>{uo()},co=()=>{uo()},lo=()=>{uo()},process.on("exit",ao),process.on("SIGINT",co),process.on("SIGTERM",lo))}function Jc(){ao&&(process.removeListener("exit",ao),ao=null),co&&(process.removeListener("SIGINT",co),co=null),lo&&(process.removeListener("SIGTERM",lo),lo=null),Xc=!1}function nx(){Xn||(Xn=setInterval(()=>{Wt&&mt&&(ns(mt),Wt=!1)},ex),Xn.unref())}function Zc(){Xn&&(clearInterval(Xn),Xn=null)}function po(){if(mt)return mt;let e=cm();return e&&(mt=e),e}function Jn(e){mt=e,Wt=!0,tx(),nx()}function fo(){Wt&&mt&&(ns(mt),Wt=!1)}function uo(){if(!os&&Wt&&mt){os=!0;try{ns(mt),Wt=!1}catch{}finally{os=!1}}}function el(){mt=null,Wt=!1,os=!1}function um(){el(),Zc(),Jc()}var ex,mt,Wt,Xn,Xc,ao,co,lo,os,dm=y(()=>{"use strict";rs();ex=6e4,mt=null,Wt=!1,Xn=null,Xc=!1,ao=null,co=null,lo=null,os=!1});import{randomUUID as rx}from"node:crypto";function ix(e){return It(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 pm(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 fm(){let e=new Date().toISOString();return{version:ox,sessionId:rx(),createdAt:e,lastActiveAt:e,stats:so()}}function mm(){fo()}function gm(){uo()}function hm(e){if(e?.forceNew){let r=fm();return Jn(r),fo(),r}let t=po();if(t){let r={...t,lastActiveAt:new Date().toISOString()};return Jn(r),fo(),r}let n=fm();return Jn(n),fo(),n}function ym(){return po()?.sessionId??null}function Je(e){let t=po();if(!t)return{success:!1,session:null};let n=ix(t.stats),r=It({toolCalls:n.toolCalls+(e.toolCalls??0),errors:n.errors+(e.errors??0),rateLimits:n.rateLimits+(e.rateLimits??0),rateLimitsByProvider:pm(n.rateLimitsByProvider,e.rateLimitsByProvider),charsSavedByTool:sx(n.charsSavedByTool,e.charsSavedByTool),githubCacheHits:ax(n.githubCacheHits,e.githubCacheHits),packageRegistryFailures:pm(n.packageRegistryFailures,e.packageRegistryFailures)}),o={...t,lastActiveAt:new Date().toISOString(),stats:r};return Jn(o),{success:!0,session:o}}function bm(e=1){return Je({toolCalls:e})}function Rm(e=1){return Je({errors:e})}function is(e=1){return Je({rateLimits:e})}function Sm(e,t=1){return Je({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 Je({charsSavedByTool:{[e]:{rawChars:r,responseChars:o,savedChars:Math.max(0,r-o),calls:1}}})}function as(e,t=1){return Je({githubCacheHits:{hits:{[e]:t},rateLimits:0}})}function cs(e=1){return Je({githubCacheHits:{hits:{},rateLimits:e}})}function Cm(e,t=1){return Je({packageRegistryFailures:{[e]:t}})}function Pm(){let e=po();if(!e)return{success:!1,session:null};let t={...e,lastActiveAt:new Date().toISOString(),stats:so()};return Jn(t),{success:!0,session:t}}function xm(){return el(),Zc(),Jc(),lm()}function wm(){um()}var ox,mo=y(()=>{"use strict";rs();Kc();dm();rs();ox=1});var tl=y(()=>{"use strict";mo();mo();mo();mo()});var go,Tm,nl=y(()=>{"use strict";go=1,Tm=".octocoderc"});var ho,Kt,bn,Zn,yo,Ft,ls,er,tr,nr,rr,or,ir,bo=y(()=>{"use strict";ho={apiUrl:"https://api.github.com"},Kt={enabled:!1,enableClone:!1,allowedPaths:[],workspaceRoot:void 0},bn={enabled:null,enableAdditional:null,disabled:null},Zn={timeout:3e4,maxRetries:3},yo={configPath:void 0},Ft={format:"yaml",pagination:{defaultCharLength:2e4}},ls={version:1,github:ho,local:Kt,tools:bn,network:Zn,lsp:yo,output:Ft},er=5e3,tr=3e5,nr=0,rr=10,or=1e3,ir=5e4});import{z as ye}from"zod";var us,rl=y(()=>{"use strict";us=ye.looseObject({$schema:ye.string().optional(),version:ye.number().int().optional(),github:ye.record(ye.string(),ye.unknown()).optional(),local:ye.record(ye.string(),ye.unknown()).optional(),tools:ye.record(ye.string(),ye.unknown()).optional(),network:ye.record(ye.string(),ye.unknown()).optional(),lsp:ye.record(ye.string(),ye.unknown()).optional(),output:ye.record(ye.string(),ye.unknown()).optional()})});import{existsSync as Em,readFileSync as cx}from"node:fs";function lx(e){let t="",n=0,r=!1,o="";for(;n<e.length;){let i=e[n],s=e[n+1];if(!r&&(i==='"'||i==="'")){r=!0,o=i,t+=i,n++;continue}if(r){if(t+=i,i==="\\"&&n+1<e.length){t+=e[n+1],n+=2;continue}i===o&&(r=!1),n++;continue}if(i==="/"&&s==="/"){for(;n<e.length&&e[n]!==`
|
|
10
|
+
`;)n++;continue}if(i==="/"&&s==="*"){for(n+=2;n<e.length-1;){if(e[n]==="*"&&e[n+1]==="/"){n+=2;break}n++}continue}t+=i,n++}return t=t.replace(/,(\s*[}\]])/g,"$1"),t}function ux(e){let t=lx(e);return JSON.parse(t)}function km(){return Em(Ro)}async function Om(){return So()}function So(){let e=Ro;if(!Em(e))return{success:!1,error:"Config file does not exist",path:e};try{let t=cx(e,"utf-8");if(!t.trim())return{success:!0,config:{},path:e};let n=ux(t),r=us.safeParse(n);return r.success?{success:!0,config:r.data,path:e}:{success:!1,error:`Config file has invalid structure: ${r.error.issues[0]?.message??"unknown error"}`,path:e}}catch(t){return{success:!1,error:`Failed to parse config file: ${t instanceof Error?t.message:"Unknown error"}`,path:e}}}function vm(){return Ro}function Rn(){return ne.home}var Ro,ds=y(()=>{"use strict";mn();rl();Ro=ne.config});function dx(e,t){if(e==null)return null;if(typeof e!="string")return`${t}: Must be a string`;try{let n=new URL(e);return["http:","https:"].includes(n.protocol)?null:`${t}: Only http/https URLs allowed`}catch{return`${t}: Invalid URL format`}}function il(e,t,n,r){return e==null?null:typeof e!="number"||isNaN(e)?`${t}: Must be a number`:e<n||e>r?`${t}: Must be between ${n} and ${r}`:null}function Am(e,t){return e==null?null:typeof e!="boolean"?`${t}: Must be a boolean`:null}function Lm(e,t){if(e==null)return null;if(!Array.isArray(e))return`${t}: Must be an array`;for(let n=0;n<e.length;n++)if(typeof e[n]!="string")return`${t}[${n}]: Must be a string`;return null}function px(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];typeof r=="string"&&(r.trim()===""?t.push(`local.allowedPaths[${n}]: empty or whitespace-only path`):!r.startsWith("/")&&!r.startsWith("~")?t.push(`local.allowedPaths[${n}]: must be absolute path or start with ~ (got "${r}")`):r.includes("..")&&t.push(`local.allowedPaths[${n}]: path traversal (..) not allowed (got "${r}")`))}return t}function ol(e,t){return e===void 0||e===null?null:Lm(e,t)}function _m(e,t){return e==null?null:typeof e!="string"?`${t}: Must be a string`:null}function fx(e,t){if(e==null)return;if(typeof e!="object"||Array.isArray(e)){t.push("github: Must be an object");return}let r=dx(e.apiUrl,"github.apiUrl");r&&t.push(r)}function mx(e,t){if(e==null)return;if(typeof e!="object"||Array.isArray(e)){t.push("local: Must be an object");return}let n=e,r=Am(n.enabled,"local.enabled");r&&t.push(r);let o=Am(n.enableClone,"local.enableClone");o&&t.push(o);let i=Lm(n.allowedPaths,"local.allowedPaths");if(i)t.push(i);else if(Array.isArray(n.allowedPaths)){let s=px(n.allowedPaths);t.push(...s)}if(n.workspaceRoot!==void 0&&n.workspaceRoot!==null){let s=_m(n.workspaceRoot,"local.workspaceRoot");s?t.push(s):typeof n.workspaceRoot=="string"&&!n.workspaceRoot.startsWith("/")&&!n.workspaceRoot.startsWith("~")?t.push('local.workspaceRoot: must be an absolute path or start with ~ (got "'+n.workspaceRoot+'")'):typeof n.workspaceRoot=="string"&&n.workspaceRoot.includes("..")&&t.push('local.workspaceRoot: path traversal (..) not allowed (got "'+n.workspaceRoot+'")')}}function gx(e,t){if(e==null)return;if(typeof e!="object"||Array.isArray(e)){t.push("tools: Must be an object");return}let n=e,r=ol(n.enabled,"tools.enabled");r&&t.push(r);let o=ol(n.enableAdditional,"tools.enableAdditional");o&&t.push(o);let i=ol(n.disabled,"tools.disabled");i&&t.push(i)}function hx(e,t){if(e==null)return;if(typeof e!="object"||Array.isArray(e)){t.push("network: Must be an object");return}let n=e,r=il(n.timeout,"network.timeout",er,tr);r&&t.push(r);let o=il(n.maxRetries,"network.maxRetries",nr,rr);o&&t.push(o)}function yx(e,t){if(e==null)return;if(typeof e!="object"||Array.isArray(e)){t.push("lsp: Must be an object");return}let r=_m(e.configPath,"lsp.configPath");r&&t.push(r)}function bx(e,t){if(e==null)return;if(typeof e!="object"||Array.isArray(e)){t.push("output: Must be an object");return}let n=e;if(n.format!==void 0&&(typeof n.format!="string"?t.push("output.format: Must be a string"):["yaml","json"].includes(n.format)||t.push("output.format: Must be one of: yaml, json")),n.pagination!==void 0&&n.pagination!==null)if(typeof n.pagination!="object"||Array.isArray(n.pagination))t.push("output.pagination: Must be an object");else{let r=n.pagination,o=il(r.defaultCharLength,"output.pagination.defaultCharLength",or,ir);o&&t.push(o)}}function ps(e){let t=[],n=[];if(typeof e!="object"||e===null||Array.isArray(e))return{valid:!1,errors:["Configuration must be a JSON object"],warnings:[]};let r=e;r.version!==void 0&&(typeof r.version!="number"||!Number.isInteger(r.version)?t.push("version: Must be an integer"):r.version>1&&n.push(`version: Config version ${r.version} is newer than supported version ${1}`)),fx(r.github,t),mx(r.local,t),gx(r.tools,t),hx(r.network,t),yx(r.lsp,t),bx(r.output,t);let o=new Set(["$schema","version","github","local","tools","network","lsp","output"]);for(let i of Object.keys(r))o.has(i)||n.push(`Unknown configuration key: ${i}`);return{valid:t.length===0,errors:t,warnings:n,config:t.length===0?e:void 0}}var sl=y(()=>{"use strict";nl();bo()});function al(){return globalThis[Rx]??"mcp"}var Rx,cl=y(()=>{"use strict";Rx="__octocodeRuntimeSurface__"});function Im(e){if(e==null)return;let t=e.trim().toLowerCase();if(t!==""){if(t==="true"||t==="1")return!0;if(t==="false"||t==="0")return!1}}function ll(e){if(e==null)return;let t=e.trim();if(t==="")return;let n=parseInt(t,10);if(!isNaN(n))return n}function fs(e){if(e==null)return;let t=e.trim();if(t!=="")return t.split(",").map(n=>n.trim()).filter(n=>n.length>0)}function Fm(e){return{apiUrl:process.env.GITHUB_API_URL?.trim()||e?.apiUrl||ho.apiUrl}}function Mm(e){let t=al()==="cli",n=Im(process.env.ENABLE_LOCAL),r=Im(process.env.ENABLE_CLONE),o=fs(process.env.ALLOWED_PATHS),i=process.env.WORKSPACE_ROOT?.trim()||void 0;return{enabled:t?!0:n??e?.enabled??Kt.enabled,enableClone:r??e?.enableClone??(t?!0:Kt.enableClone),allowedPaths:o??e?.allowedPaths??Kt.allowedPaths,workspaceRoot:i??e?.workspaceRoot??Kt.workspaceRoot}}function Dm(e){let t=fs(process.env.TOOLS_TO_RUN),n=fs(process.env.ENABLE_TOOLS),r=fs(process.env.DISABLE_TOOLS);return{enabled:t??e?.enabled??bn.enabled,enableAdditional:n??e?.enableAdditional??bn.enableAdditional,disabled:r??e?.disabled??bn.disabled}}function Nm(e){let t=ll(process.env.REQUEST_TIMEOUT),n=ll(process.env.MAX_RETRIES),r=t??e?.timeout??Zn.timeout;r=Math.max(er,Math.min(tr,r));let o=n??e?.maxRetries??Zn.maxRetries;return o=Math.max(nr,Math.min(rr,o)),{timeout:r,maxRetries:o}}function Gm(e){return{configPath:(process.env.OCTOCODE_LSP_CONFIG?.trim()||void 0)??e?.configPath??yo.configPath}}function Hm(e){let t=process.env.OCTOCODE_OUTPUT_FORMAT?.trim().toLowerCase(),n=ll(process.env.OCTOCODE_OUTPUT_DEFAULT_CHAR_LENGTH),r=t||e?.format||Ft.format,o=n??e?.pagination?.defaultCharLength??Ft.pagination.defaultCharLength,i=Math.max(or,Math.min(ir,o));return{format:Sx.has(r)?r:Ft.format,pagination:{defaultCharLength:i}}}var Sx,zm=y(()=>{"use strict";bo();cl();Sx=new Set(["yaml","json"])});function ul(e,t){let n=e!==void 0,r=process.env.GITHUB_API_URL!==void 0||process.env.ENABLE_LOCAL!==void 0||process.env.ENABLE_CLONE!==void 0||process.env.ALLOWED_PATHS!==void 0||process.env.WORKSPACE_ROOT!==void 0||process.env.TOOLS_TO_RUN!==void 0||process.env.ENABLE_TOOLS!==void 0||process.env.DISABLE_TOOLS!==void 0||process.env.REQUEST_TIMEOUT!==void 0||process.env.MAX_RETRIES!==void 0||process.env.OCTOCODE_LSP_CONFIG!==void 0||process.env.OCTOCODE_OUTPUT_FORMAT!==void 0||process.env.OCTOCODE_OUTPUT_DEFAULT_CHAR_LENGTH!==void 0,o;return n&&r?o="mixed":n?o="file":o="defaults",{version:e?.version??ls.version,github:Fm(e?.github),local:Mm(e?.local),tools:Dm(e?.tools),network:Nm(e?.network),lsp:Gm(e?.lsp),output:Hm(e?.output),source:o,configPath:n?t:void 0}}function Po(){let e=So();return e.success&&e.config&&ps(e.config).valid?ul(e.config,e.path):ul(void 0)}async function dl(){return Po()}function ge(){let e=Date.now();return Sn&&e-Co<Cx||(Sn=Po(),Co=e),Sn}async function ms(){return ge()}async function pl(){return sr(),ms()}function sr(){Sn=null,Co=0}function fl(){Sn=null,Co=0}function ml(){return{cached:Sn!==null,timestamp:Co}}var Sn,Co,Cx,gl=y(()=>{"use strict";bo();ds();sl();zm();Sn=null,Co=0,Cx=6e4});function Bm(e){let t=ge(),n=e.split("."),r=t;for(let o of n){if(r==null||typeof r!="object")return;r=r[o]}return r}var Qm=y(()=>{"use strict";gl();gl()});var hl=y(()=>{"use strict";nl();bo();ds();ds();sl();Qm();cl();rl()});import{existsSync as Px,readdirSync as xx,lstatSync as wx}from"node:fs";import{join as Tx}from"node:path";function xo(e){if(!Px(e))return 0;let t=0,n=[e];for(;n.length>0;){let r=n.pop(),o;try{o=xx(r)}catch{continue}for(let i of o){let s=Tx(r,i);try{let a=wx(s);if(a.isSymbolicLink())continue;a.isDirectory()?n.push(s):a.isFile()&&(t+=a.size)}catch{}}}return t}function Ex(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 yl=y(()=>{"use strict"});var Ae=y(()=>{"use strict";Wc();ji();tl();hl();mn();yl()});var Cn,gs=y(()=>{Cn="16.6.0"});import{maskSensitiveData as Ox}from"@octocodeai/octocode-engine/mask";function AH(e){e.resolveTokenFull&&(bl=e.resolveTokenFull)}function LH(){bl=Vt}async function Rl(){try{let e=await bl({hostname:"github.com"});if(e?.token){let t=e.source??"none";return{token:e.token,source:vx.has(t)?t:"none"}}return{token:null,source:"none"}}catch{return{token:null,source:"none"}}}async function Um(){if(cr!==null)return;if(ar!==null)return ar;let e=(async()=>{let t=ge(),n=await Rl();cr={version:Cn,githubApiUrl:t.github.apiUrl,toolsToRun:t.tools.enabled??void 0,enableTools:t.tools.enableAdditional??void 0,disableTools:t.tools.disabled??void 0,timeout:t.network.timeout,maxRetries:t.network.maxRetries,enableLocal:t.local.enabled,enableClone:t.local.enableClone,outputFormat:t.output.format,tokenSource:n.source}})();ar=e;try{await e}catch(t){throw ar===e&&(cr=null,ar=null),t}}function _H(){cr=null,ar=null,sr()}function hs(){if(!cr){let e=Ox(vc.NOT_INITIALIZED.message);throw new Error(e)}return cr}async function jm(){return(await Rl()).token}function IH(){return hs().enableLocal}function FH(){let e=hs();return e.enableLocal&&e.enableClone}async function MH(){return(await Rl()).source}function Sl(){return"github"}function Cl(){let e=ge().github.apiUrl;return{provider:"github",baseUrl:e!=="https://api.github.com"?e:void 0}}var cr,ar,bl,vx,lr=y(()=>{"use strict";Ae();gs();ft();cr=null,ar=null,bl=Vt;vx=new Set(["env:OCTOCODE_TOKEN","env:GH_TOKEN","env:GITHUB_TOKEN","octocode-storage","gh-cli","none"])});function Yt(e){(e.provider?Je({rateLimits:1,rateLimitsByProvider:{[e.provider]:1}}):is(1)).session&&e.provider==="github"&&cs(1)}function $m(e){Je({packageRegistryFailures:{[e]:1}})}var wo=y(()=>{"use strict";Ae()});import{Octokit as Ax}from"octokit";import{throttling as Lx}from"@octokit/plugin-throttling";import{createHash as _x}from"crypto";function Ix(e){return _x("sha256").update(e).digest("hex").substring(0,16)}function xl(e){return Date.now()-e.createdAt>Mx}function Xm(){for(let[e,t]of it.entries())xl(t)&&it.delete(e);if(it.size>Pl){let e=[...it.entries()].filter(([n])=>n!=="DEFAULT").sort((n,r)=>n[1].createdAt-r[1].createdAt),t=it.size-Pl;for(let n=0;n<t&&n<e.length;n++){let r=e[n];r&&it.delete(r[0])}}}function Nx(){Xt||(Xt=setInterval(Xm,Dx),typeof Xt=="object"&&"unref"in Xt&&Xt.unref())}function Wm(e,t,n){Yt({limit_type:e,retry_after_seconds:t,api_method:n.method,api_url:n.url,provider:"github"})}function Km(e){let t=hs(),n=t.githubApiUrl,r={debug:()=>{},info:()=>{},warn:()=>{},error:(...i)=>console.error(...i)},o={userAgent:`octocode-mcp/${Cn}`,baseUrl:n,request:{timeout:t.timeout||3e4,log:r},throttle:Gx(),log:r,...e&&{auth:e}};return new Fx(o)}async function pe(e){if(Nx(),e?.token){let n=Ix(e.token),r=it.get(n);if(r&&!xl(r))return r.client;it.size>=Pl&&Xm();let o=Km(e.token);return it.set(n,{client:o,createdAt:Date.now()}),o}let t=it.get("DEFAULT");return t&&!xl(t)?t.client:ur||(ur=(async()=>{try{let n=await jm(),r=Km(n??void 0);return it.set("DEFAULT",{client:r,createdAt:Date.now()}),r}finally{ur=null}})(),ur)}async function Ze(e,t,n){let r=`${e}/${t}`,o=dr.get(r);if(o)return o;let i=await pe(n);try{let{data:a}=await i.rest.repos.get({owner:e,repo:t}),c=a.default_branch;return Ym(r,c),c}catch{}let s=["main","master"];for(let a of s)try{return await i.rest.repos.getBranch({owner:e,repo:t,branch:a}),Ym(r,a),a}catch{}throw new Error(`Could not determine default branch for ${e}/${t}. The repository may not exist, require authentication, or be inaccessible.`)}function Ym(e,t){if(dr.size>=Hx){let n=dr.keys().next().value;n!==void 0&&dr.delete(n)}dr.set(e,t)}function qH(){it.clear(),ur=null,dr.clear(),Xt&&(clearInterval(Xt),Xt=null)}var Fx,Mx,Pl,Dx,it,ur,Xt,qm,Vm,Gx,Hx,dr,Ge=y(()=>{"use strict";lr();lr();gs();wo();Fx=Ax.plugin(Lx),Mx=300*1e3,Pl=50,Dx=60*1e3;it=new Map,ur=null,Xt=null;qm=3,Vm=60;Gx=()=>({onRateLimit:(e,t,n,r)=>(Wm("primary",e,t),r<qm&&e<Vm),onSecondaryRateLimit:(e,t,n,r)=>(Wm("secondary",e,t),r<qm&&e<Vm)});Hx=200,dr=new Map});import{createRequire as zx}from"node:module";function X(){if(ys)return ys;try{return ys=Qx(),ys}catch(e){throw new wl(e)}}var Bx,Jm,ys,Qx,wl,F,be=y(()=>{"use strict";Bx=zx(import.meta.url),Jm="@octocodeai/octocode-engine",Qx=()=>Bx(Jm),wl=class extends Error{constructor(n){super(`Failed to load native dependency ${Jm}`);this.cause=n;this.name="ContextUtilsLoadError"}cause};F={applyContentViewMinification(e,t){return X().applyContentViewMinification(e,t)},applyMinification(e,t){return X().applyMinification(e,t)},minifyContent(e,t){return X().minifyContent(e,t)},minifyContentSync(e,t){return X().minifyContentSync(e,t)},minifyContentResult(e,t){return X().minifyContentResult(e,t)},minifyMarkdownCore(e){return X().minifyMarkdownCore(e)},extractSignatures(e,t){return X().extractSignatures(e,t)},extractJsSymbols(e,t){return X().extractJsSymbols(e,t)},findInFileReferences(e,t,n,r){return X().findInFileReferences(e,t,n,r)},extractGraphFacts(e,t){return X().extractGraphFacts(e,t)},getSupportedJsTsExtensions(){return X().getSupportedJsTsExtensions()},getSupportedGraphFactExtensions(){return X().getSupportedGraphFactExtensions()},getGraphFactCapabilities(){return X().getGraphFactCapabilities()},structuralSearch(e,t,n,r){return X().structuralSearch(e,t,n,r)},structuralSearchFiles(e){return X().structuralSearchFiles(e)},getSupportedStructuralExtensions(){return X().getSupportedStructuralExtensions()},inspectBinaryNative(e){return X().inspectBinaryNative(e)},extractBinaryStringsNative(e,t,n,r=0){return X().extractBinaryStringsNative(e,t,n,r)},validateRipgrepPattern(e,t,n){return X().validateRipgrepPattern(e,t,n)},getSemanticBoundaryOffsets(e,t){return X().getSemanticBoundaryOffsets(e,t)},jsonToYamlString(e,t){return X().jsonToYamlString(e,t)},parseRipgrepJson(e,t){return X().parseRipgrepJson(e,t)},searchRipgrep(e){return X().searchRipgrep(e)},queryFileSystem(e){return X().queryFileSystem(e)},extractMatchingLines(e,t,n){return X().extractMatchingLines(e,t,n)},filterPatch(e,t){return X().filterPatch(e,t)},charToByteOffset(e,t){return X().charToByteOffset(e,t)},byteToCharOffset(e,t){return X().byteToCharOffset(e,t)},byteSliceContent(e,t,n){return X().byteSliceContent(e,t,n)},sliceContent(e,t,n,r){return X().sliceContent(e,t,n,r)},get SIGNATURES_ONLY_HINT(){return X().SIGNATURES_ONLY_HINT}}});var q,Se,Zm,Tl,El,bs,kl=y(()=>{"use strict";q={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"},Se={[q.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."},[q.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."},[q.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},[q.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)."},[q.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."},[q.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."},[q.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."},[q.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."},[q.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."},[q.UNKNOWN]:{message:"Unknown error occurred",explanation:"An unexpected error occurred that does not match known error patterns."}},Zm={401:q.AUTH_REQUIRED,403:q.FORBIDDEN_PERMISSIONS,404:q.NOT_FOUND,422:q.INVALID_REQUEST,502:q.SERVER_UNAVAILABLE,503:q.SERVER_UNAVAILABLE,504:q.SERVER_UNAVAILABLE},Tl={CONNECTION_FAILED:["ENOTFOUND","ECONNREFUSED"],TIMEOUT:["timeout"]},El={SECONDARY:/\bsecondary rate\b/i,GRAPHQL_TYPE:"RATE_LIMITED"},bs={RESET_BUFFER_SECONDS:1,SECONDARY_FALLBACK_SECONDS:60}});import{RequestError as eg}from"octokit";function Pn(e){if(!(e instanceof eg)||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 Ux.some(o=>r.includes(o))})}function re(e){return e instanceof eg?jx(e):e instanceof Error?Jx(e):{error:typeof e=="string"?e:Se[q.UNKNOWN].message,type:"unknown"}}function jx(e){let{status:t,message:n,response:r}=e;if(t===403)return qx(n,r);if(t===429)return $x(n,r);let o=Zm[t];return o?Xx(o,t):pr(q.UNKNOWN,{error:n||Se[q.UNKNOWN].message,status:t})}function Ol(e,t){let n=e?.[t],r=n===void 0?NaN:parseInt(String(n),10);return isNaN(r)?void 0:r}function $x(e,t){let n=t?.headers,r=Ol(n,"retry-after"),o=Ol(n,"x-ratelimit-reset"),i=Ol(n,"x-ratelimit-remaining")??0,s=o?new Date(o*1e3):null,a=r??(s?Math.max(Math.ceil((s.getTime()-Date.now())/1e3)+bs.RESET_BUFFER_SECONDS,0):void 0);return Yt({limit_type:"primary",retry_after_seconds:a,rate_limit_remaining:i,rate_limit_reset_ms:s?s.getTime():void 0,provider:"github"}),pr(q.RATE_LIMIT_PRIMARY,{error:e||Se[q.RATE_LIMIT_PRIMARY].messageWithoutTime,status:429,rateLimitRemaining:i,rateLimitReset:s?s.getTime():void 0,retryAfter:a,scopesSuggestion:Se[q.RATE_LIMIT_PRIMARY].suggestion})}function qx(e,t){let n=t?.headers;if(El.SECONDARY.test(e))return Vx(n);let r=n?.["x-ratelimit-remaining"],o=Yx(t);return r!==void 0&&String(r)==="0"||o?Wx(n):Kx(n)}function Vx(e){let t=Number(e?.["retry-after"]),n=isNaN(t)?bs.SECONDARY_FALLBACK_SECONDS:t;return Yt({limit_type:"secondary",retry_after_seconds:n,provider:"github"}),pr(q.RATE_LIMIT_SECONDARY,{error:Se[q.RATE_LIMIT_SECONDARY].message(n),status:403,rateLimitRemaining:0,retryAfter:n,scopesSuggestion:Se[q.RATE_LIMIT_SECONDARY].suggestion})}function Wx(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)+bs.RESET_BUFFER_SECONDS,0):void 0,i=r?Se[q.RATE_LIMIT_PRIMARY].messageWithTime(r,o):Se[q.RATE_LIMIT_PRIMARY].messageWithoutTime;return Yt({limit_type:"primary",retry_after_seconds:o,rate_limit_remaining:0,rate_limit_reset_ms:r?r.getTime():void 0,provider:"github"}),pr(q.RATE_LIMIT_PRIMARY,{error:i,status:403,rateLimitRemaining:0,rateLimitReset:r?r.getTime():void 0,retryAfter:o,scopesSuggestion:Se[q.RATE_LIMIT_PRIMARY].suggestion})}function Kx(e){let t=e?.["x-accepted-oauth-scopes"],n=e?.["x-oauth-scopes"],r=Se[q.FORBIDDEN_PERMISSIONS].suggestion;return t&&n&&(r=Zx(String(t),String(n))),pr(q.FORBIDDEN_PERMISSIONS,{error:Se[q.FORBIDDEN_PERMISSIONS].message,status:403,scopesSuggestion:r})}function Yx(e){return e?.data?.errors?.some(n=>n.type===El.GRAPHQL_TYPE)??!1}function Xx(e,t){let n=Se[e];return pr(e,{error:n.message,status:t,..."suggestion"in n&&{scopesSuggestion:n.suggestion}})}function Jx(e){return Tl.CONNECTION_FAILED.some(t=>e.message.includes(t))?{error:Se[q.NETWORK_CONNECTION_FAILED].message,type:"network",scopesSuggestion:Se[q.NETWORK_CONNECTION_FAILED].suggestion}:Tl.TIMEOUT.some(t=>e.message.includes(t))?{error:Se[q.REQUEST_TIMEOUT].message,type:"network",scopesSuggestion:Se[q.REQUEST_TIMEOUT].suggestion}:{error:e.message,type:"unknown"}}function pr(e,t){return{type:"http",...t}}function Zx(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?Se[q.FORBIDDEN_PERMISSIONS].suggestionWithScopes(o):Se[q.FORBIDDEN_PERMISSIONS].fallbackSuggestion}var Ux,wt=y(()=>{"use strict";kl();wo();Ux=["cannot be searched","do not exist","does not exist","could not be found","cannot be found"]});function ew(e){return`user:${e}`}function tg(e){return e.startsWith('"')||rw.test(e)?e:`"${e.replace(/"/g,'\\"')}"`}function ng(e){return new vl().addQueryTerms(e).addSearchFilters(e).addOwnerRepo(e).addMatchFilters(e).build()}function rg(e){return new Al().addQueryTerms(e).addOwnerRepo(e).addRepoFilters(e).addMatchFilters(e).addQualityFilters(e).build()}function og(e){return new Ll().addBasicFilters(e).addOwnerRepo(e).addStateFilters(e).addUserFilters(e).addBranchFilters(e).addDateFilters(e).addEngagementFilters(e).addReviewFilters(e).addOrganizationFilters(e).addNegativeFilters(e).addMiscFilters(e).build()}function ig(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.involves!==void 0||e["reviewed-by"]!==void 0||e["review-requested"]!==void 0||e.reactions!==void 0||e.comments!==void 0||e.interactions!==void 0||e["no-assignee"]!==void 0||e["no-label"]!==void 0||e["no-milestone"]!==void 0||e["no-project"]!==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["team-mentions"]!==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 tw,nw,rw,To,vl,Al,Ll,Eo=y(()=>{"use strict";tw=/[@/]/,nw=/(?:^|\/)([^/]+\.[A-Za-z][A-Za-z0-9]{0,9})$/,rw=/^[A-Za-z0-9_-]+$/;To=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(ew(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=tw.test(t)&&!t.startsWith('"')?`"${t}"`:t;this.queryParts.push(`${n}:${o}`)}return this}build(){return this.queryParts.join(" ").trim()}},vl=class extends To{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(tg))}return this}addSearchFilters(t){let n=t.path,r=t.filename,o=typeof n=="string"&&!r?n.match(nw):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}},Al=class extends To{addQueryTerms(t){return Array.isArray(t.keywords)&&t.keywords.length>0&&this.queryParts.push(...t.keywords.map(tg)),this}addRepoFilters(t){this.addArrayFilter(t.topicsToSearch,"topic"),this.addSimpleFilter(t.stars,"stars"),this.addSimpleFilter(t.size,"size"),this.addSimpleFilter(t.created,"created"),t.updated&&this.queryParts.push(`pushed:${t.updated}`),t.language&&this.queryParts.push(`language:${t.language}`);let n=t;return typeof n.forks=="string"&&this.queryParts.push(`forks:${n.forks}`),typeof n.license=="string"&&this.queryParts.push(`license:${n.license}`),typeof n.goodFirstIssues=="string"&&this.queryParts.push(`good-first-issues:${n.goodFirstIssues}`),this}addMatchFilters(t){return t.match&&(Array.isArray(t.match)?t.match:[t.match]).forEach(r=>{r==="name"?this.queryParts.push("in:name"):r==="description"?this.queryParts.push("in:description"):r==="readme"&&this.queryParts.push("in:readme")}),this}addQualityFilters(t){let n=t,r=n?.archived;this.queryParts.push(r===!0?"archived:true":"is:not-archived");let o=n?.visibility;return o==="public"?this.queryParts.push("is:public"):o==="private"&&this.queryParts.push("is:private"),this}},Ll=class extends To{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.involves,"involves"),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}addEngagementFilters(t){return this.addSimpleFilter(t.comments,"comments"),this.addSimpleFilter(t.reactions,"reactions"),this.addSimpleFilter(t.interactions,"interactions"),this}addReviewFilters(t){return t.review&&this.queryParts.push(`review:${t.review}`),this}addOrganizationFilters(t){return this.addArrayFilter(t.label,"label",!0),t.milestone&&this.queryParts.push(`milestone:"${t.milestone}"`),this}addNegativeFilters(t){return t["no-assignee"]&&this.queryParts.push("no:assignee"),t["no-label"]&&this.queryParts.push("no:label"),t["no-milestone"]&&this.queryParts.push("no:milestone"),t["no-project"]&&this.queryParts.push("no:project"),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["team-mentions"]&&this.queryParts.push(`team:${t["team-mentions"]}`),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}}});import ow from"node-cache";import iw from"crypto";function cw(e){return e.match(/^v\d+-([^:]+):/)?.[1]}function lw(e){return e.startsWith("gh-api-")||e.startsWith("gh-repo-")||e==="github-user"}function uw(e){let t=cw(e);if(!(!t||!lw(t)))try{as(t,1)}catch{}}function dw(){let e=Date.now();for(let[t,n]of fr.entries())e-n.startedAt>aw&&fr.delete(t)}function fw(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(pw.has(o)){n=!0;continue}r[o]=t[o]}return n?r:e}function He(e,t,n){let r=_l(fw(t)),o=n?`${n}:${r}`:r,i=iw.createHash("sha256").update(o).digest("hex");return`${sw}-${e}:${i}`}function _l(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=>_l(o,t)).join(",")}]`:`{${Object.keys(e).sort().map(o=>{let i=e[o];return`"${o}":${_l(i,t)}`}).join(",")}}`)}function mw(e){return sg[e]||sg.default}function gw(e,t,n){try{return st.set(e,t,n),Le.sets++,Le.totalKeys=st.keys().length,!0}catch{try{let r=st.keys();for(let o of r)st.get(o);return st.set(e,t,n),Le.sets++,Le.totalKeys=st.keys().length,!0}catch{return!1}}}async function ze(e,t,n={}){if(n.skipCache)return await t();if(!n.forceRefresh)try{let i=st.get(e);if(i!==void 0)return Le.hits++,uw(e),i}catch{}dw();let r=fr.get(e);if(r)return r.promise;let o=(async()=>{try{let i=await t();if(n.forceRefresh||Le.misses++,(n.shouldCache??(()=>!0))(i)){let a=n.ttl;if(!a){let l=e.match(/^v\d+-([^:]+):/)?.[1]??"default";a=mw(l)}gw(e,i,a)}return i}finally{fr.delete(e)}})();return fr.set(e,{promise:o,startedAt:Date.now()}),o}function iz(){st.flushAll(),fr.clear(),Le.hits=0,Le.misses=0,Le.sets=0,Le.totalKeys=0,Le.lastReset=new Date}function Jt(e){let t=st.keys(),n=0;for(let r of t){let i=r.match(/^v\d+-([^:]+):/)?.[1];!i||!i.startsWith(e)||st.del(r)>0&&n++}return n>0&&(Le.totalKeys=st.keys().length),n}function sz(){return Jt("local-")}function az(){return Jt("lsp-")}function cz(){let e=0;return e+=Jt("gh-api-"),e+=Jt("bb-api-"),e+=Jt("gh-repo-"),e+=Jt("bb-repo-"),e+=Jt("github-user"),e+=Jt("npm-search"),e}function lz(){let e=Le.hits+Le.misses;return{...Le,hitRate:e>0?Le.hits/e*100:0,cacheSize:st.keys().length}}var sw,aw,st,Le,sg,fr,pw,Mt=y(()=>{"use strict";Ae();sw="v1",aw=300*1e3,st=new ow({stdTTL:86400,checkperiod:300,maxKeys:5e3,deleteOnExpire:!0,useClones:!1}),Le={hits:0,misses:0,sets:0,totalKeys:0,lastReset:new Date},sg={"gh-api-code":3600,"gh-api-repos":7200,"gh-api-prs":1800,"gh-api-file-content":300,"gh-repo-structure-api":7200,"github-user":900,"npm-search":14400,default:86400},fr=new Map;pw=new Set([])});import{DISCOVERY_IGNORED_FILE_EXTENSIONS as fz,DISCOVERY_IGNORED_FILE_NAMES as mz,DISCOVERY_IGNORED_FOLDER_NAMES as gz,getDiscoveryExtension as ag,shouldIgnoreDiscoveryDir as ko,shouldIgnoreDiscoveryFile as mr}from"@octocodeai/octocode-engine/security";var gr=y(()=>{"use strict"});function U(e){if(typeof e=="string")return e.length;try{return JSON.stringify(e)?.length??0}catch{return String(e).length}}function lg(e){if(!(typeof e!="number"||!Number.isFinite(e)))return Math.max(0,e)}function j(e,t){let n=typeof t=="number"?lg(t):U(t);if(n===void 0)return e;try{Object.defineProperty(e,cg,{value:n,enumerable:!1,configurable:!0})}catch{}return e}function le(e){if(!(typeof e!="object"||e===null))return lg(e[cg])}var cg,oe=y(()=>{"use strict";cg=Symbol.for("octocode.rawResponseChars")});function Rs(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}var Ss=y(()=>{"use strict"});import{ContentSanitizer as hw}from"@octocodeai/octocode-engine/contentSanitizer";async function dg(e,t,n){let r=He("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},n);return await ze(r,async()=>await yw(e,t),{shouldCache:i=>"data"in i&&!i.error})}async function yw(e,t){try{let n=await pe(t);if(e.keywords&&e.keywords.length>0&&e.keywords.filter(S=>S&&S.trim()).length===0)return{error:qe.QUERY_EMPTY.message,type:"http",status:400};let r=ng(e);if(!r.trim())return{error:qe.QUERY_EMPTY.message,type:"http",status:400};let o=Math.min(typeof e.limit=="number"?e.limit:ug,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 bw(a.data.items,a.data.total_count),l=a.data.incomplete_results===!0,u=c.total_count,d=Math.min(u,1e3),p=Math.min(Math.ceil(d/o),10),f=Math.min(i,Math.max(1,p)),m=f<p,g=Math.min(d,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:f,totalPages:p,perPage:o,totalMatches:d,reportedTotalMatches:u,reachableTotalMatches:g,totalMatchesKind:"reported",totalMatchesCapped:u>d,hasMore:m,...m?{nextPage:f+1}:{},uniqueFileCount:c._researchContext?.uniqueFileCount}},status:200,headers:Rs(a.headers),rawResponseChars:U(a.data)}}catch(n){if(Pn(n)){let o=Math.min(typeof e.limit=="number"?e.limit:ug,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 re(n)}}async function bw(e,t){let n=Rw(e),r=new Set,o=!1,i=[],s=new Set,a=e.filter(f=>!mr(f.path)),c=0,l=0,u=await Promise.allSettled(a.map(async f=>{s.add(f.path);let m=[],g=await Promise.allSettled((f.text_matches||[]).map(async _=>{let E=_.fragment,O=hw.sanitizeContent(E||"",f.path);E=O.content,O.hasSecrets&&r.add(`Secrets detected in ${f.path}: ${O.secretsDetected.join(", ")}`),O.warnings.length>0&&O.warnings.forEach(w=>r.add(`${f.path}: ${w}`));try{let w=await F.minifyContent(E||"",f.path);E=w.content,w.failed?o=!0:w.type!=="failed"&&(m.push(w.type),i.push(w.type))}catch{o=!0}return{context:E||"",positions:_.matches?.map(w=>Array.isArray(w.indices)&&w.indices.length>=2?[w.indices[0],w.indices[1]]:[0,0])||[]}})),b=g.filter(_=>_.status==="fulfilled").map(_=>_.value),S=g.filter(_=>_.status==="rejected").length;S>0&&(l+=S);let C=f,k=Array.from(new Set(m));return{path:f.path,matches:b,url:f.html_url,repository:{nameWithOwner:f.repository.full_name,url:f.repository.url,pushedAt:f.repository.pushed_at||void 0},...C.last_modified_at&&{lastModifiedAt:C.last_modified_at},...k.length>0&&{minificationType:k.join(",")}}})),d=u.filter(f=>f.status==="fulfilled").map(f=>f.value);c=u.filter(f=>f.status==="rejected").length;let p={items:d,total_count:t!==void 0?t:a.length,_researchContext:{uniqueFileCount:s.size,repositoryContext:n?(()=>{let f=n.full_name.split("/");return f.length===2&&f[0]&&f[1]?{owner:f[0],repo:f[1],branch:n.default_branch||void 0}:void 0})():void 0}};return n&&(p.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&&(p.matchLocations=Array.from(r)),p.minified=!o,p.minificationFailed=o,i.length>0&&(p.minificationTypes=Array.from(new Set(i))),p}function Rw(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 ug,Il=y(()=>{"use strict";be();Ge();wt();Eo();Mt();gr();ft();oe();Ss();me();ug=30});import{completeMetadata as Fl}from"@octocodeai/octocode-core";var A,Ml=y(()=>{"use strict";A=new Proxy({},{get(e,t){return Fl.toolNames[t]},ownKeys(){return Object.keys(Fl.toolNames)},getOwnPropertyDescriptor(e,t){let n=Fl.toolNames;if(t in n)return{enumerable:!0,configurable:!0,value:n[t]}}})});import{completeMetadata as Sw}from"@octocodeai/octocode-core";var Dl,Nl=y(()=>{"use strict";Dl=new Proxy({},{get(e,t){return Sw.tools[t]?.description??""}})});import{completeMetadata as Cw}from"@octocodeai/octocode-core";function Gl(e){return Object.prototype.hasOwnProperty.call(Cw.tools,e)}var Hl=y(()=>{"use strict"});import{completeMetadata as Pw}from"@octocodeai/octocode-core";function zl(){return Pw.baseSchema}var xw,Bl=y(()=>{"use strict";xw=new Proxy({},{get(e,t){return zl()[t]},ownKeys(){return Array.from(new Set([...Reflect.ownKeys(zl())]))},getOwnPropertyDescriptor(e,t){let n=zl();if(t in n)return{enumerable:!0,configurable:!0,value:n[t]}}})});var fe=y(()=>{"use strict";Ml();Nl();Hl();Bl()});import{RequestError as pg}from"octokit";async function ww(e,t,n,r,o,i,s,a){let c=await Ze(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=re(t),d=s===c?void 0:`Branch '${s}' not found. Default branch is '${c}'. Ask user: Do you want to get the file from '${c}' instead?`,p=await hg(e,r,o,i,s||c);return p.length>0&&(u.hints=[...u.hints||[],...gg(i,p)]),{...u,...d&&{scopesSuggestion:d}}}async function Tw(e,t,n,r,o,i){let s=re(t),a=await hg(e,n,r,o,i||"main");return a.length>0&&(s.hints=[...s.hints||[],...gg(o,a)]),s}async function fg(e,t){let n=e.replace(/\s/g,"");if(!n)return{error:jt.FILE_EMPTY.message,type:"unknown",status:404};try{let r=Buffer.from(n,"base64");return r.indexOf(0)!==-1?{error:jt.BINARY_FILE.message,type:"unknown",status:415}:{data:r.toString("utf-8"),status:200}}catch{return{error:jt.DECODE_FAILED.message,type:"unknown",status:422}}}async function mg(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"?fg(s,o):a==="utf-8"?{data:s,status:200}:{error:`Unsupported blob encoding: ${a}`,type:"unknown",status:415}}catch(i){return re(i)}}async function Ew(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 Ze(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(p=>p.name===a&&p.type==="file");if(!u)return{error:`File ${a} not found in ${s||"root"}`,type:"unknown",status:404};let d=await mg(e,t,n,u.sha,r);return"error"in d?d:{data:{rawContent:d.data,branch:typeof c=="string"?c:void 0,resolvedRef:typeof c=="string"?c:"HEAD"},status:200}}catch(s){return re(s)}}async function Cs(e,t){try{let n=await pe(t),{owner:r,repo:o,path:i,branch:s}=e,a={owner:r,repo:o,path:i,...s&&{ref:s}},c,l=s;try{c=await n.rest.repos.getContent(a)}catch(d){if(d instanceof pg&&d.status===404)if(s){let p=await ww(n,d,a,r,o,i,s,t);if("result"in p)c=p.result,l=p.actualBranch;else return p}else return await Tw(n,d,r,o,i,s);else{if(d instanceof pg&&d.status===413)return await Ew(n,r,o,i,s||l,t);throw d}}let u=c.data;if(Array.isArray(u))return{error:jt.PATH_IS_DIRECTORY.message(A.GITHUB_VIEW_REPO_STRUCTURE),type:"unknown",status:400};if("content"in u&&u.type==="file"){let d=typeof u.content=="string"?u.content:"",p=u.size??0,f;if(d.length>0)f=await fg(d,i);else if(p>0&&"sha"in u&&typeof u.sha=="string"&&u.sha)f=await mg(n,r,o,u.sha,i);else return{error:jt.FILE_EMPTY.message,type:"unknown",status:404};if("error"in f)return f;if(!l&&!s)try{l=await Ze(r,o,t)}catch{}return{data:{rawContent:f.data,branch:l||void 0,resolvedRef:l||s||"HEAD"},status:200,rawResponseChars:U(u)}}return{error:jt.UNSUPPORTED_TYPE.message(u.type),type:"unknown",status:415}}catch(n){return re(n)}}function gg(e,t){let n=e.split("/").pop()||"",r=t.some(i=>{let s=i.split("/").pop()||"";return s.toLowerCase()===n.toLowerCase()&&s!==n}),o=[];return r&&o.push("GitHub Contents API paths are case-sensitive. Verify exact file casing with ghViewRepoStructure."),o.push(`Did you mean: ${t.join(", ")}?`),o}async function hg(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(f=>f.name.toLowerCase()===s.toLowerCase());u&&l.push(u.path);let d=s.replace(/\.[^/.]+$/,"");return c.filter(f=>f.name===s?!1:!!f.name.startsWith(d+".")).forEach(f=>l.push(f.path)),l.length===0&&d.length>=3&&c.filter(m=>{let g=m.name.replace(/\.[^/.]+$/,"");return g!==d&&g.length>=3&&(d.startsWith(g)||g.startsWith(d))}).forEach(m=>l.push(m.path)),Array.from(new Set(l)).slice(0,3)}catch{return[]}}var Ps=y(()=>{"use strict";Ge();wt();fe();ft();oe()});import{existsSync as Lo,readFileSync as kw,writeFileSync as Ow,mkdirSync as vw,rmSync as vo,readdirSync as Aw,statSync as Lw}from"node:fs";import{join as at}from"node:path";import{createHash as _w}from"node:crypto";function tB(e){return Ql(e)}function Ql(e){return at(e,"tmp","clone")}function Rg(e){return at(e,"tmp","tree")}function Nw(e){return e?`__sp_${_w("sha256").update(e).digest("hex").substring(0,6)}`:""}function Sg(e,t,n,r,o){let i=`${r}${Nw(o)}`;return at(Ql(e),t,n,i)}function Ul(e,t,n,r){return at(Rg(e),t,n,r)}function Gw(e){return typeof e=="object"&&e!==null}function Hw(e){if(!Gw(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 jl(e){let t=at(e,bg);if(!Lo(t))return null;try{return Hw(JSON.parse(kw(t,"utf-8")))}catch{return null}}function _o(e,t){try{Ow(at(e,bg),JSON.stringify(t,null,2),"utf-8")}catch{}}function Cg(e){return Date.now()<new Date(e.expiresAt).getTime()}function Io(e){let t=jl(e);return t?Cg(t)?Lo(e)?{hit:!0,meta:t}:{hit:!1}:{hit:!1}:{hit:!1}}function zw(){let e=process.env.OCTOCODE_CACHE_TTL_MS;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return Iw}function Bw(){let e=process.env.OCTOCODE_MAX_CACHE_SIZE;if(e!=null){let t=Number(e);if(!Number.isNaN(t)&&t>0)return t}return Mw}function Qw(){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 Dw}function Fo(e,t,n,r,o,i,s){let a=new Date;return{clonedAt:a.toISOString(),expiresAt:new Date(a.getTime()+zw()).toISOString(),owner:e,repo:t,branch:n,source:r,...o?{sparsePath:o}:{},...i!=null?{sizeBytes:i}:{},...s?{commitSha:s}:{}}}function wn(e){let t=at(e,"..");try{Lo(t)||vw(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 ws(e){try{Lo(e)&&vo(e,{recursive:!0,force:!0})}catch{}}function Oo(e){try{return Lw(e).isDirectory()}catch{return!1}}function xn(e){try{return Aw(e)}catch{return[]}}function*Pg(e){for(let t of xn(e)){let n=at(e,t);if(Oo(n))for(let r of xn(n)){let o=at(n,r);if(Oo(o))for(let i of xn(o)){let s=at(o,i);Oo(s)&&(yield s)}}}}function yg(e){for(let t of[...xn(e)]){let n=at(e,t);if(Oo(n)){for(let r of[...xn(n)]){let o=at(n,r);if(Oo(o)&&xn(o).length===0)try{vo(o,{recursive:!0,force:!0})}catch{}}if(xn(n).length===0)try{vo(n,{recursive:!0,force:!0})}catch{}}}}function Uw(e){let t=0;for(let n of Pg(e))try{let r=jl(n);(!r||!Cg(r))&&(vo(n,{recursive:!0,force:!0}),t++)}catch{}return t}function jw(e){let t=[];for(let n of Pg(e)){let r=jl(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??xo(n)})}return t}function $w(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{vo(s.branchDir,{recursive:!0,force:!0}),i++,r-=s.sizeBytes,o-=1}catch{}}return i}function xg(e){if(!Lo(e))return 0;let t=0;try{t+=Uw(e)}catch{return t}yg(e);let n=$w(jw(e),Bw(),Qw());return t+=n,n>0&&yg(e),t}function xs(e){return xg(Ql(e))}function Ao(e){return xg(Rg(e))}function nB(e){hr||(xs(e),Ao(e),hr=setInterval(()=>{xs(e),Ao(e)},Fw),hr.unref())}function rB(){hr&&(clearInterval(hr),hr=null)}var Iw,Fw,Mw,Dw,bg,hr,Ts=y(()=>{"use strict";Ae();Iw=1440*60*1e3,Fw=600*1e3,Mw=2*1024*1024*1024,Dw=50,bg=".octocode-clone-meta.json",hr=null});import{writeFileSync as kg,mkdirSync as $l,existsSync as Mo,rmSync as qw,readdirSync as Vw,statSync as Og}from"node:fs";import{join as Es,dirname as vg,resolve as ql,sep as Vl}from"node:path";function Tg(){return{nonFile:0,missingDownloadUrl:0,oversized:0,binary:0,fileLimit:0,fetchFailed:0,totalSizeLimit:0,pathTraversal:0}}function Xw(e){return Object.values(e).every(t=>t===0)}function Eg(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 _g(e,t,n,r,o,i=!1){let s=Rn(),a=Ul(s,e,t,r),c=ql(Es(a,n));if(!c.startsWith(a+Vl)&&c!==a)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let l=Io(a);if(l.hit&&!i&&Mo(c)){let v=tT(c,a),D=Tg();return{localPath:c,repoRoot:a,files:v.files,fileCount:v.fileCount,totalSize:v.totalSize,complete:!0,verified:!1,...l.meta.commitSha?{commitSha:l.meta.commitSha}:{},directoryEntryCount:v.fileCount,eligibleFileCount:v.fileCount,savedFileCount:v.fileCount,skipped:D,limits:wg,warnings:Eg(!0,!1),cached:!0,expiresAt:l.meta.expiresAt,owner:e,repo:t,branch:r,directoryPath:n}}let u=await pe(o),d;try{d=(await u.rest.repos.getBranch({owner:e,repo:t,branch:r})).data.commit.sha}catch{}let{data:p}=await u.rest.repos.getContent({owner:e,repo:t,path:n,ref:r});if(!Array.isArray(p))throw new Error(`Path "${n}" is not a directory. Use type "file" to fetch file content.`);let f=p,m=Tg(),g=[];for(let v of f){if(v.type!=="file"){m.nonFile+=1;continue}if(!v.download_url){m.missingDownloadUrl+=1;continue}if(v.size>Lg){m.oversized+=1;continue}let D=ag(v.name,{lowercase:!0,leadingDot:!0});if(Yw.has(D)){m.binary+=1;continue}g.push(v)}m.fileLimit=Math.max(0,g.length-Wl);let b=g.slice(0,Wl),S=o?.token,C=await Jw(b,Ww,S);m.fetchFailed=b.length-C.length;let k=0,_=[];for(let v=0;v<C.length;v+=1){let{entry:D,content:Q}=C[v];if(k+Q.length>Ag){m.totalSizeLimit=C.length-v;break}k+=Q.length,_.push({entry:D,content:Q})}Ao(s),wn(a),Mo(c)&&qw(c,{recursive:!0,force:!0}),$l(c,{recursive:!0,mode:448});let E=[];for(let{entry:v,content:D}of _){let Q=ql(Es(a,v.path));if(!Q.startsWith(a+Vl)){m.pathTraversal+=1;continue}let ee=vg(Q);Mo(ee)||$l(ee,{recursive:!0,mode:448}),kg(Q,D,"utf-8"),E.push({path:v.path,size:D.length,type:"file"})}let O=Fo(e,t,r,"treeFetch",void 0,void 0,d);_o(a,O);let w=Xw(m),H=w,I=m.nonFile>0;return{localPath:c,repoRoot:a,files:E,fileCount:E.length,totalSize:k,complete:w,verified:H,...d?{commitSha:d}:{},...I?{hasSubdirectories:!0}:{},directoryEntryCount:f.length,eligibleFileCount:g.length,savedFileCount:E.length,skipped:m,limits:wg,warnings:Eg(w,H),cached:!1,expiresAt:O.expiresAt,owner:e,repo:t,branch:r,directoryPath:n}}async function Ig(e,t,n,r,o,i=!1){let s=Rn(),a=Ul(s,e,t,r),c=ql(Es(a,n));if(!c.startsWith(a+Vl)&&c!==a)throw new Error(`Path "${n}" escapes the repository directory. Path traversal is not allowed.`);let l=Io(a);if(!i&&l.hit&&Mo(c))return{localPath:c,repoRoot:a,path:n,size:nT(c),cached:!0,expiresAt:l.meta.expiresAt,owner:e,repo:t,branch:r};let u=await Cs({owner:e,repo:t,path:n,type:"file",branch:r,fullContent:!0,contextLines:0,minify:"none",mainResearchGoal:"Materialize GitHub file content for local research",researchGoal:`Save ${e}/${t}/${n} locally`,reasoning:"GitHub file materialization"},o);if(!("data"in u)||!u.data){let m="error"in u?u.error:void 0;throw new Error(m||`Failed to fetch ${e}/${t}/${n}`)}Ao(s),wn(a);let d=vg(c);Mo(d)||$l(d,{recursive:!0,mode:448}),kg(c,u.data.rawContent,"utf-8");let p=u.data.branch||r,f=Fo(e,t,p,"treeFetch");return _o(a,f),{localPath:c,repoRoot:a,path:n,size:u.data.rawContent.length,cached:!1,expiresAt:f.expiresAt,owner:e,repo:t,branch:p}}async function Jw(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 eT(a.download_url,n);return{entry:a,content:c}}));for(let a of s)a.status==="fulfilled"&&r.push(a.value)}return r}async function eT(e,t){try{let o=new URL(e);if(!Zw.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(),Kw);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 tT(e,t){let n=[],r=0;function o(i){let s;try{s=Vw(i)}catch{return}for(let a of s){if(a.startsWith("."))continue;let c=Es(i,a);try{let l=Og(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 nT(e){try{return Og(e).size}catch{return 0}}var Wl,Ag,Lg,Ww,Kw,Yw,wg,Zw,Kl=y(()=>{"use strict";Ae();Ge();Ps();Ts();gr();Wl=50,Ag=5*1024*1024,Lg=300*1024,Ww=5,Kw=1e4,Yw=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"]),wg={maxDirectoryFiles:Wl,maxTotalSize:Ag,maxFileSize:Lg};Zw=new Set(["raw.githubusercontent.com","objects.githubusercontent.com","github.com"])});function et(){try{return ge().output.pagination.defaultCharLength}catch{return Ft.pagination.defaultCharLength}}function gB(e){let t=Math.min(Math.max(et(),1),Fg),n=Math.max(Math.floor(e)||0,1);return Math.min(t*n,Fg)}var Fg,yr=y(()=>{"use strict";Ae();Ae();Fg=1e5});function Do(e){if(e.length===0)return[];let t=e.split(/\r?\n/);return t.length>0&&t[t.length-1]===""&&t.pop(),t}function Dt(e){return Do(e).length}var br=y(()=>{"use strict"});function rT(e,t,n){return F.byteSliceContent(e,t,n)}function ks(e,t){return F.byteToCharOffset(e,t)}function Mg(e,t){return F.charToByteOffset(e,t)}function Dg(e){return F.charToByteOffset(e,e.length)}function RB(e,t,n){let r=rT(e,t,t+n);return{charOffset:ks(e,t),charLength:r.length,text:r}}function Yl(e,t,n,r){return F.sliceContent(e,t,n,r)}var Xl=y(()=>{"use strict";be()});function Rr(e,t=0,n,r={}){let o=r.mode??"characters",i=e.length,s=Dg(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,d,p,f,m,g;if(o==="bytes"){let b=Math.min(t,s),S=Math.min(b+n,s);d=ks(e,b),p=ks(e,S),p<i&&Mg(e,p)<S&&(p+=1);let C=Yl(e,d,p-d);c=C.text,d=C.charOffset,p=C.charOffset+C.charLength,l=C.byteOffset,u=C.byteOffset+C.byteLength,f=u<s;let k=r.actualOffset??b;m=Math.floor(k/a)+1,g=Math.max(m,Math.ceil(s/a))}else{let b=Yl(e,t,n);c=b.text,d=b.charOffset,p=b.charOffset+b.charLength,l=b.byteOffset,u=b.byteOffset+b.byteLength,f=p<i;let S=r.actualOffset??d;m=Math.floor(S/a)+1,g=Math.max(m,Math.ceil(i/a))}return{paginatedContent:c,byteOffset:l,byteLength:u-l,totalBytes:s,nextByteOffset:f?u:void 0,charOffset:d,charLength:c.length,totalChars:i,nextCharOffset:f?p:void 0,hasMore:f,estimatedTokens:Math.ceil(c.length/4),currentPage:m,totalPages:g}}function PB(e,t=!1){return t?JSON.stringify(e,null,2):JSON.stringify(e)}function Ng(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 xB(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]!==`
|
|
11
11
|
`){let l=e.lastIndexOf(`
|
|
12
12
|
`,o-1);o=l===-1?0:l+1}let i=o,s=0;for(;i<r;){let l=e.indexOf(`
|
|
13
|
-
`,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
|
|
14
|
-
`,t);return n===-1?void 0:n+1}function
|
|
15
|
-
`).at(-1)??"";return t.length>0&&(t[0]===" "||t[0]===" ")}function
|
|
16
|
-
`),a={isRegex:r,caseSensitive:o,contextLines:n,maxMatches:i},c=
|
|
17
|
-
`).length,...
|
|
18
|
-
`),
|
|
19
|
-
`);let
|
|
20
|
-
`),
|
|
13
|
+
`,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 No=y(()=>{"use strict";Xl()});function sT(e){return e&&e.trim().length>0?e:iT}function Gg(e,t){return F.getSemanticBoundaryOffsets(e,sT(t)).filter(n=>Number.isInteger(n)&&n>=0&&n<=e.length)}function aT(e,t){let n=e.indexOf(`
|
|
14
|
+
`,t);return n===-1?void 0:n+1}function Go(e){let t=e.trimEnd().split(`
|
|
15
|
+
`).at(-1)??"";return t.length>0&&(t[0]===" "||t[0]===" ")}function Ho(e,t,n){let r=aT(e,Math.max(0,t));if(r!==void 0)return Gg(e,n).find(o=>o>=r&&o>t)}function EB(e,t,n,r,o){if(!Go(e))return;let i=Ho(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}}function Os(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=Gg(e,r);if(a.length===0)return{length:i,chunkMode:"char-limit"};let c=a.find(u=>u>s);return c===void 0?{length:i,chunkMode:"char-limit"}:c-s<=oT?{length:c-o,chunkMode:"semantic"}:{length:i,chunkMode:"char-limit"}}var oT,iT,vs=y(()=>{"use strict";be();oT=8e3,iT="__octocode_generic__.unknown"});function As(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(`
|
|
16
|
+
`),a={isRegex:r,caseSensitive:o,contextLines:n,maxMatches:i},c=F.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 Ls=y(()=>{"use strict";be()});function lT(e){return cT.test(e.split(/[?#]/,1)[0]??e)}function Hg(e,t){return lT(t)?dT(uT(e)):null}function _s(e,t){let n=Hg(e,t);if(n===null||n.length===0)return null;let r=[];return Bg(n,r),r.join(`
|
|
17
|
+
`)}function zg(e,t){let n=Hg(e,t);return n===null?null:n.map(Qg)}function uT(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 dT(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 Bg(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}`),Bg(n.children,t)}}function Qg(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(Qg)}}var cT,Is=y(()=>{"use strict";cT=/\.(?:md|markdown|mdx)$/i});import{ContentSanitizer as Ug}from"@octocodeai/octocode-engine/contentSanitizer";function pT(){let e=et();return Math.min(e,8e3)}function zo(e,t){return{sourceChars:e,sourceBytes:t}}function jg(e,t,n){let r=e.content??"",o=n??pT();if(r.length<=o&&t===0)return e;let i=e.path??void 0,{length:s,chunkMode:a}=Os(r,t,o,i),c=Rr(r,t,s),l;if(c.hasMore&&a==="char-limit"&&Go(c.paginatedContent)){let u=c.charOffset+c.charLength;l=Ho(r,u,i)}return{...e,content:c.paginatedContent,pagination:{currentPage:c.currentPage,totalPages:c.totalPages,hasMore:c.hasMore,charOffset:c.charOffset,charLength:c.charLength,totalChars:c.totalChars,...c.nextCharOffset!==void 0&&{nextCharOffset:c.nextCharOffset},chunkMode:a,...l!==void 0&&{nextBlockChar:l}}}}async function $g(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}}async function qg(e,t,n,r,o,i,s,a,c=5,l,u,d,p="standard"){let f=e.length,m=Buffer.byteLength(e,"utf-8"),g=p==="standard"||p==="symbols",b=g?"standard":"none",S;if(p==="symbols"){let ee=F.extractSignatures(e,o);if(ee===null){let B=_s(e,o);if(B!==null)return{owner:t,repo:n,path:o,content:B,contentView:"symbols",isSkeleton:!0,branch:r,totalLines:Dt(e),...zo(f,m),isPartial:!1,signaturesExtracted:!0,hints:[F.SIGNATURES_ONLY_HINT]};S=`minify:"symbols" is not supported for this file type (${o.split(".").pop()??"unknown"}) \u2014 falling back to standard content view.`}if(ee!==null){let B=Ug.sanitizeContent(ee,o),Me=F.applyContentViewMinification(B.content,o),Ee=[F.SIGNATURES_ONLY_HINT];return l&&Ee.push('matchString was ignored \u2014 minify:"symbols" returns the full skeleton index. Use startLine/endLine from the gutter to read the matching body.'),B.hasSecrets&&Ee.push(`Secrets detected and redacted: ${B.secretsDetected.join(", ")}`),{owner:t,repo:n,path:o,content:Me,contentView:"symbols",isSkeleton:!0,branch:r,totalLines:Dt(e),...zo(f,m),isPartial:!1,signaturesExtracted:!0,hints:Ee}}}let C=new Set,k=e,_=k.split(`
|
|
18
|
+
`),E=Dt(k),O=e,w,H,I=!1,v;if(i)O=e;else if(l){let ee=d===!0,B;try{B=As(_,l,c,u??!1,ee)}catch{return{owner:t,repo:n,path:o,content:"",branch:r,totalLines:E,...zo(f,m),matchNotFound:!0,searchedFor:l,hints:[`Invalid regex "${l}". Check syntax (e.g. escape backslashes: "\\\\w+" not "\\w+") or disable matchStringIsRegex=false for a literal search.`]}}if(B.matchCount===0){let Y=u?[`Regex "${l}" matched no lines. Verify the pattern, check flags (case-${ee?"sensitive":"insensitive"}), or use fullContent=true to inspect the file.`]:[`"${l}" not found in file${ee?" (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:E,...zo(f,m),matchNotFound:!0,searchedFor:l,hints:Y}}O=B.lines.join(`
|
|
19
|
+
`);let Me=B.matchRanges[0],Ee=B.matchRanges[B.matchRanges.length-1];s=Me.start,a=Ee.end,w=Me.start,H=Ee.end,I=!0,B.matchRanges.length>1&&(v=B.matchRanges);let Ct=B.matchingLines.slice(0,5).join(", "),dn=B.matchingLines.length>5?` and ${B.matchingLines.length-5} more`:"";C.add(B.matchCount>1?`Found ${B.matchCount} occurrences of "${l}" on lines ${Ct}${dn} \u2014 all shown as ${B.matchRanges.length} slice${B.matchRanges.length===1?"":"s"}, \xB1${c} lines of context each.`:`Found "${l}" on line ${B.matchingLines[0]}`)}else if(s!==void 0||a!==void 0){let ee=s||1,B=a||E;if(ee<1||ee>E)O=e;else if(B<ee)O=e;else{let Me=Math.max(1,ee),Ee=Math.min(E,B),Ct=_.slice(Me-1,Ee);w=Me,H=Ee,I=!0,O=Ct.join(`
|
|
20
|
+
`),B>E&&C.add(`Requested endLine ${B} adjusted to ${E} (file end)`)}}let D=Ug.sanitizeContent(O,o);if(O=g?F.applyContentViewMinification(D.content,o):D.content,D.hasSecrets&&C.add(`Secrets detected and redacted: ${D.secretsDetected.join(", ")}`),D.warnings.length>0&&D.warnings.forEach(ee=>C.add(ee)),E>2e3&&p!=="symbols"&&!l&&!s&&!a&&!i){let ee=Math.max(1,E-200);C.add(`Large file (${E} lines) \u2014 minify:"symbols" for an export index, or startLine=${ee} for the tail.`)}let Q=Array.from(C);return{owner:t,repo:n,path:o,content:O,...b!=="standard"&&{contentView:b},branch:r,totalLines:E,...zo(f,m),...I&&{startLine:w,endLine:H,isPartial:I},...v&&{matchRanges:v},...Q.length>0&&{matchLocations:Q},...(Q.length>0||S)&&{warnings:[...S?[S]:[],...Q]}}}var Jl=y(()=>{"use strict";yr();me();be();br();No();vs();Ls();Is()});async function Vg(e,t,n){let r=He("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch},n),o=await ze(r,async()=>await Cs(e,t),{shouldCache:f=>"data"in f&&!f.error,forceRefresh:e.forceRefresh===!0});if(!("data"in o)||!o.data)return o;let i=o.data.branch||o.data.resolvedRef||e.branch||"",s=await qg(o.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"};let{signaturesExtracted:a,...c}=s,l=e.charOffset??0,u=e.charLength,d=a?c:jg(c,l,u),p=(e.charOffset??0)>0;if(!e.noTimestamp&&!p)try{let f=await pe(t),m=await ze(He("gh-api-file-content",{owner:e.owner,repo:e.repo,path:e.path,branch:e.branch,ts:!0},n),()=>$g(f,e.owner,e.repo,e.path,e.branch),{shouldCache:g=>g!==null,forceRefresh:e.forceRefresh===!0});m&&(d.lastModified=m.lastModified,d.lastModifiedBy=m.lastModifiedBy)}catch{}return{data:d,status:200,rawResponseChars:o.rawResponseChars}}var Zl=y(()=>{"use strict";Ge();Mt();Ps();Jl()});function Bo(e,t=mT){let n=e?Do(e):[];return{lines:n.slice(0,t),moreCount:Math.max(0,n.length-t)}}function Wg(e,t,n){if(!e)return"";if(t===void 0&&n===void 0)return e;let r={additions:t,deletions:n};return F.filterPatch(e,r)}function Kg(e){return e?F.filterPatch(e,{trimContext:!0,contextLines:fT}):""}var fT,mT,Qo=y(()=>{"use strict";be();br();fT=2,mT=20});import{ContentSanitizer as Yg}from"@octocodeai/octocode-engine/contentSanitizer";function eu(e){let t=Yg.sanitizeContent(e.title??""),n=e.body?Yg.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 Jg(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 Uo(e,t={}){let n=t.charOffset??0,r=t.charLength??gT,o=t.charLength??hT,i=typeof e.body=="string"?F.minifyMarkdownCore(e.body):e.body,s=Jg(i,n,r,!t.includeFullBody),a=(e.comments??[]).sort((m,g)=>{let b=m.commentType==="review_inline"?0:1,S=g.commentType==="review_inline"?0:1;return b-S}),c=a.filter(m=>m.commentType==="review_inline").length,l=a.length-c,u=t.includeFullCommentDetails?a:a.slice(0,Xg),d=u.map(m=>{let g=Jg(m.body,n,o,!t.includeFullCommentDetails);return{...m,body:g.value??"",...g.pagination?{body_pagination:g.pagination}:{}}}),p=!t.includeFullCommentDetails&&(a.length>u.length||d.some(m=>"body_pagination"in m)),f=[...s.pagination&&t.includeFullBody?[`PR body paginated at charOffset=${s.pagination.charOffset}, charLength=${s.pagination.charLength}, totalChars=${s.pagination.totalChars}. Re-call with prNumber and charOffset=${s.pagination.nextCharOffset??s.pagination.totalChars} to continue this body.`]:[],...p?[`PR comments are paginated/summarized to ${Xg} comment(s) per search result with ${o} chars each. Use prNumber with content.comments={discussion:true,reviewInline:true} and charOffset to continue specific comment bodies.`]:[]];return{number:e.number,title:e.title,url:e.url,state:e.state,draft:e.draft??!1,merged:e.state==="closed"&&!!e.merged_at,created_at:e.created_at,updated_at:e.updated_at,closed_at:e.closed_at??void 0,merged_at:e.merged_at,author:e.author,...e.labels?.length?{labels:e.labels.map(m=>({id:0,name:m,color:""}))}:{},head_ref:e.head||"",...e.head_sha?{head_sha:e.head_sha}:{},base_ref:e.base||"",...e.base_sha?{base_sha:e.base_sha}:{},body:s.value,...s.pagination?{body_pagination:s.pagination}:{},comments:e.total_comment_count??a.length,...a.length>0&&{comment_details_breakdown:{inline_review:c,discussion:l}},commits:e.commits?.length||0,additions:e.file_changes?.files.reduce((m,g)=>m+g.additions,0)||e.additions||0,deletions:e.file_changes?.files.reduce((m,g)=>m+g.deletions,0)||e.deletions||0,changed_files:e.file_changes?.total_count||0,...e.file_changes&&{file_changes:e.file_changes.files?.map(m=>({filename:m.filename,status:m.status,additions:m.additions,deletions:m.deletions,patch:m.patch}))},...e.reviews&&{reviews:e.reviews},...e.commits&&{commit_details:e.commits},...d.length>0&&{comment_details:d,comment_details_shown:d.length,comment_details_total:a.length,...p?{comment_details_paginated:!0}:{}},...(e._sanitization_warnings||f.length>0)&&{_sanitization_warnings:[...e._sanitization_warnings||[],...f]}}}function jo(e){let t=Array.isArray(e.owner)?e.owner[0]||void 0:e.owner,n=Array.isArray(e.repo)?e.repo[0]||void 0:e.repo;return{owner:t,repo:n}}function Fs(e,t){let r=t.content?.patches,o=r?.mode??(t.reviewMode==="full"?"all":"none"),i=new Map(r?.ranges?.map(a=>[a.file,a])||[]),s=new Set([...r?.files??[],...i.keys()]);return o==="none"?e.map(a=>({...a,patch:void 0})):o==="selected"?e.filter(a=>s.has(a.filename)).map(a=>{let c=i.get(a.filename);return{...a,patch:a.patch?Wg(a.patch,c?.additions,c?.deletions):void 0}}):e.map(a=>({...a,patch:a.patch?Kg(a.patch):a.patch}))}var gT,hT,Xg,$o=y(()=>{"use strict";Qo();be();yr();gT=et(),hT=Math.round(et()/4),Xg=3});import{ContentSanitizer as tu}from"@octocodeai/octocode-engine/contentSanitizer";function Ms(e){let t=e.content;return!!(e.reviewMode==="full"||t?.changedFiles||t?.patches?.mode&&t.patches.mode!=="none")}function Zg(e){return e.reviewMode==="full"?{discussion:!0,reviewInline:!0}:e.content?.comments??null}function eh(e){let t=Zg(e);return t?t.discussion!==!1:!1}function th(e){let t=Zg(e);return t?t.reviewInline!==!1:!1}function nh(e){let t=e.content;return!!(e.reviewMode==="full"||t?.commits)}function rh(e){let t=e.content;return!!(e.reviewMode==="full"||t?.reviews)}function oh(e){return!!e.content?.comments?.includeBots}function ih(e){let t=e.toLowerCase();return t.endsWith("[bot]")||yT.has(t.replace(/\[bot\]$/,""))}function nu(e){return e.replace(/<!--[\s\S]*?-->/g,"").replace(/^\[vc\]:\s*#.*$/gm,"").replace(/^[A-Za-z0-9+/]{120,}={0,2}$/gm,"").replace(/\n{3,}/g,`
|
|
21
21
|
|
|
22
|
-
`).trim()}async function ma(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let p=await e.rest.issues.listComments({owner:t,repo:n,issue_number:r,per_page:100,page:a});s+=G(p.data),i.push(...p.data),c=p.data.length===100,a++}while(c);let l=o?i:i.filter(p=>!pa(p.user?.login??"")),d=i.length-l.length,u=l.map(p=>{let f=z.minifyMarkdownCore(bo(p.body??""));return{id:String(p.id),user:p.user?.login??"unknown",body:Ro.sanitizeContent(f).content,created_at:p.created_at??"",updated_at:p.updated_at??"",commentType:"discussion"}}),m=[];return d>0&&m.push(`${d} bot comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:U(u,s),note:m.length>0?m.join("; "):void 0}}catch{return{comments:U([],0)}}}async function fa(e,t,n,r){try{let{items:o,rawResponseChars:i}=await So(s=>e.rest.pulls.listReviews({owner:t,repo:n,pull_number:r,per_page:100,page:s}));return U(o.map(s=>({id:String(s.id),user:s.user?.login??"unknown",state:s.state??"",body:Ro.sanitizeContent(z.minifyMarkdownCore(bo(s.body??""))).content,submitted_at:s.submitted_at??void 0,commit_id:s.commit_id??void 0})),i)}catch{return U([],0)}}async function ha(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let p=await e.rest.pulls.listReviewComments({owner:t,repo:n,pull_number:r,per_page:100,page:a});s+=G(p.data),i.push(...p.data),c=p.data.length===100,a++}while(c);let l=o?i:i.filter(p=>!pa(p.user?.login??"")),d=i.length-l.length,u=l.map(p=>{let f=z.minifyMarkdownCore(bo(p.body??""));return{id:String(p.id),user:p.user?.login??"unknown",body:Ro.sanitizeContent(f).content,created_at:p.created_at??"",updated_at:p.updated_at??"",commentType:"review_inline",path:p.path,line:p.line??p.original_line??void 0,...p.in_reply_to_id!=null?{in_reply_to_id:p.in_reply_to_id}:{}}}),m=[];return d>0&&m.push(`${d} bot inline comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:U(u,s),note:m.length>0?m.join("; "):void 0}}catch{return{comments:U([],0)}}}async function ga(e,t,n){let r=e,{prData:o,sanitizationWarnings:i}=yo(r);i.size>0&&(o._sanitization_warnings=Array.from(i));let s=0;if(e.pull_request)try{let{owner:l,repo:d}=hn(t);if(l&&d){let u=await n.rest.pulls.get({owner:l,repo:d,pull_number:e.number});if(u.data&&(s+=G(u.data),o.head=u.data.head?.ref,o.head_sha=u.data.head?.sha,o.base=u.data.base?.ref,o.base_sha=u.data.base?.sha,o.draft=u.data.draft??!1,u.data.merged_at&&(o.merged_at=u.data.merged_at),o.additions=u.data.additions??0,o.deletions=u.data.deletions??0,Zn(t)||(o.file_changes={total_count:u.data.changed_files??0,files:[]}),Zn(t))){let m=await ya(l,d,e.number);m&&(s+=ee(m)??0,m.files=Jn(m.files,t),o.file_changes=m)}}}catch(l){D(S.GITHUB_SEARCH_PULL_REQUESTS,String(l)),o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${l instanceof Error?l.message:String(l)}`]}let a=aa(t),c=ca(t);if(a||c){let{owner:l,repo:d}=hn(t);if(l&&d){let u=da(t),m=()=>Promise.resolve({comments:U([],0)}),[{comments:p,note:f},{comments:h,note:y}]=await Promise.all([a?ma(n,l,d,e.number,u):m(),c?ha(n,l,d,e.number,u):m()]);o.comments=[...p,...h],s+=(ee(p)??0)+(ee(h)??0);let b=[f,y].filter(g=>typeof g=="string");b.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...b])}}if(ua(t))try{let{owner:l,repo:d}=hn(t);if(l&&d){let u=await fa(n,l,d,e.number);s+=ee(u)??0,o.reviews=u}}catch(l){D(S.GITHUB_SEARCH_PULL_REQUESTS,String(l)),o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${l instanceof Error?l.message:String(l)}`]}if(la(t))try{let{owner:l,repo:d}=hn(t);if(l&&d){let u=await Ra(l,d,e.number,t);u&&(s+=ee(u)??0,o.commits=u)}}catch(l){D(S.GITHUB_SEARCH_PULL_REQUESTS,String(l)),o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${l instanceof Error?l.message:String(l)}`]}return U(o,s)}async function So(e){let t=[],n=0,r=1,o=!0;do{let i=await e(r);n+=G(i.data),t.push(...i.data),o=i.data.length===100,r++}while(o);return{items:t,rawResponseChars:n}}async function ya(e,t,n,r){let o=await re(r),{items:i,rawResponseChars:s}=await So(a=>o.rest.pulls.listFiles({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return U({total_count:i.length,files:i},s)}async function qm(e,t,n,r){let o=await re(r),{items:i,rawResponseChars:s}=await So(a=>o.rest.pulls.listCommits({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return U(i,s)}async function ef(e,t,n,r){try{let i=await(await re(r)).rest.repos.getCommit({owner:e,repo:t,ref:n});return U(i.data.files||[],i.data)}catch{return null}}async function Ra(e,t,n,r,o){let i=await qm(e,t,n,o);if(!i)return null;let s=ee(i)??0,a=[...i].sort((l,d)=>{let u=l.commit.author?.date?new Date(l.commit.author.date).getTime():0;return(d.commit.author?.date?new Date(d.commit.author.date).getTime():0)-u}),c=await Promise.all(a.map(async l=>{let d=await ef(e,t,l.sha,o),u=[];return d&&(s+=ee(d)??0,u=Jn(d,r)),{sha:l.sha,message:l.commit.message,author:l.commit.author?.name||"unknown",date:l.commit.author?.date||"",files:u}}));return U(c,s)}async function qn(e,t,n,r){let{prData:o,sanitizationWarnings:i}=yo(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,Zn(t)||(o.file_changes={total_count:"changed_files"in e?e.changed_files??0:0,files:[]}),Zn(t))try{let u=await ya(a,c,e.number,r);u&&(s+=ee(u)??0,u.files=Jn(u.files,t),o.file_changes=u)}catch(u){D(S.GITHUB_SEARCH_PULL_REQUESTS,String(u)),o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${u instanceof Error?u.message:String(u)}`]}let l=aa(t),d=ca(t);if(l||d){let u=da(t),m=()=>Promise.resolve({comments:U([],0)}),[{comments:p,note:f},{comments:h,note:y}]=await Promise.all([l?ma(n,a,c,e.number,u):m(),d?ha(n,a,c,e.number,u):m()]);o.comments=[...p,...h],s+=(ee(p)??0)+(ee(h)??0);let b=[f,y].filter(g=>typeof g=="string");b.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...b])}if(ua(t))try{let u=await fa(n,a,c,e.number);s+=ee(u)??0,o.reviews=u}catch(u){D(S.GITHUB_SEARCH_PULL_REQUESTS,String(u)),o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${u instanceof Error?u.message:String(u)}`]}if(la(t))try{let u=await Ra(a,c,e.number,t,r);u&&(s+=ee(u)??0,o.commits=u)}catch(u){D(S.GITHUB_SEARCH_PULL_REQUESTS,String(u)),o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${u instanceof Error?u.message:String(u)}`]}return U(o,s)}function tf(e,t,n){return{pull_requests:[],total_count:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}async function lw(e,t,n){let r=Ee("gh-api-prs",{owner:e.owner,repo:e.repo,prNumber:e.prNumber,content:e.content,reviewMode:e.reviewMode},n);return await Te(r,async()=>await Co(e,t),{shouldCache:i=>!i.error})}async function Co(e,t){let{owner:n,repo:r,prNumber:o}=e;if(!n||!r||!o)return await D(S.GITHUB_SEARCH_PULL_REQUESTS,ne.PR_REQUIRED_PARAMS.code),{pull_requests:[],total_count:0,error:ne.PR_REQUIRED_PARAMS.message,hints:["Provide owner, repo, and prNumber"]};if(Array.isArray(n)||Array.isArray(r))return await D(S.GITHUB_SEARCH_PULL_REQUESTS,ne.PR_SINGLE_VALUES.code),{pull_requests:[],total_count:0,error:ne.PR_SINGLE_VALUES.message,hints:["Do not use array for owner or repo when fetching by number"]};try{let i=await re(t),s=await i.rest.pulls.get({owner:n,repo:r,pull_number:o}),a=s.data,c=await qn(a,e,i,t);return{pull_requests:[fn(c,{includeFullBody:!0,includeFullCommentDetails:!0})],total_count:1,rawResponseChars:G(s.data)+(ee(c)??0)}}catch(i){let s=Z(i);return await D(S.GITHUB_SEARCH_PULL_REQUESTS,ne.PULL_REQUEST_FETCH_FAILED.code),tf(s,ne.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 ba(e,t,n){return{pull_requests:[],total_count:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}function Sa(e){let t=Math.min(e.limit||30,100);return{pull_requests:[],total_count:0,pagination:{currentPage:e.page||1,totalPages:0,perPage:t,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}}}async function Ca(e,t,n){let r=Ee("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,involves:e.involves,"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,interactions:e.interactions,label:e.label,"no-assignee":e["no-assignee"],"no-label":e["no-label"],"no-milestone":e["no-milestone"],"no-project":e["no-project"],match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,reviewMode:e.reviewMode,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage},n);return await Te(r,async()=>await nf(e,t,n),{shouldCache:i=>!i.error})}async function nf(e,t,n){try{if(e.prNumber&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await Co(e,t);let r=await re(t);if(!Cs(e)&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await rf(r,e);let i=Ss(e);if(!i)return await D(S.GITHUB_SEARCH_PULL_REQUESTS,ne.NO_VALID_PARAMETERS.code),{pull_requests:[],total_count:0,error:ne.NO_VALID_PARAMETERS.message,hints:["Provide search query or filters like owner/repo"]};let s=e.sort&&e.sort!=="best-match"?e.sort:void 0,a=Math.min(e.limit||30,100),c=e.page||1,l=i,d=await r.rest.search.issuesAndPullRequests({q:i,sort:s,order:e.order||"desc",per_page:a,page:c}),u=d.data.items?.filter(P=>!!P.pull_request)||[],m=await Promise.all(u.map(async P=>await ga(P,e,r))),p=m.reduce((P,x)=>P+(ee(x)??0),0),f=m.map(P=>fn(P,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:e.charOffset,charLength:e.charLength})),h=d.data.total_count,y=Math.min(h,1e3),b=Math.min(Math.ceil(y/a),10),g=Math.min(c,Math.max(1,b)),C=g<b,T=Math.min(y,b*a);return{pull_requests:f,total_count:d.data.total_count,effectiveQuery:l,...d.data.incomplete_results&&{incomplete_results:!0},pagination:{currentPage:g,totalPages:b,perPage:a,totalMatches:y,reportedTotalMatches:h,reachableTotalMatches:T,totalMatchesKind:"reported",totalMatchesCapped:h>y,hasMore:C},rawResponseChars:G(d.data)+p}}catch(r){if(Ct(r))return Sa(e);let o=Z(r);return await D(S.GITHUB_SEARCH_PULL_REQUESTS,ne.PULL_REQUEST_SEARCH_FAILED.code),ba(o,ne.PULL_REQUEST_SEARCH_FAILED.message(o.error),["Verify authentication and search parameters"])}}async function rf(e,t){try{let n=t.owner,r=t.repo,o=Math.min(t.limit||30,100),i=t.page||1,s=await e.rest.pulls.list({owner:n,repo:r,state:(t.state==="merged"?"closed":t.state)||"open",per_page:o,page:i,sort:t.sort==="updated"?"updated":"created",direction:t.order||"desc",...t.head&&{head:t.head},...t.base&&{base:t.base}}),a=await Promise.all(s.data.map(async m=>await qn(m,t,e))),c=a.reduce((m,p)=>m+(ee(p)??0),0),l=a.map(m=>fn(m,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:t.charOffset,charLength:t.charLength})),d=s.data.length===o,u=(i-1)*o+l.length;return{pull_requests:l,total_count: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},rawResponseChars:G(s.data)+c}}catch(n){if(Ct(n))return Sa(t);let r=Z(n);return await D(S.GITHUB_SEARCH_PULL_REQUESTS,ne.PULL_REQUEST_LIST_FAILED.code),ba(r,ne.PULL_REQUEST_LIST_FAILED.message(r.error),["Verify repository access and authentication"])}}function of(e){return e?e.includes('rel="next"'):!1}function Pa(e,t){if(e)return!t||e.length<=t?e:e.slice(0,t)}async function Ea(e,t){try{let n=await re(t),r={owner:e.owner,repo:e.repo,per_page:e.perPage,page:e.page,...e.path?{path:e.path}:{},...e.branch?{sha:e.branch}:{},...e.since?{since:e.since}:{},...e.until?{until:e.until}:{},...e.author?{author:e.author}:{}},o=await n.rest.repos.listCommits(r),i=o.headers.link,s=of(i),a=o.data.map(d=>{let u=d.commit.author,m=d.commit.committer,p=m?.date??u?.date??"",f=d.commit.message,h=f.split(`
|
|
23
|
-
`)[0]??f;return{sha:d.sha,date:p,message:f,messageHeadline:h,url:d.html_url,author:{name:u?.name??"unknown",email:u?.email??"",...d.author?.login?{login:d.author.login}:{}},...m?{committer:{name:m.name??"unknown",email:m.email??"",...d.committer?.login?{login:d.committer.login}:{}}}:{}}}),c={page:e.page,perPage:e.perPage,hasMore:s,...s?{nextPage:e.page+1}:{}};if(!e.includeDiff)return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:a,pagination:c},status:200};let l=await Promise.all(a.map(async(d,u)=>{try{let m=o.data[u]?.sha??d.sha,p=await n.rest.repos.getCommit({owner:e.owner,repo:e.repo,ref:m});if(e.type==="file"&&e.path){let f=e.path,h=p.data.files?.find(y=>y.filename===f||y.previous_filename===f);if(h)return{...d,additions:h.additions,deletions:h.deletions,status:h.status,...h.patch!==void 0?{patch:Pa(h.patch,e.charLength)}:{},...h.previous_filename?{previousFilename:h.previous_filename}:{}}}else{let f=e.path,h=(p.data.files??[]).filter(y=>!f||y.filename.startsWith(f)).map(y=>({filename:y.filename,status:y.status,additions:y.additions,deletions:y.deletions,...y.patch!==void 0?{patch:Pa(y.patch,e.charLength)}:{},...y.previous_filename?{previousFilename:y.previous_filename}:{}}));return{...d,files:h}}}catch{}return d}));return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:l,pagination:c},status:200}}catch(n){return Z(n)}}var Ta=30;function wa(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 xa(e,t,n){let r=Ee("gh-api-repos",{keywords:e.keywords,topicsToSearch:e.topicsToSearch,owner:e.owner,stars:e.stars,size:e.size,created:e.created,updated:e.updated,language:e.language,match:e.match,sort:e.sort,limit:e.limit,page:e.page},n);return await Te(r,async()=>await af(e,t),{shouldCache:i=>"data"in i&&!i.error})}async function sf(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{try{i=(await t.rest.repos.listForUser({username:e.owner,per_page:n,page:r,sort:o})).data,s=void 0}catch(p){return Z(p)}}let a=i.map(p=>{let h=p.full_name.split("/"),y=h[0]||"",b=h[1]||"";return{owner:y,repo:b,defaultBranch:p.default_branch,stars:p.stargazers_count||0,description:p.description?p.description.length>150?p.description.substring(0,150)+"...":p.description:"No description",url:p.html_url,createdAt:p.created_at,updatedAt:p.updated_at,pushedAt:p.pushed_at,visibility:p.visibility,...p.topics&&p.topics.length>0&&{topics:p.topics},...p.forks_count&&p.forks_count>0&&{forksCount:p.forks_count},...p.open_issues_count&&p.open_issues_count>0&&{openIssuesCount:p.open_issues_count},...p.language&&{language:p.language},...wa(p)}}),c=a.length,l=c===n,d=(r-1)*n+c,u=s??d+(l?1:0),m=s!==void 0||!l?"exact":"lowerBound";return{data:{repositories:a,pagination:{currentPage:r,totalPages:l?r+1:r,perPage:n,totalMatches:u,reachableTotalMatches:d,totalMatchesKind:m,hasMore:l}},status:200,rawResponseChars:G(i)}}async function af(e,t){try{let n=await re(t),r=(e.keywords?.length??0)>0||(e.topicsToSearch?.length??0)>0,o=typeof e.owner=="string"?e.owner:Array.isArray(e.owner)?e.owner[0]:void 0;if(!r&&o)return await sf({owner:o,sort:e.sort,limit:e.limit,page:e.page},n);let i=bs(e);if(!i.trim())return await D(S.GITHUB_SEARCH_REPOSITORIES,ne.QUERY_EMPTY.code),{error:ne.QUERY_EMPTY.message,type:"http",status:400};let s=Math.min(e.limit||Ta,100),a=e.page||1,c={q:i,per_page:s,page:a},l=["stars","forks","help-wanted-issues","updated"];e.sort&&l.includes(e.sort)&&(c.sort=e.sort);let d=await n.rest.search.repos(c),u=d.data.items.map(g=>{let T=g.full_name.split("/"),P=T[0]||"",x=T[1]||"";return{owner:P,repo:x,defaultBranch:g.default_branch,stars:g.stargazers_count||0,description:g.description?g.description.length>150?g.description.substring(0,150)+"...":g.description:"No description",url:g.html_url,createdAt:g.created_at,updatedAt:g.updated_at,pushedAt:g.pushed_at,visibility:g.visibility,...g.topics&&g.topics.length>0&&{topics:g.topics},...g.forks_count&&g.forks_count>0&&{forksCount:g.forks_count},...g.open_issues_count&&g.open_issues_count>0&&{openIssuesCount:g.open_issues_count},...g.language&&{language:g.language},...wa(g)}}),m=d.data.total_count,p=Math.min(m,1e3),f=Math.min(Math.ceil(p/s),10),h=Math.min(a,Math.max(1,f)),y=h<f,b=Math.min(p,f*s);return{data:{repositories:u,pagination:{currentPage:h,totalPages:f,perPage:s,totalMatches:p,reportedTotalMatches:m,reachableTotalMatches:b,totalMatchesKind:"reported",totalMatchesCapped:m>p,hasMore:y}},status:200,headers:$n(d.headers),rawResponseChars:G(d.data)}}catch(n){if(Ct(n)){let r=Math.min(e.limit||Ta,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 Z(n)}}import{RequestError as uf}from"octokit";var Et={ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200};function cf(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 lf(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 _a(e,t={}){let{enableWarnings:n=!0,customHints:r=[]}=t,o=[];return o.push(...r),e.estimatedTokens&&o.push(...cf(e.estimatedTokens,n)),o.push(...lf(e)),o}function er(e,t){return e.hasMore?[`Page ${e.currentPage}/${e.totalPages}. Next: page=${e.currentPage+1}`]:[]}function Aa(e,t){let n=e._cachedItems;if(!n||n.length===0){let{_cachedItems:E,...w}=e;return w}let r=t.itemsPerPage??Et.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,m=E=>{let w=E;u&&E.startsWith(u)&&(w=E.slice(u.length),w.startsWith("/")&&(w=w.slice(1)));let O=w.lastIndexOf("/");return O===-1?".":w.slice(0,O)},p=E=>{let w=E.lastIndexOf("/");return w===-1?E:E.slice(w+1)};for(let E of l){let w=m(E.path);d[w]||(d[w]={files:[],folders:[]});let O=p(E.path);E.type==="file"?d[w].files.push(O):d[w].folders.push(O)}for(let E of Object.keys(d)){let w=d[E];w&&(w.files.sort(),w.folders.sort())}let f=Object.create(null),h=Object.keys(d).sort((E,w)=>E==="."?-1:w==="."?1:E.localeCompare(w));for(let E of h){let w=d[E];w&&(f[E]=w)}let y=l.filter(E=>E.type==="file").length,b=l.filter(E=>E.type==="dir").length,g=n.filter(E=>E.type==="file").length,C=n.filter(E=>E.type==="dir").length,T=o<s,P={currentPage:o,totalPages:s,hasMore:T,entriesPerPage:r,totalEntries:i},x=er(P,{owner:e.owner,repo:e.repo,branch:e.branch,path:u,depth:t.maxDepth??1,pageFiles:y,pageFolders:b,allFiles:g,allFolders:C}),I,Q=e._cachedFileSizeMap;if(Q){let E=new Set(l.filter($=>$.type==="file").map($=>$.path)),w=e.path==="/"?"":e.path,O=Object.create(null);for(let[$,M]of Object.entries(Q))for(let[N,se]of Object.entries(M)){let ce=$==="."?w?`${w}/${N}`:N:w?`${w}/${$}/${N}`:`${$}/${N}`;E.has(ce)&&(O[$]||(O[$]=Object.create(null)),O[$][N]=se)}Object.keys(O).length>0&&(I=O)}return{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,apiSource:e.apiSource,summary:{totalFiles:g,totalFolders:C,truncated:T,filtered:!0,originalCount:i},structure:f,...I!==void 0&&{fileSizeMap:I},...Q!==void 0&&{_cachedFileSizeMap:Q},pagination:P,hints:x,rawResponseChars:e.rawResponseChars}}async function Po(e,t,n,r,o,i,s,a=new Set){if(i>s||a.has(o))return U([],0);a.add(o);try{let c=await e.rest.repos.getContent({owner:t,repo:n,path:o||"",ref:r}),l=G(c.data),u=(Array.isArray(c.data)?c.data:[c.data]).map(p=>({name:p.name,path:p.path,type:p.type,size:"size"in p?p.size:void 0,download_url:"download_url"in p?p.download_url:void 0,url:p.url,html_url:p.html_url,git_url:p.git_url,sha:p.sha})),m=[...u];if(i<s){let p=u.filter(h=>h.type==="dir"),f=3;for(let h=0;h<p.length;h+=f){let b=p.slice(h,h+f).map(async C=>{try{let T=await Po(e,t,n,r,C.path,i+1,s,a);return l+=ee(T)??0,T}catch{return[]}});(await Promise.all(b)).forEach(C=>{m.push(...C)})}}return U(m,l)}catch{return U([],0)}}var tr=S.GITHUB_VIEW_REPO_STRUCTURE;async function df(e,t,n,r,o,i){let s;try{s=o??await $e(t,n,i)}catch(a){let c=Z(a);return await D(tr,We.NOT_FOUND.code),{error:We.NOT_FOUND.message(t,n,c.error),status:c.status}}try{return{data:(await e.rest.repos.getContent({owner:t,repo:n,path:r||"",ref:s})).data,workingBranch:s}}catch(a){if(!(a instanceof uf&&a.status===404)){let l=Z(a);return await D(tr,We.ACCESS_FAILED.code),{error:We.ACCESS_FAILED.message(t,n,l.error),status:l.status,rateLimitRemaining:l.rateLimitRemaining,rateLimitReset:l.rateLimitReset,retryAfter:l.retryAfter}}let c=Z(a);return await D(tr,We.PATH_NOT_FOUND.code),{error:We.PATH_NOT_FOUND.message(r,t,n,s),status:c.status}}}function pf(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 mf(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 La(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}async function Oa(e,t,n){let r=Ee("gh-repo-structure-api",{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,depth:e.maxDepth},n),o=await Te(r,async()=>await ff({...e,itemsPerPage:e.itemsPerPage??Et.ENTRIES_PER_PAGE,page:e.page??1},t),{shouldCache:i=>!("error"in i)});return!("error"in o)&&o.structure?Aa(o,e):o}async function ff(e,t){try{let n=await re(t),{owner:r,repo:o,branch:i,path:s="",maxDepth:a=1}=e,c=s.replace(/^\/+|\/+$/g,""),l=await df(n,r,o,c,i,t);if("error"in l)return l;let{data:d,workingBranch:u,repoDefaultBranch:m}=l,p=G(d),f=Array.isArray(d)?d:[d],h=pf(f);if(a>1){let V=await Po(n,r,o,u,c,1,a);p+=ee(V)??0,h=[...h,...V].filter((Y,fe,_e)=>_e.findIndex(Ve=>Ve.path===Y.path)===fe)}let y=h.filter(V=>V.type==="dir"?!an(V.name):!Ut(V.path));y.sort((V,k)=>{if(V.type!==k.type)return V.type==="dir"?-1:1;let Y=V.path.split("/").length,fe=k.path.split("/").length;return Y!==fe?Y-fe:V.path.localeCompare(k.path)});let b=e.itemsPerPage??Et.ENTRIES_PER_PAGE,g=e.page??1,C=y.length,T=Math.max(1,Math.ceil(C/b)),P=(g-1)*b,x=Math.min(P+b,C),I=y.slice(P,x),Q=mf(I,c),E=e.includeSizes===!0?La(y,c):void 0,w=E!==void 0?La(I,c):void 0,O=I.filter(V=>V.type==="file").length,$=I.filter(V=>V.type==="dir").length,M=y.filter(V=>V.type==="file").length,N=y.filter(V=>V.type==="dir").length,se=g<T,ce={currentPage:g,totalPages:T,hasMore:se,entriesPerPage:b,totalEntries:C},le=er(ce,{owner:r,repo:o,branch:u,path:c,depth:a,pageFiles:O,pageFolders:$,allFiles:M,allFolders:N});return{owner:r,repo:o,branch:u,...m!==void 0&&{defaultBranch:m},path:c||"/",apiSource:!0,summary:{totalFiles:M,totalFolders:N,truncated:se,filtered:!0,originalCount:y.length},structure:Q,...w!==void 0&&{fileSizeMap:w},...E!==void 0&&{_cachedFileSizeMap:E},pagination:ce,hints:le,rawResponseChars:p,_cachedItems:y.map(V=>({path:V.path,type:V.type}))}}catch(n){let r=Z(n);return await D(tr,We.STRUCTURE_EXPLORATION_FAILED.code),{error:We.STRUCTURE_EXPLORATION_FAILED.message,status:r.status,rateLimitRemaining:r.rateLimitRemaining,rateLimitReset:r.rateLimitReset,retryAfter:r.retryAfter}}}var Ia={github:{cloneRepo:!0,fetchDirectoryToDisk:!0,requiresScopedCodeSearch:!1,supportsMergedState:!1,supportsMultiTopicSearch:!0}};function Tt(e){return!!(e&&typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&"type"in e)}function hf(e){return!!(e&&typeof e=="object"&&e!==null&&"data"in e&&"status"in e&&typeof e.status=="number")}function gf(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 pe(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 yf(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 nt(e){return{error:e.error,status:e.status||500,provider:"github",hints:e.hints,rateLimit:yf(e)}}function nr(e){return Rf(e)?nt({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 Rf(e){if(typeof e!="object"||e===null||!("error"in e))return!1;let n=e.error;return typeof n=="string"||bf(n)}function bf(e){return typeof e=="object"&&e!==null&&typeof e.toString=="function"}function ka(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 Sf(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,totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...ka(e.pagination)},repositoryContext:e._researchContext?.repositoryContext,nonExistentScope:e.nonExistentScope}}function Cf(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,totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...ka(e.pagination)},nonExistentScope:e.nonExistentScope}}async function va(e,t,n=pe){let{owner:r,repo:o}=n(e.projectId),i=r||e.owner,s={keywords:e.keywords,owner:i,repo:o,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},a=await As(s,t);return Tt(a)?nt(a):a.data?{data:Sf(a.data),status:200,provider:"github",rawResponseChars:a.rawResponseChars??G(a.data)}:{error:"No data returned from GitHub API",status:500,provider:"github"}}async function Fa(e,t){let n={keywords:e.keywords,topicsToSearch:e.topics,owner:e.owner,stars:e.stars??(e.minStars?`>=${e.minStars}`:void 0),size:e.size,created:e.created,updated:e.updated,language:e.language,match:e.match,archived:e.archived,visibility:e.visibility,forks:e.forks,license:e.license,goodFirstIssues:e.goodFirstIssues,sort:e.sort==="best-match"?void 0:e.sort,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},r=await xa(n,t);return"error"in r?nr(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:Cf(r.data),status:200,provider:"github",rawResponseChars:r.rawResponseChars??G(r.data)}}function Ef(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,sourceBytes:e.sourceBytes,contentView:e.contentView,isSkeleton:e.isSkeleton,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,warnings:Tf(e,t),matchNotFound:e.matchNotFound,searchedFor:e.searchedFor}}function Tf(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 Ma(e,t,n=pe){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,minify:e.minify??"standard",mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},s=await ea(i,t);if(Tt(s))return nt(s);if(!s.data)return{error:"No data returned from GitHub API",status:500,provider:"github"};let a=s.data.hints;return{data:Ef(s.data,e),status:200,provider:"github",rawResponseChars:s.rawResponseChars??G(s.data),...a?.length?{hints:a}:{}}}function xf(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}:{}}}function _f(e,t,n=pe){let r=(e.pull_requests||[]).map(a=>({number:a.number,title:a.title,body:a.body||null,...a.body_pagination&&{bodyPagination:a.body_pagination},url:a.url,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.head_ref||"",targetBranch:a.base_ref||"",sourceSha:a.head_sha,targetSha:a.base_sha,createdAt:a.created_at,updatedAt:a.updated_at,closedAt:a.closed_at,mergedAt:a.merged_at,commentsCount:a.comments,changedFilesCount:a.changed_files,additions:a.additions,deletions:a.deletions,comments:a.comment_details?.map(c=>({id:c.id,author:c.user,body:c.body,...c.body_pagination&&{bodyPagination:c.body_pagination},createdAt:c.created_at,updatedAt:c.updated_at,...c.commentType&&{commentType:c.commentType},...c.path&&{path:c.path},...c.line!==void 0&&{line:c.line},...c.in_reply_to_id!=null&&{in_reply_to_id:c.in_reply_to_id}})),reviews:a.reviews?.map(c=>({id:c.id,user:c.user,state:c.state,body:c.body,submittedAt:c.submitted_at,commitId:c.commit_id})),commits:a.commit_details?.map(c=>({sha:c.sha,message:c.message,author:c.author,date:c.date})),fileChanges:a.file_changes?.map(c=>({path:c.filename,status:c.status,additions:c.additions,deletions:c.deletions,patch:c.patch})),...Array.isArray(a._sanitization_warnings)&&a._sanitization_warnings.length>0?{sanitizationWarnings:a._sanitization_warnings}:{}})),{owner:o,repo:i}=t.projectId?n(t.projectId):{owner:void 0,repo:void 0},s=o||t.owner;return{items:r,totalCount:e.total_count||r.length,pagination:{currentPage:e.pagination?.currentPage||1,totalPages:e.pagination?.totalPages||1,hasMore:e.pagination?.hasMore||!1,totalMatches:e.pagination?.totalMatches,entriesPerPage:e.pagination?.perPage,...xf(e.pagination)},repositoryContext:s&&i?{owner:s,repo:i}:void 0}}async function Na(e,t,n=pe){let{owner:r,repo:o}=e.projectId?n(e.projectId):{owner:void 0,repo:void 0},s={owner:r||e.owner,repo:o,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,involves:e.involves,mentions:e.mentions,"reviewed-by":e.reviewedBy,"review-requested":e.reviewRequested,label:e.labels,"no-assignee":e.noAssignee,"no-label":e.noLabel,"no-milestone":e.noMilestone,"no-project":e.noProject,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,interactions:e.interactions,match:e.match,archived:e.archived,content:e.content,reviewMode:e.reviewMode,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,sort:e.sort,order:e.order,limit:e.limit,page:e.page,charOffset:e.charOffset,charLength:e.charLength},a=await Ca(s,t);return a.error?nt({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:_f(a,e,n),status:200,provider:"github",rawResponseChars:a.rawResponseChars??G(a)}}function Lf(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 Ha(e,t,n=pe){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for repository structure",status:400,provider:"github"};let i={owner:r,repo:o,branch:e.ref||"HEAD",path:e.path,maxDepth:e.depth,itemsPerPage:e.itemsPerPage,page:e.page,includeSizes:e.includeSizes,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},s=await Oa(i,t);return"error"in s?nr(s)??{error:"Unknown GitHub API error",status:500,provider:"github"}:{data:Lf(s),status:200,provider:"github",rawResponseChars:s.rawResponseChars??G(s)}}var rr=class{type="github";capabilities=Ia.github;authInfo;constructor(t){t?.authInfo?this.authInfo=t.authInfo:t?.token&&(this.authInfo={token:t.token})}async searchCode(t){try{return await va(t,this.authInfo,pe)}catch(n){return this.handleError(n)}}async getFileContent(t){try{return await Ma(t,this.authInfo,pe)}catch(n){return this.handleError(n)}}async searchRepos(t){try{return await Fa(t,this.authInfo)}catch(n){return this.handleError(n)}}async searchPullRequests(t){try{return await Na(t,this.authInfo,pe)}catch(n){return this.handleError(n)}}async getRepoStructure(t){try{return await Ha(t,this.authInfo,pe)}catch(n){return this.handleError(n)}}async resolveDefaultBranch(t){let{owner:n,repo:r}=pe(t);if(!n||!r)throw new Error(`Cannot resolve default branch: invalid projectId '${t}'.`);return $e(n,r,this.authInfo)}handleError(t){let n=Z(t);return nt(n)}};import{createHash as If}from"crypto";var kf=3600*1e3,Eo=20,Qe=new Map;function Da(e){return Date.now()-e.createdAt<kf}function vf(){for(let[e,t]of Qe.entries())Da(t)||Qe.delete(e);if(Qe.size>Eo){let e=[...Qe.entries()].sort((n,r)=>n[1].lastAccessedAt-r[1].lastAccessedAt),t=Qe.size-Eo;for(let n=0;n<t&&n<e.length;n++){let r=e[n];r&&Qe.delete(r[0])}}}function Ff(e){return e?If("sha256").update(e).digest("hex").slice(0,16):"default"}function Mf(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 Nf(e,t){let n=Mf(t?.baseUrl||"default"),r=Ff(t?.token||t?.authInfo?.token);return`${e}:${n}:${r}`}function To(e="github",t){if(e!=="github")throw new Error(`Unknown provider type: '${e}'. Only 'github' is supported.`);let n=Nf(e,t),r=Qe.get(n);if(r&&Da(r))return r.lastAccessedAt=Date.now(),r.provider;r&&Qe.delete(n),Qe.size>=Eo&&vf();let o=new rr({...t,type:e}),i=Date.now();return Qe.set(n,{provider:o,createdAt:i,lastAccessedAt:i}),o}function Mx(){Qe.clear()}async function Ga(){try{return To("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}]}}
|
|
25
|
-
`}],isError:!0};let{data:t,instructions:n,isError:r}=e;return{content:[{type:"text",text:
|
|
26
|
-
`}return{type:"text",text:$f(r),annotations:{audience:["assistant"],priority:.3,role:"assistant"}}}},ir={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}"};function sr(e){let t=[],{system:n,assistant:r,user:o,data:i,isError:s}=e;if(n){let a=[];if(n.instructions&&a.push(n.instructions),n.pagination){let{currentPage:c,totalPages:l,hasMore:d}=n.pagination;a.push(`Page ${c}/${l}${d?" (more available)":""}`)}n.warnings?.length&&a.push(`\u26A0\uFE0F Warnings:
|
|
22
|
+
`).trim()}async function sh(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let f=await e.rest.issues.listComments({owner:t,repo:n,issue_number:r,per_page:100,page:a});s+=U(f.data),i.push(...f.data),c=f.data.length===100,a++}while(c);let l=o?i:i.filter(f=>!ih(f.user?.login??"")),u=i.length-l.length,d=l.map(f=>{let m=F.minifyMarkdownCore(nu(f.body??""));return{id:String(f.id),user:f.user?.login??"unknown",body:tu.sanitizeContent(m).content,created_at:f.created_at??"",updated_at:f.updated_at??"",commentType:"discussion"}}),p=[];return u>0&&p.push(`${u} bot comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:j(d,s),note:p.length>0?p.join("; "):void 0}}catch{return{comments:j([],0)}}}async function ah(e,t,n,r){try{let{items:o,rawResponseChars:i}=await ru(s=>e.rest.pulls.listReviews({owner:t,repo:n,pull_number:r,per_page:100,page:s}));return j(o.map(s=>({id:String(s.id),user:s.user?.login??"unknown",state:s.state??"",body:tu.sanitizeContent(F.minifyMarkdownCore(nu(s.body??""))).content,submitted_at:s.submitted_at??void 0,commit_id:s.commit_id??void 0})),i)}catch{return j([],0)}}async function ch(e,t,n,r,o=!1){try{let i=[],s=0,a=1,c=!0;do{let f=await e.rest.pulls.listReviewComments({owner:t,repo:n,pull_number:r,per_page:100,page:a});s+=U(f.data),i.push(...f.data),c=f.data.length===100,a++}while(c);let l=o?i:i.filter(f=>!ih(f.user?.login??"")),u=i.length-l.length,d=l.map(f=>{let m=F.minifyMarkdownCore(nu(f.body??""));return{id:String(f.id),user:f.user?.login??"unknown",body:tu.sanitizeContent(m).content,created_at:f.created_at??"",updated_at:f.updated_at??"",commentType:"review_inline",path:f.path,line:f.line??f.original_line??void 0,...f.in_reply_to_id!=null?{in_reply_to_id:f.in_reply_to_id}:{}}}),p=[];return u>0&&p.push(`${u} bot inline comment(s) hidden (set content.comments.includeBots:true to include)`),{comments:j(d,s),note:p.length>0?p.join("; "):void 0}}catch{return{comments:j([],0)}}}async function lh(e,t,n){let r=e,{prData:o,sanitizationWarnings:i}=eu(r);i.size>0&&(o._sanitization_warnings=Array.from(i));let s=0;if(e.pull_request)try{let{owner:l,repo:u}=jo(t);if(l&&u){let d=await n.rest.pulls.get({owner:l,repo:u,pull_number:e.number});if(d.data&&(s+=U(d.data),o.head=d.data.head?.ref,o.head_sha=d.data.head?.sha,o.base=d.data.base?.ref,o.base_sha=d.data.base?.sha,o.draft=d.data.draft??!1,d.data.merged_at&&(o.merged_at=d.data.merged_at),o.additions=d.data.additions??0,o.deletions=d.data.deletions??0,Ms(t)||(o.file_changes={total_count:d.data.changed_files??0,files:[]}),Ms(t))){let p=await uh(l,u,e.number);p&&(s+=le(p)??0,p.files=Fs(p.files,t),o.file_changes=p)}}}catch(l){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${l instanceof Error?l.message:String(l)}`]}let a=eh(t),c=th(t);if(a||c){let{owner:l,repo:u}=jo(t);if(l&&u){let d=oh(t),p=()=>Promise.resolve({comments:j([],0)}),[{comments:f,note:m},{comments:g,note:b}]=await Promise.all([a?sh(n,l,u,e.number,d):p(),c?ch(n,l,u,e.number,d):p()]);o.comments=[...f,...g],s+=(le(f)??0)+(le(g)??0);let S=[m,b].filter(C=>typeof C=="string");S.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...S])}}if(rh(t))try{let{owner:l,repo:u}=jo(t);if(l&&u){let d=await ah(n,l,u,e.number);s+=le(d)??0,o.reviews=d}}catch(l){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${l instanceof Error?l.message:String(l)}`]}if(nh(t))try{let{owner:l,repo:u}=jo(t);if(l&&u){let d=await dh(l,u,e.number,t);d&&(s+=le(d)??0,o.commits=d)}}catch(l){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${l instanceof Error?l.message:String(l)}`]}return j(o,s)}async function ru(e){let t=[],n=0,r=1,o=!0;do{let i=await e(r);n+=U(i.data),t.push(...i.data),o=i.data.length===100,r++}while(o);return{items:t,rawResponseChars:n}}async function uh(e,t,n,r){let o=await pe(r),{items:i,rawResponseChars:s}=await ru(a=>o.rest.pulls.listFiles({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return j({total_count:i.length,files:i},s)}async function bT(e,t,n,r){let o=await pe(r),{items:i,rawResponseChars:s}=await ru(a=>o.rest.pulls.listCommits({owner:e,repo:t,pull_number:n,per_page:100,page:a}));return j(i,s)}async function RT(e,t,n,r){try{let i=await(await pe(r)).rest.repos.getCommit({owner:e,repo:t,ref:n});return j(i.data.files||[],i.data)}catch{return null}}async function dh(e,t,n,r,o){let i=await bT(e,t,n,o);if(!i)return null;let s=le(i)??0,a=[...i].sort((l,u)=>{let d=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)-d}),c=await Promise.all(a.map(async l=>{let u=await RT(e,t,l.sha,o),d=[];return u&&(s+=le(u)??0,d=Fs(u,r)),{sha:l.sha,message:l.commit.message,author:l.commit.author?.name||"unknown",date:l.commit.author?.date||"",files:d}}));return j(c,s)}async function Ds(e,t,n,r){let{prData:o,sanitizationWarnings:i}=eu(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,Ms(t)||(o.file_changes={total_count:"changed_files"in e?e.changed_files??0:0,files:[]}),Ms(t))try{let d=await uh(a,c,e.number,r);d&&(s+=le(d)??0,d.files=Fs(d.files,t),o.file_changes=d)}catch(d){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (files): ${d instanceof Error?d.message:String(d)}`]}let l=eh(t),u=th(t);if(l||u){let d=oh(t),p=()=>Promise.resolve({comments:j([],0)}),[{comments:f,note:m},{comments:g,note:b}]=await Promise.all([l?sh(n,a,c,e.number,d):p(),u?ch(n,a,c,e.number,d):p()]);o.comments=[...f,...g],s+=(le(f)??0)+(le(g)??0);let S=[m,b].filter(C=>typeof C=="string");S.length>0&&(o._sanitization_warnings=[...o._sanitization_warnings||[],...S])}if(rh(t))try{let d=await ah(n,a,c,e.number);s+=le(d)??0,o.reviews=d}catch(d){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch reviews: ${d instanceof Error?d.message:String(d)}`]}if(nh(t))try{let d=await dh(a,c,e.number,t,r);d&&(s+=le(d)??0,o.commits=d)}catch(d){o._sanitization_warnings=[...o._sanitization_warnings||[],`Partial Data: Failed to fetch details (commits): ${d instanceof Error?d.message:String(d)}`]}return j(o,s)}var yT,Ns=y(()=>{"use strict";be();Ge();$o();oe();yT=new Set(["vercel","pkg-pr-new","coderabbitai","github-actions","codecov","changeset-bot","netlify","sonarcloud","socket-security"])});function ST(e,t,n){return{pull_requests:[],total_count:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}async function mQ(e,t,n){let r=He("gh-api-prs",{owner:e.owner,repo:e.repo,prNumber:e.prNumber,content:e.content,reviewMode:e.reviewMode},n);return await ze(r,async()=>await ou(e,t),{shouldCache:i=>!i.error})}async function ou(e,t){let{owner:n,repo:r,prNumber:o}=e;if(!n||!r||!o)return{pull_requests:[],total_count:0,error:qe.PR_REQUIRED_PARAMS.message,hints:["Provide owner, repo, and prNumber"]};if(Array.isArray(n)||Array.isArray(r))return{pull_requests:[],total_count:0,error:qe.PR_SINGLE_VALUES.message,hints:["Do not use array for owner or repo when fetching by number"]};try{let i=await pe(t),s=await i.rest.pulls.get({owner:n,repo:r,pull_number:o}),a=s.data,c=await Ds(a,e,i,t);return{pull_requests:[Uo(c,{includeFullBody:!0,includeFullCommentDetails:!0})],total_count:1,rawResponseChars:U(s.data)+(le(c)??0)}}catch(i){let s=re(i);return ST(s,qe.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 iu=y(()=>{"use strict";ft();Ge();wt();Mt();$o();Ns();oe()});function ph(e,t,n){return{pull_requests:[],total_count:0,error:t,status:e.status,hints:n,rateLimitRemaining:e.rateLimitRemaining,rateLimitReset:e.rateLimitReset,retryAfter:e.retryAfter}}function fh(e){let t=Math.min(e.limit||30,100);return{pull_requests:[],total_count:0,pagination:{currentPage:e.page||1,totalPages:0,perPage:t,totalMatches:0,reportedTotalMatches:0,reachableTotalMatches:0,totalMatchesKind:"exact",totalMatchesCapped:!1,hasMore:!1}}}async function CT(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}}async function mh(e,t,n){let r=He("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,involves:e.involves,"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,interactions:e.interactions,label:e.label,"no-assignee":e["no-assignee"],"no-label":e["no-label"],"no-milestone":e["no-milestone"],"no-project":e["no-project"],match:e.match,sort:e.sort,order:e.order,limit:e.limit,page:e.page,content:e.content,reviewMode:e.reviewMode,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage},n);return await ze(r,async()=>await PT(e,t,n),{shouldCache:i=>!i.error})}async function PT(e,t,n){try{if(e.prNumber&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await ou(e,t);let r=await pe(t);if(!ig(e)&&e.owner&&e.repo&&!Array.isArray(e.owner)&&!Array.isArray(e.repo))return await xT(r,e);let i=await CT(r,e),s=og(i);if(!s)return{pull_requests:[],total_count:0,error:qe.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,d=await r.rest.search.issuesAndPullRequests({q:s,sort:a,order:e.order||"desc",per_page:c,page:l}),p=d.data.items?.filter(O=>!!O.pull_request)||[],f=await Promise.all(p.map(async O=>await lh(O,i,r))),m=f.reduce((O,w)=>O+(le(w)??0),0),g=f.map(O=>Uo(O,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:i.charOffset,charLength:i.charLength})),b=d.data.total_count,S=Math.min(b,1e3),C=Math.min(Math.ceil(S/c),10),k=Math.min(l,Math.max(1,C)),_=k<C,E=Math.min(S,C*c);return{pull_requests:g,total_count:d.data.total_count,effectiveQuery:u,...d.data.incomplete_results&&{incomplete_results:!0},pagination:{currentPage:k,totalPages:C,perPage:c,totalMatches:S,reportedTotalMatches:b,reachableTotalMatches:E,totalMatchesKind:"reported",totalMatchesCapped:b>S,hasMore:_,..._?{nextPage:k+1}:{}},rawResponseChars:U(d.data)+m}}catch(r){if(Pn(r))return fh(e);let o=re(r);return ph(o,qe.PULL_REQUEST_SEARCH_FAILED.message(o.error),["Verify authentication and search parameters"])}}async function xT(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 Ds(p,t,e))),c=a.reduce((p,f)=>p+(le(f)??0),0),l=a.map(p=>Uo(p,{includeFullBody:!1,includeFullCommentDetails:!1,charOffset:t.charOffset,charLength:t.charLength})),u=s.data.length===o,d=(i-1)*o+l.length;return{pull_requests:l,total_count:l.length,pagination:{currentPage:i,totalPages:u?i+1:i,perPage:o,totalMatches:d+(u?1:0),reachableTotalMatches:d,totalMatchesKind:u?"lowerBound":"exact",hasMore:u,...u?{nextPage:i+1}:{}},rawResponseChars:U(s.data)+c}}catch(n){if(Pn(n))return fh(t);let r=re(n);return ph(r,qe.PULL_REQUEST_LIST_FAILED.message(r.error),["Verify repository access and authentication"])}}var su=y(()=>{"use strict";me();ft();Ge();wt();Eo();Mt();oe();$o();Ns();iu()});function wT(e){return e?e.includes('rel="next"'):!1}function gh(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}:{}}}}async function hh(e,t){try{let n=await pe(t),r={owner:e.owner,repo:e.repo,per_page:e.perPage,page:e.page,...e.path?{path:e.path}:{},...e.branch?{sha:e.branch}:{},...e.since?{since:e.since}:{},...e.until?{until:e.until}:{},...e.author?{author:e.author}:{}},o=await n.rest.repos.listCommits(r),i=o.headers.link,s=wT(i),a=o.data.map(u=>{let d=u.commit.author,p=u.commit.committer,f=p?.date??d?.date??"",m=u.commit.message,g=m.split(`
|
|
23
|
+
`)[0]??m;return{sha:u.sha,date:f,message:m,messageHeadline:g,url:u.html_url,author:{name:d?.name??"unknown",email:d?.email??"",...u.author?.login?{login:u.author.login}:{}},...p?{committer:{name:p.name??"unknown",email:p.email??"",...u.committer?.login?{login:u.committer.login}:{}}}:{}}}),c={currentPage:e.page,perPage:e.perPage,hasMore:s,...s?{nextPage:e.page+1}:{}};if(!e.includeDiff)return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:a,pagination:c},status:200};let l=await Promise.all(a.map(async(u,d)=>{try{let p=o.data[d]?.sha??u.sha,f=await n.rest.repos.getCommit({owner:e.owner,repo:e.repo,ref:p});if(e.type==="file"&&e.path){let m=e.path,g=f.data.files?.find(b=>b.filename===m||b.previous_filename===m);if(g){let b=g.patch!==void 0?gh(g.patch,e.charOffset,e.charLength):void 0;return{...u,additions:g.additions,deletions:g.deletions,status:g.status,...b!==void 0?{patch:b.patch,...b.patchPagination?{patchPagination:b.patchPagination}:{},diff:Bo(b.patch)}:{},...g.previous_filename?{previousFilename:g.previous_filename}:{}}}}else{let m=e.path,g=(f.data.files??[]).filter(w=>!m||w.filename.startsWith(m)).map(w=>{let H=w.patch!==void 0?gh(w.patch,e.charOffset,e.charLength):void 0;return{filename:w.filename,status:w.status,additions:w.additions,deletions:w.deletions,...H!==void 0?{patch:H.patch,...H.patchPagination?{patchPagination:H.patchPagination}:{},diff:Bo(H.patch)}:{},...w.previous_filename?{previousFilename:w.previous_filename}:{}}}),b=Math.max(1,e.filePage??1),S=Math.max(1,e.itemsPerPage??20),C=g.length,k=Math.max(1,Math.ceil(C/S)),_=Math.min(b,k),E=(_-1)*S,O=g.slice(E,E+S);return{...u,files:O,filesPagination:{currentPage:_,totalPages:k,itemsPerPage:S,totalFiles:C,hasMore:_<k,..._<k?{nextFilePage:_+1}:{}}}}}catch{}return u}));return{data:{type:e.type,owner:e.owner,repo:e.repo,...e.path?{path:e.path}:{},commits:l,pagination:c},status:200}}catch(n){return re(n)}}var au=y(()=>{"use strict";Ge();wt();Qo()});function bh(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 Rh(e,t,n){let r=He("gh-api-repos",{keywords:e.keywords,topicsToSearch:e.topicsToSearch,owner:e.owner,stars:e.stars,size:e.size,created:e.created,updated:e.updated,language:e.language,match:e.match,sort:e.sort,limit:e.limit,page:e.page},n);return await ze(r,async()=>await ET(e,t),{shouldCache:i=>"data"in i&&!i.error})}async function TT(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(f){if(f?.status!==404)return re(f);try{i=(await t.rest.repos.listForUser({username:e.owner,per_page:n,page:r,sort:o})).data,s=void 0}catch(g){return re(g)}}let a=i.map(f=>{let g=f.full_name.split("/"),b=g[0]||"",S=g[1]||"";return{owner:b,repo:S,defaultBranch:f.default_branch,stars:f.stargazers_count||0,description:f.description?f.description:"No description",url:f.html_url,createdAt:f.created_at,updatedAt:f.updated_at,pushedAt:f.pushed_at,visibility:f.visibility,...f.topics&&f.topics.length>0&&{topics:f.topics},...f.forks_count&&f.forks_count>0&&{forksCount:f.forks_count},...f.open_issues_count&&f.open_issues_count>0&&{openIssuesCount:f.open_issues_count},...f.language&&{language:f.language},...bh(f)}}),c=a.length,l=c===n,u=(r-1)*n+c,d=s??u+(l?1:0),p=s!==void 0||!l?"exact":"lowerBound";return{data:{repositories:a,pagination:{currentPage:r,totalPages:l?r+1:r,perPage:n,totalMatches:d,reachableTotalMatches:u,totalMatchesKind:p,hasMore:l,...l?{nextPage:r+1}:{}}},status:200,rawResponseChars:U(i)}}async function ET(e,t){try{let n=await pe(t),r=(e.keywords?.length??0)>0||(e.topicsToSearch?.length??0)>0,o=typeof e.owner=="string"?e.owner:Array.isArray(e.owner)?e.owner[0]:void 0;if(!r&&o)return await TT({owner:o,sort:e.sort,limit:e.limit,page:e.page},n);let i=rg(e);if(!i.trim())return{error:qe.QUERY_EMPTY.message,type:"http",status:400};let s=Math.min(e.limit||yh,100),a=e.page||1,c={q:i,per_page:s,page:a},l=["stars","forks","help-wanted-issues","updated"];e.sort&&l.includes(e.sort)&&(c.sort=e.sort);let u=await n.rest.search.repos(c),d=u.data.items.map(C=>{let _=C.full_name.split("/"),E=_[0]||"",O=_[1]||"";return{owner:E,repo:O,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},...bh(C)}}),p=u.data.total_count,f=Math.min(p,1e3),m=Math.min(Math.ceil(f/s),10),g=Math.min(a,Math.max(1,m)),b=g<m,S=Math.min(f,m*s);return{data:{repositories:d,pagination:{currentPage:g,totalPages:m,perPage:s,totalMatches:f,reportedTotalMatches:p,reachableTotalMatches:S,totalMatchesKind:"reported",totalMatchesCapped:p>f,hasMore:b,...b?{nextPage:g+1}:{}}},status:200,headers:Rs(u.headers),rawResponseChars:U(u.data)}}catch(n){if(Pn(n)){let r=Math.min(e.limit||yh,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 re(n)}}var yh,cu=y(()=>{"use strict";Ge();wt();Eo();Mt();ft();oe();Ss();me();yh=30});var Tn,qo=y(()=>{"use strict";Tn={ENTRIES_PER_PAGE:100,MAX_ENTRIES_PER_PAGE:200}});function kT(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 OT(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 QQ(e,t={}){let{enableWarnings:n=!0,customHints:r=[]}=t,o=[];return o.push(...r),e.estimatedTokens&&o.push(...kT(e.estimatedTokens,n)),o.push(...OT(e)),o}function Gs(e,t){return e.hasMore?[`Page ${e.currentPage}/${e.totalPages}. Next: page=${e.currentPage+1}`]:[]}var Hs=y(()=>{"use strict"});function Sh(e,t){let n=e._cachedItems;if(!n||n.length===0){let{_cachedItems:I,...v}=e;return v}let r=t.itemsPerPage??Tn.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),d=e.path==="/"?"":e.path,p=I=>{let v=I;d&&I.startsWith(d)&&(v=I.slice(d.length),v.startsWith("/")&&(v=v.slice(1)));let D=v.lastIndexOf("/");return D===-1?".":v.slice(0,D)},f=I=>{let v=I.lastIndexOf("/");return v===-1?I:I.slice(v+1)};for(let I of l){let v=p(I.path);u[v]||(u[v]={files:[],folders:[]});let D=f(I.path);I.type==="file"?u[v].files.push(D):u[v].folders.push(D)}for(let I of Object.keys(u)){let v=u[I];v&&(v.files.sort(),v.folders.sort())}let m=Object.create(null),g=Object.keys(u).sort((I,v)=>I==="."?-1:v==="."?1:I.localeCompare(v));for(let I of g){let v=u[I];v&&(m[I]=v)}let b=l.filter(I=>I.type==="file").length,S=l.filter(I=>I.type==="dir").length,C=n.filter(I=>I.type==="file").length,k=n.filter(I=>I.type==="dir").length,_=o<s,E={currentPage:o,totalPages:s,hasMore:_,..._?{nextPage:o+1}:{},entriesPerPage:r,totalEntries:i},O=Gs(E,{owner:e.owner,repo:e.repo,branch:e.branch,path:d,depth:t.maxDepth??1,pageFiles:b,pageFolders:S,allFiles:C,allFolders:k}),w,H=e._cachedFileSizeMap;if(H){let I=new Set(l.filter(Q=>Q.type==="file").map(Q=>Q.path)),v=e.path==="/"?"":e.path,D=Object.create(null);for(let[Q,ee]of Object.entries(H))for(let[B,Me]of Object.entries(ee)){let Ee=Q==="."?v?`${v}/${B}`:B:v?`${v}/${Q}/${B}`:`${Q}/${B}`;I.has(Ee)&&(D[Q]||(D[Q]=Object.create(null)),D[Q][B]=Me)}Object.keys(D).length>0&&(w=D)}return{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,apiSource:e.apiSource,summary:{totalFiles:C,totalFolders:k,truncated:_,filtered:!0,originalCount:i},structure:m,...w!==void 0&&{fileSizeMap:w},...H!==void 0&&{_cachedFileSizeMap:H},pagination:E,hints:O,rawResponseChars:e.rawResponseChars}}var lu=y(()=>{"use strict";qo();Hs()});import{RequestError as vT}from"octokit";function Ch(e){return e instanceof vT&&AT.has(e.status)}function uu(e,t){try{Object.defineProperty(e,Ph,{value:t,enumerable:!1,configurable:!0})}catch{}return e}function du(e){if(typeof e!="object"||e===null)return 0;let t=e[Ph];return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}async function pu(e,t,n,r,o,i,s,a=new Set){if(i>s||a.has(o))return uu(j([],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(Ch(m))throw m;return uu(j([],0),1)}let l=U(c.data),d=(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=[...d],f=0;if(i<s){let m=d.filter(b=>b.type==="dir"),g=3;for(let b=0;b<m.length;b+=g){let S=m.slice(b,b+g),C=await Promise.allSettled(S.map(k=>pu(e,t,n,r,k.path,i+1,s,a)));for(let k of C)if(k.status==="fulfilled"){let _=k.value;l+=le(_)??0,f+=du(_),p.push(..._)}else{if(Ch(k.reason))throw k.reason;f+=1}}}return uu(j(p,l),f)}var Ph,AT,fu=y(()=>{"use strict";oe();Ph=Symbol.for("octocode.recursiveFetchFailures"),AT=new Set([401,403,429])});import{RequestError as LT}from"octokit";async function _T(e,t,n,r,o,i){let s,a;try{o?s=o:(a=await Ze(t,n,i),s=a)}catch(c){let l=re(c);return{error:Un.NOT_FOUND.message(t,n,l.error),status:l.status}}try{return{data:(await e.rest.repos.getContent({owner:t,repo:n,path:r||"",ref:s})).data,workingBranch:s,...a!==void 0?{repoDefaultBranch:a}:{}}}catch(c){if(!(c instanceof LT&&c.status===404)){let u=re(c);return{error:Un.ACCESS_FAILED.message(t,n,u.error),status:u.status,rateLimitRemaining:u.rateLimitRemaining,rateLimitReset:u.rateLimitReset,retryAfter:u.retryAfter}}let l=re(c);return{error:Un.PATH_NOT_FOUND.message(r,t,n,s),status:l.status}}}function IT(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 FT(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 xh(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}async function wh(e,t,n){let r=He("gh-repo-structure-api",{owner:e.owner,repo:e.repo,branch:e.branch,path:e.path,depth:e.maxDepth},n),o=await ze(r,async()=>await MT({...e,itemsPerPage:e.itemsPerPage??Tn.ENTRIES_PER_PAGE,page:e.page??1},t),{shouldCache:i=>!("error"in i)});return!("error"in o)&&o.structure?Sh(o,e):o}async function MT(e,t){try{let n=await pe(t),{owner:r,repo:o,branch:i,path:s="",maxDepth:a=1}=e,c=s.replace(/^\/+|\/+$/g,""),l=await _T(n,r,o,c,i,t);if("error"in l)return l;let{data:u,workingBranch:d,repoDefaultBranch:p}=l,f=U(u),m=Array.isArray(u)?u:[u],g=IT(m),b=0;if(a>1){let Y=await pu(n,r,o,d,c,1,a);b=du(Y),f+=le(Y)??0,g=[...g,...Y].filter((Di,Ni,fP)=>fP.findIndex(mP=>mP.path===Di.path)===Ni)}let S=g.filter(Y=>Y.type==="dir"?!ko(Y.name):!mr(Y.path));S.sort((Y,Kr)=>{if(Y.type!==Kr.type)return Y.type==="dir"?-1:1;let Di=Y.path.split("/").length,Ni=Kr.path.split("/").length;return Di!==Ni?Di-Ni:Y.path.localeCompare(Kr.path)});let C=e.itemsPerPage??Tn.ENTRIES_PER_PAGE,k=e.page??1,_=S.length,E=Math.max(1,Math.ceil(_/C)),O=(k-1)*C,w=Math.min(O+C,_),H=S.slice(O,w),I=FT(H,c),v=e.includeSizes===!0?xh(S,c):void 0,D=v!==void 0?xh(H,c):void 0,Q=H.filter(Y=>Y.type==="file").length,ee=H.filter(Y=>Y.type==="dir").length,B=S.filter(Y=>Y.type==="file").length,Me=S.filter(Y=>Y.type==="dir").length,Ee=k<E,Ct={currentPage:k,totalPages:E,hasMore:Ee,...Ee?{nextPage:k+1}:{},entriesPerPage:C,totalEntries:_},dn=Gs(Ct,{owner:r,repo:o,branch:d,path:c,depth:a,pageFiles:Q,pageFolders:ee,allFiles:B,allFolders:Me});return b>0&&dn.unshift(`Partial tree: ${b} subdirectory subtree(s) failed to load and are missing from this structure. The listing is incomplete \u2014 retry or narrow the path/depth.`),{owner:r,repo:o,branch:d,...p!==void 0&&{defaultBranch:p},path:c||"/",apiSource:!0,summary:{totalFiles:B,totalFolders:Me,truncated:Ee,filtered:!0,originalCount:S.length},structure:I,...D!==void 0&&{fileSizeMap:D},...v!==void 0&&{_cachedFileSizeMap:v},pagination:Ct,hints:dn,rawResponseChars:f,_cachedItems:S.map(Y=>({path:Y.path,type:Y.type}))}}catch(n){let r=re(n);return{error:Un.STRUCTURE_EXPLORATION_FAILED.message,status:r.status,rateLimitRemaining:r.rateLimitRemaining,rateLimitReset:r.rateLimitReset,retryAfter:r.retryAfter}}}var mu=y(()=>{"use strict";qo();Ge();wt();Mt();Hs();gr();ft();oe();lu();fu()});var Th,gu=y(()=>{"use strict";Th={github:{cloneRepo:!0,fetchDirectoryToDisk:!0,requiresScopedCodeSearch:!1,supportsMergedState:!1,supportsMultiTopicSearch:!0}}});function En(e){return!!(e&&typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&"type"in e)}function DT(e){return!!(e&&typeof e=="object"&&e!==null&&"data"in e&&"status"in e&&typeof e.status=="number")}function NT(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 Vo=y(()=>{"use strict"});function Ce(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 GT(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 Nt(e){return{error:e.error,status:e.status||500,provider:"github",hints:e.hints,rateLimit:GT(e)}}function zs(e){return HT(e)?Nt({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 HT(e){if(typeof e!="object"||e===null||!("error"in e))return!1;let n=e.error;return typeof n=="string"||zT(n)}function zT(e){return typeof e=="object"&&e!==null&&typeof e.toString=="function"}var gt=y(()=>{"use strict"});function Eh(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 BT(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,...Eh(e.pagination)},repositoryContext:e._researchContext?.repositoryContext,nonExistentScope:e.nonExistentScope,incompleteResults:e.incompleteResults}}function QT(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,...Eh(e.pagination)},nonExistentScope:e.nonExistentScope}}async function kh(e,t,n=Ce){let{owner:r,repo:o}=n(e.projectId),i=r||e.owner,s={keywords:e.keywords,owner:i,repo:o,extension:e.extension,filename:e.filename,language:e.language,path:e.path,match:e.match,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},a=await dg(s,t);return En(a)?Nt(a):a.data?{data:BT(a.data),status:200,provider:"github",rawResponseChars:a.rawResponseChars??U(a.data)}:{error:"No data returned from GitHub API",status:500,provider:"github"}}async function Oh(e,t){let n={keywords:e.keywords,topicsToSearch:e.topics,owner:e.owner,stars:e.stars??(e.minStars?`>=${e.minStars}`:void 0),size:e.size,created:e.created,updated:e.updated,language:e.language,match:e.match,archived:e.archived,visibility:e.visibility,forks:e.forks,license:e.license,goodFirstIssues:e.goodFirstIssues,sort:e.sort==="best-match"?void 0:e.sort,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},r=await Rh(n,t);return"error"in r?zs(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:QT(r.data),status:200,provider:"github",rawResponseChars:r.rawResponseChars??U(r.data)}}var hu=y(()=>{"use strict";Il();cu();Vo();oe();gt();gt()});function jT(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,sourceBytes:e.sourceBytes,contentView:e.contentView,isSkeleton:e.isSkeleton,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,warnings:$T(e,t),matchNotFound:e.matchNotFound,searchedFor:e.searchedFor}}function $T(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 vh(e,t,n=Ce){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for file content",status:400,provider:"github"};let i={owner:r,repo:o,path:e.path,type:"file",branch:e.ref,startLine:e.startLine,endLine:e.endLine,matchString:e.matchString,contextLines:e.contextLines??5,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,charOffset:e.charOffset,charLength:e.charLength,fullContent:e.fullContent,forceRefresh:e.forceRefresh,minify:e.minify??"standard",mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},s=await Vg(i,t);if(En(s))return Nt(s);if(!s.data)return{error:"No data returned from GitHub API",status:500,provider:"github"};let a=s.data.hints;return{data:jT(s.data,e),status:200,provider:"github",rawResponseChars:s.rawResponseChars??U(s.data),...a?.length?{hints:a}:{}}}var yu=y(()=>{"use strict";Zl();Vo();oe();gt();gt()});function VT(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}:{}}}function WT(e,t,n=Ce){let r=(e.pull_requests||[]).map(a=>({number:a.number,title:a.title,body:a.body||null,...a.body_pagination&&{bodyPagination:a.body_pagination},url:a.url,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.head_ref||"",targetBranch:a.base_ref||"",sourceSha:a.head_sha,targetSha:a.base_sha,createdAt:a.created_at,updatedAt:a.updated_at,closedAt:a.closed_at,mergedAt:a.merged_at,commentsCount:a.comments,changedFilesCount:a.changed_files,additions:a.additions,deletions:a.deletions,comments:a.comment_details?.map(c=>({id:c.id,author:c.user,body:c.body,...c.body_pagination&&{bodyPagination:c.body_pagination},createdAt:c.created_at,updatedAt:c.updated_at,...c.commentType&&{commentType:c.commentType},...c.path&&{path:c.path},...c.line!==void 0&&{line:c.line},...c.in_reply_to_id!=null&&{in_reply_to_id:c.in_reply_to_id}})),reviews:a.reviews?.map(c=>({id:c.id,user:c.user,state:c.state,body:c.body,submittedAt:c.submitted_at,commitId:c.commit_id})),commits:a.commit_details?.map(c=>({sha:c.sha,message:c.message,author:c.author,date:c.date})),fileChanges:a.file_changes?.map(c=>({path:c.filename,status:c.status,additions:c.additions,deletions:c.deletions,patch:c.patch})),...Array.isArray(a._sanitization_warnings)&&a._sanitization_warnings.length>0?{sanitizationWarnings:a._sanitization_warnings}:{}})),{owner:o,repo:i}=t.projectId?n(t.projectId):{owner:void 0,repo:void 0},s=o||t.owner;return{items:r,totalCount:e.total_count||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,...VT(e.pagination)},repositoryContext:s&&i?{owner:s,repo:i}:void 0}}async function Ah(e,t,n=Ce){let{owner:r,repo:o}=e.projectId?n(e.projectId):{owner:void 0,repo:void 0},s={owner:r||e.owner,repo:o,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,involves:e.involves,mentions:e.mentions,"reviewed-by":e.reviewedBy,"review-requested":e.reviewRequested,label:e.labels,"no-assignee":e.noAssignee,"no-label":e.noLabel,"no-milestone":e.noMilestone,"no-project":e.noProject,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,interactions:e.interactions,match:e.match,milestone:e.milestone,language:e.language,checks:e.checks,review:e.review,locked:e.locked,visibility:e.visibility,"team-mentions":e.teamMentions,project:e.project,archived:e.archived,content:e.content,reviewMode:e.reviewMode,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,sort:e.sort,order:e.order,limit:e.limit,page:e.page,charOffset:e.charOffset,charLength:e.charLength},a=await mh(s,t);return a.error?Nt({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:WT(a,e,n),status:200,provider:"github",rawResponseChars:a.rawResponseChars??U(a)}}var bu=y(()=>{"use strict";su();oe();gt();gt()});function YT(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 Lh(e,t,n=Ce){let{owner:r,repo:o}=n(e.projectId);if(!r||!o)return{error:"Project ID is required for repository structure",status:400,provider:"github"};let i={owner:r,repo:o,branch:e.ref||"HEAD",path:e.path,maxDepth:e.depth,itemsPerPage:e.itemsPerPage,page:e.page,includeSizes:e.includeSizes,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning},s=await wh(i,t);return"error"in s?zs(s)??{error:"Unknown GitHub API error",status:500,provider:"github"}:{data:YT(s),status:200,provider:"github",rawResponseChars:s.rawResponseChars??U(s)}}var Ru=y(()=>{"use strict";mu();oe();gt();gt()});var Bs,Su=y(()=>{"use strict";hu();yu();bu();Ru();wt();Ge();gu();gt();Bs=class{type="github";capabilities=Th.github;authInfo;constructor(t){t?.authInfo?this.authInfo=t.authInfo:t?.token&&(this.authInfo={token:t.token})}async searchCode(t){try{return await kh(t,this.authInfo,Ce)}catch(n){return this.handleError(n)}}async getFileContent(t){try{return await vh(t,this.authInfo,Ce)}catch(n){return this.handleError(n)}}async searchRepos(t){try{return await Oh(t,this.authInfo)}catch(n){return this.handleError(n)}}async searchPullRequests(t){try{return await Ah(t,this.authInfo,Ce)}catch(n){return this.handleError(n)}}async getRepoStructure(t){try{return await Lh(t,this.authInfo,Ce)}catch(n){return this.handleError(n)}}async resolveDefaultBranch(t){let{owner:n,repo:r}=Ce(t);if(!n||!r)throw new Error(`Cannot resolve default branch: invalid projectId '${t}'.`);return Ze(n,r,this.authInfo)}handleError(t){let n=re(t);return Nt(n)}}});import{createHash as JT}from"crypto";function _h(e){return Date.now()-e.createdAt<ZT}function eE(){for(let[e,t]of ht.entries())_h(t)||ht.delete(e);if(ht.size>Cu){let e=[...ht.entries()].sort((n,r)=>n[1].lastAccessedAt-r[1].lastAccessedAt),t=ht.size-Cu;for(let n=0;n<t&&n<e.length;n++){let r=e[n];r&&ht.delete(r[0])}}}function tE(e){return e?JT("sha256").update(e).digest("hex").slice(0,16):"default"}function nE(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 rE(e,t){let n=nE(t?.baseUrl||"default"),r=tE(t?.token||t?.authInfo?.token);return`${e}:${n}:${r}`}function Pu(e="github",t){if(e!=="github")throw new Error(`Unknown provider type: '${e}'. Only 'github' is supported.`);let n=rE(e,t),r=ht.get(n);if(r&&_h(r))return r.lastAccessedAt=Date.now(),r.provider;r&&ht.delete(n),ht.size>=Cu&&eE();let o=new Bs({...t,type:e}),i=Date.now();return ht.set(n,{provider:o,createdAt:i,lastAccessedAt:i}),o}function NU(){ht.clear()}async function Ih(){try{return Pu("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 ZT,Cu,ht,Qs=y(()=>{"use strict";Su();ZT=3600*1e3,Cu=20,ht=new Map});var oE,xu=y(()=>{"use strict";oE={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{ContentSanitizer as wu}from"@octocodeai/octocode-engine/contentSanitizer";function Fh(){try{return ge().output.format}catch{return"yaml"}}function UU(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:Wo({data:t,instructions:n})}],isError:!!r}}function $s(e){let t=[],{system:n,assistant:r,user:o,data:i,isError:s}=e;if(n){let a=[];if(n.instructions&&a.push(n.instructions),n.pagination){let{currentPage:c,totalPages:l,hasMore:u}=n.pagination;a.push(`Page ${c}/${l}${u?" (more available)":""}`)}n.warnings?.length&&a.push(`\u26A0\uFE0F Warnings:
|
|
27
26
|
${n.warnings.map(c=>`- ${c}`).join(`
|
|
28
27
|
`)}`),n.hints?.length&&a.push(`Hints:
|
|
29
28
|
${n.hints.map(c=>`- ${c}`).join(`
|
|
30
|
-
`)}`),a.length>0&&t.push(
|
|
29
|
+
`)}`),a.length>0&&t.push(Us.system(a.join(`
|
|
31
30
|
|
|
32
|
-
`)))}if(t.push(
|
|
31
|
+
`)))}if(t.push(Us.assistant(r.summary)),r.details){let a=r.format==="json"||r.format==="yaml"?r.format:void 0;t.push(Us.data(r.details,a))}if(o){let a=o.emoji?`${o.emoji} ${o.message}`:o.message;t.push(Us.user(a))}return{content:t,structuredContent:iE(i),isError:!!s}}function iE(e){if(e==null)return;let t=Sr(e);return typeof t=="object"&&t!==null&&!Array.isArray(t)?Tt(t):Tt({data:t})}function sE(e){return e==null||typeof e!="string"?"":wu.sanitizeContent(e).content}function Tt(e){if(e==null)return e;if(typeof e=="string")return wu.sanitizeContent(e).content;if(Array.isArray(e))return e.map(t=>Tt(t));if(typeof e=="object"){let t={};for(let[n,r]of Object.entries(e))t[n]=Tt(r);return t}return e}function $U(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(`
|
|
33
32
|
|
|
34
|
-
`):e.structuredContent!==void 0?JSON.stringify(e.structuredContent,null,2):JSON.stringify(e,null,2)}function gn(e,t){let n=Qt(e)??{},r=$a(),o="results"in n?["results","id","status","data"]:["instructions","status","data"],i;r==="json"?i=JSON.stringify(ar(n,t||o),null,2):i=z.jsonToYamlString(n,{keysPriority:t||o});let s=xo.sanitizeContent(i);return wo(s.content)}function ar(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(o=>ar(o,t));if(typeof e!="object")return e;let n=e,r={};for(let o of t)o in n&&(r[o]=ar(n[o],t));for(let o of Object.keys(n))o in r||(r[o]=ar(n[o],t));return r}var Uf=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"]);function Bf(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=>Uf.has(r))||t.hasMore!==!1?!1:typeof t.totalPages=="number"?t.totalPages<=1:"charOffset"in t||"nextCharOffset"in t?(t.charOffset??0)===0:!0}function Qt(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=>Qt(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(Bf(a))continue;let c=(s==="files"||s==="repositories")&&!n,l=Qt(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 cr}from"zod";function F(e,t){return cr.preprocess(n=>typeof n=="number"&&Number.isFinite(n)?Math.min(Math.max(n,e),t):n,cr.number().int().min(e).max(t))}var q=F(1,1e3).optional().default(1),jt=F(0,100).optional(),Vt=F(1,1e9).optional(),zf={responseCharOffset:F(0,1e8).optional().describe("Full-response char offset; re-call with returned value when hasMore."),responseCharLength:F(1,5e4).optional().describe("Full-response char window.")};function X(e,t={}){let{maxQueries:n=5}=t;return cr.object({queries:cr.array(e).min(1).max(n).describe("Parallel queries."),...zf}).superRefine((r,o)=>{let i=new Set;r.queries.forEach((s,a)=>{s&&typeof s=="object"&&"id"in s&&typeof s.id=="string"&&(i.has(s.id)&&o.addIssue({code:"custom",message:`Duplicate query id "${s.id}" at index ${a}`,path:["queries",a,"id"]}),i.add(s.id))})})}import{z as he}from"zod";var Qf=he.object({currentPage:he.number(),totalPages:he.number(),hasMore:he.boolean(),charOffset:he.number(),charLength:he.number(),totalChars:he.number(),nextCharOffset:he.number().optional()}).optional(),xe={hints:he.array(he.string()).optional(),base:he.string().optional(),shared:he.record(he.string(),he.union([he.string(),he.number(),he.boolean()])).optional(),responsePagination:Qf};function Jx(e){return e.extend(xe)}var _o={empty:(e={})=>{let t=e;if(t.mode==="structural")return["No structural matches. The pattern must be a complete code fragment for the target language; use $X for a single node, $$$ARGS for a list.","For relational rules (inside/has/not), add `stopBy: end` so the sub-rule walks all ancestors/descendants \u2014 without it the rule silently matches nothing.","Verify the file extension is one the engine parses (ts/tsx/js/py/go/rs/java/c/cpp/cs/sh), and widen the path."];let n=typeof t.path=="string"?t.path:void 0,r=typeof t.langType=="string"?t.langType:typeof t.type=="string"?t.type:void 0,o=Array.isArray(t.include)?t.include:[],i=Array.isArray(t.excludeDir)?t.excludeDir:[],s=typeof t.keywords=="string"?t.keywords:void 0,a=r||o.length>0||i.length>0,c=typeof t.searchEngine=="string"?t.searchEngine:void 0;if(!s&&!n&&!a)return[];let l=a?["Remove include/exclude/langType first, then retry a shorter or literal term."]:["Try a shorter partial term, fixedString=true for literals, or search a parent directory."];return c==="grep"?["grep fallback active \u2014 perlRegex patterns (lookaheads, backreferences) unsupported; use fixedString:true or simplify the pattern.",...l]:l},error:(e={})=>e.errorType==="size_limit"?[`Too many results${e.matchCount?` (${e.matchCount} matches)`:""} \u2014 narrow, add a filter, or use fixedString=true.`]:e.errorType==="not_found"?["Path not found \u2014 verify with localViewStructure."]:[]};var Ao={empty:(e={})=>{let t=e;return(typeof t.path=="string"?t.path:void 0)?["Confirm path with `localFindFiles`."]:[]},error:(e={})=>{if(e.errorType==="size_limit"){let t=e,n=typeof t.fileSize=="number"?` (~${Math.round(t.fileSize/1024)}KB)`:"",r=typeof t.totalLines=="number"?t.totalLines:void 0,o=r?Math.max(1,r-200):void 0,i=[`File${n} too large \u2014 use matchString or startLine+endLine for a slice.`,'Or minify="symbols" for a skeleton index, then startLine/endLine.'];return o&&r&&i.push(`Tail: startLine=${o}, endLine=${r}.`),i}if(e.errorType==="directory"){let t=e;return[`${typeof t.path=="string"?`'${t.path}'`:"Path"} is a directory \u2014 use \`localViewStructure\` to explore it.`]}return e.errorType==="not_found"?["Use `localFindFiles` to locate the correct path."]:e.errorType==="permission"?["Permission denied \u2014 check ALLOWED_PATHS configuration."]:[]}};var Lo={empty:(e={})=>{let t=e,n=Array.isArray(t.extensions)?t.extensions.filter(i=>typeof i=="string"):[],r=typeof t.pattern=="string"?t.pattern:void 0,o=[...r?[`pattern="${r}"`]:[],...n.length>0?[`extensions=${n.join(",")}`]:[]];return o.length===0?[]:[`No entries matched ${o.join(" + ")} \u2014 remove filters or increase depth/recursive.`]},error:(e={})=>e.errorType==="not_found"?["Path must be absolute \u2014 use localFindFiles to discover the correct path."]:e.errorType==="permission"?["Permission denied \u2014 check ALLOWED_PATHS configuration."]:[]};var Oo={empty:(e={})=>{let t=e,n=Array.isArray(t.names)&&t.names.length>0?t.names:void 0,r=typeof t.modifiedWithin=="string"?t.modifiedWithin:void 0,o=typeof t.sizeGreater=="string"?t.sizeGreater:void 0,i=typeof t.sizeLess=="string"?t.sizeLess:void 0,s=[];return n&&s.push(`names=${JSON.stringify(n)}`),r&&s.push(`modifiedWithin="${r}"`),o&&s.push(`sizeGreater="${o}"`),i&&s.push(`sizeLess="${i}"`),s.length===0?[]:[`No metadata match for ${s.join(", ")} \u2014 remove one filter or broaden names.`,"For content text, switch to `localSearchCode`."]},error:(e={})=>e.errorType==="not_found"?["Verify path with `localViewStructure` at the parent directory."]:e.errorType==="permission"?["Permission denied \u2014 check ALLOWED_PATHS configuration."]:[]};var Io={empty:(e={})=>{let t=e,n=Array.isArray(t.keywords)?t.keywords:void 0,r=typeof t.owner=="string"?t.owner:void 0,o=typeof t.repo=="string"?t.repo:void 0,i=typeof t.extension=="string"||typeof t.filename=="string"||typeof t.path=="string";if(t.nonExistentScope===!0)return[`"${r&&o?`${r}/${o}`:r||"target"}" doesn't exist or isn't accessible \u2014 check spelling.`];if(e.hasOwnerRepo&&r&&o)return[i?"Remove path/filename/extension first, then retry keywords.":`No results in ${r}/${o} \u2014 large or popular repos often require narrowing: add extension, filename, or path to reduce scope. Repo may also be unindexed (new/private/recently renamed). Fall back to ghGetFileContent with a known path, or ghViewRepoStructure to discover paths.`,"GitHub code search indexes the default branch only."];let s=[];return n&&n.length===1&&typeof n[0]=="string"&&/^@[\w-]+\/[\w.-]+$|^[a-z][\w]*[-.][\w.-]+$/.test(n[0])&&s.push(`"${n[0]}" looks like a package name \u2014 try \`npmSearch\`.`),s.length===0&&n&&n.length>0&&s.push('Scope to owner/repo, split into one-keyword queries, or try a shorter exact term. For large repos (react, webpack, electron), narrow with extension="ts" or path="src".'),s},error:(e={})=>{let t=[];return e.isRateLimited&&t.push(`Rate limited.${e.retryAfter?` Retry after ${e.retryAfter}s.`:""}`),e.status===401&&t.push("GITHUB_TOKEN missing/expired."),e.status===403&&!e.isRateLimited&&t.push("Token lacks `repo` scope."),t}};var ko={empty:(e={})=>{let t=e;return(typeof t.path=="string"?t.path:void 0)?["Verify it's a file, not a directory \u2014 use `ghViewRepoStructure`."]:[]},error:(e={})=>{if(e.errorType==="size_limit"){let t=e,n=typeof t.fileSize=="number"?`${t.fileSize}KB `:"",r=typeof t.totalLines=="number"?t.totalLines:void 0,o=r?Math.max(1,r-200):void 0,i=[`Large file ${n}\u2014 use startLine+endLine or matchString for a slice.`,'Or minify="symbols" for a skeleton index, then startLine/endLine.'];return o&&r&&i.push(`Tail: startLine=${o}, endLine=${r}.`),i}if(e.errorType==="not_found"){let t=e;return["Verify path with `ghViewRepoStructure`.",...(typeof t.branch=="string"?t.branch:void 0)?["Omit `branch` to use the default branch."]:[]]}return e.isRateLimited?[`GitHub API rate limited.${e.retryAfter?` Retry after ${e.retryAfter}s.`:" Wait before retrying."}`]:e.status===401?["GITHUB_TOKEN is missing or expired."]:e.status===403?["Token lacks `repo` scope."]:[]}};var vo={empty:(e={})=>{let t=e;return t.wasFilteredToEmpty===!0?["All entries were filtered by the ignored-paths list (node_modules, .git, dist, etc.). Path is valid \u2014 navigate to a specific subdirectory."]:(typeof t.path=="string"&&t.path?t.path:void 0)?["Try the parent path, or omit `path` to list from root."]:[]},error:(e={})=>{if(e.isRateLimited)return[`GitHub API rate limited.${e.retryAfter?` Retry after ${e.retryAfter}s.`:" Wait before retrying."}`];if(e.status===401)return["GITHUB_TOKEN is missing or expired."];if(e.status===403)return["Token lacks `repo` scope."];if(e.status===404){let t=e,n=typeof t.owner=="string"?t.owner:void 0,r=typeof t.repo=="string"?t.repo:void 0;return[`${n&&r?`'${n}/${r}'`:"the repository"} not found \u2014 check spelling or use \`ghSearchRepos\`.`]}return[]}};var Fo={empty:(e={})=>{let t=e;if((typeof t.type=="string"?t.type:"prs")==="commits"){let p=typeof t.path=="string"?t.path:void 0;return p?p.endsWith("/")?[`No commits found under "${p}". Check the directory prefix or widen since/until.`]:[`No commits found for "${p}". Check path spelling or widen since/until.`,"File may have been renamed \u2014 re-query with its previous name."]:["No commits found. Try widening since/until or removing the author filter."]}let r=typeof t.state=="string"?t.state:void 0,o=typeof t.owner=="string"?t.owner:void 0,i=typeof t.repo=="string"?t.repo:void 0,s=typeof t.author=="string"?t.author:void 0,a=typeof t.query=="string"?t.query:void 0,c=typeof t.prNumber=="number"?t.prNumber:void 0,d=(Array.isArray(t.prMatch)?t.prMatch:void 0)?.includes("title")??!1,u=o&&i?`${o}/${i}`:void 0;if(c!==void 0&&u)return[`PR #${c} not found in ${u}. Verify the PR number, or search by title using keywordsToSearch with match:["title"].`];let m=[];return r&&m.push(`state=${r}`),s&&m.push(`author=${s}`),a&&m.push(`query="${a}"`),m.length===0?[]:[r==="merged"?"No merged PRs matched \u2014 widen the date range or remove author/label filters.":"Remove filters one at a time to find what is too narrow.",...a&&!d?['For title-only matching use match:["title"] with sort:"best-match".']:a?[]:["Add a keyword (keywordsToSearch) to narrow by title or body text."]]},error:(e={})=>e.isRateLimited?[`GitHub API rate limited.${e.retryAfter?` Retry after ${e.retryAfter}s.`:" Wait before retrying."}`]:e.status===401?["GITHUB_TOKEN is missing or expired."]:e.status===403?["Token lacks repo scope \u2014 check GITHUB_TOKEN permissions."]:[]};var Mo={empty:(e={})=>{let t=e,n=typeof t.query=="string"?t.query:void 0,r=Array.isArray(t.keywords)?t.keywords:void 0,o=typeof t.language=="string"?t.language:void 0,i=typeof t.owner=="string"?t.owner:void 0,s=typeof t.topic=="string"?t.topic:void 0,a=o||i||s,c=n??(r&&r.length>0?String(r[0]):void 0);if(!c&&!a)return[];let l=[a?"Remove owner/language/topic first, then retry fewer keywords.":'Try fewer/simpler keywords, or use match:["name"] for exact-name lookup.'];return c&&/^@[\w-]+\/[\w.-]+$|^[a-z][\w]*[-.][\w.-]+$/.test(c)&&l.push(`"${c}" looks like a package \u2014 use \`npmSearch\` instead.`),l},error:(e={})=>e.isRateLimited?[`GitHub API rate limited.${e.retryAfter?` Retry after ${e.retryAfter}s.`:" Wait before retrying."}`]:e.status===401?["GITHUB_TOKEN is missing or expired."]:e.status===403?["Token lacks `public_repo` scope."]:[]};var No={empty:(e={})=>{let t=e;return(typeof t.sparsePath=="string"?t.sparsePath:typeof t.path=="string"?t.path:void 0)?["Omit `sparsePath` to check out the full repo.","Confirm path with `ghViewRepoStructure` before cloning sparse."]:[]},error:(e={})=>e.isRateLimited?[`GitHub API rate limited.${e.retryAfter?` Retry after ${e.retryAfter}s.`:" Wait before retrying."}`,"Use `ghViewRepoStructure` to inspect the tree without cloning."]:e.errorType==="permission"?["Token lacks read access \u2014 verify GITHUB_TOKEN has `repo` scope."]:e.errorType==="not_found"?["Check spelling or omit `branch` to use the default branch."]:e.errorType==="timeout"?["Clone timed out \u2014 use `sparsePath` for a subdirectory only."]:[]};function jf(e){let t=[];if(e.includes("-")&&(t.push(e.replace(/-/g,"_")),t.push(e.replace(/-/g,""))),e.includes("_")&&t.push(e.replace(/_/g,"-")),e.startsWith("@")){let n=e.split("/").pop();n&&t.push(n)}return e.endsWith("js")||t.push(e+"js"),[...new Set(t)].filter(n=>n!==e).slice(0,3)}var Ho={empty:(e={})=>{let t=e,n=typeof t.name=="string"?t.name:void 0;if(!n)return[];let r=jf(n);return["Check spelling and remove any version suffix.","Not on npm? Use `ghSearchRepos` instead.",...r.length?[`Try: ${r.join(", ")}`]:[]]},error:(e={})=>e.isRateLimited?[`npm registry rate limited.${e.retryAfter?` Retry after ${e.retryAfter}s.`:" Wait before retrying."}`]:e.originalError?["npm registry unreachable \u2014 use `ghSearchRepos` instead."]:[]};var Do={empty:(e={})=>{let t=typeof e.symbolName=="string"?e.symbolName:"",n=e,r=typeof n.type=="string"?n.type:void 0;return!t&&!r?[]:r==="documentSymbols"?["Verify uri with localFindFiles/localSearchCode, then retry."]:r==="references"?["references is bounded to the current package (open TS server files) \u2014 cross-package calls will not appear.",'Use type="callers" for cross-package incoming calls.']:["Re-anchor with localSearchCode to get uri+symbolName+lineHint; use documentSymbols if the symbol is ambiguous."]},error:(e={})=>e.errorType==="lsp_unavailable"?["Language server unavailable \u2014 use localSearchCode for references and localGetFileContent for source slices."]:e.errorType==="symbol_not_found"?["Run localSearchCode for the exact symbol line, then retry with updated uri+lineHint."]:[]};function mt(e,t){return t?[...{documentSymbols:["Use returned line values as lineHint for definition, references, or callers."],hover:['type="definition" to jump to source, type="callers" for cross-package usage.'],definition:['localGetFileContent for context, type="callers" for cross-package impact, type="references" for same-package usages.'],typeDefinition:['localGetFileContent for the type, type="implementation" for concrete implementations.'],implementation:['localGetFileContent for implementation, type="callers" for call sites.'],references:["groupByFile=true for compact summary, localGetFileContent for context.","Scope: bounded by files open in the TS server (current package). Use callers/callHierarchy for cross-package blast radius."],callers:["Increase depth for a wider tree, localGetFileContent for context."],callees:['Increase depth, type="definition" on returned calls for source.'],callHierarchy:["Increase depth, localGetFileContent on call sites for context."]}[e]??[]]:[...{definition:["Re-anchor with localSearchCode and retry."],hover:['Try type="definition" instead.'],typeDefinition:['Try type="hover" for the inferred type.'],references:["references is bounded to the current package (open TS server files) \u2014 cross-package calls will not appear.",'Use type="callers" for cross-package incoming calls.'],callers:['callHierarchyProvider unsupported by this language server (e.g. Python, C++). Use type="references" for same-package usages instead.',"Use localSearchCode for dynamic references."],callees:['callHierarchyProvider unsupported by this language server (e.g. Python, C++). Use type="references" or localSearchCode instead.',"Use localSearchCode for dynamic calls."],callHierarchy:['callHierarchyProvider unsupported by this language server (e.g. Python, C++). Use type="references" for same-package usages instead.',"Use localSearchCode for dynamic references."],documentSymbols:['Use localSearchCode with "export|function|class|const" as a fallback.'],implementation:["symbolName must be a method/property of an interface or abstract class \u2014 not the class name.",'Use type="documentSymbols" to list members, then retry with a member name.']}[e]??[]]}var Go={[K.LOCAL_RIPGREP]:_o,[K.LOCAL_FETCH_CONTENT]:Ao,[K.LOCAL_VIEW_STRUCTURE]:Lo,[K.LOCAL_FIND_FILES]:Oo,[K.GITHUB_SEARCH_CODE]:Io,[K.GITHUB_FETCH_CONTENT]:ko,[K.GITHUB_VIEW_REPO_STRUCTURE]:vo,[K.GITHUB_SEARCH_PULL_REQUESTS]:Fo,[K.GITHUB_SEARCH_REPOSITORIES]:Mo,[K.GITHUB_CLONE_REPO]:No,[K.PACKAGE_SEARCH]:Ho,[Re]:Do};function $o(e){return e in Go}function Uo(e,t,n){let r=Go[e]?.[t];return r?r(n||{}).filter(i=>typeof i=="string"):[]}function oe(e,t,n){if(!$o(e))return[];let r=Uo(e,t,n);return[...new Set(r)]}function Ua(e){let t=[];if(e.scopesSuggestion&&t.push(e.scopesSuggestion),e.rateLimitRemaining!==void 0&&e.rateLimitReset!==void 0){let n=e.rateLimitReset;if(!isNaN(n)){let r=new Date(n);t.push(`Rate limit: ${e.rateLimitRemaining} remaining, resets at ${r.toISOString()}`)}}return e.retryAfter!==void 0&&t.push(`Retry after ${e.retryAfter} seconds`),t}function Vf(e){return typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&("type"in e||"status"in e||"scopesSuggestion"in e)}function A(e,t,n={}){let{toolName:r,hintContext:o,extra:i,customHints:s,hintSourceError:a}=n,c={status:"error"},l=[];if(a&&l.push(...Ua(a)),Vf(e))c.error=e,a||l.push(...Ua(e));else if(jr(e)){if(c.error=e.message,c.errorCode=e.errorCode,r){let u=oe(r,"error",{originalError:e.message,errorType:Wf(e),...o});l.push(...u)}}else if(typeof e=="string")c.error=e;else if(e instanceof Error){let u=qi(e);if(c.error=u.message,c.errorCode=u.errorCode,r){let m=oe(r,"error",{originalError:u.message,...o});l.push(...m)}}else c.error="Unknown error occurred";s&&s.length>0&&l.push(...s),i?.hints&&Array.isArray(i.hints)&&l.push(...i.hints);let d=l.filter(u=>typeof u=="string"&&u.trim().length>0);if(d.length>0&&(c.hints=d),i){let{hints:u,...m}=i;Object.assign(c,m)}return n.rawResponse===void 0?c:U(c,n.rawResponse)}function Wf(e){switch(e.errorCode){case"fileTooLarge":case"outputTooLarge":return"size_limit";case"fileAccessFailed":case"fileReadFailed":return Kf(e)?"directory":"not_found";case"pathValidationFailed":return"permission";default:return}}function Kf(e){if(e.context?.errorCode==="EISDIR")return!0;let t=e.cause;return typeof t=="object"&&t!==null&&t.code==="EISDIR"}async function H_(e,t,n){if(e)try{await e(t,n)}catch{D(t,Mn.EXECUTION_FAILED.code).catch(()=>{})}}function Se(e,t,n,r,o){let i=n?void 0:"empty",s={...i!==void 0?{status:i}:{},...t},a=i==="empty"?oe(r,"empty",o?.hintContext):[],c=o?.prefixHints||[],l=o?.extraHints||[],d=[...new Set([...c,...a,...l])].filter(u=>typeof u=="string"&&u.trim().length>0);return d.length>0&&(s.hints=d),o?.rawResponse===void 0?s:U(s,o.rawResponse)}function lr(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},r=Array.isArray(e.hints)?e.hints:[];return A(n,t,{hintSourceError:n,customHints:r,rawResponse:e.rawResponseChars??e.data??(e.error?e:void 0)})}function ge(e,t,n,r){let o=e instanceof Error?e.message:"Unknown error occurred",i=n?`${n}: ${o}`:o;return D(r||n||"unknown_tool",Mn.EXECUTION_FAILED.code).catch(()=>{}),A(i,t)}async function Le({toolName:e,query:t,execute:n,contextMessage:r}){try{return await n()}catch(o){return ge(o,t,r,e)}}import{existsSync as Jf}from"fs";import{join as Zf}from"path";import{getOctocodeDir as qf}from"octocode-shared";import{spawn as Bo}from"child_process";var Q_=["NODE_OPTIONS","GITHUB_TOKEN","GH_TOKEN","OCTOCODE_TOKEN","GITHUB_PERSONAL_ACCESS_TOKEN","NPM_TOKEN","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN"],ur=["PATH","TMPDIR","TMP","TEMP","SYSTEMROOT","WINDIR","COMSPEC","PATHEXT"],yn=[...ur,"HOME","USERPROFILE","APPDATA","LOCALAPPDATA"],Ba=["HTTP_PROXY","HTTPS_PROXY","NO_PROXY","http_proxy","https_proxy","no_proxy"],Yf=10*1024*1024,zo=5e3;function Qo(e={},t=ur){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}function wt(e,t,n={}){let{timeout:r=3e4,cwd:o,env:i={},allowEnvVars:s=ur,maxOutputSize:a=Yf}=n;return new Promise(c=>{let l={killed:!1,stdoutChunks:[],stderrChunks:[],totalOutputSize:0},d=()=>l.stdoutChunks.join(""),u=()=>l.stderrChunks.join(""),m={cwd:o,env:Qo(i,s),stdio:["ignore","pipe","pipe"]},p;try{p=Bo(e,t,m)}catch(g){c({stdout:"",stderr:"",exitCode:null,success:!1,error:g instanceof Error?g:new Error(`Failed to spawn command '${e}'`)});return}let f,h=setTimeout(()=>{if(!l.killed){l.killed=!0;try{p.kill("SIGTERM")}catch{}f=setTimeout(()=>{try{p.kill("SIGKILL")}catch{}},zo),c({stdout:d(),stderr:u(),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)},b=()=>{if(l.totalOutputSize>a){if(!l.killed){l.killed=!0;try{p.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};p.stdout?.on("data",g=>{if(l.killed)return;let C=g.toString();l.totalOutputSize+=Buffer.byteLength(C),!b()&&l.stdoutChunks.push(C)}),p.stderr?.on("data",g=>{if(l.killed)return;let C=g.toString();l.totalOutputSize+=Buffer.byteLength(C),!b()&&l.stderrChunks.push(C)}),p.on("close",g=>{l.killed||(y(),c({stdout:d(),stderr:u(),exitCode:g,success:g===0}))}),p.on("error",g=>{l.killed||(l.killed=!0,y(),c({stdout:d(),stderr:u(),exitCode:null,success:!1,error:g}))})})}function dr(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,{allowEnvVars:s=ur}=r,a;try{a=Bo(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:Qo({},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{}},zo),o(!1)}},n);a.on("close",u=>{l(),i||o(u===0)}),a.on("error",()=>{l(),i||o(!1)})})}var Xf=1*1024*1024;function j_(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,s=[],a=0,{allowEnvVars:c=yn,maxOutputSize:l=Xf}=r,d;try{d=Bo(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:Qo({},c)})}catch{o(null);return}let u,m=()=>{clearTimeout(p),u!==void 0&&(clearTimeout(u),u=void 0)};d.stdout?.on("data",f=>{if(i)return;let h=f.toString();if(a+=Buffer.byteLength(h),a>l){if(!i){i=!0;try{d.kill("SIGKILL")}catch{}m(),o(null)}return}s.push(h)}),d.stderr?.on("data",()=>{});let p=setTimeout(()=>{if(!i){i=!0;try{d.kill("SIGTERM")}catch{}u=setTimeout(()=>{try{d.kill("SIGKILL")}catch{}},zo),o(null)}},n);d.on("close",f=>{if(m(),!i)if(f===0){let h=s.join("").trim();o(h||null)}else o(null)}),d.on("error",()=>{m(),i||o(null)})})}function pr(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 za=120*1e3,eh=30*1e3,Qa=[...yn,"GIT_TERMINAL_PROMPT"];async function ja(e,t,n){let r=e.owner,o=e.repo,{sparsePath:i,forceRefresh:s}=e;await oh();let a=e.branch??await $e(r,o,t),c=qf(),l=Un(c,r,o,a,i),d=zn(l);if(!s&&d.hit&&d.meta.source==="clone")return{localPath:l,cached:!0,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}};zt(c),fo(l),jn(l);let u=rh(t,n);if(i){if(await nh(r,o,a,l,i,u),!Jf(Zf(l,i)))throw fo(l),new Error(`sparsePath "${i}" does not exist in ${r}/${o}@${a} \u2014 nothing was checked out for it. Verify the directory path with ghViewRepoStructure, then retry with the correct sparsePath (or omit it for a full clone).`)}else await th(r,o,a,l,u);let m=Qn(r,o,a,"clone",i);return Bn(l,m),{localPath:l,cached:!1,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}}}async function th(e,t,n,r,o){let i=Wa(o);i.push("clone","--depth","1","--single-branch","--branch",n,"--",Va(e,t),r),await jo(i,za,`full clone of ${e}/${t}`,o)}async function nh(e,t,n,r,o,i){let s=Wa(i);s.push("clone","--filter","blob:none","--sparse","--depth","1","--single-branch","--branch",n,"--",Va(e,t),r),await jo(s,za,`sparse clone of ${e}/${t}`,i),await jo(["-C",r,"sparse-checkout","set","--",o],eh,`sparse-checkout set ${o}`,void 0)}function Va(e,t){return`https://github.com/${e}/${t}.git`}function Wa(e){return e?["-c",`http.extraHeader=Authorization: Bearer ${e}`]:[]}function rh(e,t){return e?.token&&typeof e.token=="string"?e.token:t}async function oh(){try{if(!(await wt("git",["--version"],{timeout:5e3,maxOutputSize:1024,allowEnvVars:Qa,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 ih(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 jo(e,t,n,r){let o=await wt("git",e,{timeout:t,maxOutputSize:5242880,allowEnvVars:Qa,env:{GIT_TERMINAL_PROMPT:"0"}});if(!o.success){let i=ih(o.stderr?.trim()||"",r),s=i?`: ${i}`:"";throw new Error(`git ${n} failed${s}`)}}import{getDirectorySizeBytes as xh}from"octocode-shared";import{incrementToolCharSavings as ph}from"octocode-shared";function je(e){return t=>{}}function Ka(e,t){return n=>t}async function Ya(e,t={}){if(!Array.isArray(e))throw D("promiseUtils",at.PROMISES_NOT_ARRAY.code).catch(je("promise utility session logging")),new Error(at.PROMISES_NOT_ARRAY.message);if(e.length===0)return[];let{timeout:n=3e4,concurrency:r=e.length,onError:o}=t;if(n<=0)throw D("promiseUtils",at.TIMEOUT_NOT_POSITIVE.code).catch(je("promise utility session logging")),new Error(at.TIMEOUT_NOT_POSITIVE.message);if(r<=0)throw D("promiseUtils",at.CONCURRENCY_NOT_POSITIVE.code).catch(je("promise utility session logging")),new Error(at.CONCURRENCY_NOT_POSITIVE.message);let i=e.map((c,l)=>typeof c=="function"?c:()=>(D("promiseUtils",lt.NOT_A_FUNCTION.code).catch(je("promise utility session logging")),Promise.reject(new Error(lt.NOT_A_FUNCTION.message(l)))));if(r<i.length)return sh(i,r,n,o);let s=i.map((c,l)=>Xa(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 Xa(e,t,n,r){let o,i=()=>{o!==void 0&&(clearTimeout(o),o=void 0)};try{let s=new Promise((c,l)=>{o=setTimeout(()=>{D("promiseUtils",lt.TIMEOUT.code).catch(()=>{}),l(new Error(lt.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 sh(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){D("promiseUtils",lt.FUNCTION_UNDEFINED.code).catch(je("promise utility session logging")),o[c]={success:!1,error:new Error(lt.FUNCTION_UNDEFINED.message),index:c};continue}try{let d=await Xa(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}function ah(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 Wo=["path","uri"];function Vo(e,t,n){if(n>8||!e||typeof e!="object")return;if(Array.isArray(e)){for(let o of e)Vo(o,t,n+1);return}let r=e;for(let o of Wo){let i=r[o];typeof i=="string"&&(i.startsWith("file:///")?(r[o]=i.slice(7),t.push({obj:r,key:o})):i.startsWith("/")&&t.push({obj:r,key:o}))}for(let o of Object.values(r))o&&typeof o=="object"&&Vo(o,t,n+1)}function Ja(e){let t=[];for(let i of e)Vo(i?.data,t,0);if(t.length===0)return;let n=ah(t.map(i=>i.obj[i.key]));if(n.length<=1)return;let r=n+"/",o=r.length;for(let{obj:i,key:s}of t){let a=i[s];a.startsWith(r)&&(i[s]=a.slice(o))}return ch(e,r),n}function ch(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)){let a=i[s];typeof a=="string"?!Wo.includes(s)&&a.includes(t)&&(i[s]=a.replaceAll(t,"")):n(a,o+1)}}for(let r of e)n(r?.data,0)}function lh(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 uh(e){return typeof e=="string"&&e!==""||typeof e=="number"||typeof e=="boolean"}var dh=new Set([...Wo,"owner","repo","name","id"]);function Za(e){let t=lh(e);if(t.length<2)return;let n=t[0],r;for(let i of Object.keys(n)){if(dh.has(i))continue;let s=n[i];uh(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 mh=3,qa=parseInt(process.env.OCTOCODE_BULK_QUERY_TIMEOUT_MS||"60000",10)||6e4,fh=parseInt(process.env.OCTOCODE_TOOL_TIMEOUT_MS||"60000",10)||6e4,hh=5e3;function gh(e,t,n){if(e<=1)return qa;let r=Math.min(Math.max(t,1),e),o=Math.ceil(e/r),i=Math.floor(fh/o),s=Math.max(hh,Math.min(i,qa));return n?Math.max(s,n):s}async function J(e,t,n,r){let o=n.concurrency??mh,{results:i,errors:s}=await Sh(e,t,o,n.minQueryTimeoutMs);return yh(n,i,s,e,r)}function yh(e,t,n,r,o){let i=["results","hints","base","shared"],s=["id","status","data"],a=[...new Set([...i,...s,...e.keysPriority||[]])],c=new Array(r.length);t.forEach(g=>{let C=g.result.status;c[g.queryIndex]={id:oc(g.originalQuery,g.queryIndex),...C!==void 0?{status:C}:{},data:Ph(g.result)}}),n.forEach(g=>{let C=r[g.queryIndex];C&&(c[g.queryIndex]={id:oc(C,g.queryIndex),status:"error",data:{error:g.error}})});let l=c.filter(g=>g!==void 0);if(e.finalize){let g=e.finalize({queries:r,results:l,config:e}),C=ec(g.text,o),T=tc(g.structuredContent,C.pagination);return rc(e.toolName,t,n,C.text.length),{content:[{type:"text",text:C.text}],structuredContent:T,isError:g.isError??(l.length>0&&l.every(x=>x.status==="error"))}}let d=e.peerHints?nc(l):[],u={results:l};if(Array.isArray(u.results)){let g=Ja(u.results);g&&(u.base=g);let C=Za(u.results);C&&(u.shared=C)}let m=e.peerHints?nc(Array.isArray(u.results)?u.results:[]):[],p=e.peerHints?Array.from(new Set([...d,...m])):d;p.length>0&&(u.hints=p);let f=gn(u,a),h=ec(f,o),y=tc(Ye(u),h.pagination);return rc(e.toolName,t,n,h.text.length),{content:[{type:"text",text:h.text}],structuredContent:y,isError:l.length>0&&l.every(g=>g.status==="error")}}function Ko(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(`
|
|
35
|
-
`,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 Rh(e,t,n){let r=1,o=0;for(;o<t&&o<e.length;){let i=Ko(e,o,n);if(i<=o)break;o=i,r+=1}return o===t?r:Math.floor(t/n)+1}function bh(e,t){if(e.length===0)return 1;let n=0,r=0;for(;r<e.length;){let o=Ko(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 ec(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=Ko(e,s,i),c=a<o,l=Rh(e,s,i),d=bh(e,i),u=e.slice(s,a);return{text:`${c?`# Response page ${l}/${d}. Next: responseCharOffset=${a}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
`).length-1}))),r&&p&&u.url&&(y.url=u.url,p=!1),m.matches.push(y),f=!0}f||m.matches.push({path:s.path,pathOnly:!0,...r&&u.url?{url:u.url}:{}})}let i={results:Array.from(o.values()),...e.nonExistentScope?{nonExistentScope:!0}:{}};return e.pagination&&e.pagination.totalPages>1&&(i.pagination={currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,totalMatches:e.pagination.totalMatches||0,...hc(e.pagination),hasMore:e.pagination.hasMore}),i}function yc(e){let t=e;return{keywords:e.keywords,topics:e.topicsToSearch,owner:e.owner,stars:e.stars,size:e.size,created:e.created,updated:e.updated,language:e.language,archived:t.archived,visibility:t.visibility,forks:t.forks,license:t.license,goodFirstIssues:t.goodFirstIssues,match:e.match,sort:e.sort,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function Rc(e){let t=n=>{let r=n.lastIndexOf("/");return r<=0?{owner:"",repo:n}:{owner:n.substring(0,r),repo:n.substring(r+1)}};return e.map(n=>{let{owner:r,repo:o}=t(n.fullPath);return{owner:r||"",repo:o||n.name,defaultBranch:n.defaultBranch,stars:n.stars,description:n.description||"",url:n.url,createdAt:n.createdAt,updatedAt:n.updatedAt,pushedAt:n.lastActivityAt,visibility:n.visibility,topics:n.topics,forksCount:n.forks,openIssuesCount:n.openIssuesCount,...n.language&&{language:n.language}}})}function $h(e){return e.startsWith('"')?e:/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}function bc(e){let t=(e.keywordsToSearch??[]).filter(o=>o.trim()).map($h),n=e.query?.trim()??"",r=[...t,...n?[n]:[]].join(" ")||void 0;return{projectId:mc(e.owner,e.repo),owner:e.owner,query:r,number:e.prNumber,state:e.state,author:e.author,assignee:e.assignee,commenter:e.commenter,involves:e.involves,mentions:e.mentions,reviewRequested:e["review-requested"],reviewedBy:e["reviewed-by"],labels:(()=>{let o=e.label;if(o)return Array.isArray(o)?o:[o]})(),noLabel:e["no-label"],noMilestone:e["no-milestone"],noProject:e["no-project"],noAssignee:e["no-assignee"],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,interactions:e.interactions,draft:e.draft,match:e.match,archived:e.archived,content:e.content,reviewMode:e.reviewMode,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,sort:e.sort,order:e.order,limit:e.limit??30,page:e.page,charOffset:e.charOffset,charLength:e.charLength,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function Uh(e){return e?{capped:e,totalCount:e.length,wasTruncated:!1}:{capped:void 0,totalCount:0,wasTruncated:!1}}function Bh(e){let t=e.map(r=>r.body.toLowerCase()),n=[];return t.some(r=>/\b(lgtm|looks good|approved|ship it)\b/.test(r))&&n.push("approval"),t.some(r=>/\b(change|fix|concern|blocker|blocking|request changes?)\b/.test(r))&&n.push("changes-requested"),t.some(r=>r.includes("?"))&&n.push("question"),n.length>0?n:["discussion"]}function zh(e){if(!e||e.length===0)return;let t=Array.from(new Set(e.map(o=>o.author))),n=e.map(o=>o.updatedAt||o.createdAt).filter(Boolean).sort().at(-1),r=e.filter(o=>o.commentType==="review_inline").length;return{totalComments:e.length,inlineComments:r,discussionComments:e.length-r,commenters:t.slice(0,8),...n?{latestCommentAt:n}:{},themes:Bh(e)}}function Sc(e,t={}){let{includeFileChanges:n=!0}=t,r=e.items.map(i=>{let{capped:s,totalCount:a}=Uh(i.fileChanges),c=Array.isArray(i.comments)?i.comments:void 0,l=zh(c);return{number:i.number,title:i.title,body:i.body??void 0,...i.bodyPagination&&{bodyPagination:i.bodyPagination},url:i.url,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},...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}:{},...hc(e.pagination),hasMore:e.pagination.hasMore}:void 0;return{pullRequests:r,resultData:{pull_requests:r,...o?{pagination:o}:{total_count:e.totalCount||r.length}},pagination:o}}function Cc(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,charOffset:e.charOffset,charLength:e.charLength,minify:e.minify,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function Pc(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.isSkeleton===!0&&{isSkeleton:!0},...e.isPartial&&{isPartial:e.isPartial},...e.startLine&&{startLine:e.startLine},...e.endLine&&{endLine:e.endLine},...e.matchRanges?.length&&{matchRanges:e.matchRanges},...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 Ec(e,t){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??Et.ENTRIES_PER_PAGE,page:(()=>{let n=e.page;return typeof n=="number"?n:void 0})(),includeSizes:e.includeSizes,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function Tc(e,t,n,r){let o=r,i=e.branch??r,s=o&&i&&o!==i&&o!=="HEAD",a=Object.entries(n).sort(([u],[m])=>u==="."?-1:m==="."?1:u.localeCompare(m)).map(([u,m])=>({dir:u,files:m.files,folders:m.folders})),c=e.fileSizeMap,l={};if(c){for(let[u,m]of Object.entries(c))if(n[u]){let p=new Set(n[u].files);for(let[f,h]of Object.entries(m))p.has(f)&&(l[f]=h)}}let d={structure:a,...Object.keys(l).length>0&&{fileSizes:l},summary:{totalFiles:e.summary.totalFiles,totalFolders:e.summary.totalFolders}};return i&&(d.resolvedBranch=i),s&&(d.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)&&(d.pagination=e.pagination),d}function Qh(e,t,n,r){let o=Math.max(t,1),i=Math.max(n,0),s=Math.max(r,0),a=Math.max(1,Math.ceil(s/o)),c=s===0?0:Math.min(Math.max(e,0),Math.max(s-1,0));return{currentPage:s===0?1:Math.min(a,Math.floor(c/o)+1),totalPages:a,hasMore:e+i<s,charOffset:e,charLength:i,totalChars:s}}function YA({groups:e,getItems:t,setItems:n,getItemText:r,setItemText:o,charOffset:i,charLength:s,maxItems:a}){let c=r&&o?{get:r,set:o}:null,l=[],d=0;e.forEach((P,x)=>{d+=G(n(P,[]));for(let I of t(P)){let Q=c?.get(I);if(c&&Q!==void 0){let E=G(c.set(I,"")),w=Q.length,O=d,$=O+E,M=$+w;l.push({groupIndex:x,item:I,textStart:$,textLen:w,start:O,end:M}),d=M}else{let E=G(I),w=d;l.push({groupIndex:x,item:I,textStart:w,textLen:0,start:w,end:w+E}),d=w+E}}});let u=d,m=Math.max(s,1),p=Math.min(Math.max(i,0),u),f=Math.min(p+m,u),h=P=>{if(P.textLen===0||!c)return P.item;let x=Math.min(Math.max(p-P.textStart,0),P.textLen),I=Math.min(Math.max(f-P.textStart,0),P.textLen);if(x===0&&I===P.textLen)return P.item;let Q=c.get(P.item)??"";return c.set(P.item,Q.slice(x,I))},y=new Map,b=p,g=0,C=typeof a=="number"&&a>0?a:void 0;for(let P of l){if(P.end<=p)continue;if(P.start>=f)break;let x=y.get(P.groupIndex)??[];if(x.push(h(P)),y.set(P.groupIndex,x),b=Math.max(b,Math.min(P.end,f)),g+=1,C!==void 0&&g>=C){b=Math.max(b,P.end);break}}if(y.size===0&&p<u){let P=l.find(x=>x.end>p);P&&(y.set(P.groupIndex,[h(P)]),b=Math.max(b,Math.min(P.end,f)))}let T=[];return e.forEach((P,x)=>{let I=y.get(x);I&&T.push(n(P,I))}),{groups:T,pagination:Qh(p,m,Math.max(0,b-p),u)}}function xt(e){let t=new Set,n=[];for(let r of e)typeof r=="string"&&r.trim().length>0&&!t.has(r)&&(t.add(r),n.push(r));return n}function jh(e){if(typeof e=="string")return{message:e};if(typeof e=="object"&&e!==null){let t=e,n=typeof t.error=="string"&&t.error.length>0?t.error:"Provider error",r=typeof t.status=="number"&&Number.isFinite(t.status)?t.status:void 0;return{message:n,status:r}}return{message:"Provider error"}}function gr(e){let t=[];for(let n of e){if(n.status!=="error")continue;let{message:r,status:o}=jh(n.data.error),i=o!==void 0?`${r} (HTTP ${o})`:r,s=Array.isArray(n.data.hints)?n.data.hints.filter(a=>typeof a=="string"&&a.trim().length>0):void 0;t.push({id:n.id,error:i,...s&&s.length>0?{hints:s}:{}})}return t}function yr(e,t,n){let r=gn(e,[...t]);return{structuredContent:Ye(e),text:r,isError:n}}function xc(e){return typeof e=="object"&&e!==null}function rt(e){return typeof e=="string"&&e.length>0?e:void 0}function Xe(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Vh(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string");return t.length>0?t:void 0}function Wh(e){return xt(e.flatMap(t=>{let n=t.data.hints;return Array.isArray(n)?n.filter(r=>typeof r=="string"):[]}))}var Kh=["charOffset","charLength","totalChars","nextCharOffset","nextBlockChar","filesPerPage","totalFiles","entriesPerPage","totalEntries","matchesPerPage","totalMatches"];function Yh(e){if(!xc(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 Kh){let s=e[i];typeof s=="number"&&Number.isFinite(s)&&(o[i]=s)}return o}function Xh(e,t){return`${e}/${t}`}function Jh(e,t,n){let r=Xh(t,n),o=e.get(r);if(o)return o;let i={id:r,owner:t,repo:n};return e.set(r,i),i}function Zh(e,t){return{path:rt(e.path)??String(t.path??""),content:typeof e.content=="string"?e.content:"",...Xe(e.fileSize)!==void 0?{fileSize:Xe(e.fileSize)}:{},contentView:e.contentView==="none"||e.contentView==="standard"||e.contentView==="symbols"?e.contentView:void 0,...e.isSkeleton===!0?{isSkeleton:!0}:{},totalLines:Xe(e.totalLines),sourceChars:Xe(e.sourceChars),sourceBytes:Xe(e.sourceBytes),resolvedBranch:rt(e.resolvedBranch),pagination:Yh(e.pagination),...e.isPartial===!0?{isPartial:!0}:{},startLine:Xe(e.startLine),endLine:Xe(e.endLine),...Array.isArray(e.matchRanges)&&e.matchRanges.length>0?{matchRanges:e.matchRanges}:{},lastModified:rt(e.lastModified),lastModifiedBy:rt(e.lastModifiedBy),warnings:Vh(e.warnings),...e.matchNotFound===!0?{matchNotFound:!0}:{},searchedFor:rt(e.searchedFor)}}function wc(e,t){let n=t.pagination,r=n?.charOffset??0,o=n?.charLength??0,i=r+o,s=n?.currentPage&&n.totalPages?`Page ${n.currentPage}/${n.totalPages}`:"Content page",a=typeof n?.totalChars=="number"&&o>0?` (chars ${r+1}-${i} of ${n.totalChars})`:"";return`${s}${a}. Next: charOffset=${i} for ${e}:${t.path}`}function qh(e,t){let r=(Array.isArray(e.files)?e.files:[]).filter(xc).map(o=>({path:rt(o.path)??"",size:Xe(o.size)??0,type:rt(o.type)??"file"}));return{path:String(t.path??""),localPath:rt(e.localPath)??"",fileCount:Xe(e.fileCount)??r.length,totalSize:Xe(e.totalSize)??0,...r.length>0?{files:r}:{},...e.cached===!0?{cached:!0}:{},resolvedBranch:rt(e.resolvedBranch)}}function eg(e,t){let n=new Map;return e.forEach((r,o)=>{if(r.status==="error")return;let i=t[o];if(!i)return;let s=String(i.owner??""),a=String(i.repo??"");if(!s||!a)return;let c=Jh(n,s,a),l=r.data;if(i.type==="directory"){let u=c.directories??[];u.push(qh(l,i)),c.directories=u;return}let d=c.files??[];d.push(Zh(l,i)),c.files=d}),Array.from(n.values())}function tg(e){let t=[];for(let n of e){for(let r of n.files??[]){if(r.pagination?.hasMore&&typeof r.pagination.charOffset=="number"){let o=r.pagination.charLength??0,i=r.pagination.charOffset+o,s=r.pagination.nextBlockChar;if(typeof s=="number"){let a=s-i;t.push(`${wc(n.id,r)}. Page cut mid-block at char ${i}. Next top-level definition starts at char ${s}. Re-request with charLength=${o+a} to extend this page to the next boundary, or use charOffset=${i} to continue page-by-page.`)}else t.push(wc(n.id,r))}r.isPartial&&!r.matchRanges?.length&&typeof r.endLine=="number"&&typeof r.totalLines=="number"&&r.endLine<r.totalLines&&t.push(`File content is partial (lines ${r.startLine??1}\u2013${r.endLine} of ${r.totalLines}). Use startLine=${r.endLine+1} to read the next section of ${n.id}:${r.path}.`)}for(let r of n.directories??[])r.cached&&t.push(`Directory ${n.id}:${r.path} served from cache.`)}return xt(t)}function ng(e,t){let n=e.toLowerCase();if(t===404||n.includes("not found")||n.includes("404"))return["Verify owner/repo/path/branch.","Use ghViewRepoStructure to confirm the path."];if(t===403||n.includes("forbidden")||n.includes("403"))return["Check token permissions or repository visibility."];if(t===429||n.includes("rate limit"))return["Retry after reset or authenticate with a higher-limit token."]}function rg(e,t){return gr(e).map(r=>{let o=e.findIndex(s=>s.id===r.id),i=o>=0?t[o]:void 0;return{id:r.id,owner:i?.owner,repo:i?.repo,path:i?.path?String(i.path):void 0,error:r.error,hints:ng(r.error)}})}function _c(){return({queries:e,results:t,config:n})=>{let r=eg(t,e),o=rg(t,e),i=xt([...n.peerHints?Wh(t):[],...tg(r)]),s={results:r};return i.length>0&&(s.hints=i),o&&o.length>0&&(s.errors=o),yr(s,["results","id","owner","repo","files","directories","path","content","totalLines","startLine","endLine","isPartial","pagination","hints","errors"],r.length===0&&!!(o&&o.length>0))}}async function Ac(e){let{queries:t,authInfo:n}=e,r=Be(n);return J(t,async(o,i)=>{try{let s=hr.safeParse(o);if(!s.success){let l=s.error.issues.map(d=>d.message).join("; ");return A(l,o)}let a=s.data,c=r();return a.type==="directory"?og(a,n,c):ig(a,c)}catch(s){return ge(s,o)}},{toolName:S.GITHUB_FETCH_CONTENT,peerHints:!0,finalize:_c()},e)}async function og(e,t,n){if(!Hn())return ge(new Error("Directory fetch requires ENABLE_LOCAL=true and ENABLE_CLONE=true. Directory mode saves files to disk using the same cache as ghCloneRepo."),e,"Clone not enabled",S.GITHUB_FETCH_CONTENT);if(!fr(n,"fetchDirectoryToDisk"))return ge(new Error('Directory fetch (type: "directory") is only available with the GitHub provider. Use file mode (type: "file") instead.'),e,"Provider not supported",S.GITHUB_FETCH_CONTENT);if(!e.owner||!e.repo)return A("Directory fetch requires both owner and repo.",e,{rawResponse:0});let r=e.branch??await $e(e.owner,e.repo,t),o=await Ds(e.owner,e.repo,String(e.path),r,t,!!e.forceRefresh),i={localPath:o.localPath,fileCount:o.fileCount,totalSize:o.totalSize,files:o.files,...o.cached?{cached:!0}:{},...e.branch!==o.branch?{resolvedBranch:o.branch}:{}};return Se(e,i,!0,S.GITHUB_FETCH_CONTENT,{rawResponse:o.totalSize??G(o)})}async function ig(e,t){let n=await ft(e,()=>t.provider.getFileContent(Cc(e)));if(n.ok===!1)return n.result;let r=n.response.hints,o={...Pc(n.response.data,e),...r?.length?{hints:r}:{}},i=!!(n.response.data.matchNotFound===!0||n.response.data.content&&n.response.data.content.length>0);return Se(e,o,i,S.GITHUB_FETCH_CONTENT,{rawResponse:n.response.rawResponseChars,hintContext:{path:e.path,branch:e.branch,isPartial:n.response.data.isPartial,endLine:n.response.data.endLine}})}function sg(e){let t=e.data;return{results:Array.isArray(t?.results)?t.results:[],pagination:t?.pagination,...t?.nonExistentScope?{nonExistentScope:!0}:{}}}function ag(e){let t=new Map;for(let{id:n,groups:r}of e)for(let o of r){let i=`${n}\0${o.id}`,s=t.get(i);if(!s){t.set(i,{id:o.id,queryId:n,owner:o.owner,repo:o.repo,matches:[...o.matches]});continue}s.matches.push(...o.matches)}return Array.from(t.values())}function cg(e){return[...e].sort((t,n)=>{let r=n.matches.length-t.matches.length;return r!==0?r:t.id.localeCompare(n.id)})}function lg(e){let t=new Map;for(let n of e)for(let r of n.matches){let o=`${n.queryId??""}\0${n.owner}\0${n.repo}\0${r.path}`,i=t.get(o),{path:s,...a}=r;if(i){i.matches.push(a);continue}t.set(o,{id:`${n.owner}/${n.repo}:${r.path}`,owner:n.owner,repo:n.repo,path:r.path,...n.queryId?{queryId:n.queryId}:{},matches:[a]})}return Array.from(t.values())}function ug(e,t,n){return t.length===0?[]:[{id:e.length===1&&typeof e[0]?.id=="string"?e[0].id:"ghSearchCode",data:{files:lg(t),...n?{pagination:n}:{}}}]}function dg(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function pg(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${dg(a)}\\b`,"i").test(o):o.toLowerCase().includes(c))&&(i=Math.max(i,1))}return i}function mg(e,t){let n=t.filter(o=>typeof o=="string"&&o.trim());return n.length===0?cg(e):e.map(o=>{let i=o.matches.map((s,a)=>({match:s,index:a,score:pg(s,n)}));return i.sort((s,a)=>s.score!==a.score?a.score-s.score:s.index-a.index),{group:fg(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 fg(e,t){return{...e,matches:t}}function hg(e){return xt(e.flatMap(t=>{let n=t.data.hints;return Array.isArray(n)?n.filter(r=>typeof r=="string"):[]}))}function gg(e){return e.some(t=>t.matches.some(n=>n.pathOnly))}function Lc(){return({queries:e,results:t,config:n})=>{let r=[],o,i=0,s=[];t.forEach((b,g)=>{if(b.status==="error")return;let C=sg(b);if(C.results.reduce((x,I)=>x+I.matches.length,0)===0){let x=b.data.hints,I=Array.isArray(x)?x.filter(Q=>typeof Q=="string"&&Q.trim().length>0):[];s.push({id:b.id,hints:I,...C.nonExistentScope?{nonExistentScope:!0}:{}})}let P=C.results;r.push({id:b.id,groups:P}),C.pagination&&(o=C.pagination,i+=1)});let a=Array.from(new Set(e.flatMap(b=>{let g=b.keywords;return Array.isArray(g)?g.filter(C=>typeof C=="string"):[]}))),c=mg(ag(r),a),l=o&&i===1?Wt(o,"matches"):[],d=gr(t),u=gg(c)?['Some match="file" results are path-only because GitHub did not return text matches; use ghGetFileContent with matchString or startLine/endLine to inspect content.']:[],m=xt([...n.peerHints?hg(t):[],...l,...u]),p=o&&i===1?o:void 0,f=e.some(b=>b.concise===!0),h=ug(e,c,p);if(f)for(let b of h)b.data.files=b.data.files.map(g=>`${g.owner}/${g.repo}:${g.path}`);let y={results:h};if(m.length>0&&(y.hints=m),s.length>0){let b=new Set(m);y.emptyQueries=s.map(({id:g,hints:C,nonExistentScope:T})=>{let P=C.filter(x=>!b.has(x));return{id:g,...P.length>0?{hints:P}:{},...T?{nonExistentScope:T}:{}}})}return d.length>0&&(y.errors=d),yr(y,["results","id","data","files","path","owner","repo","queryId","matches","value","pathOnly","matchIndices","pagination","hints","emptyQueries","errors"],c.length===0&&d.length>0)}}function yg(e){return!!((e.keywords??[]).some(n=>n.trim().length>0)||e.owner||e.path||e.extension||e.filename)}function Rg(e){if(e.repo&&!e.owner)return{error:"Repository scope requires owner. Provide both owner and repo, or omit repo for a broader search.",hints:['Use owner="<org-or-user>" with repo="<repository>" \u2014 GitHub code search cannot scope to a bare repository name.','If you only know the repo name, first use ghSearchRepos with keywords=["<repo>"] to find its owner.']}}async function Oc(e){let{queries:t}=e,n=Be(e.authInfo);return J(t,async(r,o)=>{try{let i=Rg(r);if(i)return A(i.error,r,{customHints:i.hints});if(!yg(r))return A("At least one search term or scope filter is required.",r);let s=n(),a=await ft(r,()=>s.provider.searchCode(fc(r)));if(a.ok===!1)return a.result;let c=gc(a.response.data,r),l={hasOwnerRepo:!!(r.owner&&r.repo),owner:r.owner,repo:r.repo,nonExistentScope:c.nonExistentScope,match:r.match,extension:r.extension,filename:r.filename,path:r.path,keywords:r.keywords,totalMatches:c.pagination?.totalMatches,hasMore:c.pagination?.hasMore,currentPage:c.pagination?.currentPage??1,totalPages:c.pagination?.totalPages??1,matchedPaths:c.results.flatMap(p=>p.matches.map(f=>f.path))},d=new Set(c.results.flatMap(p=>p.matches.map(f=>`${p.owner}/${p.repo}:${f.path}`))).size,u=[];if(c.results.length>0){let p=Array.isArray(r.keywords)&&typeof r.keywords[0]=="string"?r.keywords[0]:"<keyword>";u.push(`Found matches in ${d} file${d===1?"":"s"} \u2014 matchIndices[].lineOffset is the 0-based line within the snippet; use ghGetFileContent(path, matchString="${p}") to land on the matched region (returns lineHint for lspGetSemantics).`)}if(c.pagination){let{totalPages:p,perPage:f,totalMatches:h,reportedTotalMatches:y,reachableTotalMatches:b}=c.pagination,g=y??h,C=b??Math.min(h,p*f);g>C&&u.push(`GitHub caps code-search at ${C} results \u2014 ${g-C} of ${g} reported matches are unreachable; narrow with path/extension/filename to see the rest.`)}if(typeof r.path=="string"&&!r.filename&&/(?:^|\/)([^/]+\.[A-Za-z][A-Za-z0-9]{0,9})$/.test(r.path)){let p=r.path.match(/(?:^|\/)([^/]+\.[A-Za-z][A-Za-z0-9]{0,9})$/),f=p?p[1]:r.path;u.push(`path="${r.path}" looks like a file path \u2014 auto-extracted filename="${f}" for the query. Use explicit filename="${f}" + path="<dir>" for clarity.`)}return Se(r,c,c.results.length>0,S.GITHUB_SEARCH_CODE,{hintContext:l,rawResponse:a.response.rawResponseChars,extraHints:u})}catch(i){return ge(i,r)}},{toolName:S.GITHUB_SEARCH_CODE,peerHints:!0,finalize:Lc()},e)}import{z as v}from"zod";import{GitHubCodeSearchQuerySchema as Ic}from"@octocodeai/octocode-core/schemas";var kc={limit:F(1,100).optional(),page:q.default(1)},vc=te(Ic,kc),Fc=X(ae(Ic,kc)),AL=v.object({base:v.string().optional(),shared:v.record(v.string(),v.union([v.string(),v.number(),v.boolean()])).optional(),responsePagination:xe.responsePagination,results:v.array(v.object({id:v.string(),data:v.object({files:v.array(v.object({id:v.string(),owner:v.string(),repo:v.string(),path:v.string(),queryId:v.string().optional(),matches:v.array(v.object({value:v.string().optional(),pathOnly:v.boolean().optional(),matchIndices:v.array(v.object({start:v.number(),end:v.number()})).optional(),url:v.string().optional()}))})),pagination:v.object({currentPage:v.number(),totalPages:v.number(),perPage:v.number(),totalMatches:v.number(),reportedTotalMatches:v.number().optional(),reachableTotalMatches:v.number().optional(),totalMatchesKind:v.enum(["exact","reported","lowerBound"]).optional(),totalMatchesCapped:v.boolean().optional(),hasMore:v.boolean(),uniqueFileCount:v.number().optional()}).optional()})})),hints:v.array(v.string()).optional(),emptyQueries:v.array(v.object({id:v.string(),hints:v.array(v.string()).optional(),nonExistentScope:v.literal(!0).optional()})).optional(),errors:v.array(v.object({id:v.string(),error:v.string(),hints:v.array(v.string()).optional()})).optional()});function bg(e,t){let n=e?.patches;return n?.mode?{mode:n.mode,...n.files?{files:n.files}:{},...n.ranges?{ranges:n.ranges}:{}}:t==="full"?{mode:"all"}:{mode:"none"}}function Sg(e,t){let n=e?.comments;return n?{discussion:n.discussion??!0,reviewInline:n.reviewInline??!0,includeBots:n.includeBots??!1,...n.file?{file:n.file}:{}}:t==="full"?{discussion:!0,reviewInline:!0,includeBots:!1}:!1}function Cg(e,t){let n=e?.commits;return n?{list:n.list??!0,includeFiles:n.includeFiles??!1}:t==="full"?{list:!0,includeFiles:!1}:!1}function Mc(e){let{content:t,reviewMode:n}=e,r=bg(t,n),o=Sg(t,n),i=Cg(t,n),s=n==="full";return{body:t?.body??s,changedFiles:(t?.changedFiles??s)||r.mode!=="none",patches:r,comments:o,reviews:t?.reviews??s,commits:i,...n?{reviewMode:n}:{}}}function Nc(e){return!!(e.body||e.changedFiles||e.patches.mode!=="none"||e.comments||e.reviews||e.commits)}function qo(e){let t=e.matchString;if(typeof t!="string")return;let n=t.trim().toLowerCase();return n.length>0?n:void 0}function br(e,t){return typeof e=="string"&&e.toLowerCase().includes(t)}function ei(e,t=1,n=20){let r=Math.min(Math.max(1,n),100),o=e.length,i=Math.max(1,Math.ceil(o/r)),s=Math.min(Math.max(1,t),i),a=(s-1)*r,c=Math.min(a+r,o);return{items:e.slice(a,c),pagination:{currentPage:s,totalPages:i,itemsPerPage:r,totalItems:o,hasMore:s<i,...s<i?{nextPage:s+1}:{}}}}function Cr(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 Dc(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{owner:e.owner,repo:e.repo,prNumber:t}}function Pg(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function Sr(e,t,n){return Pg({...Gc(e,t),...n})}function Hc(e,t,n,r,o={}){if(!(!r.hasMore||r.nextCharOffset===void 0))return Sr(e,t,{content:n,...o,charOffset:r.nextCharOffset,charLength:e.charLength})}function Jo(e,t,n,r,o){if(!(!o.hasMore||o.nextPage===void 0))return Sr(e,t,{content:n,[r]:o.nextPage,itemsPerPage:e.itemsPerPage})}function Eg(e,t,n){return{target:Gc(e,t),...n.body?{}:{getBody:{content:{body:!0}}},...n.changedFiles?{}:{getChangedFiles:{content:{changedFiles:!0}}},...n.patches.mode!=="none"?{}:{getSelectedPatches:{content:{patches:{mode:"selected",files:["path/from/changedFiles"]}}},getAllPatches:{content:{patches:{mode:"all"}}}},...n.comments?{}:{getComments:{content:{comments:{discussion:!0,reviewInline:!0}}}},...n.reviews?{}:{getReviews:{content:{reviews:!0}}},...n.commits?{}:{getCommits:{content:{commits:{list:!0}}}},...n.reviewMode==="full"?{}:{fullReview:{reviewMode:"full"}}}}function Rr(e){return String(e.path??e.filename??"")}function Tg(e,t){return{path:Rr(e),status:String(e.status??""),additions:Number(e.additions??0),deletions:Number(e.deletions??0),...t&&typeof e.patch=="string"?{patch:e.patch}:{}}}function wg(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 xg(e,t,n){if(!n.comments)return{};let r=Array.isArray(e.comments)?e.comments:[],o=wg(r,n.comments),i=qo(t),s=i?o.filter(l=>br(l.body,i)):o,{items:a,pagination:c}=ei(s,t.commentPage??t.page??1,t.itemsPerPage??20);return{comments:a.map(l=>{let d=Cr(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}:{},...d?{body:d.content,bodyPagination:d.pagination}:{bodyPreview:Dc(typeof l.body=="string"?l.body:"")},createdAt:l.createdAt,updatedAt:l.updatedAt}}),commentPagination:c}}function _g(e,t,n){if(!n.reviews)return{};let r=Array.isArray(e.reviews)?e.reviews:[],o=qo(t);return{reviews:(o?r.filter(s=>br(s.body,o)):r).map(s=>{let a=typeof s.body=="string"?s.body:"",c=Cr(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 Ag(e,t,n){if(!n.commits)return{};let r=Array.isArray(e.commits)?e.commits:[],{items:o,pagination:i}=ei(r,t.commitPage??t.page??1,t.itemsPerPage??20);return{commits:o.map(s=>({sha:s.sha,message:s.message,author:s.author,date:s.date,...n.commits&&n.commits.includeFiles&&Array.isArray(s.files)?{files:s.files}:{}})),commitPagination:i}}function Lg(e){return e.split(`
|
|
33
|
+
`):e.structuredContent!==void 0?JSON.stringify(e.structuredContent,null,2):JSON.stringify(e,null,2)}function Wo(e,t){let n=Sr(e)??{},r=Fh(),o="results"in n?["results","id","status","data"]:["instructions","status","data"],i;return r==="json"?i=JSON.stringify(qs(n,t||o),null,2):i=F.jsonToYamlString(n,{keysPriority:t||o}),wu.sanitizeContent(i).content}function qs(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(o=>qs(o,t));if(typeof e!="object")return e;let n=e,r={};for(let o of t)o in n&&(r[o]=qs(n[o],t));for(let o of Object.keys(n))o in r||(r[o]=qs(n[o],t));return r}function cE(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=>aE.has(r))||t.hasMore!==!1?!1:typeof t.totalPages=="number"?t.totalPages<=1:"charOffset"in t||"nextCharOffset"in t?(t.charOffset??0)===0:!0}function Sr(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=>Sr(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(cE(a))continue;let c=(s==="files"||s==="repositories")&&!n,l=Sr(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 Us,js,jU,aE,Ko=y(()=>{"use strict";Ae();be();xu();Us={system(e,t=1){return{type:"text",text:e,annotations:{audience:["assistant"],priority:t,role:"system"}}},assistant(e,t=.8){return{type:"text",text:e,annotations:{audience:["assistant","user"],priority:t,role:"assistant"}}},user(e,t=.6){return{type:"text",text:e,annotations:{audience:["user"],priority:t,role:"user"}}},data(e,t){let n=t??Fh(),r;try{r=n==="yaml"?F.jsonToYamlString(Sr(e)):JSON.stringify(Sr(e),null,2)}catch{r=`error: "Data serialization failed"
|
|
34
|
+
`}return{type:"text",text:sE(r),annotations:{audience:["assistant"],priority:.3,role:"assistant"}}}},js={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}"};jU={success(e,t,n){return $s({system:n?{hints:n}:void 0,assistant:{summary:e},user:{message:"Operation completed",emoji:js.success},data:t})},empty(e,t){return $s({system:{hints:t||["Try broader search terms","Check spelling"]},assistant:{summary:e},user:{message:"No results found",emoji:js.empty},data:{status:"empty",results:[]}})},error(e,t){return $s({system:{instructions:"Tool execution failed. Error details provided for self-correction."},assistant:{summary:`Error: ${e}`},user:{message:"An error occurred",emoji:js.error},data:{status:"error",error:e,details:t},isError:!0})},paginated(e,t,n,r){return $s({system:{pagination:{currentPage:n.page,totalPages:n.total,hasMore:n.hasMore},hints:r},assistant:{summary:e},user:{message:`Page ${n.page} of ${n.total}`,emoji:n.hasMore?"\u{1F4C4}":js.success},data:t})}};aE=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"])});import{z as Vs}from"zod";function G(e,t){return Vs.preprocess(n=>typeof n=="number"&&Number.isFinite(n)?Math.min(Math.max(n,e),t):n,Vs.number().int().min(e).max(t))}function ie(e,t={}){let{maxQueries:n=5}=t;return Vs.object({queries:Vs.array(e).min(1).max(n).describe("Parallel queries."),...lE}).superRefine((r,o)=>{let i=new Set;r.queries.forEach((s,a)=>{s&&typeof s=="object"&&"id"in s&&typeof s.id=="string"&&(i.has(s.id)&&o.addIssue({code:"custom",message:`Duplicate query id "${s.id}" at index ${a}`,path:["queries",a,"id"]}),i.add(s.id))})})}var ae,Cr,Pr,lE,Be=y(()=>{"use strict";me();ae=G(1,1e3).optional().default(1),Cr=G(0,100).optional(),Pr=G(1,1e9).optional(),lE={responseCharOffset:G(0,1e8).optional().describe("Full-response char offset; re-call with returned value when hasMore."),responseCharLength:G(1,5e4).optional().describe("Full-response char window.")}});import{z as Oe}from"zod";function JU(e){return e.extend(Qe)}var uE,Qe,Gt=y(()=>{"use strict";uE=Oe.object({currentPage:Oe.number(),totalPages:Oe.number(),hasMore:Oe.boolean(),charOffset:Oe.number(),charLength:Oe.number(),totalChars:Oe.number(),nextCharOffset:Oe.number().optional()}).optional(),Qe={hints:Oe.array(Oe.string()).optional(),base:Oe.string().optional(),shared:Oe.record(Oe.string(),Oe.union([Oe.string(),Oe.number(),Oe.boolean()])).optional(),responsePagination:uE}});function dE(e){return typeof e=="object"&&e!==null&&"error"in e&&typeof e.error=="string"&&("type"in e||"status"in e||"scopesSuggestion"in e)}function M(e,t,n={}){let{extra:r}=n,o={status:"error"};if(dE(e))o.error=e;else if(Ac(e))o.error=e.message,o.errorCode=e.errorCode;else if(typeof e=="string")o.error=e;else if(e instanceof Error){let i=Cf(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:j(o,n.rawResponse)}function Ue(e,t,n={}){let r=e.safeParse(t);if(r.success)return{ok:!0,data:r.data};let o=r.error.issues.map(s=>s.message).join("; "),i=n.prefix===!1?o:`Validation error: ${o}`;return{ok:!1,error:M(i,t,{toolName:n.toolName})}}var Ws=y(()=>{"use strict";Bi();oe()});async function ij(e,t,n){if(e)try{await e(t,n)}catch{return}}function _e(e,t,n,r,o){let i=n?void 0:"empty",s={...i!==void 0?{status:i}:{},...t};return o?.rawResponse===void 0?s:j(s,o.rawResponse)}function Ks(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 M(n,t,{rawResponse:e.rawResponseChars??e.data??(e.error?e:void 0)})}function Ie(e,t,n,r){let o=e instanceof Error?e.message:"Unknown error occurred",i=n?`${n}: ${o}`:o;return M(i,t)}var Fe=y(()=>{"use strict";Ws();oe()});async function Ve({toolName:e,query:t,execute:n,contextMessage:r}){try{return await n()}catch(o){return Ie(o,t,r,e)}}var Ht=y(()=>{"use strict";Fe()});import{spawn as Tu}from"child_process";function ku(e={},t=Ys){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}function kn(e,t,n={}){let{timeout:r=3e4,cwd:o,env:i={},allowEnvVars:s=Ys,maxOutputSize:a=pE}=n;return new Promise(c=>{let l={killed:!1,stdoutChunks:[],stderrChunks:[],totalOutputSize:0},u=()=>l.stdoutChunks.join(""),d=()=>l.stderrChunks.join(""),p={cwd:o,env:ku(i,s),stdio:["ignore","pipe","pipe"]},f;try{f=Tu(e,t,p)}catch(C){c({stdout:"",stderr:"",exitCode:null,success:!1,error:C instanceof Error?C:new Error(`Failed to spawn command '${e}'`)});return}let m,g=setTimeout(()=>{if(!l.killed){l.killed=!0;try{f.kill("SIGTERM")}catch{}m=setTimeout(()=>{try{f.kill("SIGKILL")}catch{}},Eu),c({stdout:u(),stderr:d(),exitCode:null,success:!1,error:new Error(`Command timeout after ${r}ms`),timedOut:!0})}},r),b=()=>{clearTimeout(g),m!==void 0&&(clearTimeout(m),m=void 0)},S=()=>{if(l.totalOutputSize>a){if(!l.killed){l.killed=!0;try{f.kill("SIGKILL")}catch{}b(),c({stdout:u(),stderr:d(),exitCode:null,success:!1,error:new Error("Output size limit exceeded"),outputLimitExceeded:!0})}return!0}return!1};f.stdout?.on("data",C=>{if(l.killed)return;let k=C.toString();l.totalOutputSize+=Buffer.byteLength(k),!S()&&l.stdoutChunks.push(k)}),f.stderr?.on("data",C=>{if(l.killed)return;let k=C.toString();l.totalOutputSize+=Buffer.byteLength(k),!S()&&l.stderrChunks.push(k)}),f.on("close",C=>{l.killed||(b(),c({stdout:u(),stderr:d(),exitCode:C,success:C===0}))}),f.on("error",C=>{l.killed||(l.killed=!0,b(),c({stdout:u(),stderr:d(),exitCode:null,success:!1,error:C}))})})}function Dh(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,{allowEnvVars:s=Ys}=r,a;try{a=Tu(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:ku({},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{}},Eu),o(!1)}},n);a.on("close",d=>{l(),i||o(d===0)}),a.on("error",()=>{l(),i||o(!1)})})}function fj(e,t,n=1e4,r={}){return new Promise(o=>{let i=!1,s=[],a=0,{allowEnvVars:c=Yo,maxOutputSize:l=fE}=r,u;try{u=Tu(e,t,{stdio:["ignore","pipe","pipe"],timeout:n,env:ku({},c)})}catch{o(null);return}let d,p=()=>{clearTimeout(f),d!==void 0&&(clearTimeout(d),d=void 0)};u.stdout?.on("data",m=>{if(i)return;let g=m.toString();if(a+=Buffer.byteLength(g),a>l){if(!i){i=!0;try{u.kill("SIGKILL")}catch{}p(),o(null)}return}s.push(g)}),u.stderr?.on("data",()=>{});let f=setTimeout(()=>{if(!i){i=!0;try{u.kill("SIGTERM")}catch{}d=setTimeout(()=>{try{u.kill("SIGKILL")}catch{}},Eu),o(null)}},n);u.on("close",m=>{if(p(),!i)if(m===0){let g=s.join("").trim();o(g||null)}else o(null)}),u.on("error",()=>{p(),i||o(null)})})}function Xs(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 pj,Ys,Yo,Mh,pE,Eu,fE,Xo=y(()=>{"use strict";pj=["NODE_OPTIONS","GITHUB_TOKEN","GH_TOKEN","OCTOCODE_TOKEN","GITHUB_PERSONAL_ACCESS_TOKEN","NPM_TOKEN","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN"],Ys=["PATH","TMPDIR","TMP","TEMP","SYSTEMROOT","WINDIR","COMSPEC","PATHEXT"],Yo=[...Ys,"HOME","USERPROFILE","APPDATA","LOCALAPPDATA"],Mh=["HTTP_PROXY","HTTPS_PROXY","NO_PROXY","http_proxy","https_proxy","no_proxy"],pE=10*1024*1024,Eu=5e3;fE=1*1024*1024});import{existsSync as mE,mkdirSync as Ou,renameSync as gE,rmSync as hE}from"fs";import{join as Jo}from"path";import{createHash as yE}from"crypto";async function zh(e,t,n){let r=e.owner,o=e.repo,{sparsePath:i,forceRefresh:s}=e;await AE();let a=e.branch??await Ze(r,o,t),c=Rn(),l=Sg(c,r,o,a,i);return PE(c,l,async()=>{let u=Io(l);if(!s&&u.hit&&u.meta.source==="clone")return{localPath:l,cached:!0,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}};xs(c),wn(l);let d=vE(t,n),p=wE(c,l);ws(p);try{if(i){if(await OE(r,o,a,p,i,d),!mE(Jo(p,i)))throw new Error(`sparsePath "${i}" does not exist in ${r}/${o}@${a} \u2014 nothing was checked out for it. Verify the path with ghViewRepoStructure, then retry with the correct sparsePath (or omit it for a full clone).`)}else await kE(r,o,a,p,d);let f=Fo(r,o,a,"clone",i);return _o(p,f),TE(p,l),{localPath:l,cached:!1,owner:r,repo:o,branch:a,...i?{sparsePath:i}:{}}}catch(f){throw ws(p),f}})}async function PE(e,t,n){wn(t);let r=xE(e,t);Ou(Jo(e,"tmp",Gh),{recursive:!0,mode:448});let o=Date.now();for(;;)try{Ou(r,{mode:448});break}catch(i){if(i.code!=="EEXIST")throw i;if(Date.now()-o>RE)throw new Error(`Timed out waiting for clone cache lock '${r}'.`);await EE(SE)}try{return await n()}finally{hE(r,{recursive:!0,force:!0})}}function Bh(e){return yE("sha256").update(e).digest("hex").slice(0,16)}function xE(e,t){return Jo(e,"tmp",Gh,Bh(t))}function wE(e,t){let n=`${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`,r=Jo(e,"tmp",CE);return Ou(r,{recursive:!0,mode:448}),Jo(r,`${Bh(t)}-${n}`)}function TE(e,t){ws(t),wn(t),gE(e,t)}function EE(e){return new Promise(t=>setTimeout(t,e))}async function kE(e,t,n,r,o){let i=Uh(o);i.push("clone","--depth","1","--single-branch","--branch",n,"--",Qh(e,t),r),await vu(i,Nh,`full clone of ${e}/${t}`,o)}async function OE(e,t,n,r,o,i){let s=Uh(i);s.push("clone","--filter","blob:none","--sparse","--depth","1","--single-branch","--branch",n,"--",Qh(e,t),r),await vu(s,Nh,`sparse clone of ${e}/${t}`,i),await vu(["-C",r,"sparse-checkout","set","--skip-checks","--",o],bE,`sparse-checkout set ${o}`,void 0)}function Qh(e,t){return`https://github.com/${e}/${t}.git`}function Uh(e){return e?["-c",`http.extraHeader=Authorization: Bearer ${e}`]:[]}function vE(e,t){return e?.token&&typeof e.token=="string"?e.token:t}async function AE(){try{if(!(await kn("git",["--version"],{timeout:5e3,maxOutputSize:1024,allowEnvVars:Hh,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 LE(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 vu(e,t,n,r){let o=await kn("git",e,{timeout:t,maxOutputSize:5242880,allowEnvVars:Hh,env:{GIT_TERMINAL_PROMPT:"0"}});if(!o.success){let i=LE(o.stderr?.trim()||"",r),s=i?`: ${i}`:"";throw new Error(`git ${n} failed${s}`)}}var Nh,bE,RE,SE,Gh,CE,Hh,Au=y(()=>{"use strict";Ae();Ge();Xo();Ts();Nh=120*1e3,bE=30*1e3,RE=300*1e3,SE=100,Gh="clone-locks",CE="clone-tmp",Hh=[...Yo,"GIT_TERMINAL_PROMPT"]});async function jh(e,t={}){if(!Array.isArray(e))throw new Error(Yr.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(Yr.TIMEOUT_NOT_POSITIVE.message);if(r<=0)throw new Error(Yr.CONCURRENCY_NOT_POSITIVE.message);let i=e.map((c,l)=>typeof c=="function"?c:()=>Promise.reject(new Error(Jr.NOT_A_FUNCTION.message(l))));if(r<i.length)return _E(i,r,n,o);let s=i.map((c,l)=>$h(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 $h(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(Jr.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 _E(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(Jr.FUNCTION_UNDEFINED.message),index:c};continue}try{let u=await $h(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 Lu=y(()=>{"use strict";ft()});function IE(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 _u(e,t,n){if(n>8||!e||typeof e!="object")return;if(Array.isArray(e)){for(let o of e)_u(o,t,n+1);return}let r=e;for(let o of Iu){let i=r[o];typeof i=="string"&&(i.startsWith("file:///")?(r[o]=i.slice(7),t.push({obj:r,key:o})):i.startsWith("/")&&t.push({obj:r,key:o}))}for(let[o,i]of Object.entries(r))qh.has(o)||i&&typeof i=="object"&&_u(i,t,n+1)}function Vh(e){let t=[];for(let i of e)_u(i?.data,t,0);if(t.length===0)return;let n=IE(t.map(i=>i.obj[i.key]));if(n.length<=1)return;let r=n+"/",o=r.length;for(let{obj:i,key:s}of t){let a=i[s];a.startsWith(r)&&(i[s]=a.slice(o))}return FE(e,r),n}function FE(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(qh.has(s))continue;let a=i[s];typeof a=="string"?!Iu.includes(s)&&a.includes(t)&&(i[s]=a.replaceAll(t,"")):n(a,o+1)}}for(let r of e)n(r?.data,0)}function ME(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 DE(e){return typeof e=="string"&&e!==""||typeof e=="number"||typeof e=="boolean"}function Wh(e){let t=ME(e);if(t.length<2)return;let n=t[0],r;for(let i of Object.keys(n)){if(NE.has(i))continue;let s=n[i];DE(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 Iu,qh,NE,Fu=y(()=>{"use strict";Iu=["path","uri"],qh=new Set(["next","location"]);NE=new Set([...Iu,"owner","repo","name","id"])});function BE(e,t,n){if(e<=1)return Kh;let r=Math.min(Math.max(t,1),e),o=Math.ceil(e/r),i=Math.floor(HE/o),s=Math.max(zE,Math.min(i,Kh));return n?Math.max(s,n):s}async function se(e,t,n,r){let o=n.concurrency??GE,{results:i,errors:s}=await $E(e,t,o,n.minQueryTimeoutMs);return QE(n,i,s,e,r)}function QE(e,t,n,r,o){let i=["results","base","shared"],s=["id","status","data"],a=[...new Set([...i,...s,...e.keysPriority||[]])],c=new Array(r.length);t.forEach(g=>{let b=g.result.status;c[g.queryIndex]={id:Zh(g.originalQuery,g.queryIndex),...b!==void 0?{status:b}:{},data:qE(g.result)}}),n.forEach(g=>{let b=r[g.queryIndex];b&&(c[g.queryIndex]={id:Zh(b,g.queryIndex),status:"error",data:{error:g.error}})});let l=c.filter(g=>g!==void 0);if(e.finalize){let g=e.finalize({queries:r,results:l,config:e}),b=Yh(g.text,o),S=Xh(g.structuredContent,b.pagination);return Jh(e.toolName,t,n,b.text.length),{content:[{type:"text",text:b.text}],structuredContent:S,isError:g.isError??(l.length>0&&l.every(k=>k.status==="error"))}}let u={results:l};if(Array.isArray(u.results)){let g=Vh(u.results);g&&(u.base=g);let b=Wh(u.results);b&&(u.shared=b)}let d=Wo(u,a),p=Yh(d,o),f=Xh(Tt(u),p.pagination);return Jh(e.toolName,t,n,p.text.length),{content:[{type:"text",text:p.text}],structuredContent:f,isError:l.length>0&&l.every(g=>g.status==="error")}}function Mu(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(`
|
|
35
|
+
`,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 UE(e,t,n){let r=1,o=0;for(;o<t&&o<e.length;){let i=Mu(e,o,n);if(i<=o)break;o=i,r+=1}return o===t?r:Math.floor(t/n)+1}function jE(e,t){if(e.length===0)return 1;let n=0,r=0;for(;r<e.length;){let o=Mu(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 Yh(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=Mu(e,s,i),c=a<o,l=UE(e,s,i),u=jE(e,i),d=e.slice(s,a);return{text:`${c?`# Response page ${l}/${u}. Next: responseCharOffset=${a}
|
|
36
|
+
`:`# Response page ${l}/${u}.
|
|
37
|
+
`}${d}`,pagination:{currentPage:l,totalPages:u,hasMore:c,charOffset:s,charLength:a-s,totalChars:o,...c?{nextCharOffset:a}:{}}}}function Xh(e,t){return t?{...e,responsePagination:t}:e}function Jh(e,t,n,r){let o=t.reduce((i,s)=>i+(le(s.result)??U(s.result)),0)+n.reduce((i,s)=>i+U(s),0);try{ss(e,o,r)}catch{}}async function $E(e,t,n,r){let o=[],i=[];if(!e||e.length===0)return{results:o,errors:i};let s=e.map((c,l)=>()=>t(c,l).then(u=>({result:u,queryIndex:l,originalQuery:c})));return(await jh(s,{timeout:BE(e.length,n,r),continueOnError:!0,concurrency:n,onError:(c,l)=>{i.push({queryIndex:l,error:c.message})}})).forEach(c=>{c.success&&c.data&&o.push({result:c.data.result,queryIndex:c.data.queryIndex,originalQuery:c.data.originalQuery})}),{results:o,errors:i}}function qE(e){let t=new Set(["status","mainResearchGoal","researchGoal","reasoning","researchSuggestions","query"]);e.status!=="error"&&t.add("error");let n={};for(let[r,o]of Object.entries(e))t.has(r)||(n[r]=o);return n}function Zh(e,t){let r=e.id;return typeof r=="string"&&r.trim().length>0?r:typeof r=="number"&&Number.isFinite(r)?String(r):`q${t+1}`}var GE,Kh,HE,zE,je=y(()=>{"use strict";Ae();Lu();Ko();oe();Fu();GE=3,Kh=parseInt(process.env.OCTOCODE_BULK_QUERY_TIMEOUT_MS||"60000",10)||6e4,HE=parseInt(process.env.OCTOCODE_TOOL_TIMEOUT_MS||"60000",10)||6e4,zE=5e3});function Js(e){return e.data!==void 0&&!e.error}function VE(e){return e.error!==void 0}var Du=y(()=>{"use strict"});import{maskSensitiveData as ey}from"@octocodeai/octocode-engine/mask";function WE(){return Cl().provider??Sl()}function KE(e){let t=Cl(),n=t.provider??Sl(),{baseUrl:r,token:o}=t;try{let i=Pu(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=ey(s);throw new Nu(n,`Failed to initialize ${n} provider: ${a}`)}}function ct(e){let t;return()=>t??=KE(e)}function Zs(e,t){return e.capabilities[t]}async function Zt(e,t){let n=await t();return Js(n)?{ok:!0,response:n}:{ok:!1,result:Ks(n,e)}}async function ty(e,t){let n=t??WE(),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:ey(c),status:500,provider:n}}}})),o=[],i=[];for(let s of r)Js(s.response)?o.push({meta:s.meta,response:s.response}):i.push({meta:s.meta,response:s.response});return{successes:o,failures:i}}var Nu,en=y(()=>{"use strict";Qs();Du();lr();Fe();Nu=class extends Error{providerType;constructor(t,n){super(n),this.name="ProviderInitializationError",this.providerType=t}}});async function ny(e){let{queries:t,authInfo:n}=e,r=ct(n);return se(t,async(o,i)=>Ve({toolName:A.GITHUB_CLONE_REPO,query:o,contextMessage:`Clone failed for ${o.owner}/${o.repo}`,execute:async()=>{let s=r();if(!Zs(s,"cloneRepo"))return Ie(new Error("ghCloneRepo is only available with the GitHub provider."),o,"Provider not supported",A.GITHUB_CLONE_REPO);let a;try{a=await zh(o,n,s.token)}catch(p){let f=p instanceof Error?p.message:String(p);return M(`Clone failed for ${o.owner}/${o.repo}: ${f}`,o)}let c=xo(a.localPath),l={kind:o.sparsePath?"tree":"repo",localPath:a.localPath,repoRoot:a.localPath,source:"clone",cached:a.cached,complete:!o.sparsePath,resolvedBranch:a.branch,...o.sparsePath?{requestedPath:o.sparsePath}:{}},u={localSearch:{tool:"localSearchCode",query:{path:a.localPath,mode:"discovery"}},viewStructure:{tool:"localViewStructure",query:{path:a.localPath}}},d={owner:o.owner,repo:o.repo,localPath:a.localPath,resolvedBranch:a.branch,cached:a.cached,...o.sparsePath?{sparsePath:o.sparsePath}:{},totalSize:c,location:l,next:u};return _e(o,d,!0,A.GITHUB_CLONE_REPO,{rawResponse:c})}}),{toolName:A.GITHUB_CLONE_REPO,keysPriority:["localPath","resolvedBranch","cached","sparsePath","totalSize","fileCount","location","error"]},e)}var Gu=y(()=>{"use strict";Ae();fe();je();Fe();Ht();en();Au()});import{z as ry}from"zod";function YE(e,t){return e?.description&&!t.description?t.describe(e.description):t}function oy(e,t){let n={};for(let[r,o]of Object.entries(t))n[r]=YE(e.shape[r],o);return n}function XE(e,t){let n=e;return n.safeExtend?n.safeExtend(t):e.extend(t)}function iy(e,t){if(!t?.length)return e;let n=new Set(t);return ry.object(Object.fromEntries(Object.entries(e.shape).filter(([r])=>!n.has(r))))}function ue(e,t={},n={}){let r=iy(e,n.omit),o=XE(r,oy(r,t));return n.strict?o.strict():o}function he(e,t={},n={}){let r=iy(e,n.omit),o=ry.object({...r.shape,...oy(r,t)});return n.strict?o.strict():o}var tt=y(()=>{"use strict"});import{CloneRepoQuerySchema as JE}from"@octocodeai/octocode-core/schemas";import{GitHubCloneRepoOutputSchema as ZE}from"@octocodeai/octocode-core/schemas/outputs";var Zo,ea,e$,ta=y(()=>{"use strict";Be();tt();Gt();Zo=ue(JE),ea=ie(Zo),e$=ZE.extend(Qe)});import{z as T}from"zod";import{FileContentQuerySchema as cy}from"@octocodeai/octocode-core/schemas";var ek,tk,sy,ay,ly,nk,xr,na,c$,ei=y(()=>{"use strict";me();Be();tt();Gt();ek=T.enum(["none","standard","symbols"]).optional().default("standard"),tk=T.object({currentPage:T.number(),totalPages:T.number(),hasMore:T.boolean(),nextPage:T.number().optional(),nextMatchPage:T.number().optional(),charOffset:T.number().optional(),charLength:T.number().optional(),totalChars:T.number().optional(),nextCharOffset:T.number().optional(),filesPerPage:T.number().optional(),totalFiles:T.number().optional(),entriesPerPage:T.number().optional(),totalEntries:T.number().optional(),matchesPerPage:T.number().optional(),totalMatches:T.number().optional()}),sy=T.object({path:T.string(),content:T.string(),localPath:T.string().optional(),repoRoot:T.string().optional(),contentView:T.enum(["none","standard","symbols"]).optional(),isSkeleton:T.boolean().optional(),totalLines:T.number().optional(),sourceChars:T.number().optional(),sourceBytes:T.number().optional(),resolvedBranch:T.string().optional(),pagination:tk.optional(),isPartial:T.boolean().optional(),startLine:T.number().optional(),endLine:T.number().optional(),matchRanges:T.array(T.object({start:T.number(),end:T.number()})).optional(),lastModified:T.string().optional(),lastModifiedBy:T.string().optional(),warnings:T.array(T.string()).optional(),matchNotFound:T.boolean().optional(),searchedFor:T.string().optional(),cached:T.boolean().optional()}),ay=T.object({path:T.string(),localPath:T.string(),repoRoot:T.string().optional(),fileCount:T.number(),totalSize:T.number(),complete:T.boolean().optional(),directoryEntryCount:T.number().optional(),eligibleFileCount:T.number().optional(),savedFileCount:T.number().optional(),skipped:T.object({nonFile:T.number(),missingDownloadUrl:T.number(),oversized:T.number(),binary:T.number(),fileLimit:T.number(),fetchFailed:T.number(),totalSizeLimit:T.number(),pathTraversal:T.number()}).optional(),limits:T.object({maxDirectoryFiles:T.number(),maxTotalSize:T.number(),maxFileSize:T.number()}).optional(),warnings:T.array(T.string()).optional(),files:T.array(T.object({path:T.string(),size:T.number(),type:T.string()})).optional(),cached:T.boolean().optional(),resolvedBranch:T.string().optional()}),ly={startLine:Pr,endLine:Pr,contextLines:Cr,charOffset:G(0,1e8).optional(),charLength:G(1,5e4).optional(),minify:ek},nk=he(cy,ly),xr=ue(cy,ly),na=ie(nk),c$=T.object({base:T.string().optional(),shared:T.record(T.string(),T.union([T.string(),T.number(),T.boolean()])).optional(),responsePagination:Qe.responsePagination,results:T.array(T.object({id:T.string(),owner:T.string(),repo:T.string(),files:T.array(sy).optional(),directories:T.array(ay).optional(),data:T.object({owner:T.string(),repo:T.string(),files:T.array(sy).optional(),directories:T.array(ay).optional()}).optional()})),errors:T.array(T.object({id:T.string(),owner:T.string().optional(),repo:T.string().optional(),path:T.string().optional(),error:T.string()})).optional()})});function rk(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 uy(e,t){return e&&t?`${e}/${t}`:void 0}function p$(e,t){if(e.totalPages<=1)return[];let n=[],r=e.entriesPerPage||e.perPage||10,o=e.totalMatches,i=e.reportedTotalMatches,s=e.reachableTotalMatches,a=(e.currentPage-1)*r+1,c=typeof o=="number"?Math.min(e.currentPage*r,o):e.currentPage*r,l=typeof o!="number"?"total unknown":e.totalMatchesKind==="lowerBound"?`at least ${o}`:typeof i=="number"&&typeof s=="number"&&i>s?`${s} reachable; GitHub reports ${i}`:`${o}`;return e.hasMore&&n.push(typeof o=="number"?`Page ${e.currentPage}/${e.totalPages} (showing ${a}-${c} of ${l} ${t}). Next: page=${e.currentPage+1}; page through before exhaustive claims.`:`Page ${e.currentPage}/${e.totalPages} (showing ${a}-${c} ${t}; total unknown). Next: page=${e.currentPage+1}; page through before exhaustive claims.`),n}function dy(e){return{keywords:e.keywords??[],projectId:uy(e.owner,e.repo),owner:e.owner,path:e.path,filename:e.filename,extension:e.extension,language:e.language,match:e.match,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function py(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 ok(e){let t=e.lastIndexOf("/");return t<=0?{owner:"",repo:e}:{owner:e.substring(0,t),repo:e.substring(t+1)}}function fy(e,t){let n=t.match==="path",r=t.verbose===!0,o=new Map;for(let s of e.items){let a=s.repository.name||"",{owner:c,repo:l}=ok(a),u=`${c}/${l}`,d=s,p=o.get(u);if(p||(p={id:u,owner:c,repo:l,matches:[]},o.set(u,p)),n||!s.matches?.length){p.matches.push({path:s.path,...n?{}:{pathOnly:!0},...r&&d.url?{url:d.url}:{}});continue}let f=!0,m=!1;for(let g of s.matches){if(!g.context)continue;let b={path:s.path,value:rk(g.context)};g.positions?.length>0&&(b.matchIndices=g.positions.map(([S,C])=>({start:S,end:C,lineOffset:(g.context??"").substring(0,S).split(`
|
|
38
|
+
`).length-1}))),r&&f&&d.url&&(b.url=d.url,f=!1),p.matches.push(b),m=!0}m||p.matches.push({path:s.path,pathOnly:!0,...r&&d.url?{url:d.url}:{}})}let i={results:Array.from(o.values()),...e.nonExistentScope?{nonExistentScope:!0}:{},...e.incompleteResults?{incompleteResults:!0}:{}};return e.pagination&&e.pagination.totalPages>1&&(i.pagination={currentPage:e.pagination.currentPage,totalPages:e.pagination.totalPages,perPage:e.pagination.entriesPerPage||10,totalMatches:e.pagination.totalMatches||0,...py(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}),i}function my(e){let t=e;return{keywords:e.keywords,topics:e.topicsToSearch,owner:e.owner,stars:e.stars,size:e.size,created:e.created,updated:e.updated,language:e.language,archived:t.archived,visibility:t.visibility,forks:t.forks,license:t.license,goodFirstIssues:t.goodFirstIssues,match:e.match,sort:e.sort,limit:e.limit,page:e.page,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function gy(e){let t=n=>{let r=n.lastIndexOf("/");return r<=0?{owner:"",repo:n}:{owner:n.substring(0,r),repo:n.substring(r+1)}};return e.map(n=>{let{owner:r,repo:o}=t(n.fullPath);return{owner:r||"",repo:o||n.name,defaultBranch:n.defaultBranch,stars:n.stars,description:n.description||"",url:n.url,createdAt:n.createdAt,updatedAt:n.updatedAt,pushedAt:n.lastActivityAt,visibility:n.visibility,topics:n.topics,forksCount:n.forks,openIssuesCount:n.openIssuesCount,...n.language&&{language:n.language}}})}function ik(e){return e.startsWith('"')?e:/\s/.test(e)?`"${e.replace(/"/g,'\\"')}"`:e}function hy(e){let t=(e.keywordsToSearch??[]).filter(o=>o.trim()).map(ik),n=e.query?.trim()??"",r=[...t,...n?[n]:[]].join(" ")||void 0;return{projectId:uy(e.owner,e.repo),owner:e.owner,query:r,number:e.prNumber,state:e.state,author:e.author,assignee:e.assignee,commenter:e.commenter,involves:e.involves,mentions:e.mentions,reviewRequested:e["review-requested"],reviewedBy:e["reviewed-by"],labels:(()=>{let o=e.label;if(o)return Array.isArray(o)?o:[o]})(),noLabel:e["no-label"],noMilestone:e["no-milestone"],noProject:e["no-project"],noAssignee:e["no-assignee"],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,interactions:e.interactions,draft:e.draft,match:e.match,milestone:e.milestone,language:e.language,checks:e.checks,review:e.review,locked:e.locked,visibility:e.visibility,teamMentions:e["team-mentions"],project:e.project,archived:e.archived,content:e.content,reviewMode:e.reviewMode,filePage:e.filePage,commentPage:e.commentPage,commitPage:e.commitPage,itemsPerPage:e.itemsPerPage,sort:e.sort,order:e.order,limit:e.limit??30,page:e.page,charOffset:e.charOffset,charLength:e.charLength,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function sk(e){return e?{capped:e,totalCount:e.length,wasTruncated:!1}:{capped:void 0,totalCount:0,wasTruncated:!1}}function ak(e){let t=e.map(r=>r.body.toLowerCase()),n=[];return t.some(r=>/\b(lgtm|looks good|approved|ship it)\b/.test(r))&&n.push("approval"),t.some(r=>/\b(change|fix|concern|blocker|blocking|request changes?)\b/.test(r))&&n.push("changes-requested"),t.some(r=>r.includes("?"))&&n.push("question"),n.length>0?n:["discussion"]}function ck(e){if(!e||e.length===0)return;let t=Array.from(new Set(e.map(o=>o.author))),n=e.map(o=>o.updatedAt||o.createdAt).filter(Boolean).sort().at(-1),r=e.filter(o=>o.commentType==="review_inline").length;return{totalComments:e.length,inlineComments:r,discussionComments:e.length-r,commenters:t.slice(0,8),...n?{latestCommentAt:n}:{},themes:ak(e)}}function yy(e,t={}){let{includeFileChanges:n=!0}=t,r=e.items.map(i=>{let{capped:s,totalCount:a}=sk(i.fileChanges),c=Array.isArray(i.comments)?i.comments:void 0,l=ck(c);return{number:i.number,title:i.title,body:i.body??void 0,...i.bodyPagination&&{bodyPagination:i.bodyPagination},url:i.url,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}:{},...py(e.pagination),hasMore:e.pagination.hasMore,...e.pagination.hasMore?{nextPage:e.pagination.currentPage+1}:{}}:void 0;return{pullRequests:r,resultData:{pull_requests:r,...o?{pagination:o}:{total_count:e.totalCount||r.length}},pagination:o}}function by(e){let t=!!e.fullContent;return{projectId:`${e.owner}/${e.repo}`,path:String(e.path),ref:e.branch?String(e.branch):void 0,startLine:t?void 0:e.startLine,endLine:t?void 0:e.endLine,matchString:t||!e.matchString?void 0:String(e.matchString),contextLines:e.contextLines??5,fullContent:t,forceRefresh:!!e.forceRefresh,charOffset:e.charOffset,charLength:e.charLength,minify:e.minify,matchStringIsRegex:e.matchStringIsRegex,matchStringCaseSensitive:e.matchStringCaseSensitive,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function Ry(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.isSkeleton===!0&&{isSkeleton:!0},...e.isPartial&&{isPartial:e.isPartial},...e.startLine&&{startLine:e.startLine},...e.endLine&&{endLine:e.endLine},...e.matchRanges?.length&&{matchRanges:e.matchRanges},...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 Sy(e,t){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??Tn.ENTRIES_PER_PAGE,page:(()=>{let n=e.page;return typeof n=="number"?n:void 0})(),includeSizes:e.includeSizes,mainResearchGoal:e.mainResearchGoal,researchGoal:e.researchGoal,reasoning:e.reasoning}}function Cy(e,t,n,r){let o=r,i=e.branch??r,s=o&&i&&o!==i&&o!=="HEAD",a=Object.entries(n).sort(([d],[p])=>d==="."?-1:p==="."?1:d.localeCompare(p)).map(([d,p])=>({dir:d,files:p.files,folders:p.folders})),c=e.fileSizeMap,l={};if(c){for(let[d,p]of Object.entries(c))if(n[d]){let f=new Set(n[d].files);for(let[m,g]of Object.entries(p))f.has(m)&&(l[m]=g)}}let u={structure:a,...Object.keys(l).length>0&&{fileSizes:l},summary:{totalFiles:e.summary.totalFiles,totalFolders:e.summary.totalFolders}};return i&&(u.resolvedBranch=i),s&&(u.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)&&(u.pagination=e.pagination),u}var On=y(()=>{"use strict";me();qo()});function lk(e){if(typeof e=="string")return{message:e};if(typeof e=="object"&&e!==null){let t=e,n=typeof t.error=="string"&&t.error.length>0?t.error:"Provider error",r=typeof t.status=="number"&&Number.isFinite(t.status)?t.status:void 0;return{message:n,status:r}}return{message:"Provider error"}}function ra(e){let t=[];for(let n of e){if(n.status!=="error")continue;let{message:r,status:o}=lk(n.data.error),i=o!==void 0?`${r} (HTTP ${o})`:r;t.push({id:n.id,error:i})}return t}function oa(e,t,n){let r=Wo(e,[...t]);return{structuredContent:Tt(e),text:r,isError:n}}var ia=y(()=>{"use strict";Ko()});function sa(e){return typeof e=="object"&&e!==null}function lt(e){return typeof e=="string"&&e.length>0?e:void 0}function We(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Py(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string");return t.length>0?t:void 0}function yt(e,t){return We(e[t])??0}function uk(e){if(sa(e))return{nonFile:yt(e,"nonFile"),missingDownloadUrl:yt(e,"missingDownloadUrl"),oversized:yt(e,"oversized"),binary:yt(e,"binary"),fileLimit:yt(e,"fileLimit"),fetchFailed:yt(e,"fetchFailed"),totalSizeLimit:yt(e,"totalSizeLimit"),pathTraversal:yt(e,"pathTraversal")}}function dk(e){if(sa(e))return{maxDirectoryFiles:yt(e,"maxDirectoryFiles"),maxTotalSize:yt(e,"maxTotalSize"),maxFileSize:yt(e,"maxFileSize")}}function fk(e){if(!sa(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 pk){let s=e[i];typeof s=="number"&&Number.isFinite(s)&&(o[i]=s)}return o}function mk(e,t){return`${e}/${t}`}function gk(e,t,n){let r=mk(t,n),o=e.get(r);if(o)return o;let i={id:r,owner:t,repo:n};return e.set(r,i),i}function hk(e,t){if(!(!e||!e.hasMore||e.nextCharOffset===void 0))return{continueChars:{tool:"ghGetFileContent",query:{owner:t.owner,repo:t.repo,...t.branch!==void 0?{branch:t.branch}:{},path:t.path,charOffset:e.nextCharOffset,...e.charLength!==void 0?{charLength:e.charLength}:{},...t.minify!==void 0?{minify:t.minify}:{}}}}}function yk(e,t){let n=fk(e.pagination),r=hk(n,t);return{path:lt(e.path)??String(t.path??""),content:typeof e.content=="string"?e.content:"",localPath:lt(e.localPath),repoRoot:lt(e.repoRoot),...We(e.fileSize)!==void 0?{fileSize:We(e.fileSize)}:{},contentView:e.contentView==="none"||e.contentView==="standard"||e.contentView==="symbols"?e.contentView:void 0,...e.isSkeleton===!0?{isSkeleton:!0}:{},totalLines:We(e.totalLines),sourceChars:We(e.sourceChars),sourceBytes:We(e.sourceBytes),resolvedBranch:lt(e.resolvedBranch),pagination:n,...r?{next:r}:{},...e.isPartial===!0?{isPartial:!0}:{},startLine:We(e.startLine),endLine:We(e.endLine),...Array.isArray(e.matchRanges)&&e.matchRanges.length>0?{matchRanges:e.matchRanges}:{},lastModified:lt(e.lastModified),lastModifiedBy:lt(e.lastModifiedBy),warnings:Py(e.warnings),...e.matchNotFound===!0?{matchNotFound:!0}:{},searchedFor:lt(e.searchedFor),...e.cached===!0?{cached:!0}:{}}}function bk(e,t){let r=(Array.isArray(e.files)?e.files:[]).filter(sa).map(c=>({path:lt(c.path)??"",size:We(c.size)??0,type:lt(c.type)??"file"})),o=uk(e.skipped),i=e.hasSubdirectories===!0||(o?o.nonFile>0:!1),s=o?Object.entries(o).filter(([,c])=>c>0):[],a=s.length>0?Object.fromEntries(s):void 0;return{path:String(t.path??""),localPath:lt(e.localPath)??"",repoRoot:lt(e.repoRoot),fileCount:We(e.fileCount)??r.length,totalSize:We(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:We(e.directoryEntryCount),eligibleFileCount:We(e.eligibleFileCount),savedFileCount:We(e.savedFileCount),skipped:o,limits:dk(e.limits),warnings:Py(e.warnings),...r.length>0?{files:r}:{},...e.cached===!0?{cached:!0}:{},resolvedBranch:lt(e.resolvedBranch)}}function Rk(e,t){let n=new Map;return e.forEach((r,o)=>{if(r.status==="error")return;let i=t[o];if(!i)return;let s=String(i.owner??""),a=String(i.repo??"");if(!s||!a)return;let c=gk(n,s,a),l=r.data;if(i.type==="directory"){let d=c.directories??[];d.push(bk(l,i)),c.directories=d;return}let u=c.files??[];u.push(yk(l,i)),c.files=u}),Array.from(n.values()).map(r=>{let o={owner:r.owner,repo:r.repo,...r.files?{files:r.files}:{},...r.directories?{directories:r.directories}:{}};return{...r,data:o}})}function Sk(e,t){return ra(e).map(r=>{let o=e.findIndex(s=>s.id===r.id),i=o>=0?t[o]:void 0;return{id:r.id,owner:i?.owner,repo:i?.repo,path:i?.path?String(i.path):void 0,error:r.error}})}function xy(){return({queries:e,results:t})=>{let n=Rk(t,e),r=Sk(t,e),o={results:n};return r&&r.length>0&&(o.errors=r),oa(o,["results","id","owner","repo","files","directories","path","content","totalLines","startLine","endLine","isPartial","pagination","errors"],n.length===0&&!!(r&&r.length>0))}}var pk,Hu=y(()=>{"use strict";ia();pk=["charOffset","charLength","totalChars","nextCharOffset","nextBlockChar","nextPage","nextMatchPage","filesPerPage","totalFiles","entriesPerPage","totalEntries","matchesPerPage","totalMatches"]});async function wy(e){let{queries:t,authInfo:n}=e,r=ct(n);return se(t,async(o,i)=>{try{let s=Ue(xr,o,{prefix:!1});if(s.ok===!1)return s.error;let a=s.data,c=r();return a.type==="directory"?Ck(a,n,c):Pk(a,n,c)}catch(s){return Ie(s,o,void 0,A.GITHUB_FETCH_CONTENT)}},{toolName:A.GITHUB_FETCH_CONTENT,finalize:xy()},e)}async function Ck(e,t,n){let r=ge();if(!(r.local.enabled&&r.local.enableClone))return M("Directory fetch requires local clone support. Set ENABLE_LOCAL=true and ENABLE_CLONE=true.",e);if(!Zs(n,"fetchDirectoryToDisk"))return Ie(new Error('Directory fetch (type: "directory") is only available with the GitHub provider. Use file mode (type: "file") instead.'),e,"Provider not supported",A.GITHUB_FETCH_CONTENT);if(!e.owner||!e.repo)return M("Directory fetch requires both owner and repo.",e,{rawResponse:0});let o=e.branch??await Ze(e.owner,e.repo,t),i=await _g(e.owner,e.repo,String(e.path),o,t,!!e.forceRefresh),s=(i.skipped?.nonFile??0)>0,a=i.skipped?Object.fromEntries(Object.entries(i.skipped).filter(([,d])=>d>0)):void 0,c={kind:"directory",localPath:i.localPath,repoRoot:i.repoRoot,source:"treeFetch",cached:i.cached,complete:i.complete,verified:i.verified,...i.commitSha?{commitSha:i.commitSha}:{},...s?{hasSubdirectories:!0}:{},...a&&Object.keys(a).length>0?{skippedSummary:a}:{},owner:e.owner,repo:e.repo},l={localSearch:{tool:"localSearchCode",query:{path:i.localPath,mode:"discovery"}},viewStructure:{tool:"localViewStructure",query:{path:i.localPath}},...s?{escalateToClone:{tool:"ghCloneRepo",why:"nonFile skips indicate subdirectories were not fetched; clone for full coverage",query:{owner:e.owner,repo:e.repo,...e.branch?{branch:e.branch}:{},...e.path?{sparsePath:String(e.path)}:{}}}}:{}},u={localPath:i.localPath,repoRoot:i.repoRoot,fileCount:i.fileCount,totalSize:i.totalSize,complete:i.complete,verified:i.verified,...i.commitSha?{commitSha:i.commitSha}:{},directoryEntryCount:i.directoryEntryCount,eligibleFileCount:i.eligibleFileCount,savedFileCount:i.savedFileCount,skipped:i.skipped,limits:i.limits,...i.warnings?{warnings:i.warnings}:{},files:i.files,...i.cached?{cached:!0}:{},...e.branch!==i.branch?{resolvedBranch:i.branch}:{},location:c,next:l};return _e(e,u,!0,A.GITHUB_FETCH_CONTENT,{rawResponse:i.totalSize??U(i)})}async function Pk(e,t,n){let r=await Zt(e,()=>n.provider.getFileContent(by(e)));if(r.ok===!1)return r.result;let o=e.fullContent===!0&&e.minify==="none"?await xk(e,t):void 0,i={...Ry(r.response.data,e),...o?{localPath:o.localPath,repoRoot:o.repoRoot,cached:o.cached,...o.branch!==e.branch?{resolvedBranch:o.branch}:{}}:{}},s=!!(r.response.data.matchNotFound===!0||r.response.data.content&&r.response.data.content.length>0);return _e(e,i,s,A.GITHUB_FETCH_CONTENT,{rawResponse:r.response.rawResponseChars})}async function xk(e,t){if(!e.owner||!e.repo||typeof e.path!="string")return;let n=e.branch??await Ze(e.owner,e.repo,t);return Ig(e.owner,e.repo,e.path,n,t,!!e.forceRefresh)}var zu=y(()=>{"use strict";fe();je();Fe();ei();Kl();Ge();oe();On();en();Hu();Ae()});function wk(e){let t=e.data;return{results:Array.isArray(t?.results)?t.results:[],pagination:t?.pagination,...t?.nonExistentScope?{nonExistentScope:!0}:{},...t?.incompleteResults?{incompleteResults:!0}:{}}}function Tk(e){let t=new Map;for(let{id:n,groups:r}of e)for(let o of r){let i=`${n}\0${o.id}`,s=t.get(i);if(!s){t.set(i,{id:o.id,queryId:n,owner:o.owner,repo:o.repo,matches:[...o.matches]});continue}s.matches.push(...o.matches)}return Array.from(t.values())}function Ek(e){return[...e].sort((t,n)=>{let r=n.matches.length-t.matches.length;return r!==0?r:t.id.localeCompare(n.id)})}function Ty(e){let t=new Map;for(let n of e)for(let r of n.matches){let o=`${n.queryId??""}\0${n.owner}\0${n.repo}\0${r.path}`,i=t.get(o),{path:s,...a}=r;if(i){i.matches.push(a);continue}t.set(o,{owner:n.owner,repo:n.repo,path:r.path,...n.queryId?{queryId:n.queryId}:{},matches:[a]})}return Array.from(t.values())}function kk(e,t,n){if(t.length===0)return[];if(e.length===1){let i=typeof e[0]?.id=="string"?e[0].id:"ghSearchCode",s=typeof e[0]?.id=="string"?e[0].id:void 0,a=s?n.get(s):void 0;return[{id:i,data:{files:Ty(t),...a?{pagination:a}:{}}}]}let r=new Map,o=[];for(let i of t){let s=i.queryId??"ghSearchCode",a=r.get(s);a||(a=[],r.set(s,a),o.push(s)),a.push(i)}return o.map(i=>{let s=n.get(i);return{id:i,data:{files:Ty(r.get(i)),...s?{pagination:s}:{}}}})}function Ok(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function vk(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${Ok(a)}\\b`,"i").test(o):o.toLowerCase().includes(c))&&(i=Math.max(i,1))}return i}function Ak(e,t){let n=t.filter(o=>typeof o=="string"&&o.trim());return n.length===0?Ek(e):e.map(o=>{let i=o.matches.map((s,a)=>({match:s,index:a,score:vk(s,n)}));return i.sort((s,a)=>s.score!==a.score?a.score-s.score:s.index-a.index),{group:Lk(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 Lk(e,t){return{...e,matches:t}}function Ey(){return({queries:e,results:t})=>{let n=[],r=new Map,o=[],i=!1;t.forEach((p,f)=>{if(p.status==="error")return;let m=wk(p);m.incompleteResults&&(i=!0),m.results.reduce((S,C)=>S+C.matches.length,0)===0&&o.push({id:p.id,...m.nonExistentScope?{nonExistentScope:!0}:{},...m.incompleteResults?{incompleteResults:!0}:{}});let b=m.results;n.push({id:p.id,groups:b}),m.pagination&&r.set(p.id,m.pagination)});let s=Array.from(new Set(e.flatMap(p=>{let f=p.keywords;return Array.isArray(f)?f.filter(m=>typeof m=="string"):[]}))),a=Ak(Tk(n),s),c=ra(t),l=e.some(p=>p.concise===!0),u=kk(e,a,r);if(l)for(let p of u)p.data.files=p.data.files.map(f=>`${f.owner}/${f.repo}:${f.path}`);let d={results:u};return o.length>0&&(d.emptyQueries=o.map(({id:p,nonExistentScope:f,incompleteResults:m})=>({id:p,...f?{nonExistentScope:f}:{},...m?{incompleteResults:m}:{}}))),c.length>0&&(d.errors=c),i&&(d.warnings=[...Array.isArray(d.warnings)?d.warnings:[],"GitHub code search returned incomplete_results: the search index did not fully complete. Empty or partial results may be a false negative \u2014 retry, narrow scope (owner/repo/path), or materialize the repo and search locally before concluding absence."]),oa(d,["results","id","data","files","path","owner","repo","queryId","matches","value","pathOnly","matchIndices","pagination","emptyQueries","nonExistentScope","incompleteResults","warnings","errors"],a.length===0&&c.length>0)}}var Bu=y(()=>{"use strict";ia()});function _k(e){return!!((e.keywords??[]).some(n=>n.trim().length>0)||e.owner||e.path||e.extension||e.filename)}function Ik(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 ky(e){let{queries:t}=e,n=ct(e.authInfo);return se(t,async(r,o)=>{try{let i=Ik(r);if(i)return M(i.error,r);if(!_k(r))return M("At least one search term or scope filter is required.",r);let s=n(),a=await Zt(r,()=>s.provider.searchCode(dy(r)));if(a.ok===!1)return a.result;let c=fy(a.response.data,r);return _e(r,c,c.results.length>0,A.GITHUB_SEARCH_CODE,{rawResponse:a.response.rawResponseChars})}catch(i){return Ie(i,r,void 0,A.GITHUB_SEARCH_CODE)}},{toolName:A.GITHUB_SEARCH_CODE,finalize:Ey()},e)}var Qu=y(()=>{"use strict";fe();je();Fe();On();en();Bu()});import{z as N}from"zod";import{GitHubCodeSearchQuerySchema as Oy}from"@octocodeai/octocode-core/schemas";var vy,aa,ca,q$,la=y(()=>{"use strict";me();Be();tt();Gt();vy={limit:G(1,100).optional(),page:ae.default(1)},aa=ue(Oy,vy),ca=ie(he(Oy,vy)),q$=N.object({base:N.string().optional(),shared:N.record(N.string(),N.union([N.string(),N.number(),N.boolean()])).optional(),responsePagination:Qe.responsePagination,results:N.array(N.object({id:N.string(),data:N.object({files:N.array(N.object({owner:N.string(),repo:N.string(),path:N.string(),queryId:N.string().optional(),matches:N.array(N.object({value:N.string().optional(),pathOnly:N.boolean().optional(),matchIndices:N.array(N.object({start:N.number(),end:N.number(),lineOffset:N.number()})).optional(),url:N.string().optional()}))})),pagination:N.object({currentPage:N.number(),totalPages:N.number(),perPage:N.number(),totalMatches:N.number(),reportedTotalMatches:N.number().optional(),reachableTotalMatches:N.number().optional(),totalMatchesKind:N.enum(["exact","reported","lowerBound"]).optional(),totalMatchesCapped:N.boolean().optional(),hasMore:N.boolean(),nextPage:N.number().optional(),uniqueFileCount:N.number().optional()}).optional()})})),emptyQueries:N.array(N.object({id:N.string(),nonExistentScope:N.literal(!0).optional(),incompleteResults:N.literal(!0).optional()})).optional(),warnings:N.array(N.string()).optional(),errors:N.array(N.object({id:N.string(),error:N.string()})).optional()})});function Fk(e,t){let n=e?.patches;return n?.mode?{mode:n.mode,...n.files?{files:n.files}:{},...n.ranges?{ranges:n.ranges}:{}}:t==="full"?{mode:"all"}:{mode:"none"}}function Mk(e,t){let n=e?.comments;return n?{discussion:n.discussion??!0,reviewInline:n.reviewInline??!0,includeBots:n.includeBots??!1,...n.file?{file:n.file}:{}}:t==="full"?{discussion:!0,reviewInline:!0,includeBots:!1}:!1}function Dk(e,t){let n=e?.commits;return n?{list:n.list??!0,includeFiles:n.includeFiles??!1}:t==="full"?{list:!0,includeFiles:!1}:!1}function Ay(e){let{content:t,reviewMode:n}=e,r=Fk(t,n),o=Mk(t,n),i=Dk(t,n),s=n==="full";return{body:t?.body??s,changedFiles:(t?.changedFiles??s)||r.mode!=="none",patches:r,comments:o,reviews:t?.reviews??s,commits:i,...n?{reviewMode:n}:{}}}function W$(e){return!!(e.body||e.changedFiles||e.patches.mode!=="none"||e.comments||e.reviews||e.commits)}var Uu=y(()=>{"use strict"});function qu(e){let t=e.matchString;if(typeof t!="string")return;let n=t.trim().toLowerCase();return n.length>0?n:void 0}function da(e,t){return typeof e=="string"&&e.toLowerCase().includes(t)}function Vu(e,t=1,n=20){let r=Math.min(Math.max(1,n),100),o=e.length,i=Math.max(1,Math.ceil(o/r)),s=Math.min(Math.max(1,t),i),a=(s-1)*r,c=Math.min(a+r,o);return{items:e.slice(a,c),pagination:{currentPage:s,totalPages:i,itemsPerPage:r,totalItems:o,hasMore:s<i,...s<i?{nextPage:s+1}:{}}}}function fa(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 _y(e,t=500){if(!(typeof e!="string"||e.length===0))return e.length<=t?e:`${e.slice(0,t-3)}...`}function Iy(e,t){return{owner:e.owner,repo:e.repo,prNumber:t}}function Nk(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function pa(e,t,n){return Nk({...Iy(e,t),...n})}function Ly(e,t,n,r,o={}){if(!(!r.hasMore||r.nextCharOffset===void 0))return pa(e,t,{content:n,...o,charOffset:r.nextCharOffset,charLength:e.charLength})}function ju(e,t,n,r,o){if(!(!o.hasMore||o.nextPage===void 0))return pa(e,t,{content:n,[r]:o.nextPage,itemsPerPage:e.itemsPerPage})}function Gk(e,t,n){return{target:Iy(e,t),...n.body?{}:{getBody:{content:{body:!0}}},...n.changedFiles?{}:{getChangedFiles:{content:{changedFiles:!0}}},...n.patches.mode!=="none"?{}:{getSelectedPatches:{content:{patches:{mode:"selected",files:["path/from/changedFiles"]}}},getAllPatches:{content:{patches:{mode:"all"}}}},...n.comments?{}:{getComments:{content:{comments:{discussion:!0,reviewInline:!0}}}},...n.reviews?{}:{getReviews:{content:{reviews:!0}}},...n.commits?{}:{getCommits:{content:{commits:{list:!0}}}},...n.reviewMode==="full"?{}:{fullReview:{reviewMode:"full"}}}}function ua(e){return String(e.path??e.filename??"")}function Hk(e,t){return{path:ua(e),status:String(e.status??""),additions:Number(e.additions??0),deletions:Number(e.deletions??0),...t&&typeof e.patch=="string"?{patch:e.patch}:{}}}function zk(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 Bk(e,t,n){if(!n.comments)return{};let r=Array.isArray(e.comments)?e.comments:[],o=zk(r,n.comments),i=qu(t),s=i?o.filter(l=>da(l.body,i)):o,{items:a,pagination:c}=Vu(s,t.commentPage??t.page??1,t.itemsPerPage??20);return{comments:a.map(l=>{let u=fa(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:_y(typeof l.body=="string"?l.body:"")},createdAt:l.createdAt,updatedAt:l.updatedAt}}),commentPagination:c}}function Qk(e,t,n){if(!n.reviews)return{};let r=Array.isArray(e.reviews)?e.reviews:[],o=qu(t);return{reviews:(o?r.filter(s=>da(s.body,o)):r).map(s=>{let a=typeof s.body=="string"?s.body:"",c=fa(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 Uk(e,t,n){if(!n.commits)return{};let r=Array.isArray(e.commits)?e.commits:[],{items:o,pagination:i}=Vu(r,t.commitPage??t.page??1,t.itemsPerPage??20);return{commits:o.map(s=>({sha:s.sha,message:s.message,author:s.author,date:s.date,...n.commits&&n.commits.includeFiles&&Array.isArray(s.files)?{files:s.files}:{}})),commitPagination:i}}function jk(e){return e.split(`
|
|
39
39
|
`).filter(t=>{if(!t.startsWith("+"))return!0;let n=t.slice(1).trim();return n!==""&&!n.startsWith("//")&&!n.startsWith("/*")&&!n.startsWith("*")}).map(t=>t.startsWith("+")?"+"+t.slice(1).replace(/\s*\/\/.*$/,"").trimEnd():t).join(`
|
|
40
|
-
`)}function
|
|
40
|
+
`)}function $k(e){return e.replace(/\n{3,}/g,`
|
|
41
41
|
|
|
42
|
-
`)}function Ig(e,t,n,r){let o=Array.isArray(e.fileChanges)?e.fileChanges:[],i=n.patches.files,s=i&&i.length>0?o.filter(p=>i.includes(Rr(p))):o,a=qo(t),c=a?s.filter(p=>br(Rr(p),a)||br(p.patch,a)):s,{items:l,pagination:d}=ei(c,t.filePage??t.page??1,t.itemsPerPage??20),u=n.patches.mode!=="none",m=l.map(p=>{let f=Tg(p,!1);if(!u||typeof p.patch!="string")return f;let h=r&&!a?Lg(p.patch):p.patch,y=Cr(h,t.charOffset??0,t.charLength??12e3);return{...f,patch:y?.content??"",...y?{patchPagination:y.pagination}:{}}});return n.changedFiles||n.patches.mode!=="none"?{changedFiles:m,filePagination:d}:o.length===0?{}:{filePathsPreview:o.slice(0,20).map(Rr).filter(Boolean),filePathsPagination:{totalFiles:o.length,filesPerPage:20,hasMore:o.length>20,...o.length>20?{nextFilePage:2}:{}}}}function ht(e){return typeof e=="object"&&e!==null}function Zo(e){if(ht(e)&&!(typeof e.currentPage!="number"||typeof e.totalPages!="number"||typeof e.itemsPerPage!="number"||typeof e.totalItems!="number"||typeof e.hasMore!="boolean"))return e}function ti(e){if(ht(e)&&!(typeof e.charOffset!="number"||typeof e.charLength!="number"||typeof e.totalChars!="number"||typeof e.hasMore!="boolean"))return e}function kg(e){return{...e.changedFiles?{changedFiles:!0}:{},...e.patches.mode!=="none"?{patches:e.patches}:{}}}function vg(e){let t=e.changedFiles;if(Array.isArray(t))for(let n of t){if(!ht(n))continue;let r=ti(n.patchPagination);if(r?.hasMore)return r}}function Fg(e){let t=e.comments;if(Array.isArray(t))for(let n of t){if(!ht(n))continue;let r=ti(n.bodyPagination);if(r?.hasMore)return r}}function Mg(e,t,n,r){let o={},i=ti(e.bodyPagination),s=Zo(e.filePagination),a=Zo(e.commentPagination),c=Zo(e.commitPagination),l=vg(e),d=Fg(e),u=kg(n);i&&(o.body={...i,nextQuery:Hc(t,r,{body:!0},i)}),s&&(o.changedFiles={...s,nextQuery:Jo(t,r,u,"filePage",s)}),a&&n.comments&&(o.comments={...a,nextQuery:Jo(t,r,{comments:n.comments},"commentPage",a)}),d?.hasMore&&d.nextCharOffset!==void 0&&n.comments&&(o.commentBody={...d,nextQuery:Sr(t,r,{content:{comments:n.comments},...t.commentPage!==void 0?{commentPage:t.commentPage}:{},commentBodyOffset:d.nextCharOffset,charLength:t.charLength})}),c&&n.commits&&(o.commits={...c,nextQuery:Jo(t,r,{commits:n.commits},"commitPage",c)}),l&&n.patches.mode!=="none"&&(o.patches={...l,nextQuery:Hc(t,r,{patches:n.patches},l,{filePage:t.filePage??t.page})});let m=e.filePathsPagination;return ht(m)&&(o.filePaths={...m,hasMore:m.hasMore===!0,nextQuery:m.hasMore===!0?Sr(t,r,{content:{changedFiles:!0},filePage:m.nextFilePage}):void 0}),Object.keys(o).length>0?o:void 0}function Ng(e){delete e.bodyPagination,delete e.filePagination,delete e.commentPagination,delete e.commitPagination,delete e.filePathsPagination}function $c(e,t,n,r,o){let i=Number(e.number),s=typeof e.body=="string"?e.body:void 0,a=s&&r?Og(s):s,c=n.body?Cr(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,m=t.prNumber!==void 0||t.verbose===!0,f={...{number:e.number,title:e.title,...e.url?{url:e.url}:{},state:e.state,...e.draft?{draft:e.draft}:{},author:e.author,...Array.isArray(e.assignees)&&e.assignees.length?{assignees:e.assignees}:{},...Array.isArray(e.labels)&&e.labels.length?{labels:e.labels}:{},targetBranch:e.targetBranch,...m?{sourceBranch:e.sourceBranch,...e.sourceSha?{sourceSha:e.sourceSha}:{}}:{},createdAt:e.createdAt,...m?{updatedAt:e.updatedAt}:{},...m||!e.mergedAt?{closedAt:e.closedAt}:{},mergedAt:e.mergedAt,...e.commentsCount?{commentsCount:e.commentsCount}:{},...e.changedFilesCount?{changedFilesCount:e.changedFilesCount}:{},...e.additions?{additions:e.additions}:{},...e.deletions?{deletions:e.deletions}:{},...m&&!c?{bodyPreview:Dc(typeof e.body=="string"?e.body:void 0)}:{},...d?{next:Eg(t,i,n)}:{}},...n.body?c?{body:c.content,bodyPagination:c.pagination}:{bodyEmpty:!0}:{},...Ig(e,t,n,r),...xg(e,t,n),..._g(e,t,n),...Ag(e,t,n),...e.reviewSummary?{reviewSummary:e.reviewSummary}:{},...Array.isArray(e.sanitizationWarnings)&&e.sanitizationWarnings.length>0?{sanitizationWarnings:e.sanitizationWarnings}:{}},h=Mg(f,t,n,i);return Ng(f),h&&(f.contentPagination=h),f}function Uc(e,t){let n=e[0];if(!n)return[];let r=["PR response includes a `next` map \u2014 re-call with next.target + one content key (e.g. next.getBody, next.getAllPatches, next.getComments) to fetch a surface."],o=ht(n.contentPagination)?n.contentPagination:{},i={body:{label:"body charOffset",field:"charOffset"},changedFiles:{label:"changedFiles filePage",field:"filePage"},comments:{label:"comments commentPage",field:"commentPage"},commentBody:{label:"comment body commentBodyOffset",field:"commentBodyOffset"},commits:{label:"commits commitPage",field:"commitPage"},patches:{label:"patches charOffset",field:"charOffset"},filePaths:{label:"file paths filePage",field:"filePage"}};for(let[s,{label:a,field:c}]of Object.entries(i)){let l=o[s];if(!ht(l)||l.hasMore!==!0)continue;let u=(ht(l.nextQuery)?l.nextQuery:{})[c];typeof u=="number"&&r.push(`More PR ${a}=${u}.`)}return t.patches.mode==="none"&&r.push('Patches not included \u2014 request content.patches={mode:"all"} or {mode:"selected",files:[...]}.'),t.comments||r.push("Comments not included \u2014 request content.comments={discussion:true,reviewInline:true}."),r}import{z as _t}from"zod";import{GitHubPullRequestSearchQuerySchema as Bc}from"@octocodeai/octocode-core/schemas";import{GitHubSearchPullRequestsOutputSchema as Hg}from"@octocodeai/octocode-core/schemas/outputs";var zc={perPage:F(1,100).optional().default(30),prNumber:F(1,1e9).optional(),limit:F(1,100).optional().default(30),page:q.default(1),filePage:q.optional(),commentPage:q.optional(),commitPage:q.optional(),itemsPerPage:F(1,100).optional().default(20),charOffset:F(0,1e8).optional(),commentBodyOffset:F(0,1e8).optional(),charLength:F(1,5e4).optional()},Dg=ae(Bc,zc),Pr=te(Bc,zc),Qc=X(Dg),$L=Hg.extend({results:_t.array(_t.object({id:_t.string().optional(),status:_t.string().optional(),data:_t.object({pull_requests:_t.array(_t.object({}).passthrough()).optional()}).passthrough().optional()}).passthrough()).optional(),...xe});async function jc(e){let{queries:t,authInfo:n}=e,r=Be(n);return J(t,async(o,i)=>{try{let s=Pr.safeParse(o);if(!s.success){let k=s.error.issues.map(Y=>Y.message).join("; ");return A(`Validation error: ${k}`,o)}if(s.data.type==="commits"){let k=s.data;if(!k.owner||!k.repo)return A("owner and repo are required for commits mode.",o);let Y=k.path,fe=Y&&!Y.endsWith("/")?"file":"repo";if(fe==="file"&&!Y)return A("path is required when querying a specific file in commits mode.",o);let _e=await Ea({type:fe,owner:k.owner,repo:k.repo,path:Y,branch:k.branch,since:k.since,until:k.until,author:k.author,page:Number(k.page)||1,perPage:Number(k.perPage)||30,includeDiff:!!k.includeDiff,charLength:typeof k.charLength=="number"?k.charLength:void 0},n);if(Tt(_e)){let _n=_e.status===429||_e.error?.toString().toLowerCase().includes("rate limit")||!1;return A(_e,o,{toolName:S.GITHUB_SEARCH_PULL_REQUESTS,hintContext:{type:"commits",path:Y,isRateLimited:_n,status:_e.status,retryAfter:_e.retryAfter},hintSourceError:_e})}let{commits:Ve,pagination:Zt}=_e.data,Bi=Ve.length>0,Ur=[];Zt.hasMore&&Zt.nextPage&&Ur.push(`${Ve.length} commit${Ve.length===1?"":"s"} returned \u2014 re-call with page:${Zt.nextPage} for more.`);let zi=/#(\d+)/;if(Bi){let _n=Ve.find(An=>{let qt=An.messageHeadline;return typeof qt=="string"&&zi.test(qt)});if(_n){let An=_n.messageHeadline,qt=zi.exec(An);qt&&Ur.push(`Merge commits embed PR refs \u2014 e.g. "${An}" \u2192 use ghHistoryResearch(owner:"${k.owner}", repo:"${k.repo}", prNumber:${qt[1]}) to read that PR's body, diffs, comments, and reviews.`)}}return Se(o,_e.data,Bi,S.GITHUB_SEARCH_PULL_REQUESTS,{hintContext:{type:"commits",path:Y,matchCount:Ve.length,hasMorePages:Zt.hasMore},extraHints:Ur,rawResponse:_e.rawResponseChars})}let a=r(),c={...s.data},l=Mc(c),d=[],u=c.prNumber!==void 0;!u&&Nc(l)&&d.push('Broad PR search returns metadata only. Re-call with prNumber and content selectors (body, changedFiles, patches, comments, commits) or reviewMode="full" to fetch PR content.'),u||(c.content=void 0,c.reviewMode=void 0);let m=!u&&((c.keywordsToSearch?.length??0)>0||!!c.query);if(m&&!c.created&&(c.state==="merged"||c.merged===!0)&&!c.sort&&!c.order?d.push(`To find the PR that first introduced a feature: sort:"created" order:"asc". Use match:["title"] for title-only and query:'"exact phrase"' for phrase matching.`):m&&!c.created&&!c.sort&&!c.order&&d.push('Archaeology tip: add state:"merged" sort:"created" order:"asc" to find the oldest matching merged PR. Use match:["title"] for title-only matching.'),!(c.keywordsToSearch?.length||c.owner||c.repo||c.author||c.assignee||c.prNumber&&c.owner&&c.repo))return A("At least one valid search parameter, filter, or PR number is required.",o);let h=await ft(c,()=>a.provider.searchPullRequests(bc(c)));if(h.ok===!1)return h.result;let y=u?l.changedFiles||l.patches.mode!=="none":!1,{pullRequests:b,resultData:g,pagination:C}=Sc(h.response.data,{includeFileChanges:y}),T=c.prNumber!==void 0?void 0:C;c.prNumber!==void 0&&delete g.pagination;let P=!u&&(!!o.content||!!o.reviewMode),x={...l,body:!1,changedFiles:!1,patches:{mode:"none"},comments:!1,commits:!1},I=c.minify==="standard",Q=u,E=b.map(k=>$c(k,c,P?x:l,I,Q));g.pull_requests=E,!u&&c.concise===!0&&(g.pull_requests=E.map(k=>{let Y=k;return`#${Y.number} ${Y.title}`}));let w=E.length>0,O=T?Wt({currentPage:T.currentPage,totalPages:T.totalPages,hasMore:T.hasMore,totalMatches:T.totalMatches,entriesPerPage:T.perPage},"PRs"):[],$=w?[`Found ${E.length} PR${E.length===1?"":"s"}.`,...Q?Uc(E,l):[]]:[],M=[],N=b.filter(k=>(typeof k.changedFilesCount=="number"?k.changedFilesCount:Array.isArray(k.fileChanges)?k.fileChanges.length:0)>30);if(N.length>0){let k=N.map(fe=>`#${fe.number}`).join(", "),Y=Math.max(...N.map(fe=>typeof fe.changedFilesCount=="number"?fe.changedFilesCount:Array.isArray(fe.fileChanges)?fe.fileChanges.length:0));M.push(`Large PR(s) ${k} have ${Y}+ file changes.`)}let se=l.body||l.changedFiles||l.patches.mode!=="none"||!!l.comments||l.reviews||!!l.commits;!y&&!(u&&se)&&b.filter(Y=>typeof Y.changedFilesCount=="number"&&Y.changedFilesCount>0).length>0&&M.push('Metadata mode: changedFiles details omitted (changedFilesCount available). Re-call with prNumber + content.changedFiles=true for file paths, content.patches={mode:"selected",files:["src/foo.ts"]} for targeted diffs, or reviewMode="full" for all content in one call.');let le=u&&typeof c.matchString=="string"&&c.matchString.trim()?[`matchString filter active \u2014 pagination totals count only items matching "${c.matchString.trim()}"; drop matchString for the full set.`]:[],V=Gg({data:g,pullRequests:b,extraHints:[...$,...O,...d,...M,...le]},c);return Se(c,V.data,w,S.GITHUB_SEARCH_PULL_REQUESTS,{hintContext:{matchCount:E.length,state:c.state,owner:c.owner,repo:c.repo,author:c.author,keywords:c.keywordsToSearch,prNumber:c.prNumber,prMatch:c.match},extraHints:V.extraHints,rawResponse:h.response.rawResponseChars})}catch(s){return ge(s,o)}},{toolName:S.GITHUB_SEARCH_PULL_REQUESTS,keysPriority:["pull_requests","pagination","total_count","error"],peerHints:!0},e)}function Gg(e,t){return{data:e.data,extraHints:e.extraHints}}function Vc(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 $g(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,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,url:t.url,updatedAt:t.updatedAt};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}function rO(e){let t=e,r=[`${t.owner?`${t.owner}/`:""}${t.repo}`];if(typeof t.stars=="number"&&r.push(`${t.stars} stars`),typeof t.forksCount=="number"&&t.forksCount>0&&r.push(`${t.forksCount} forks`),typeof t.openIssuesCount=="number"&&t.openIssuesCount>0&&r.push(`${t.openIssuesCount} issues`),t.language&&r.push(t.language),t.license&&r.push(t.license),t.pushedAt&&r.push(t.pushedAt.slice(0,10)),t.defaultBranch&&t.defaultBranch!=="main"&&t.defaultBranch!=="master"&&r.push(`@${t.defaultBranch}`),t.visibility&&t.visibility!=="public"&&r.push(t.visibility),Array.isArray(t.topics)&&t.topics.length>0&&r.push(`#${t.topics.slice(0,4).join(",")}`),t.description&&t.description!=="No description"){let o=t.description.replace(/\s+/g," ").trim();r.push(o.length>100?`${o.slice(0,99)}...`:o)}return r.join(" | ")}function Ug(e,t){let n=t.concise===!0;return{data:{pagination:e.pagination,repositories:n?e.repositories.map(r=>`${r.owner?`${r.owner}/`:""}${r.repo}`):e.repositories.map($g)},extraHints:n?["Minimal owner/repo list \u2014 re-run without concise (or ghViewRepoStructure) to dive into a chosen repo."]:[]}}function ri(e){return!!(e.topicsToSearch&&(Array.isArray(e.topicsToSearch)?e.topicsToSearch.length>0:e.topicsToSearch))}function oi(e){return!!(e.keywords&&e.keywords.length>0)}function Bg(e){return!!(oi(e)||ri(e)||e.owner||e.language||e.stars||e.created||e.updated||e.size||e.forks||e.license||e.goodFirstIssues||e.visibility||e.archived!==void 0)}function Wc(e,t){return e?`${e} (${t==="topics"?"topics-based search":"keywords-based search"})`:`${t.charAt(0).toUpperCase()+t.slice(1)}-based repository search`}function zg(e){let t=ri(e),n=oi(e);if(t&&n){let{topicsToSearch:r,keywords:o,...i}=e;return[{label:"topics",query:{...i,reasoning:Wc(e.reasoning,"topics"),topicsToSearch:r}},{label:"keywords",query:{...i,reasoning:Wc(e.reasoning,"keywords"),keywords:o}}]}return[{label:"combined",query:e}]}function Qg(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 jg(e,t){return[...e].sort((n,r)=>{let o=Vg(n,r,t.sort);if(o!==0)return o;let i=Kc(r,t)-Kc(n,t);if(i!==0)return i;let s=(r.stars??0)-(n.stars??0);return s!==0?s:ni(n).localeCompare(ni(r))})}function Vg(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 Vc(e.updatedAt,t.updatedAt);case"best-match":case void 0:return 0;default:return 0}}function Kc(e,t){let n=Wg(t),r=ni(e).toLowerCase(),o=e.repo.toLowerCase(),i=(e.description??"").toLowerCase(),s=(e.topics??[]).map(d=>d.toLowerCase()),a=e.language?.toLowerCase(),c=t.language?.toLowerCase();return n.reduce((d,u)=>o===u||r===u?d+80:o.includes(u)||r.includes(u)?d+40:s.includes(u)?d+35:i.includes(u)?d+10:d,0)+(c&&a===c?20:0)}function Wg(e){let t=e.keywords??[],n=e.topicsToSearch??[];return[...t,...n].map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)}function ni(e){return`${e.owner}/${e.repo}`}function Kg(e){return{currentPage:e.currentPage,totalPages:e.totalPages,perPage:e.entriesPerPage||10,totalMatches:e.totalMatches||0,hasMore:e.hasMore}}function Yg(e){let t=e.map(n=>n.response.data.pagination).filter(n=>!!n);if(t.length!==0)return{currentPage:t[0].currentPage,totalPages:Math.max(...t.map(n=>n.totalPages)),hasMore:t.some(n=>n.hasMore),entriesPerPage:t[0].entriesPerPage,totalMatches:t.reduce((n,r)=>n+(r.totalMatches??0),0),reachableTotalMatches:t.reduce((n,r)=>n+(r.reachableTotalMatches??r.totalMatches??0),0),totalMatchesKind:t.some(n=>n.totalMatchesKind==="lowerBound")?"lowerBound":t.some(n=>n.totalMatchesKind==="reported")?"reported":"exact",totalMatchesCapped:t.some(n=>n.totalMatchesCapped===!0)}}function Xg(e){return e.hasMore?[`Page ${e.currentPage}/${e.totalPages} for merged topic+keyword results (~${e.totalMatches??0} upper-bound total). Next: page=${e.currentPage+1}.`]:[]}function Yc(e){return e.flatMap(t=>{let n=t.label==="topics"?"Topic search":t.label==="keywords"?"Keyword search":"Search",r=t.response.error||"Provider error";return`${n} failed: ${r}`})}function Jg(e){return e.reduce((t,n)=>t+(n.response.rawResponseChars??G(n.response.data??n.response)),0)}var Zg=100;function qg(e,t,n=!1,r=0){if(t)return n&&r>Zg&&!e.owner&&!e.language&&!e.stars?['Large result set with no owner/language/stars filter \u2014 add owner="<org>" to scope to a specific org, language="<lang>" to restrict by language, or stars=">100" to surface established repos.']:void 0;let o=ri(e),i=oi(e),s=typeof e.stars=="string"?e.stars:void 0,a=typeof e.created=="string"?e.created:void 0,c=typeof e.updated=="string"?e.updated:void 0,l=[];o&&i?l.push("No match for topics AND keywords. Drop topics, then keywords."):o?l.push("No topic match. Drop one, try synonyms, or use keywords."):i&&l.push("No keyword match. Drop the rarest, try synonyms, or use topics.");let d=[];if(s&&d.push(`stars="${s}"`),a&&d.push(`created="${a}"`),c&&d.push(`updated="${c}"`),d.length>0&&l.push(`Filters (${d.join(", ")}) \u2014 try widening/removing.`),l.length!==0)return l}async function Xc(e){let{queries:t,authInfo:n}=e,r=Be(n);return J(t,async(o,i)=>{try{if(!Bg(o))return A("At least one repository search term or filter is required.",o);let s=r(),a=zg(o),{successes:c,failures:l}=await sc(a.map(k=>({meta:{label:k.label,query:k.query},operation:()=>s.provider.searchRepos(yc(k.query))}))),d=c.map(k=>({label:k.meta.label,query:k.meta.query,response:k.response})),u=l.map(k=>({label:k.meta.label,query:k.meta.query,response:k.response}));if(d.length===0){let k=u[0];return k?lr(k.response,o):ge(new Error("Repository search produced no provider results"),o)}let m=o.limit,p=jg(Qg(d.flatMap(k=>Rc(k.response.data.repositories))),o),f=m!=null?p.slice(0,m):p,h=d.some(k=>k.response.data.nonExistentScope),y=f.length===0&&h?[`Owner "${o.owner??"?"}" doesn't exist or isn't searchable \u2014 verify spelling/access, not filters.`]:[],b=d.length===1?d[0]:void 0,g=d.length>1,C=g?Yg(d):b?.response.data.pagination,T=C?g?Xg(C):Wt(C,"repos"):[],P=C?Kg(C):void 0,x=o.page,I=C?.totalPages??0,Q=typeof x=="number"&&I>0&&x>I&&f.length===0,E=Q?[`page ${x} exceeds totalPages ${I} \u2014 last page is ${I}.`]:[],w=f.length>0,O=!!C?.hasMore,$=C?.totalMatches??C?.reachableTotalMatches??0,M=Q?void 0:qg(o,w,O,$),N=a.length>1&&d.length===1?[`Only ${b?.label??"one"} search succeeded; pagination reflects that subset.`,...Yc(u)]:Yc(u),se=Ug({repositories:f,pagination:P},o),ce=[];if(w){let k=f[0];k?.owner&&k?.repo&&ce.push(`Top result: ${k.owner}/${k.repo} \u2014 use ghViewRepoStructure to browse or ghSearchCode to search within it.`),f.length>=3&&ce.push("Use multiple ghViewRepoStructure queries in parallel to compare the layouts of top results.")}let V=[...E,...y,...se.extraHints,...N,...T,...M||[],...ce];return Se(o,se.data,w,S.GITHUB_SEARCH_REPOSITORIES,{extraHints:V,hintContext:Q?{}:{keywords:o.keywords,owner:o.owner,language:o.language,topic:o.topicsToSearch?.[0]},rawResponse:Jg([...d,...u])})}catch(s){return ge(s,o)}},{toolName:S.GITHUB_SEARCH_REPOSITORIES,keysPriority:["repositories","pagination","error"],peerHints:!0},e)}import{z as W}from"zod";import{GitHubReposSearchSingleQuerySchema as Jc}from"@octocodeai/octocode-core/schemas";var Zc={limit:F(1,100).optional(),page:q.default(1)},qc=te(Jc,Zc),el=X(ae(Jc,Zc)),ey=W.object({owner:W.string(),repo:W.string(),stars:W.number().optional(),forks:W.number().optional(),openIssuesCount:W.number().optional(),language:W.string().optional(),license:W.string().optional(),description:W.string().optional(),homepage:W.string().optional(),pushedAt:W.string().optional(),createdAt:W.string().optional(),defaultBranch:W.string().optional(),topics:W.array(W.string()).optional(),visibility:W.string().optional(),url:W.string().optional(),updatedAt:W.string().optional()}),ty=W.object({currentPage:W.number(),totalPages:W.number(),hasMore:W.boolean(),perPage:W.number().optional(),totalMatches:W.number().optional(),reportedTotalMatches:W.number().optional(),reachableTotalMatches:W.number().optional(),totalMatchesKind:W.enum(["exact","reported","lowerBound"]).optional(),totalMatchesCapped:W.boolean().optional()}).optional(),ny=W.object({repositories:W.array(W.union([W.string(),ey])).optional(),pagination:ty}).passthrough(),hO=W.object({results:W.array(W.object({id:W.string().optional(),status:W.string().optional(),data:ny.optional()}).passthrough()).optional()}).extend(xe);var ry=5;function oy(e){if(!e||typeof e!="object")return[];let t=[],n=[];for(let r of Object.values(e)){let o=r;if(Array.isArray(o.folders))for(let i of o.folders)typeof i=="string"&&t.push(`${i}/`);if(Array.isArray(o.files))for(let i of o.files)typeof i=="string"&&n.push(i)}return[...t,...n]}function iy(e,t){return oy(e).slice(0,t)}function sy(e){return!e.owner||!e.repo?void 0:`${e.truncated||e.hasMore?"Structure page is partial":"Structure complete"} - use ghSearchCode(owner="${e.owner}", repo="${e.repo}") to find patterns, or ghGetFileContent to read specific files.`}function ay(e,t,n){if(!n)return[];let r=iy(e,ry);if(r.length===0)return[];let o=t>r.length?` (+${t-r.length} more)`:"";return[`Next paths: ${r.join(", ")}${o}`]}function cy(e){let t=e.currentPage??1,n=e.totalPages??t+1,r=e.totalEntries,o=e.entriesPerPage,i=typeof r=="number"&&typeof o=="number"?` (showing ${Math.min(t*o,r)} of ${r})`:"";return`Page ${t}/${n}${i}. Next: page=${t+1}`}function ly(e,t){let n=e.error,r=typeof n=="object"&&n!==null?n: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}:{},...Array.isArray(e.hints)?{hints:e.hints}:{}}}function uy(e){let t={};for(let[n,r]of Object.entries(e)){let o=n.split("/").pop()??n;if(n!==""&&n!=="."&&an(o))continue;let i=r.files.filter(a=>!Ut(a)),s=r.folders.filter(a=>!an(a));(i.length>0||s.length>0)&&(t[n]={files:i,folders:s})}return t}async function tl(e){let{queries:t,authInfo:n}=e,r=Be(n);return J(t,async(o,i)=>{try{let s=r(),a=`${o.owner}/${o.repo}`,c=o.branch??await s.provider.resolveDefaultBranch(a),l=await ft(o,()=>s.provider.getRepoStructure(Ec(o,c)));if(l.ok===!1)return ly(l.result,o);let d=Object.keys(l.response.data.structure??{}).length>0,u=uy(l.response.data.structure),m=Object.keys(u).length>0,p=d&&!m,f=!!l.response.data.summary?.truncated,h=Tc(l.response.data,o,u,c),y="branchFallback"in h?h.branchFallback:void 0,b=l.response.data.hints||[],g=y?[`WARNING: Branch '${String(y.requestedBranch)}' not found. Showing '${String(y.actualBranch)}' (default branch). Re-query with the correct branch name if branch-specific results are required.`]:[],C=Object.values(u).reduce((w,O)=>w+O.files.length+O.folders.length,0),T=h.pagination,P=!!T?.hasMore,x=m&&!P?sy({owner:o.owner,repo:o.repo,truncated:f,hasMore:!1}):void 0,I=P?[cy(T??{})]:[...b,...x?[x]:[]],Q=[];if(P){let w=T?.currentPage??1,O=T?.totalPages;Q.push(`Tree paginated (page ${w}${O?` of ${O}`:""}); use page=${w+1} to fetch the remaining entries.`)}else f&&Q.push(`Tree truncated at maxDepth=${o.maxDepth??"default"}; re-query with a deeper maxDepth or a more specific path to see the rest.`);let E=dy({data:h,entryCount:C,wasTruncated:f,extraHints:I},o);return Se(o,E.data,m,S.GITHUB_VIEW_REPO_STRUCTURE,{hintContext:{entryCount:C,path:o.path,depth:o.maxDepth,branch:o.branch,wasFilteredToEmpty:p,flagFiles:Object.values(u).flatMap(w=>w.files.filter(O=>/(Mode|Config|Flag|Feature)\.[A-Za-z0-9]+$/.test(O)))},prefixHints:g,extraHints:[...Q,...E.extraHints],rawResponse:l.response.rawResponseChars})}catch(s){return ge(s,o,"Failed to explore repository structure")}},{toolName:S.GITHUB_VIEW_REPO_STRUCTURE,keysPriority:["resolvedBranch","branchFallback","summary","pagination","structure","error"],peerHints:!0},e)}function dy(e,t){let n=ay(e.data.structure,e.entryCount,e.wasTruncated);return{data:e.data,extraHints:[...n,...e.extraHints]}}import{GitHubViewRepoStructureQuerySchema as nl}from"@octocodeai/octocode-core/schemas";import{GitHubViewRepoStructureOutputSchema as py}from"@octocodeai/octocode-core/schemas/outputs";var rl={maxDepth:F(0,20).optional(),page:q.default(1),itemsPerPage:F(1,200).optional()},ol=te(nl,rl),il=X(ae(nl,rl)),IO=py.extend(xe);import{z as my}from"zod";import{LocalBinaryInspectQuerySchema as fy}from"@octocodeai/octocode-core/schemas";var hy={entryPageNumber:q.default(1),matchStringContextLines:F(0,50).default(3),charLength:F(1,5e4).optional(),page:q.default(1)},sl=my.object({...fy.shape,...hy}),Er=sl.strict().superRefine((e,t)=>{e.mode==="extract"&&!e.archiveFile&&t.addIssue({code:"custom",path:["archiveFile"],message:'archiveFile is required for mode="extract" \u2014 run mode="list" first to get exact entry names'}),e.archiveFile?.startsWith("-")&&t.addIssue({code:"custom",path:["archiveFile"],message:'archiveFile must not start with "-" (prevents flag injection into backend CLIs)'});let n=[".tar.gz",".tgz",".tar.bz2",".tbz2",".tbz",".tar.xz",".txz",".tar.zst",".tzst",".zip",".jar",".war",".apk",".7z"];e.mode==="decompress"&&n.some(r=>e.path.toLowerCase().endsWith(r))&&t.addIssue({code:"custom",path:["mode"],message:'This path looks like a multi-entry archive \u2014 use mode="list" or mode="extract" instead of mode="decompress".'})}),al=X(sl,{maxQueries:5});import{promises as Oy}from"fs";import{securityRegistry as Iy}from"octocode-security/registry";import cl from"path";import{pathValidator as gy}from"octocode-security/pathValidator";import{getConfigSync as yy}from"octocode-shared";function Ry(e,t,n,r){let o=[],i=e!==r?` (resolved to: ${r})`:"";return o.push(`CWD: ${n}`),t?.includes("outside allowed")?o.push(`Fix: Use absolute path within workspace, e.g. path="${n}/..."${i}`):t?.includes("Permission denied")?o.push("Fix: Check file/directory permissions"):t?.includes("Symlink")||t?.includes("symlink")?o.push("Fix: Symlink target may be outside allowed directories"):(t?.includes("ENOENT")||t?.includes("not found"))&&o.push(`Fix: Path not found. Use absolute path, e.g. path="${n}/..."${i}`),o}function Ce(e,t){if(!e.path?.trim()){let s=Fe.pathValidationFailed("","path is required");return{isValid:!1,errorResult:A(s,e,{toolName:t})}}let n=process.env.WORKSPACE_ROOT?.trim()||yy().local.workspaceRoot||process.cwd(),r=e.path.replace(/^file:\/\//,""),o=cl.isAbsolute(r)?r:cl.resolve(n,r),i=gy.validate(o);if(!i.isValid){let s=Fe.pathValidationFailed(e.path,i.error),a=Ry(e.path,i.error,n,o);return{isValid:!1,errorResult:A(s,e,{toolName:t,hintContext:{errorType:"permission",path:e.path,originalError:i.error},extra:{cwd:n,resolvedPath:o},customHints:a})}}return{isValid:!0,sanitizedPath:i.sanitizedPath??o}}function BO(e,t,n={}){let{threshold:r=100,itemType:o="item",detailed:i=!1}=n;return t?{shouldBlock:!1}:e>r?{shouldBlock:!0,errorCode:Fe.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{validateCommand as by}from"octocode-security/commandValidator";async function Oe(e,t=[],n={}){let r=by(e,t);if(!r.isValid)throw new Error(`Command validation failed: ${r.error||"Command not allowed"}`);let o=pr(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}=n,l=await wt(e,t,{timeout:i,cwd:s,env:a,maxOutputSize:c});if(l.error)throw l.error;return{success:l.success,code:l.exitCode,stdout:l.stdout,stderr:l.stderr}}var ll=[".tar",".tar.gz",".tgz",".tar.bz2",".tbz2",".tbz",".tar.xz",".txz",".tar.zst",".tzst"],ul=[".7z",".iso",".cab",".cpio",".xar",".pkg",".ar",".deb",".lha",".lzh"],dl=[".dmg",".rar",".cpgz"],Sy=[".aar",".yaa"];function At(e,t){let n=t.toLowerCase();return e.some(r=>n.endsWith(r))}function Cy(e,t){let n=t?["-tvf",e]:["-tf",e],r=t?["-l",e]:["-Z","-1",e],o=n,i=["l","-ba","-bd",e],s=t?["list","-i",e,"-v"]:["list","-i",e],a={command:"tar",args:n},c={command:"unzip",args:r},l={command:"bsdtar",args:o},d={command:"7z",args:i},u={command:"7zz",args:i},m={command:"aa",args:s};return At(Sy,e)?[m]:At(dl,e)?[d,u,l,c,a]:At(ul,e)?[l,d,u,c,a]:At(ll,e)?[a,c,l,d,u]:[c,a,l,d,u]}function Py(e,t){let n={command:"tar",args:["-xOf",e,"--",t]},r={command:"unzip",args:["-p",e,t]},o={command:"bsdtar",args:["-xOf",e,"--",t]},i=["e","-so","-bd","--",e,t],s={command:"7z",args:i},a={command:"7zz",args:i};return At(dl,e)?[s,a,o,r,n]:At(ul,e)?[o,s,a,r,n]:At(ll,e)?[n,r,o,s,a]:[r,n,o,s,a]}async function pl(e){let t=[];for(let n of e){let r=await Oe(n.command,n.args);if(!r.success){if(r.stderr.toLowerCase().includes("not found")||r.stderr.toLowerCase().includes("no such file")||r.code===127){t.push(n.command);continue}return{success:!1,stdout:r.stdout,stderr:r.stderr,commandUsed:n.command,missingCommands:t.length?t:void 0}}return{success:!0,stdout:r.stdout,stderr:r.stderr,commandUsed:n.command,missingCommands:t.length?t:void 0}}return{success:!1,stdout:"",stderr:"All backends failed or were not found",missingCommands:t}}function Ey(e,t){return t!=="7z"&&t!=="7zz"?e:e.split(`
|
|
42
|
+
`)}function qk(e,t,n,r){let o=Array.isArray(e.fileChanges)?e.fileChanges:[],i=n.patches.files,s=i&&i.length>0?o.filter(f=>i.includes(ua(f))):o,a=qu(t),c=a?s.filter(f=>da(ua(f),a)||da(f.patch,a)):s,{items:l,pagination:u}=Vu(c,t.filePage??t.page??1,t.itemsPerPage??20),d=n.patches.mode!=="none",p=l.map(f=>{let m=Hk(f,!1);if(!d||typeof f.patch!="string")return m;let g=r&&!a?jk(f.patch):f.patch,b=fa(g,t.charOffset??0,t.charLength??12e3);return{...m,patch:b?.content??"",diff:Bo(b?.content),...b?{patchPagination:b.pagination}:{}}});return n.changedFiles||n.patches.mode!=="none"?{changedFiles:p,filePagination:u}:o.length===0?{}:{filePathsPreview:o.slice(0,20).map(ua).filter(Boolean),filePathsPagination:{totalFiles:o.length,filesPerPage:20,hasMore:o.length>20,...o.length>20?{nextFilePage:2}:{}}}}function ti(e){return typeof e=="object"&&e!==null}function $u(e){if(ti(e)&&!(typeof e.currentPage!="number"||typeof e.totalPages!="number"||typeof e.itemsPerPage!="number"||typeof e.totalItems!="number"||typeof e.hasMore!="boolean"))return e}function Wu(e){if(ti(e)&&!(typeof e.charOffset!="number"||typeof e.charLength!="number"||typeof e.totalChars!="number"||typeof e.hasMore!="boolean"))return e}function Vk(e){return{...e.changedFiles?{changedFiles:!0}:{},...e.patches.mode!=="none"?{patches:e.patches}:{}}}function Wk(e){let t=e.changedFiles;if(Array.isArray(t))for(let n of t){if(!ti(n))continue;let r=Wu(n.patchPagination);if(r?.hasMore)return r}}function Kk(e){let t=e.comments;if(Array.isArray(t))for(let n of t){if(!ti(n))continue;let r=Wu(n.bodyPagination);if(r?.hasMore)return r}}function Yk(e,t,n,r){let o={},i=Wu(e.bodyPagination),s=$u(e.filePagination),a=$u(e.commentPagination),c=$u(e.commitPagination),l=Wk(e),u=Kk(e),d=Vk(n);i&&(o.body={...i,nextQuery:Ly(t,r,{body:!0},i)}),s&&(o.changedFiles={...s,nextQuery:ju(t,r,d,"filePage",s)}),a&&n.comments&&(o.comments={...a,nextQuery:ju(t,r,{comments:n.comments},"commentPage",a)}),u?.hasMore&&u.nextCharOffset!==void 0&&n.comments&&(o.commentBody={...u,nextQuery:pa(t,r,{content:{comments:n.comments},...t.commentPage!==void 0?{commentPage:t.commentPage}:{},commentBodyOffset:u.nextCharOffset,charLength:t.charLength})}),c&&n.commits&&(o.commits={...c,nextQuery:ju(t,r,{commits:n.commits},"commitPage",c)}),l&&n.patches.mode!=="none"&&(o.patches={...l,nextQuery:Ly(t,r,{patches:n.patches},l,{filePage:t.filePage??t.page})});let p=e.filePathsPagination;return ti(p)&&(o.filePaths={...p,hasMore:p.hasMore===!0,nextQuery:p.hasMore===!0?pa(t,r,{content:{changedFiles:!0},filePage:p.nextFilePage}):void 0}),Object.keys(o).length>0?o:void 0}function Xk(e){delete e.bodyPagination,delete e.filePagination,delete e.commentPagination,delete e.commitPagination,delete e.filePathsPagination}function Fy(e,t,n,r,o){let i=Number(e.number),s=typeof e.body=="string"?e.body:void 0,a=s&&r?$k(s):s,c=n.body?fa(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,p=t.prNumber!==void 0||t.verbose===!0,m={...{number:e.number,title:e.title,...e.url?{url:e.url}:{},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,...p?{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:_y(typeof e.body=="string"?e.body:void 0)}:{},...u?{next:Gk(t,i,n)}:{}},...n.body?c?{body:c.content,bodyPagination:c.pagination}:{bodyEmpty:!0}:{},...qk(e,t,n,r),...Bk(e,t,n),...Qk(e,t,n),...Uk(e,t,n),...e.reviewSummary?{reviewSummary:e.reviewSummary}:{},...Array.isArray(e.sanitizationWarnings)&&e.sanitizationWarnings.length>0?{sanitizationWarnings:e.sanitizationWarnings}:{}},g=Yk(m,t,n,i);return Xk(m),g&&(m.contentPagination=g),m}var Ku=y(()=>{"use strict";me();Qo()});import{z as vn}from"zod";import{GitHubPullRequestSearchQuerySchema as My}from"@octocodeai/octocode-core/schemas";import{GitHubSearchPullRequestsOutputSchema as Jk}from"@octocodeai/octocode-core/schemas/outputs";var Dy,Zk,wr,ma,s1,ni=y(()=>{"use strict";me();Be();tt();Gt();Dy={perPage:G(1,100).optional().default(30),prNumber:G(1,1e9).optional(),limit:G(1,100).optional().default(30),page:ae.default(1),filePage:ae.optional(),commentPage:ae.optional(),commitPage:ae.optional(),itemsPerPage:G(1,100).optional().default(20),charOffset:G(0,1e8).optional(),commentBodyOffset:G(0,1e8).optional(),charLength:G(1,5e4).optional()},Zk=he(My,Dy),wr=ue(My,Dy),ma=ie(Zk),s1=Jk.extend({results:vn.array(vn.object({id:vn.string().optional(),status:vn.string().optional(),data:vn.object({pull_requests:vn.array(vn.object({}).passthrough()).optional()}).passthrough().optional()}).passthrough()).optional(),...Qe})});async function Ny(e){let{queries:t,authInfo:n}=e,r=ct(n);return se(t,async(o,i)=>{try{let s=Ue(wr,o);if(s.ok===!1)return s.error;if(s.data.type==="commits"){let O=s.data;if(!O.owner||!O.repo)return M("owner and repo are required for commits mode.",o);let w=O.path,H=w&&!w.endsWith("/")?"file":"repo";if(H==="file"&&!w)return M("path is required when querying a specific file in commits mode.",o);let I=await hh({type:H,owner:O.owner,repo:O.repo,path:w,branch:O.branch,since:O.since,until:O.until,author:O.author,page:Number(O.page)||1,perPage:Number(O.perPage)||30,filePage:typeof O.filePage=="number"?O.filePage:void 0,itemsPerPage:typeof O.itemsPerPage=="number"?O.itemsPerPage: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(En(I))return M(I,o,{toolName:A.GITHUB_SEARCH_PULL_REQUESTS});let{commits:v}=I.data,D=v.length>0;return _e(o,I.data,D,A.GITHUB_SEARCH_PULL_REQUESTS,{rawResponse:I.rawResponseChars})}let a=r(),c={...s.data},l=Ay(c),u=c.prNumber!==void 0;if(u||(c.content=void 0,c.reviewMode=void 0),!(c.keywordsToSearch?.length||c.owner||c.repo||c.author||c.assignee||c.prNumber&&c.owner&&c.repo))return M("At least one valid search parameter, filter, or PR number is required.",o);let p=await Zt(c,()=>a.provider.searchPullRequests(hy(c)));if(p.ok===!1)return p.result;let f=u?l.changedFiles||l.patches.mode!=="none":!1,{pullRequests:m,resultData:g}=yy(p.response.data,{includeFileChanges:f});c.prNumber!==void 0&&delete g.pagination;let b=!u&&(!!o.content||!!o.reviewMode),S={...l,body:!1,changedFiles:!1,patches:{mode:"none"},comments:!1,commits:!1},C=c.minify==="standard",k=u,_=m.map(O=>Fy(O,c,b?S:l,C,k));g.pull_requests=_,!u&&c.concise===!0&&(g.pull_requests=_.map(O=>{let w=O;return`#${w.number} ${w.title}`}));let E=_.length>0;return _e(c,g,E,A.GITHUB_SEARCH_PULL_REQUESTS,{rawResponse:p.response.rawResponseChars})}catch(s){return Ie(s,o,void 0,A.GITHUB_SEARCH_PULL_REQUESTS)}},{toolName:A.GITHUB_SEARCH_PULL_REQUESTS,keysPriority:["pull_requests","pagination","total_count","error"]},e)}var Yu=y(()=>{"use strict";ni();fe();je();Fe();On();en();Uu();Ku();au();Vo()});function Gy(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}var Xu=y(()=>{"use strict"});function eO(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,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,url:t.url,updatedAt:t.updatedAt};return Object.fromEntries(Object.entries(n).filter(([,r])=>r!==void 0))}function x1(e){let t=e,r=[`${t.owner?`${t.owner}/`:""}${t.repo}`];if(typeof t.stars=="number"&&r.push(`${t.stars} stars`),typeof t.forksCount=="number"&&t.forksCount>0&&r.push(`${t.forksCount} forks`),typeof t.openIssuesCount=="number"&&t.openIssuesCount>0&&r.push(`${t.openIssuesCount} issues`),t.language&&r.push(t.language),t.license&&r.push(t.license),t.pushedAt&&r.push(t.pushedAt.slice(0,10)),t.defaultBranch&&t.defaultBranch!=="main"&&t.defaultBranch!=="master"&&r.push(`@${t.defaultBranch}`),t.visibility&&t.visibility!=="public"&&r.push(t.visibility),Array.isArray(t.topics)&&t.topics.length>0&&r.push(`#${t.topics.slice(0,4).join(",")}`),t.description&&t.description!=="No description"){let o=t.description.replace(/\s+/g," ").trim();r.push(o.length>100?`${o.slice(0,99)}...`:o)}return r.join(" | ")}function tO(e,t){let n=t.concise===!0;return{data:{pagination:e.pagination,repositories:n?e.repositories.map(r=>`${r.owner?`${r.owner}/`:""}${r.repo}`):e.repositories.map(eO)}}}function By(e){return!!(e.topicsToSearch&&(Array.isArray(e.topicsToSearch)?e.topicsToSearch.length>0:e.topicsToSearch))}function Qy(e){return!!(e.keywords&&e.keywords.length>0)}function nO(e){return!!(Qy(e)||By(e)||e.owner||e.language||e.stars||e.created||e.updated||e.size||e.forks||e.license||e.goodFirstIssues||e.visibility||e.archived!==void 0)}function Hy(e,t){return e?`${e} (${t==="topics"?"topics-based search":"keywords-based search"})`:`${t.charAt(0).toUpperCase()+t.slice(1)}-based repository search`}function rO(e){let t=By(e),n=Qy(e);if(t&&n){let{topicsToSearch:r,keywords:o,...i}=e;return[{label:"topics",query:{...i,reasoning:Hy(e.reasoning,"topics"),topicsToSearch:r}},{label:"keywords",query:{...i,reasoning:Hy(e.reasoning,"keywords"),keywords:o}}]}return[{label:"combined",query:e}]}function oO(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 iO(e,t){return[...e].sort((n,r)=>{let o=sO(n,r,t.sort);if(o!==0)return o;let i=zy(r,t)-zy(n,t);if(i!==0)return i;let s=(r.stars??0)-(n.stars??0);return s!==0?s:Ju(n).localeCompare(Ju(r))})}function sO(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 Gy(e.updatedAt,t.updatedAt);case"best-match":case void 0:return 0;default:return 0}}function zy(e,t){let n=aO(t),r=Ju(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,d)=>o===d||r===d?u+80:o.includes(d)||r.includes(d)?u+40:s.includes(d)?u+35:i.includes(d)?u+10:u,0)+(c&&a===c?20:0)}function aO(e){let t=e.keywords??[],n=e.topicsToSearch??[];return[...t,...n].map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)}function Ju(e){return`${e.owner}/${e.repo}`}function cO(e){return{currentPage:e.currentPage,totalPages:e.totalPages,perPage:e.entriesPerPage||10,totalMatches:e.totalMatches||0,hasMore:e.hasMore,...e.hasMore?{nextPage:e.currentPage+1}:{}}}function lO(e){let t=e.map(n=>n.response.data.pagination).filter(n=>!!n);if(t.length!==0)return{currentPage:t[0].currentPage,totalPages:Math.max(...t.map(n=>n.totalPages)),hasMore:t.some(n=>n.hasMore),entriesPerPage:t[0].entriesPerPage,totalMatches:t.reduce((n,r)=>n+(r.totalMatches??0),0),reachableTotalMatches:t.reduce((n,r)=>n+(r.reachableTotalMatches??r.totalMatches??0),0),totalMatchesKind:t.some(n=>n.totalMatchesKind==="lowerBound")?"lowerBound":t.some(n=>n.totalMatchesKind==="reported")?"reported":"exact",totalMatchesCapped:t.some(n=>n.totalMatchesCapped===!0)}}function uO(e){return e.reduce((t,n)=>t+(n.response.rawResponseChars??U(n.response.data??n.response)),0)}async function Uy(e){let{queries:t,authInfo:n}=e,r=ct(n);return se(t,async(o,i)=>{try{if(!nO(o))return M("At least one repository search term or filter is required.",o);let s=r(),a=rO(o),{successes:c,failures:l}=await ty(a.map(E=>({meta:{label:E.label,query:E.query},operation:()=>s.provider.searchRepos(my(E.query))}))),u=c.map(E=>({label:E.meta.label,query:E.meta.query,response:E.response})),d=l.map(E=>({label:E.meta.label,query:E.meta.query,response:E.response}));if(u.length===0){let E=d[0];return E?Ks(E.response,o):Ie(new Error("Repository search produced no provider results"),o,void 0,A.GITHUB_SEARCH_REPOSITORIES)}let p=o.limit,f=iO(oO(u.flatMap(E=>gy(E.response.data.repositories))),o),m=p!=null?f.slice(0,p):f,g=u.length===1?u[0]:void 0,S=u.length>1?lO(u):g?.response.data.pagination,C=S?cO(S):void 0,k=m.length>0,_=tO({repositories:m,pagination:C},o);return _e(o,_.data,k,A.GITHUB_SEARCH_REPOSITORIES,{rawResponse:uO([...u,...d])})}catch(s){return Ie(s,o,void 0,A.GITHUB_SEARCH_REPOSITORIES)}},{toolName:A.GITHUB_SEARCH_REPOSITORIES,keysPriority:["repositories","pagination","error"]},e)}var Zu=y(()=>{"use strict";fe();je();Xu();Fe();On();en();oe()});import{z as W}from"zod";import{GitHubReposSearchSingleQuerySchema as jy}from"@octocodeai/octocode-core/schemas";var $y,ga,ha,dO,pO,fO,M1,ya=y(()=>{"use strict";me();Be();tt();Gt();$y={limit:G(1,100).optional(),page:ae.default(1)},ga=ue(jy,$y),ha=ie(he(jy,$y)),dO=W.object({owner:W.string(),repo:W.string(),stars:W.number().optional(),forks:W.number().optional(),openIssuesCount:W.number().optional(),language:W.string().optional(),license:W.string().optional(),description:W.string().optional(),homepage:W.string().optional(),pushedAt:W.string().optional(),createdAt:W.string().optional(),defaultBranch:W.string().optional(),topics:W.array(W.string()).optional(),visibility:W.string().optional(),url:W.string().optional(),updatedAt:W.string().optional()}),pO=W.object({currentPage:W.number(),totalPages:W.number(),hasMore:W.boolean(),perPage:W.number().optional(),totalMatches:W.number().optional(),reportedTotalMatches:W.number().optional(),reachableTotalMatches:W.number().optional(),totalMatchesKind:W.enum(["exact","reported","lowerBound"]).optional(),totalMatchesCapped:W.boolean().optional(),nextPage:W.number().optional()}).optional(),fO=W.object({repositories:W.array(W.union([W.string(),dO])).optional(),pagination:pO}).passthrough(),M1=W.object({results:W.array(W.object({id:W.string().optional(),status:W.string().optional(),data:fO.optional()}).passthrough()).optional()}).extend(Qe)});function mO(e,t){let n=e.error,r=typeof n=="object"&&n!==null?n: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}:{}}}function gO(e){let t={};for(let[n,r]of Object.entries(e)){let o=n.split("/").pop()??n;if(n!==""&&n!=="."&&ko(o))continue;let i=r.files.filter(a=>!mr(a)),s=r.folders.filter(a=>!ko(a));(i.length>0||s.length>0)&&(t[n]={files:i,folders:s})}return t}async function qy(e){let{queries:t,authInfo:n}=e,r=ct(n);return se(t,async(o,i)=>{try{let s=r(),a=`${o.owner}/${o.repo}`,c=o.branch??await s.provider.resolveDefaultBranch(a),l=await Zt(o,()=>s.provider.getRepoStructure(Sy(o,c)));if(l.ok===!1)return mO(l.result,o);let u=gO(l.response.data.structure),d=Object.keys(u).length>0,p=Cy(l.response.data,o,u,c);return _e(o,p,d,A.GITHUB_VIEW_REPO_STRUCTURE,{rawResponse:l.response.rawResponseChars})}catch(s){return Ie(s,o,"Failed to explore repository structure",A.GITHUB_VIEW_REPO_STRUCTURE)}},{toolName:A.GITHUB_VIEW_REPO_STRUCTURE,keysPriority:["resolvedBranch","branchFallback","summary","pagination","structure","error"]},e)}var ed=y(()=>{"use strict";fe();je();gr();Fe();On();en()});import{GitHubViewRepoStructureQuerySchema as Vy}from"@octocodeai/octocode-core/schemas";import{GitHubViewRepoStructureOutputSchema as hO}from"@octocodeai/octocode-core/schemas/outputs";var Wy,ba,Ra,X1,Sa=y(()=>{"use strict";me();me();Be();tt();Gt();Wy={maxDepth:G(0,20).optional(),page:ae.default(1),itemsPerPage:G(1,200).optional()},ba=ue(Vy,Wy),Ra=ie(he(Vy,Wy)),X1=hO.extend(Qe)});import{z as Ky}from"zod";import{LocalBinaryInspectQuerySchema as yO}from"@octocodeai/octocode-core/schemas";var bO,Yy,Tr,Ca,ri=y(()=>{"use strict";Be();bO={entryPageNumber:ae.default(1).describe("list mode: 1-based page over archive entries when an archive has many files."),matchStringContextLines:G(0,50).default(3).describe("Lines of context to keep around each matchString hit (strings/decompress/extract)."),charLength:G(1,5e4).optional().describe("Max chars of inline content for this window (paired with charOffset). Omit for the default window; follow pagination.next to page losslessly."),page:ae.default(1).describe("1-based page for paginated entry/content listings."),detailed:Ky.boolean().optional().describe("inspect: include full symbols/imports/exports/sections arrays.")},Yy=Ky.object({...yO.shape,...bO}),Tr=Yy.strict().superRefine((e,t)=>{e.mode==="extract"&&!e.archiveFile&&t.addIssue({code:"custom",path:["archiveFile"],message:'archiveFile is required for mode="extract" \u2014 run mode="list" first to get exact entry names'}),e.archiveFile?.startsWith("-")&&t.addIssue({code:"custom",path:["archiveFile"],message:'archiveFile must not start with "-" (prevents flag injection into backend CLIs)'});let n=[".tar.gz",".tgz",".tar.bz2",".tbz2",".tbz",".tar.xz",".txz",".tar.zst",".tzst",".zip",".jar",".war",".apk",".7z"];e.mode==="decompress"&&n.some(r=>e.path.toLowerCase().endsWith(r))&&t.addIssue({code:"custom",path:["mode"],message:'This path looks like a multi-entry archive \u2014 use mode="list" or mode="extract" instead of mode="decompress".'})}),Ca=ie(Yy,{maxQueries:5})});import Xy from"path";import{pathValidator as RO}from"@octocodeai/octocode-engine/pathValidator";function Ke(e,t){if(!e.path?.trim()){let s=Xe.pathValidationFailed("","path is required");return{isValid:!1,errorResult:M(s,e,{toolName:t})}}let n=process.env.WORKSPACE_ROOT?.trim()||ge().local.workspaceRoot||process.cwd(),r=e.path.replace(/^file:\/\//,""),o=Xy.isAbsolute(r)?r:Xy.resolve(n,r),i=RO.validate(o);if(!i.isValid){let s=Xe.pathValidationFailed(e.path,i.error);return{isValid:!1,errorResult:M(s,e,{toolName:t,extra:{cwd:n,resolvedPath:o}})}}return{isValid:!0,sanitizedPath:i.sanitizedPath??o}}function cq(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}}var Et=y(()=>{"use strict";eo();Ws();Ae()});import{validateCommand as SO}from"@octocodeai/octocode-engine/commandValidator";async function Er(e,t=[],n={}){let r=SO(e,t);if(!r.isValid)throw new Error(`Command validation failed: ${r.error||"Command not allowed"}`);let o=Xs(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 kn(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}}var Pa=y(()=>{"use strict";Xo()});function bt(e,t){let n=t.toLowerCase();return e.some(r=>n.endsWith(r))}function CO(e,t){let n=t?["-tvf",e]:["-tf",e],r=t?["-l",e]:["-Z","-1",e],o=n,i=["l","-ba","-bd",e],s=t?["list","-i",e,"-v"]:["list","-i",e],a={command:"tar",args:n},c={command:"unzip",args:r},l={command:"bsdtar",args:o},u={command:"7z",args:i},d={command:"7zz",args:i},p={command:"aa",args:s};return bt(Jy,e)?[p]:bt(rd,e)?[u,d,l,c,a]:bt(nd,e)?[l,u,d,c,a]:bt(td,e)?[a,c,l,u,d]:[c,a,l,u,d]}function PO(e,t){let n={command:"tar",args:["-xOf",e,"--",t]},r={command:"unzip",args:["-p",e,t]},o={command:"bsdtar",args:["-xOf",e,"--",t]},i=["e","-so","-bd","--",e,t],s={command:"7z",args:i},a={command:"7zz",args:i};return bt(rd,e)?[s,a,o,r,n]:bt(nd,e)?[o,s,a,r,n]:bt(td,e)?[n,r,o,s,a]:[r,n,o,s,a]}async function od(e){let t=[];for(let n of e){let r=await Er(n.command,n.args);if(!r.success){if(r.stderr.toLowerCase().includes("not found")||r.stderr.toLowerCase().includes("no such file")||r.code===127){t.push(n.command);continue}return{success:!1,stdout:r.stdout,stderr:r.stderr,commandUsed:n.command,missingCommands:t.length?t:void 0}}return{success:!0,stdout:r.stdout,stderr:r.stderr,commandUsed:n.command,missingCommands:t.length?t:void 0}}return{success:!1,stdout:"",stderr:"All backends failed or were not found",missingCommands:t}}function xO(e,t){return t!=="7z"&&t!=="7zz"?e:e.split(`
|
|
43
43
|
`).map(n=>{if(!n.trim())return"";let r=n.match(/^.+\s{2,}(\S.*)$/);return r?r[1].trim():n.trim()}).filter(Boolean).join(`
|
|
44
|
-
`)}async function
|
|
45
|
-
`).map(i=>i.trim()).filter(Boolean);return{...n,entries:o}}async function
|
|
46
|
-
`)
|
|
47
|
-
`),
|
|
48
|
-
`)
|
|
49
|
-
`),
|
|
50
|
-
`),isPartial:!0,actualStartLine:i,actualEndLine:s,warnings:a}}function oR(e,t,n){let r=t.split(`
|
|
51
|
-
`)
|
|
52
|
-
`).length,O=z.applyContentViewMinification(E,i),$=[z.SIGNATURES_ONLY_HINT];return e.matchString&&$.push('matchString was ignored \u2014 minify:"symbols" returns the full skeleton index. Use startLine/endLine from the gutter to read the matching body.'),y&&$.push(y),U({path:e.path,content:O,contentView:"symbols",isSkeleton:!0,totalLines:w,...Tl(f,h),hints:$},f)}}let P=p.split(`
|
|
53
|
-
`).length,x=oR(e,p,t),I=E=>{let w=[...T?[T]:[],...y?[y]:[]];if(w.length===0)return E;let O=E.warnings??[];return{...E,warnings:[...O,...w]}};if(x.earlyResult){let E=x.earlyResult.content,w=g&&typeof E=="string"?{...x.earlyResult,content:z.applyContentViewMinification(E,i)}:x.earlyResult;return U(El(I(ii(cR(w,C),e,P)),f,h),f)}let Q=aR(e,x,s,P,t,g,C);return U(El(I(ii(Q,e,P)),f,h),f)}catch(n){return A(n,e,{toolName:S.LOCAL_FETCH_CONTENT})}}function ii(e,t,n){return e}import{z as lR}from"zod";import{FetchContentQuerySchema as xl}from"@octocodeai/octocode-core/schemas";var uR=lR.enum(["none","standard","symbols"]).optional().default("standard"),_l={startLine:Vt,endLine:Vt,contextLines:jt.default(5),charOffset:F(0,1e8).optional(),charLength:F(1,5e4).optional(),minify:uR},dR=ae(xl,_l),Tr=te(xl,_l),Al=X(dR,{maxQueries:5});async function Ll(e){let{queries:t}=e;return J(t||[],async n=>Le({toolName:S.LOCAL_FETCH_CONTENT,query:n,contextMessage:"localGetFileContent execution failed",execute:async()=>{let r=Tr.safeParse(n);if(!r.success){let i=r.error.issues.map(s=>s.message).join("; ");return A(`Validation error: ${i}`,n)}return await wl(r.data)}}),{toolName:S.LOCAL_FETCH_CONTENT,peerHints:!0},e)}import{z as pR}from"zod";import{FindFilesQuerySchema as mR}from"@octocodeai/octocode-core/schemas";var Ol={maxDepth:F(0,100).optional(),minDepth:F(0,100).optional(),limit:F(1,1e4).optional(),page:q.default(1),itemsPerPage:F(1,50).optional()},Il=pR.object(Object.fromEntries(Object.entries(mR.shape).filter(([e])=>e!=="regexType")));function fR(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 hR=ae(Il,Ol),wr=te(Il,Ol).superRefine(fR),kl=X(hR,{maxQueries:5});function Kt(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 Rn(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 gR=["node_modules","dist",".git","coverage","build",".next",".nuxt",".svelte-kit",".turbo",".cache",".parcel-cache","out","target",".octocode",".cursor",".vscode",".idea",".claude",".context"];function yR(e,t){let n=t??gR,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}function RR(e){let{query:t,currentPage:n,totalPages:r,shownCount:o,totalFiles:i,wasFileCapped:s,maxFiles:a,discoveredFileCount:c,hasConfigFiles:l,extraHints:d=[]}=e,u=t,m=[];Array.isArray(u.names)&&u.names.length>0&&m.push(`names: ${u.names.join(", ")}`),u.entryType&&m.push(`entryType: ${u.entryType==="f"?"files":u.entryType==="d"?"directories":String(u.entryType)}`);let p=f=>typeof f=="string"&&!Ml.test(f)?" (skipped: invalid format)":"";return u.modifiedBefore&&m.push(`modified before: ${u.modifiedBefore}${p(u.modifiedBefore)}`),u.modifiedWithin&&m.push(`modified within: ${u.modifiedWithin}${p(u.modifiedWithin)}`),u.sizeGreater&&m.push(`size > ${u.sizeGreater}`),u.sizeLess&&m.push(`size < ${u.sizeLess}`),Array.isArray(u.excludeDir)&&u.excludeDir.length>0&&m.push(`excluding: ${u.excludeDir.join(", ")}`),[...d,...m.length>0?[`Active filters \u2014 ${m.join(" | ")}`]:[],...n<r?[`Page ${n}/${r} (${o} of ${i}). Next: page=${n+1}`]:[],...r>0&&n>r?[`Requested page ${n} is outside available range (1-${r}). Use page=${r} for the last page.`]:[],...s?[`Results capped at ${a} of ${c} discovered. All ${a} are reachable via page; to see the rest, narrow with names/entryType/time filters. Note: sorting applies only within the capped set \u2014 limit is a pre-sort discovery cap.`]:[],...i===0?oe(S.LOCAL_FIND_FILES,"empty",{fileCount:i,hasConfigFiles:l,path:t.path,names:t.names,modifiedWithin:t.modifiedWithin,sizeGreater:t.sizeGreater,sizeLess:t.sizeLess}):[u.entryType==="f"?`Found ${i} file${i===1?"":"s"}. Use localSearchCode to search or localGetFileContent to read.`:u.entryType==="d"?`Found ${i} director${i===1?"y":"ies"}. Use localViewStructure to browse or localSearchCode to search.`:`Found ${i} entr${i===1?"y":"ies"} \u2014 pass entryType="f" for files, entryType="d" for directories. Use localSearchCode or localGetFileContent.`]]}async function vl(e){let t=e.details??!1,n=e.showFileLastModified??!1,r=n||(e.sortBy||"modified")==="modified";try{let o=Ce(e,S.LOCAL_FIND_FILES);if(!o.isValid)return o.errorResult;let i={...e,path:o.sanitizedPath},s={...i,excludeDir:yR(i.path,i.excludeDir)},a=PR(s),c=e.limit??1e4,l=z.queryFileSystem({path:s.path,recursive:!0,includeRoot:!0,showHidden:!0,maxDepth:s.maxDepth,minDepth:s.minDepth,names:s.names,pathPattern:s.pathPattern,regex:s.regex,entryType:s.entryType,empty:s.empty,modifiedWithin:s.modifiedWithin,modifiedBefore:s.modifiedBefore,accessedWithin:s.accessedWithin,sizeGreater:s.sizeGreater,sizeLess:s.sizeLess,permissions:s.permissions,executable:s.executable,readable:s.readable,writable:s.writable,excludeDir:s.excludeDir,limit:c}),d=l.totalDiscovered,u=l.wasCapped,m=l.entries.map(M=>bR(M,r)),p=e.sortBy||"modified";SR(m,p,r);let f=[],h=CR(m,t,n),y=h.length,b=e.itemsPerPage||20,g=e.page||1,C=Math.max(1,Math.ceil(y/b)),T=(g-1)*b,P=Math.min(T+b,y),I=h.slice(T,P),Q=/\.(config|rc|env|json|ya?ml|toml|ini)$|^(\..*rc|config\.|\.env)/i,E=I.some(M=>Q.test(M.path.split("/").pop()||"")),w=[...l.warnings,...l.skipped>0?[`${l.skipped} entr${l.skipped===1?"y":"ies"} skipped during filesystem traversal`]:[]],O=[...a,...w],$={...y===0?{status:"empty"}:{},path:i.path,files:I,pagination:{currentPage:g,totalPages:C,filesPerPage:b,totalFiles:y,hasMore:g<C,...u?{totalFilesFound:d}:{}},...O.length>0&&{warnings:O},hints:RR({query:e,currentPage:g,totalPages:C,shownCount:I.length,totalFiles:y,wasFileCapped:u,maxFiles:c,discoveredFileCount:d,hasConfigFiles:E,extraHints:f})};return U(Fl($,e,{totalFiles:y}),l.entries.reduce((M,N)=>M+N.path.length,0))}catch(o){return A(o,e,{toolName:S.LOCAL_FIND_FILES})}}function bR(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 Fl(e,t,n){return e}function SR(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 CR(e,t,n){return e.map(r=>{let o={path:r.path,type:r.type};return r.size!==void 0&&r.type!=="directory"&&(o.sizeFormatted=Kt(r.size)),t&&r.permissions&&(o.permissions=r.permissions),r.modified&&(o.modified=r.modified),o})}var Ml=/^\d+[hdwm]$/;function PR(e){let t=[],n=[{key:"modifiedBefore",value:e.modifiedBefore},{key:"modifiedWithin",value:e.modifiedWithin},{key:"accessedWithin",value:e.accessedWithin}];for(let{key:r,value:o}of n)o&&!Ml.test(o)&&t.push(`${r}="${o}" has an unsupported format \u2014 filter was skipped. Use a relative duration like "7d", "2h", "1w", or "3m".`);return t}async function Nl(e){let{queries:t}=e;return J(t||[],async n=>Le({toolName:S.LOCAL_FIND_FILES,query:n,contextMessage:"localFindFiles execution failed",execute:async()=>{let r=wr.safeParse(n);if(!r.success){let i=r.error.issues.map(s=>s.message).join("; ");return A(`Validation error: ${i}`,n)}return await vl(r.data)}}),{toolName:S.LOCAL_FIND_FILES,peerHints:!0},e)}import{RipgrepQuerySchema as Hl}from"@octocodeai/octocode-core/schemas";var Dl={contextLines:jt,matchContentLength:F(1,1e5).optional().default(500),maxMatchesPerFile:F(1,1e5).optional(),maxFiles:F(1,1e5).optional(),matchPage:q.optional(),itemsPerPage:F(1,1e3).optional(),page:q.default(1)},ER=ae(Hl,Dl),gt=te(Hl,Dl,{strict:!0}),Gl=X(ER,{maxQueries:5});var bn=new Map,TR=parseInt(process.env.OCTOCODE_COMMAND_CHECK_TIMEOUT_MS||"5000",10)||5e3,$l={rg:{name:"ripgrep",versionFlag:"--version",tool:"localSearchCode"}};async function si(e,t=!1){if(!t&&bn.has(e))return bn.get(e);let n=$l[e];try{let r=On(),o=await dr(r,[n.versionFlag],TR),i={available:o,command:e,...o?{}:{error:`${n.name} (${e}) bundled binary is unavailable`}};return bn.set(e,i),i}catch(r){let o={available:!1,command:e,error:r instanceof Error?r.message:`Failed to check ${e} availability`};return bn.set(e,o),o}}async function xk(){let e=new Map,t=await Promise.all([si("rg")]);return e.set("rg",t[0]),e}function _k(e){let t=$l[e],n={rg:"Bundled ripgrep failed to load. Reinstall the MCP package to restore dist/runtime/rg."};return`${t.name} (${e}) is not available. ${n[e]}`}function Ak(){bn.clear()}import{validateRipgrepQuery as kR}from"@octocodeai/octocode-core/schemas/runtime";function Ul(e,t){let n={contextLines:t.contextLines??0,maxSnippetChars:t.matchContentLength},r=z.parseRipgrepJson(e,n),o=r.files.map(s=>({path:s.path,matchCount:s.matchCount,matches:s.matches.map(a=>({line:a.line,column:a.column,value:a.value}))})),i={matchCount:r.stats.matchCount,matchedLines:r.stats.matchedLines,filesMatched:r.stats.filesMatched,filesSearched:r.stats.filesSearched,bytesSearched:r.stats.bytesSearched??void 0,searchTime:r.stats.searchTime};return{files:o,stats:i}}function wR(e){return e.trim().split(`
|
|
54
|
-
`).filter(Boolean).filter(n=>!Bl(n)).map(n=>({path:n,matchCount:1,matches:[]}))}function xR(e){return e.trim().split(`
|
|
55
|
-
`).filter(Boolean).filter(n=>!Bl(n)).map(n=>{let r=n.lastIndexOf(":");if(r===-1)return{path:n,matchCount:1,matches:[]};let o=n.slice(0,r),i=parseInt(n.slice(r+1),10);return{path:o,matchCount:isNaN(i)?1:i,matches:[]}})}function Bl(e){return/^\d+\s/.test(e)&&/\b(?:files|bytes|seconds|matches|searched|printed|spent)\b/.test(e)}function zl(e,t){let n=t.countLinesPerFile||t.countMatchesPerFile,r=t.filesOnly||t.filesWithoutMatch;if(n){let o=xR(e),i=o.reduce((s,a)=>s+(a.matchCount??0),0);return{files:o,stats:{matchCount:i}}}else return r?{files:wR(e),stats:{}}:Ul(e,t)}async function Yt(e,t,n,r,o){let i=e;i.sort((le,V)=>AR(le,V,t));let s=i,a=!1;t.maxFiles&&i.length>t.maxFiles&&(s=i.slice(0,t.maxFiles),a=!0);let c=s.length,l=!!(t.filesOnly||t.filesWithoutMatch),d=!!(t.countLinesPerFile||t.countMatchesPerFile),u=l||d,m=s.reduce((le,V)=>le+(V.matchCount??0),0),p=u?o?.matchCount??m:m,f=t,h=f.itemsPerPage||Me.DEFAULT_FILES_PER_PAGE,y=f.page||1,b=Math.ceil(c/h),g=(y-1)*h,C=Math.min(g+h,c),T=s.slice(g,C),P=f.maxMatchesPerFile||Me.DEFAULT_MATCHES_PER_PAGE,x=T.map(le=>{let V=le.matches?.length??0,k=Math.ceil(V/P),Y=Math.max(1,f.matchPage||1),fe=(Y-1)*P,_e=Math.min(fe+P,V),Ve=u?void 0:le.matches?.slice(fe,_e);return{path:le.path,...l?{}:{matchCount:d?le.matchCount||1:V},...Ve!==void 0&&{matches:Ve},pagination:!u&&V>P?{currentPage:Y,totalPages:k,matchesPerPage:P,totalMatches:V,hasMore:Y<k}:void 0}}),I=y<b?[`Page ${y}/${b} (${x.length} of ${c} files${l?"":`, ${p} matches`}). Next: page=${y+1}`]:b>0&&y>b?[`Page ${y} is outside range (1\u2013${b}). Use page=${b}.`]:[];a&&I.push(`Results limited to ${t.maxFiles} files (found ${i.length} matching)`);let Q=x.filter(le=>le.pagination?.hasMore);Q.length>0&&I.push(`Note: ${Q.length} file(s) have more matches \u2014 use matchPage=${(f.matchPage||1)+1} with maxMatchesPerFile to continue matches inside those files`);let E=_R(x,t,p),w=t,O=[],$=w.include;Array.isArray($)&&$.length>0&&O.push(`include: ${$.join(", ")}`);let M=w.exclude;Array.isArray(M)&&M.length>0&&O.push(`exclude: ${M.join(", ")}`);let N=w.excludeDir;Array.isArray(N)&&N.length>0&&O.push(`excludeDir: ${N.join(", ")}`);let se=w.langType;se&&O.push(`langType: ${se}`),w.caseSensitive&&O.push("case-sensitive"),w.wholeWord&&O.push("whole-word"),O.length>0&&E.unshift(`Active filters \u2014 ${O.join(" | ")}`);let ce={files:x,pagination:{currentPage:y,totalPages:b,filesPerPage:h,totalFiles:c,...l?{}:{totalMatches:p},hasMore:y<b,...a?{totalFilesFound:i.length}:{}},...r.length>0?{warnings:r}:{},hints:[...c>0&&!u?["Use localGetFileContent with the full path (prepend base to each returned path) and line numbers to read surrounding code.","Pass line numbers as lineHint to lspGetSemantics for definitions, references, or call flow."]:[],...c>0&&u?["Use localGetFileContent to read listed files, or rerun localSearchCode without filesOnly/count mode for matched snippets."]:[],...I,...E]};return Ql(ce,t,{totalMatches:p,totalFiles:c})}function Ql(e,t,n){return e}function _R(e,t,n){let r=[];if(n>100||e.length>20){let o=[];!t.langType&&!t.include&&o.push("add langType or include"),t.excludeDir?.length||o.push("add excludeDir"),(t.keywords?.length??0)<5&&o.push("lengthen pattern"),o.length>0&&r.push(`Large result set (${n} matches in ${e.length} files). Narrow: ${o.join(", ")}.`)}return r}function AR(e,t,n){let r=(t.matchCount??0)-(e.matchCount??0);return r!==0?r:e.path.localeCompare(t.path)}function xr(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};if(!e.fixedString){let o=LR(r);o&&t.push(`invalid regex: ${o}`)}return!e.fixedString&&OR(r)&&n.push(`pattern '${r}' looks literal \u2014 pass fixedString: true to skip regex parsing and avoid accidental wildcards`),!e.perlRegex&&IR(r)&&n.push("pattern uses lookaround (?= / ?! / ?<= / ?<!) which requires perlRegex: true; ripgrep will refuse it otherwise"),{isValid:t.length===0,errors:t,warnings:n}}function LR(e){try{return new RegExp(e),null}catch(t){return t instanceof Error?t.message:"unknown regex parse error"}}function OR(e){return/[\\^$|()[\]{}+*?]/.test(e)?!1:!!(e.includes(".")&&/^[\w.\-/:]+$/.test(e))}function IR(e){return/\(\?[=!<]/.test(e)}async function jl(e){let t=[],n=kR(e);if(!n.isValid)return A(new Error(`Query validation failed: ${n.errors.join("; ")}`),e,{toolName:S.LOCAL_RIPGREP,extra:{warnings:n.warnings}});t.push(...n.warnings);let r=gt.safeParse(e);if(!r.success){let y=r.error.issues.map(b=>b.message);return A(new Error(`Query validation failed: ${y.join(", ")}`),e,{toolName:S.LOCAL_RIPGREP,extra:{warnings:t}})}let o=r.data;if(!o.path)return A(new Error("Path is required for search"),o,{toolName:S.LOCAL_RIPGREP,extra:{warnings:t}});let s=Ce(o,S.LOCAL_RIPGREP);if(!s.isValid)return s.errorResult;let a={...o,path:s.sanitizedPath},c=xr({pattern:a.keywords??"",fixedString:a.fixedString,perlRegex:a.perlRegex});if(!c.isValid)return A(new Error(`Pattern validation failed: ${c.errors.join("; ")}`),o,{toolName:S.LOCAL_RIPGREP,extra:{warnings:[...t,...c.warnings]}});let l=[...c.warnings],d=new In,{command:u,args:m}=d.fromQuery(a).build(),p=await Oe(u,m);if(p.code===null){let y=Me.DEFAULT_EXEC_TIMEOUT_MS;return U({status:"error",error:`Search timed out after ${y/1e3} seconds.`,errorCode:B.COMMAND_TIMEOUT,searchEngine:"rg",hints:[`Search timed out after ${y/1e3} seconds.`,"Try a more specific path or add langType/include filters to narrow the search.","Use filesOnly=true for faster discovery.","Consider excluding large directories with excludeDir.",...l]},p.stdout.length+p.stderr.length)}if(p.code===1||p.success&&!p.stdout.trim())return U({status:"empty",searchEngine:"rg",warnings:[...t,...l],hints:oe(S.LOCAL_RIPGREP,"empty",{keywords:o.keywords,path:o.path,langType:o.langType,include:o.include,excludeDir:o.excludeDir,fixedString:o.fixedString,caseSensitive:o.caseSensitive,mode:o.mode})},p.stdout.length);if(!p.success){let b=p.code===2&&/No such file or directory/.test(p.stderr)?`Search path not found: ${o.path}. Verify it with localViewStructure or localFindFiles.`:`Ripgrep failed (exit code ${p.code}): ${p.stderr}`;return A(new Error(b),o,{toolName:S.LOCAL_RIPGREP,rawResponse:p.stdout.length+p.stderr.length})}let f=zl(p.stdout,o);!a.filesOnly&&p.stdout.length>Me.LARGE_RESULT_BYTES_HINT&&l.push(`Result payload is large (~${Math.round(p.stdout.length/1024)}KB).`);let h=await Yt(f.files,o,"rg",[...t,...l],f.stats);return U(h,p.stdout.length)}var vR="Using grep fallback because bundled ripgrep is unavailable; advanced ripgrep-only options may be ignored.";async function Wl(e,t){let n=[],r=gt.safeParse(e);if(!r.success){let h=r.error.issues.map(y=>y.message);return A(new Error(`Query validation failed: ${h.join(", ")}`),e,{toolName:S.LOCAL_RIPGREP,extra:{warnings:n}})}let o=r.data;if(!o.path)return A(new Error("Path is required for search"),o,{toolName:S.LOCAL_RIPGREP,extra:{warnings:n}});let s=Ce(o,S.LOCAL_RIPGREP);if(!s.isValid)return s.errorResult;let a={...o,path:s.sanitizedPath},c=xr({pattern:a.keywords??"",fixedString:a.fixedString,perlRegex:a.perlRegex});if(!c.isValid)return A(new Error(`Pattern validation failed: ${c.errors.join("; ")}`),o,{toolName:S.LOCAL_RIPGREP,extra:{warnings:[...n,...c.warnings]}});let l=NR(n,c.warnings,t,o),{args:d,outputMode:u}=FR(a),m=await Oe("grep",d);if(m.code===null){let h=Me.DEFAULT_EXEC_TIMEOUT_MS;return U({status:"error",error:`Search timed out after ${h/1e3} seconds.`,errorCode:B.COMMAND_TIMEOUT,searchEngine:"grep",hints:[`Search timed out after ${h/1e3} seconds.`,"Try a more specific path or add include/exclude filters to narrow the search.","Use filesOnly=true for faster discovery.",...l]},m.stdout.length+m.stderr.length)}if(m.code===1||m.success&&!m.stdout.trim())return U({status:"empty",searchEngine:"grep",warnings:l,hints:[...oe(S.LOCAL_RIPGREP,"empty",{keywords:o.keywords,path:o.path,langType:o.langType,include:o.include,excludeDir:o.excludeDir,fixedString:o.fixedString,caseSensitive:o.caseSensitive,mode:o.mode,searchEngine:"grep"}),"Try with ripgrep for better results when bundled ripgrep is repaired."]},m.stdout.length);if(!m.success)return A(new Error(`grep fallback failed (exit code ${m.code}): ${m.stderr}`),o,{toolName:S.LOCAL_RIPGREP,rawResponse:m.stdout.length+m.stderr.length});let p=HR(m.stdout,u),f=await Yt(p.files,o,"grep",l,{matchCount:p.matchCount});return U({...f,searchEngine:"grep"},m.stdout.length)}function FR(e){let t=["-R","-H"];e.fixedString?t.push("-F"):e.perlRegex&&t.push("-E"),(e.caseInsensitive||MR(e))&&t.push("-i"),e.wholeWord&&t.push("-w"),e.invertMatch&&t.push("-v"),t.push("-I");let n=e.contextLines;n!==void 0&&n>0&&t.push("-C",String(n));let r=e.filesOnly?"files":e.countLinesPerFile||e.countMatchesPerFile?"count":"matches";r==="files"?t.push("-l"):r==="count"?t.push("-c"):t.push("-n");for(let o of e.include??[])t.push(`--include=${o}`);for(let o of e.exclude??[])t.push(`--exclude=${o}`);for(let o of e.excludeDir??[])t.push(`--exclude-dir=${o}`);return e.langType&&t.push(`--include=*.${e.langType}`),t.push("--",e.keywords??"",e.path),{args:t,outputMode:r}}function MR(e){return e.caseSensitive!==!0&&e.caseInsensitive!==!0&&(e.keywords??"")===(e.keywords??"").toLowerCase()}function NR(e,t,n,r){let o=[vR];n&&o.push(`Ripgrep unavailable: ${n}`),o.push(...e,...t);let i=[];return r.filesWithoutMatch&&i.push("filesWithoutMatch"),r.countMatchesPerFile&&i.push("countMatchesPerFile uses grep -c line counts"),r.hidden&&i.push("hidden"),r.noIgnore&&i.push("noIgnore"),r.multiline&&i.push("multiline"),r.multilineDotall&&i.push("multilineDotall"),(r.sort||r.sortReverse)&&i.push("sort"),i.length>0&&o.push(`grep fallback ignored/degraded options: ${i.join(", ")}.`),o}function HR(e,t){if(t==="files"){let i=Vl(e).map(s=>({path:s,matchCount:1,matches:[]}));return{files:i,matchCount:i.length}}if(t==="count"){let i=Vl(e).map(DR).filter(a=>a!==void 0),s=i.reduce((a,c)=>a+(c.matchCount??0),0);return{files:i,matchCount:s}}let n=new Map;for(let i of e.split(`
|
|
56
|
-
`)){if(!i.trim()||i==="--")continue;let s=GR(i);if(!s)continue;let a=n.get(s.path)??{path:s.path,matchCount:0,matches:[]},c=a.matches??=[];c.push({value:s.value,line:s.line,column:0}),a.matchCount=c.length,n.set(s.path,a)}let r=[...n.values()],o=r.reduce((i,s)=>i+(s.matchCount??0),0);return{files:r,matchCount:o}}function Vl(e){return[...new Set(e.trim().split(`
|
|
57
|
-
`).
|
|
58
|
-
`,1)[0],column:g.startCol}))}))}if(m)return A(new Error(`Invalid structural ${o?"rule":"pattern"}: ${m}`),e,{toolName:S.LOCAL_RIPGREP,customHints:[o?"Check the YAML rule shape. Relational sub-rules (inside/has) need `stopBy: end` to walk all ancestors/descendants, else they silently match nothing.":"Check the pattern syntax. Use $X for a single node, $$$ARGS for a list. The pattern must be a complete code fragment for the target language."]});i?u>0&&c.push(`Pre-filter on "${i}" skipped parsing ${u} file(s); parsed ${d}.`):c.push(`No literal anchor in the ${o?"rule":"pattern"} \u2014 parsed all ${d} candidate file(s) with no text pre-filter.`);let f=await Yt(a,e,"rg",c,{matchCount:l});if(l>0){let h=Array.isArray(f.hints)?[...f.hints]:[];return h.push("Structural matches return node ranges \u2014 pass matches[].line as the lspGetSemantics lineHint to navigate semantically."),{...f,hints:h}}return f}function WR(e){let t=e.mode;if(!t)return e;let n={...e};return t==="discovery"&&n.filesOnly===void 0?n.filesOnly=!0:t==="detailed"&&n.contextLines===void 0&&(n.contextLines=3),n}async function Jl(e){let t=WR(e);if(t.mode==="structural")return await Xl(t);t.contextLines===void 0&&(t.contextLines=2);try{let n=await si("rg");return n.available?await jl(t):await Wl(t,n.error)}catch(n){let r=n instanceof Error?n.message:String(n);return r.includes("Output size limit exceeded")?{status:"error",error:r,errorCode:B.OUTPUT_TOO_LARGE,hints:["Output exceeded 10MB - your pattern matched too broadly. Think about why results exploded:","Is the pattern too generic? Make it specific to target what you actually need","Searching everything? Add langType filters or path restrictions to focus scope","For node_modules: Target specific packages rather than searching the entire directory","Need file names only? FIND_FILES searches metadata without reading content","Strategy: Start with filesOnly=true to see what matched, then narrow before reading content"]}:A(n,t,{toolName:S.LOCAL_RIPGREP})}}async function Zl(e){let{queries:t}=e;return J(t||[],async n=>Le({toolName:S.LOCAL_RIPGREP,query:n,contextMessage:"localSearchCode execution failed",execute:async()=>{let r=gt.safeParse(n);if(!r.success){let i=r.error.issues.map(s=>s.message).join("; ");return A(`Validation error: ${i}`,n)}return await Jl(r.data)}}),{toolName:S.LOCAL_RIPGREP,peerHints:!0},e)}import{ViewStructureQuerySchema as ql}from"@octocodeai/octocode-core/schemas";var eu={maxDepth:F(0,20).optional(),limit:F(1,1e4).optional(),page:q.default(1),itemsPerPage:F(1,50).optional()},KR=ae(ql,eu),_r=te(ql,eu),tu=X(KR,{maxQueries:5});var YR=new Set(["+","*","?"]),XR=1e3;function JR(e,t){let n=t+1;for(;n<e.length&&e[n]!=="]";)e[n]==="\\"&&n++,n++;return n+1}function nu(e,t){let n=e[t];return n===void 0?!1:YR.has(n)||n==="{"&&eb(e,t)}function ZR(e,t,n){let r=n.pop()??!1,o=nu(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?ru(e,t+1):t+1})}function qR(e,t,n){return n.some(r=>r)?{unsafe:!0,next:t+1}:(n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:ru(e,t)})}function ai(e){if(e.length>XR)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=JR(e,r);continue}if(o==="("){n.push(!1),r++;continue}if(o===")"){let i=ZR(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}if(nu(e,r)){let i=qR(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}r++}return{safe:!0}}function eb(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 ru(e,t){return e[t]==="{"?t=e.indexOf("}",t)+1:t++,t<e.length&&(e[t]==="?"||e[t]==="+")&&t++,t}function M0(e,t){let n=ai(e);if(!n.safe)throw new Error(n.reason);return new RegExp(e,t)}function tb(e){return e.startsWith(".")?e.slice(1):e}function ou(e,t){let n=e;if(t.pattern){let o=t.pattern;if(o.includes("*")||o.includes("?")||o.includes("[")){let s=o.replace(/[.+^${}()|[\]\\*?]/g,"\\$&");s=s.replace(/\\\*/g,".*").replace(/\\\?/g,".").replace(/\\\[!/g,"[^").replace(/\\\[/g,"[").replace(/\\\]/g,"]");try{let a=`^${s}$`;if(!ai(a).safe)return n=n.filter(d=>(d.name.includes("/")?d.name.split("/").pop():d.name).includes(o)),n;let l=new RegExp(a,"i");n=n.filter(d=>{let u=d.name.includes("/")?d.name.split("/").pop():d.name;return l.test(u)})}catch{n=n.filter(a=>(a.name.includes("/")?a.name.split("/").pop():a.name).includes(o))}}else n=n.filter(s=>(s.name.includes("/")?s.name.split("/").pop():s.name).includes(o))}let r=t.extensions&&t.extensions.length>0?t.extensions.map(tb):[];return r.length>0&&(n=n.filter(o=>o.type==="directory"||o.extension&&r.includes(o.extension))),t.directoriesOnly&&(n=n.filter(o=>o.type==="directory")),t.filesOnly&&(n=n.filter(o=>o.type==="file")),n}function D0(e,t=0){let n=" ".repeat(t),r=e.type==="directory"?"[DIR] ":e.type==="symlink"?"[LINK]":"[FILE]",o=e.type==="directory"?`${e.name}/`:e.name,i=e.modified?` ${e.modified.split("T")[0]}`:"",s=e.permissions?` ${e.permissions}`:"";if(e.type==="file"&&e.size){let a=e.extension?` .${e.extension}`:"";return`${n}${r}${s} ${o} (${e.size})${i}${a}`}else return`${n}${r}${s}${i} ${o}`}function iu(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 su(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 ci(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+Rn(i.size):o,0);return`${e.length} entries (${t} files, ${n} dirs, ${Kt(r)})`}function li(e,t){let n=e.length,r=t.itemsPerPage||Me.DEFAULT_ENTRIES_PER_PAGE,o=Math.max(1,Math.ceil(n/r)),i=Math.min(t.page||1,o),s=(i-1)*r,a=Math.min(s+r,n);return{paginatedEntries:e.slice(s,a),endIdx:a,pagination:{currentPage:i,totalPages:o,entriesPerPage:r,totalEntries:n,hasMore:i<o}}}function ui(e,t,n,r){if(!n.hasMore)return[];let o=e.slice(r,r+3).map(i=>i.name).join(", ");return[`Page ${n.currentPage}/${n.totalPages} (showing ${t} of ${n.totalEntries}). Next: page=${n.currentPage+1}${o?` (starts with: ${o}...)`:""}`]}function di(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`]}async function au(e){try{let t=Ce(e,S.LOCAL_VIEW_STRUCTURE);if(!t.isValid)return t.errorResult;let n=e.showFileLastModified??(e.sortBy==="time"||e.details===!0);return nb(e,t.sanitizedPath,n)}catch(t){let n=Fe.toolExecutionFailed("LOCAL_VIEW_STRUCTURE",t instanceof Error?t:void 0);return{status:"error",error:n.message,errorCode:n.errorCode,hints:oe(S.LOCAL_VIEW_STRUCTURE,"error")}}}function nb(e,t,n=!1){let r=!!(e.maxDepth||e.recursive),o=r?e.maxDepth||(e.recursive?5:2):1,i=ob(e),s=r&&e.limit&&!rb(e,i)?e.limit*2:1e4,a;try{a=z.queryFileSystem({path:t,recursive:r,includeRoot:!1,showHidden:e.hidden??!1,maxDepth:o,names:i,entryType:ib(e),limit:s})}catch(O){return cb(O,e,t)}let c=a.entries.map(O=>sb(O,n,e.details??!1)),l=ou(c,e),d=e.sortBy??"name";l=l.sort((O,$)=>{let M=0;switch(d){case"size":{let N=O.sizeBytes??(O.size?Rn(O.size):0),se=$.sizeBytes??($.size?Rn($.size):0);M=N-se;break}case"time":n&&O.modified&&$.modified?M=O.modified.localeCompare($.modified):M=O.name.localeCompare($.name);break;case"extension":M=(O.extension||"").localeCompare($.extension||"");break;default:M=O.name.localeCompare($.name);break}return e.reverse?-M:M}),e.limit&&(l=l.slice(0,e.limit));let u=l.length,{paginatedEntries:m,endIdx:p,pagination:f}=li(l,e),y=e.details===!0||e.showFileLastModified===!0?{path:t,entries:m.map(O=>({...su(O),path:O.path??`${t.replace(/\/$/,"")}/${O.name}`}))}:{path:t,...iu(m)},b=[...a.warnings,...di({skipped:a.skipped,permissionDenied:a.permissionDenied}),...a.wasCapped?[`Results capped at ${s} entries \u2014 add a pattern/extensions filter or reduce depth to narrow the scope.`]:[]],g=u===0,C=typeof e.pattern=="string"?e.pattern:void 0,T=(e.extensions?.length??0)>0||!!C,P=l.filter(O=>O.type==="file").length,x=T&&P===0&&!g,I={entryCount:u,path:e.path,extensions:e.extensions,pattern:C},Q=g||x?oe(S.LOCAL_VIEW_STRUCTURE,"empty",I):["Use localSearchCode to search or localGetFileContent to read discovered files."],E=ui(l,m.length,f,p),w=ci(l);return U(cu({...g?{status:"empty"}:{},...y,summary:w,...f.hasMore||f.totalPages>1?{pagination:f}:{},...b.length>0&&{warnings:b},hints:[...Q,...E]},e),a.entries.reduce((O,$)=>O+$.path.length,0))}function rb(e,t){return!!((typeof e.pattern=="string"?e.pattern:void 0)&&!t||(e.extensions?.length??0)>0)}function ob(e){let t=typeof e.pattern=="string"?e.pattern:void 0;if(t&&!t.includes("["))return t.includes("*")||t.includes("?")?[t]:[`*${t}*`]}function ib(e){if(e.filesOnly&&!e.directoriesOnly)return"f";if(e.directoriesOnly&&!e.filesOnly)return"d"}function sb(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:Kt(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=ab(e.permissions)),o}function ab(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 cb(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=Fe.pathValidationFailed(n,o?`Directory not found: ${n}`:i?`Permission denied: ${n}`:s?`Not a directory: ${n}`:`Cannot access path: ${n}`);return A(a,t,{toolName:S.LOCAL_VIEW_STRUCTURE,customHints:o?[`Path not found: ${n}`]:i?[`Permission denied: ${n}`]:[`Cannot access path: ${n}`]})}function cu(e,t){return e}async function lu(e){let{queries:t}=e;return J(t||[],async n=>Le({toolName:S.LOCAL_VIEW_STRUCTURE,query:n,contextMessage:"localViewStructure execution failed",execute:async()=>{let r=_r.safeParse(n);if(!r.success){let i=r.error.issues.map(s=>s.message).join("; ");return A(`Validation error: ${i}`,n)}return await au(r.data)}}),{toolName:S.LOCAL_VIEW_STRUCTURE,keysPriority:["path","summary","pagination","files","folders","entries"],peerHints:!0},e)}import{acquirePooledClient as yu,isLanguageServerAvailable as Ru}from"octocode-lsp/manager";import{resolveWorkspaceRootForFile as bu}from"octocode-lsp/workspaceRoot";import{safeReadFile as lb}from"octocode-lsp/validation";var uu={truncatedByDepth:!1,cycleCount:0,failedRequestCount:0};function Sn(e){return`${e.uri}:${e.range.start.line}:${e.name}`}async function du(e,t,n){if(t<=0)return e;let r=await lb(e.uri);if(!r)return e;let o=r.split(/\r?\n/),i=n?.[0]?.start.line??e.range.start.line,s=Math.max(0,i-t),a=Math.min(o.length-1,i+t),c=o.slice(s,a+1).map((l,d)=>{let u=s+d+1;return`${u===i+1?">":" "}${String(u).padStart(4," ")}| ${l}`}).join(`
|
|
59
|
-
`);return{...e,content:c,displayRange:{startLine:s+1,endLine:a+1}}}async function ub(e,t){return Promise.all(e.map(async n=>({...n,from:await du(n.from,t,n.fromRanges)})))}async function db(e,t){return Promise.all(e.map(async n=>({...n,to:await du(n.to,t)})))}async function pi(e,t,n,r,o){if(n<=0||!e)return{calls:[],...uu};try{let i=await e.getIncomingCalls(t),s=o>0?await ub(i,o):i;if(n===1)return{calls:s,truncatedByDepth:s.length>0,cycleCount:0,failedRequestCount:0};let a=await Promise.all(s.map(async c=>{let l=Sn(c.from);return r.has(l)?{calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0}:(r.add(l),pi(e,c.from,n-1,r,o))}));return{calls:[...s,...a.flatMap(c=>c.calls)],truncatedByDepth:a.some(c=>c.truncatedByDepth),cycleCount:a.reduce((c,l)=>c+l.cycleCount,0),failedRequestCount:a.reduce((c,l)=>c+l.failedRequestCount,0)}}catch{return{calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1}}}async function mi(e,t,n,r,o){if(n<=0||!e)return{calls:[],...uu};try{let i=await e.getOutgoingCalls(t),s=o>0?await db(i,o):i;if(n===1)return{calls:s,truncatedByDepth:s.length>0,cycleCount:0,failedRequestCount:0};let a=await Promise.all(s.map(async c=>{let l=Sn(c.to);return r.has(l)?{calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0}:(r.add(l),mi(e,c.to,n-1,r,o))}));return{calls:[...s,...a.flatMap(c=>c.calls)],truncatedByDepth:a.some(c=>c.truncatedByDepth),cycleCount:a.reduce((c,l)=>c+l.cycleCount,0),failedRequestCount:a.reduce((c,l)=>c+l.failedRequestCount,0)}}catch{return{calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1}}}import{readFile as pb}from"node:fs/promises";import{SymbolResolver as mb,SymbolResolutionError as fb}from"octocode-lsp/resolver";import{LSP_ERROR_CODES as pu}from"octocode-lsp/lspErrorCodes";async function fi(e,t){let n=e.uri,r=Ce({...e,path:n},t);if(!r.isValid)return{ok:!1,error:r.errorResult};let o=r.sanitizedPath;try{return{ok:!0,value:{uri:o,absolutePath:o,content:await pb(o,"utf-8")}}}catch(i){return{ok:!1,error:{status:"error",error:i instanceof Error?i.message:String(i),errorType:"file_not_found",errorCode:pu.LSP_REQUEST_FAILED,hints:[`Could not read file: ${n??"<missing>"}`]}}}}async function mu(e,t){let n=await fi(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 mb({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=Math.abs(o.foundAtLine-(e.lineHint??0)),l=a>1&&c>3?!0:void 0;return{ok:!0,value:{...n.value,resolvedSymbol:{name:e.symbolName,uri:n.value.absolutePath,range:hb(o.position),foundAtLine:o.foundAtLine,orderHint:e.orderHint,position:o.position,...l&&{isAmbiguous:l}}}}}catch(o){if(o instanceof fb)return{ok:!1,error:{status:"empty",error:o.message,errorType:"symbol_not_found",errorCode:pu.SYMBOL_NOT_FOUND,searchRadius:o.searchRadius,hints:[`Symbol "${e.symbolName}" was not found near line ${e.lineHint}.`,"Run localSearchCode with the exact symbol name to refresh lineHint, then retry."]}};throw o}}function hb(e){return{start:e,end:{line:e.line,character:e.character}}}var gb=40,Su=40,yb=10,Rb=8;async function yi(e){return J(e.queries||[],async t=>Le({toolName:Re,query:t,contextMessage:"lspGetSemantics execution failed",execute:async()=>{let n=await Ab(t);return bb(Sb(t,n))}}),{toolName:Re,peerHints:!0,minQueryTimeoutMs:3e4},e)}function bb(e){return U(e,G(e))}function Sb(e,t){return e.format!=="compact"||!Cb(t)?t:Pb(t)}function Cb(e){return Lt(e)&&typeof e.type=="string"&&typeof e.uri=="string"&&Lt(e.payload)}function Pb(e){return{...e,format:"compact",payload:Eb(e.payload)}}function Eb(e){switch(e.kind){case"definition":case"typeDefinition":case"implementation":return{kind:e.kind,locations:e.locations.map(fu)};case"references":return{kind:"references",...e.byFile?{byFile:e.byFile.map(wb)}:{locations:(e.locations??[]).map(fu)},totalReferences:e.totalReferences,totalFiles:e.totalFiles};case"callers":case"callees":case"callHierarchy":return{kind:e.kind,...e.root?{root:Cu(e.root)}:{},direction:e.direction,calls:e.calls.map(xb),...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(Tb)};case"hover":case"empty":return e}}function Tb(e){if(!Lt(e))return String(e);let t=Ie(e,"line"),n=Ie(e,"character"),r=Ie(e,"endLine"),o=it(e,"kind"),i=it(e,"name"),s=Ie(e,"childCount"),a=it(e,"containerName");return[`${t}:${n}${r!==t?`-${r}`:""}`,o,i,a?`< ${a}`:"",s>0?`children=${s}`:""].filter(Boolean).join(" ")}function fu(e){if(typeof e=="string")return e;let t=e.displayRange?`${e.displayRange.startLine}-${e.displayRange.endLine}`:"?",n=e.isDefinition?" def":"",r=e.content?` | ${Eu(e.content,180)}`:"";return`${e.uri}:${t}${n}${r}`}function wb(e){if(!Lt(e))return String(e);let t=it(e,"uri"),n=Ie(e,"firstLine"),r=Ie(e,"firstCharacter"),o=Ie(e,"count"),i=Pu(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 xb(e){if(!Lt(e))return String(e);let t=it(e,"direction"),n=Cu(e.item),r=Pu(e,"ranges").map(_b).join(","),o=Ie(e,"rangeCount"),i=Ie(e,"rangeSampleCount"),s=it(e,"contentPreview");return[t,n,r?`ranges=${r}`:"",o>i?`totalRanges=${o}`:"",s?`| ${Eu(s,180)}`:""].filter(Boolean).join(" ")}function Cu(e){if(!Lt(e))return String(e);let t=it(e,"name"),n=it(e,"kind"),r=it(e,"uri"),o=Ie(e,"line"),i=Ie(e,"endLine"),s=Ie(e,"selectionLine"),a=s>0?` sel=${s}`:"";return`${t} ${n} ${r}:${o}-${i}${a}`}function _b(e){return Lt(e)?`${Ie(e,"line")}:${Ie(e,"character")}`:String(e)}function Lt(e){return typeof e=="object"&&e!==null}function it(e,t,n=""){let r=e[t];return typeof r=="string"?r:n}function Ie(e,t,n=0){let r=e[t];return typeof r=="number"?r:n}function Pu(e,t){let n=e[t];return Array.isArray(n)?n:[]}function Eu(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}async function Ab(e){if(e.type==="documentSymbols")return Lb(e);let t=await mu(e,Re);if(t.ok===!1){let i=typeof t.error.error=="string"?t.error.error:"Symbol anchor resolution failed",s=Array.isArray(t.error.hints)?t.error.hints:void 0;return $b(e,i,s)}let n=e.workspaceRoot??await bu(t.value.uri);if(!await Ru(t.value.uri,n))return ot(e.type,t.value,"Language server unavailable");let o=await yu(n,t.value.uri);if(!o)return ot(e.type,t.value,"Language server unavailable");switch(e.type){case"definition":return o.hasCapability("definitionProvider")?hi(e,t.value,"definition","definitionProvider",await o.gotoDefinition(t.value.uri,t.value.resolvedSymbol.position,t.value.content)):ot(e.type,t.value,"definitionProvider unsupported",!0);case"typeDefinition":return o.hasCapability("typeDefinitionProvider")?hi(e,t.value,"typeDefinition","typeDefinitionProvider",await o.typeDefinition(t.value.uri,t.value.resolvedSymbol.position,t.value.content)):ot(e.type,t.value,"typeDefinitionProvider unsupported",!0);case"implementation":return o.hasCapability("implementationProvider")?hi(e,t.value,"implementation","implementationProvider",await o.implementation(t.value.uri,t.value.resolvedSymbol.position,t.value.content)):ot(e.type,t.value,"implementationProvider unsupported",!0);case"references":return o.hasCapability("referencesProvider")?Ob(e,t.value,await o.findReferences(t.value.uri,t.value.resolvedSymbol.position,e.includeDeclaration??!0,t.value.content)):ot(e.type,t.value,"referencesProvider unsupported",!0);case"hover":return o.hasCapability("hoverProvider")?Ib(e,t.value,await o.hover(t.value.uri,t.value.resolvedSymbol.position,t.value.content)):ot(e.type,t.value,"hoverProvider unsupported",!0);case"callers":case"callees":case"callHierarchy":return o.hasCapability("callHierarchyProvider")?kb(e,t.value,o):ot(e.type,t.value,"callHierarchyProvider unsupported",!0)}}async function Lb(e){let t=await fi(e,Re);if(t.ok===!1)return t.error;let n=e.workspaceRoot??await bu(t.value.uri),r=await Ru(t.value.uri,n),o=r?await yu(n,t.value.uri):null,i=o?o.hasCapability("documentSymbolProvider")?await o.documentSymbols(t.value.uri,t.value.content):[]:[],s=!!o?.hasCapability("documentSymbolProvider"),a=vb(Array.isArray(i)?i:[]),c=Nb(Array.isArray(i)?i:[]),{pageItems:l,pagination:d}=Lr(a,e.page??1,e.itemsPerPage??gb),u=Hb(a,f=>f.kind),p=s?void 0:{category:r?"unsupportedOperation":"serverUnavailable",reason:(s?void 0:r?"documentSymbolProvider unsupported":"Language server unavailable")??"document symbols unavailable"};return{type:"documentSymbols",uri:t.value.uri,lsp:{serverAvailable:r,...s?{provider:"documentSymbolProvider"}:{}},summary:{totalSymbols:a.length,returnedSymbols:l.length,topLevelSymbols:c,kinds:u},payload:{kind:"documentSymbols",symbols:l,...p?{empty:p}:{}},pagination:d,hints:[...d.hasMore?[Ar(d,"symbols")]:[],...mt("documentSymbols",s)]}}function hi(e,t,n,r,o){let i=o.length>0,s=o.map(Yr),{pageItems:a,pagination:c}=Lr(s,e.page??1,e.itemsPerPage??Su);return{type:e.type,uri:t.uri,resolvedSymbol:Mt(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}:{},hints:[...i&&c.hasMore?[Ar(c,"locations")]:[],...mt(e.type,i)]}}function Ob(e,t,n){let r=n.map(l=>{let d=l.uri===t.uri&&l.range.start.line===t.resolvedSymbol.position.line&&l.range.start.character===t.resolvedSymbol.position.character;return{...l,...d?{isDefinition:!0}:{}}}),o=e.groupByFile?Ub(r):void 0,i=o??r.map(Yr),{pageItems:s,pagination:a}=Lr(i,e.page??1,e.itemsPerPage??Su),c=r.length===0?{category:"noReferences",reason:"referencesProvider returned no references"}:void 0;return{type:"references",uri:t.uri,resolvedSymbol:Mt(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"referencesProvider"},payload:{kind:"references",...o?{byFile:s}:{locations:s},totalReferences:r.length,totalFiles:new Set(r.map(l=>l.uri)).size,...c?{empty:c}:{}},pagination:a,hints:[...a.hasMore?[Ar(a,o?"reference files":"references")]:[],...mt("references",!0)]}}async function Ib(e,t,n){let r=Bb(n),o=!!(r.markdown||r.text);return{type:"hover",uri:t.uri,resolvedSymbol:Mt(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"hoverProvider"},payload:o?{kind:"hover",...r}:{kind:"empty",category:"noHover",reason:"hoverProvider returned no hover content"},hints:mt(e.type,o)}}async function kb(e,t,n){let o=(await n.prepareCallHierarchy(t.uri,t.resolvedSymbol.position,t.content))[0];if(!o)return ot(e.type,t,"No callable symbol found",!0);let i=e.depth??1,s={calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},a=e.type==="callers"||e.type==="callHierarchy"?await pi(n,o,i,new Set([Sn(o)]),e.contextLines??0):s,c=e.type==="callees"||e.type==="callHierarchy"?await mi(n,o,i,new Set([Sn(o)]),e.contextLines??0):s,l=g=>/node_modules\/typescript\/lib\/lib\.[^/]*\.d\.ts$/.test(g.to.uri),d=c.calls.filter(l).length,u=c.calls.filter(g=>!l(g)),m=[...a.calls.map(g=>({direction:"incoming",...g})),...u.map(g=>({direction:"outgoing",...g}))],p=m.map(g=>g.direction==="incoming"?Db(g,e.contextLines??0):Gb(g,e.contextLines??0)),{pageItems:f,pagination:h}=Lr(p,e.page??1,e.itemsPerPage??yb),y=e.type==="callers"?"incoming":e.type==="callees"?"outgoing":"both",b=!a.truncatedByDepth&&!c.truncatedByDepth&&a.failedRequestCount+c.failedRequestCount===0;return{type:e.type,uri:t.uri,resolvedSymbol:Mt(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"callHierarchyProvider"},payload:{kind:e.type,root:Ri(o),direction:y,calls:f,incomingCalls:a.calls.length,outgoingCalls:u.length,completeness:{complete:b,truncatedByDepth:a.truncatedByDepth||c.truncatedByDepth,cycleCount:a.cycleCount+c.cycleCount,failedRequestCount:a.failedRequestCount+c.failedRequestCount,dynamicCallsExcluded:!0,...d>0&&{stdlibCallsExcluded:d}},...m.length===0?{empty:{category:"noCalls",reason:"callHierarchyProvider returned no calls"}}:{}},pagination:h,hints:[...h.hasMore?[Ar(h,"calls")]:[],...mt(e.type,!0),...a.truncatedByDepth||c.truncatedByDepth?["Calls exist beyond the traversal depth \u2014 increase depth to follow the chain further."]:[]]}}function Ar(e,t){let n=Math.min(e.currentPage*e.itemsPerPage,e.totalResults)-(e.currentPage-1)*e.itemsPerPage,r=e.nextPage??e.currentPage+1;return`Page ${e.currentPage}/${e.totalPages} (${n} of ${e.totalResults} ${t}). Next: page=${r}`}function Lr(e,t,n){let r=Math.max(1,n),o=Math.max(1,Math.ceil(e.length/r)),i=Math.min(Math.max(1,t),o),s=(i-1)*r,a=e.slice(s,s+r),c=i<o;return{pageItems:a,pagination:{currentPage:i,totalPages:o,totalResults:e.length,hasMore:c,itemsPerPage:r,...c?{nextPage:i+1}:{}}}}function vb(e){let t=[];for(let n of e)Tu(n,t);return t.sort((n,r)=>n.line-r.line||n.character-r.character)}function Tu(e,t,n){if(!e||typeof e!="object")return;let r=e,o=Mb(r);if(typeof r.name=="string"&&o&&t.push({name:r.name,kind:gi(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)&&Fb.has(gi(r.kind))){let i=typeof r.name=="string"?r.name:n;for(let s of r.children)Tu(s,t,i)}}var Fb=new Set(["file","module","namespace","package","class","enum","interface","struct"]);function Mb(e){if(hu(e.range))return e.range;let t=e.location;return t&&hu(t.range)?t.range:void 0}function hu(e){if(!e||typeof e!="object")return!1;let t=e;return gu(t.start)&&gu(t.end)}function gu(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.line=="number"&&typeof t.character=="number"}function Nb(e){return e.filter(t=>t&&typeof t=="object"&&"name"in t).length}function Hb(e,t){let n={};for(let r of e){let o=t(r);n[o]=(n[o]??0)+1}return n}function Db(e,t){let n=wu(e.fromRanges);return{direction:"incoming",item:Ri(e.from),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...xu(e.from,t)}}function Gb(e,t){let n=wu(e.fromRanges);return{direction:"outgoing",item:Ri(e.to),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...xu(e.to,t)}}function Ri(e){return{name:e.name,kind:gi(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 wu(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>=Rb))break}return n}function xu(e,t){return t<=0||!e.content?{}:{contentPreview:e.content}}function gi(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"}}function _u(e,t){return/unavailable/i.test(t)?"serverUnavailable":/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 $b(e,t,n){let r=e.uri??"";return{type:e.type,uri:r,lsp:{},payload:{kind:"empty",category:_u(e.type,t),reason:t},hints:n?.length?n:mt(e.type,!1)}}function ot(e,t,n,r=!1){return{type:e,uri:t.uri,resolvedSymbol:Mt(t.resolvedSymbol),lsp:{serverAvailable:r},payload:{kind:"empty",category:_u(e,n),reason:n},hints:mt(e,!1)}}function Ub(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 Bb(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=>zb(r)).join(`
|
|
60
|
-
`).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 zb(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{z as R}from"zod";import{LspGetSemanticsQuerySchema as Ou}from"@octocodeai/octocode-core/schemas";import{ErrorDataSchema as Qb}from"@octocodeai/octocode-core/schemas/outputs";var jb=F(1,1e9),Vb=F(0,1e5).optional(),Wb=["structured","compact"],Iu={type:R.enum(is).default("definition"),symbolName:R.string().min(1).optional(),lineHint:jb.optional(),orderHint:Vb,depth:F(0,20).optional(),includeDeclaration:R.boolean().optional().default(!0),page:q,itemsPerPage:F(1,100).optional(),contextLines:F(0,100).optional(),format:R.enum(Wb).optional().default("structured")},Kb=ae(Ou,Iu),Si=te(Ou,Iu),Yb=Si,Ci=X(Kb,{maxQueries:5}),Au=R.object({line:R.number(),character:R.number()}),Xb=R.object({start:Au,end:Au}),Jb=R.object({startLine:R.number(),endLine:R.number()}),Or=R.object({uri:R.string(),content:R.string().optional(),displayRange:Jb.optional(),isDefinition:R.boolean().optional()}),Ir=R.string(),Zb=R.object({name:R.string(),uri:R.string(),foundAtLine:R.number(),orderHint:R.number().optional()}),qb=R.object({serverAvailable:R.boolean().optional(),provider:R.string().optional(),source:R.string().optional()}),ku=R.enum(["serverUnavailable","unsupportedOperation","symbolNotFound","anchorFailed","noLocations","noReferences","noHover","noCalls"]),bi=R.object({category:ku,reason:R.string()}),eS=R.object({currentPage:R.number(),totalPages:R.number(),totalResults:R.number(),hasMore:R.boolean(),itemsPerPage:R.number(),nextPage:R.number().optional()}),tS=R.object({name:R.string(),kind:R.string(),line:R.number(),character:R.number(),endLine:R.number(),childCount:R.number(),containerName:R.string().optional()}),nS=R.string(),vu=R.object({name:R.string(),kind:R.string(),uri:R.string(),line:R.number(),endLine:R.number(),selectionLine:R.number().optional()}),rS=R.string(),oS=R.object({direction:R.enum(["incoming","outgoing"]),item:vu,ranges:R.array(R.object({line:R.number(),character:R.number()})),rangeCount:R.number(),rangeSampleCount:R.number(),contentPreview:R.string().optional()}),iS=R.string(),sS=R.object({complete:R.boolean(),truncatedByDepth:R.boolean(),cycleCount:R.number(),failedRequestCount:R.number(),dynamicCallsExcluded:R.literal(!0),stdlibCallsExcluded:R.number().optional()}),aS=R.object({uri:R.string(),count:R.number(),firstLine:R.number(),firstCharacter:R.number(),lines:R.array(R.number()),hasDefinition:R.boolean().optional()}),cS=R.string(),lS=R.discriminatedUnion("kind",[R.object({kind:R.literal("definition"),locations:R.array(R.union([Or,Ir]))}),R.object({kind:R.literal("typeDefinition"),locations:R.array(R.union([Or,Ir]))}),R.object({kind:R.literal("implementation"),locations:R.array(R.union([Or,Ir]))}),R.object({kind:R.literal("references"),locations:R.array(R.union([Or,Ir])).optional(),byFile:R.array(R.union([aS,cS])).optional(),totalReferences:R.number(),totalFiles:R.number(),empty:bi.optional()}),...["callers","callees","callHierarchy"].map(e=>R.object({kind:R.literal(e),root:R.union([vu,rS]).optional(),direction:R.enum(["incoming","outgoing","both"]),calls:R.array(R.union([oS,iS])),incomingCalls:R.number(),outgoingCalls:R.number(),completeness:sS,empty:bi.optional()})),R.object({kind:R.literal("hover"),markdown:R.string().optional(),text:R.string().optional(),range:Xb.optional()}),R.object({kind:R.literal("documentSymbols"),symbols:R.array(R.union([tS,nS])),totalSymbols:R.number().optional(),topLevelSymbols:R.number().optional(),empty:bi.optional()}),R.object({kind:R.literal("empty"),category:ku,reason:R.string()})]),Lu=R.object({type:R.string(),uri:R.string(),format:R.enum(["structured","compact"]).optional(),resolvedSymbol:Zb.optional(),lsp:qb,payload:lS,pagination:eS.optional(),summary:R.record(R.string(),R.unknown()).optional(),warnings:R.array(R.string()).optional(),hints:R.array(R.string()).optional()}),uS=R.object({base:R.string().optional(),shared:R.record(R.string(),R.union([R.string(),R.number(),R.boolean()])).optional(),hints:R.array(R.string()).optional(),results:R.array(R.union([R.object({id:R.string().min(1),status:R.literal("empty"),data:Lu}),R.object({id:R.string().min(1),status:R.literal("error"),data:Qb}),R.object({id:R.string().min(1),data:Lu})]))});import{existsSync as Fu}from"fs";import{delimiter as dS,dirname as pS,join as Mu}from"path";function Nu(){return process.platform==="win32"?"npm.cmd":"npm"}function mS(){let e=pS(process.execPath);return Mu(e,Nu())}function fS(){return process.platform==="win32"?[]:["/opt/homebrew/bin","/usr/local/bin","/usr/bin"]}function hS(){let e=(process.env.PATH??"").split(dS).map(t=>t.trim()).filter(Boolean);return[...new Set([...e,...fS()])]}function Hu(){let e=mS();if(Fu(e))return{command:process.execPath,argsPrefix:[e]};let t=Nu();for(let n of hS()){let r=Mu(n,t);if(Fu(r))return{command:r,argsPrefix:[]}}return{command:t,argsPrefix:[]}}var gS=["view","search","ping","config","whoami"],yS=[...yn,...Ba];async function Dv(e=1e4){let t=Hu();return dr(t.command,[...t.argsPrefix,"--version"],e)}async function Cn(e,t,n={}){if(!gS.includes(e))return{stdout:"",stderr:"",error:new Error(`Command '${e}' is not allowed`)};let r=pr(t);if(!r.valid)return{stdout:"",stderr:"",error:new Error(`Invalid arguments: ${r.error}`)};let{timeout:o=3e4,cwd:i,env:s}=n,a=Hu(),c=await wt(a.command,[...a.argsPrefix,e,...t],{timeout:o,cwd:i,env:s,allowEnvVars:yS});return{stdout:c.stdout,stderr:c.stderr,exitCode:c.exitCode??void 0,error:c.error}}var $v=5;var Xt=new Map,Ei=5,Pn=3e4;function En(e){try{return new URL(e).host||e}catch{return e}}var Pi=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 Du(e,t=Date.now()){let n=Xt.get(En(e));if(!(!n||n.state==="closed")&&n.state==="open"){let r=t-n.openedAt;if(r<Pn)throw new Pi(En(e),Pn-r);n.state="half-open"}}function Ti(e){let t=Xt.get(En(e));t&&(t.failures=0,t.state="closed")}function Gu(e,t=Date.now()){let n=En(e),r=Xt.get(n)??{failures:0,state:"closed",openedAt:0};r.state==="half-open"?(r.state="open",r.openedAt=t):(r.failures+=1,r.failures>=Ei&&(r.state="open",r.openedAt=t)),Xt.set(n,r)}function Uv(){Xt.clear(),Ei=5,Pn=3e4}function Bv(e){typeof e.failureThreshold=="number"&&(Ei=e.failureThreshold),typeof e.cooldownMs=="number"&&(Pn=e.cooldownMs)}function $u(e,t=Date.now()){let n=Xt.get(En(e));return!n||n.state==="closed"?!1:n.state==="open"?t-n.openedAt<Pn:!1}var RS=6e4;function Uu(e){let t=e.get("Retry-After");if(!t)return;let n=parseInt(t,10);return isNaN(n)?void 0:n}function bS(e,t,n,r){e&&ut({limit_type:"primary",retry_after_seconds:Uu(r),api_method:t,api_url:n,provider:e}).catch(je("fetch rate-limit session logging"))}function SS(e,t,n,r,o){e.body?.cancel?.().catch(je("response body cancellation")),D("fetchWithRetries",ct.FETCH_HTTP_ERROR.code).catch(je("fetch retry session logging"));let i=new Error(ct.FETCH_HTTP_ERROR.message(e.status,e.statusText));return i.status=e.status,i.headers=e.headers,r&&e.status!==404&&as(r),e.status===429&&bS(o,t,n,e.headers),i.retryable=e.status===429||e.status===408||e.status>=500&&e.status<600,i}function CS(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=Uu(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=RS,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(qe)}`}let m={"User-Agent":`Octocode-MCP/${qe}`,...i},p=globalThis.fetch;if(!p)throw D("fetchWithRetries",ct.FETCH_NOT_AVAILABLE.code).catch(je("fetch retry session logging")),new Error(ct.FETCH_NOT_AVAILABLE.message);Du(u);let f,h=n+1;for(let y=1;y<=h;y++){if(c?.aborted)throw new Error("Request aborted");try{let b=await p(u,{method:s,headers:m,signal:c});if(!b.ok)throw SS(b,s,u,d,l);if(b.status===204)return Ti(u),null;let g=await b.json();return Ti(u),g}catch(b){let g=b;if(c?.aborted||b instanceof Error&&b.name==="AbortError")throw new Error("Request aborted");if(g&&g.retryable===!1)throw b;if(f=b instanceof Error?b:new Error(String(b)),y===h)break;let C=CS(y,r,o,g);await new Promise(T=>setTimeout(T,C))}}throw Gu(u),await D("fetchWithRetries",ct.FETCH_FAILED_AFTER_RETRIES.code),new Error(ct.FETCH_FAILED_AFTER_RETRIES.message(h,f?.message||""))}import{z as _}from"zod";var kr=_.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()}),PS=_.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()}),Bu=_.looseObject({objects:_.array(PS),total:_.union([_.number(),_.string()]).optional()}),zu=_.union([_.string(),_.boolean(),_.number(),_.null(),_.record(_.string(),_.unknown())]);var vr="https://registry.npmjs.org",ES=3e3,Tn=null;async function wi(){if(Tn)return Tn;try{let e=await Cn("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 Tn=t,t}}catch{}return Tn=vr,vr}function oF(){Tn=null}async function iF(){try{let e=await wi(),t=globalThis.fetch;return t?(await t(e,{method:"HEAD",signal:AbortSignal.timeout(5e3)})).ok:!1}catch{return!1}}function Ot(e){return e.replace(/^git\+/,"").replace(/\.git$/,"")}var TS="https://api.npmjs.org/downloads/point/last-week";function Ne(e){return e===void 0?0:G(e)}async function Yu(e){try{let t=`${TS}/${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:Ne(n)}}catch{return{rawResponseChars:0}}}function Fr(e){return e.startsWith("@")&&e.includes("/")?!0:e.includes(" ")?!1:/^[a-z0-9][a-z0-9._-]*$/i.test(e)}function Xu(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")}function wS(e){return e.replace(/^@/,"").replace(/[/_-]/g," ").replace(/\s+/g," ").trim()}function xS(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}function Qu(e){if(typeof e=="string")return[e];if(!e||typeof e!="object")return;let n=Object.entries(e).flatMap(([r,o])=>typeof o=="string"?[`${r}:${o}`]:o&&typeof o=="object"?Object.entries(o).filter(([,i])=>typeof i=="string").map(([i,s])=>`${r}:${i}:${s}`):[]).slice(0,12);return n.length>0?n:void 0}function ju(e,t){if(typeof e=="string"){let n=t?.replace(/^@[^/]+\//,"")??"";return[n?`${n} \u2192 ${e}`:e]}if(e&&typeof e=="object"){let n=Object.entries(e).filter(([,r])=>typeof r=="string").map(([r,o])=>`${r} \u2192 ${o}`).slice(0,8);return n.length>0?n:void 0}}function _S(e){return e.type==="module"||e.module?"module":e.main?"commonjs":e.types||e.typings?"types-only":"unknown"}function xi(e,t=!1,n="cli"){let r=null,o;e.repository&&(typeof e.repository=="string"?r=Ot(e.repository):(e.repository.url&&(r=Ot(e.repository.url)),e.repository.directory&&(o=e.repository.directory.replace(/^\.\//,""))));let i;if(e.time){let c=(e.version?e.time[e.version]:void 0)||e.time.modified;c&&(i=c)}let s={name:e.name,npmUrl:`https://www.npmjs.com/package/${encodeURIComponent(e.name)}`,repoUrl:r,version:e.version||"latest",mainEntry:e.main||null,moduleEntry:e.module||null,typeDefinitions:e.types||e.typings||null,packageType:_S(e),...o?{repositoryDirectory:o}:{},...Qu(e.exports)?{exports:Qu(e.exports)}:{},...ju(e.bin,e.name)?{bin:ju(e.bin,e.name)}:{},lastPublished:i,source:n};return e.description&&(s.description=e.description),e.license&&(s.license=typeof e.license=="string"?e.license:e.license.type),t&&(e.author&&(typeof e.author=="string"?s.author=e.author:e.author.name&&(s.author=e.author.name)),e.keywords&&e.keywords.length>0&&(s.keywords=e.keywords),e.homepage&&(s.homepage=e.homepage),e.engines&&Object.keys(e.engines).length>0&&(s.engines=e.engines),e.dependencies&&Object.keys(e.dependencies).length>0&&(s.dependencies=e.dependencies),e.peerDependencies&&Object.keys(e.peerDependencies).length>0&&(s.peerDependencies=e.peerDependencies)),s}function AS(e){return typeof e.links?.repository=="string"?Ot(e.links.repository):typeof e.repository=="string"?Ot(e.repository):typeof e.repository?.url=="string"?Ot(e.repository.url):null}function LS(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:AS(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 Ju(e){return e.startsWith("@")?"@"+e.slice(1).replace("/","%2F"):e}async function Zu(e){try{let t=await wi(),n=Ju(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=Ne(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:Ne(i)}}catch{return{rawResponseChars:0}}}async function _i(e,t,n){let[r,o]=await Promise.all([Yu(e),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):Zu(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 Mr(e){let t=e.toLowerCase();return t.includes("404")||t.includes("not found")||t.includes("e404")}async function OS(e,t){try{let n=await Cn("view",[e,"--json"],{timeout:ES});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,...Mr(c)?{}:{errorDetail:c},rawResponseChars:Ne(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=Ne(o),s=kr.safeParse(o);return s.success?{pkg:xi(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,...Mr(r)?{}:{errorDetail:r},rawResponseChars:0}}}async function IS(e,t){try{let n=await wi(),r=Ju(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 d=l instanceof Error?l.message:String(l);return d.includes("404")||d.toLowerCase().includes("not found")?{pkg:null,rawResponseChars:0}:{pkg:null,errorDetail:d,rawResponseChars:0}}let s=Ne(i);if(!i||typeof i!="object")return{pkg:null,rawResponseChars:s};let a=kr.safeParse(i);return a.success?{pkg:xi(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,...Mr(r)?{}:{errorDetail:r},rawResponseChars:0}}}function kS(e){return[`https://cdn.jsdelivr.net/npm/${e}/package.json`,`https://unpkg.com/${e}/package.json`]}async function qu(e,t){let n=0,r;for(let o of kS(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);Mr(l)||(r=l);continue}if(n+=Ne(i),!i||typeof i!="object")continue;let s=kr.safeParse(i);if(!s.success){r="Invalid npm CDN package.json response format";continue}return{pkg:xi(s.data,t,"cdn"),rawResponseChars:n}}return{pkg:null,...r?{errorDetail:r}:{},rawResponseChars:n}}async function Ai(e,t=!1){let[n,r]=await Promise.allSettled([OS(e,t),IS(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?_i(e,s.pkg,s.rawResponseChars):{pkg:null,errorDetail:o.errorDetail||i.errorDetail,rawResponseChars:o.rawResponseChars+i.rawResponseChars}}async function vS(e,t,n=!1){let{pkg:r,errorDetail:o,rawResponseChars:i}=await Ai(e,t);if(!r){if(o){let s=Xu(o);if(s&&n){let a=await qu(e,t);if(a.pkg){let c=await _i(e,a.pkg,a.rawResponseChars);return{packages:c.pkg?[c.pkg]:[],totalFound:c.pkg?1:0,rawResponseChars:i+c.rawResponseChars}}}return{error:`NPM view failed for '${e}': ${o}`,rawResponseChars:i,hints:s?["npm registry is unreachable.","Use `ghSearchRepos` to find the source repo directly by package name or domain terms."]:["Ensure npm is installed and available in PATH","Check package name for typos",`Try: npm view ${e} --json`]}}return{packages:[],totalFound:0,rawResponseChars:i}}return{packages:[r],totalFound:1,rawResponseChars:i}}async function FS(e,t,n,r=0){let o=Math.max(t+r,t),i=await Cn("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:Ne(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=Ne(a);if(!Array.isArray(a))return{error:"Invalid npm search response format",rawResponseChars:c};let d=[...a].sort((f,h)=>{let y=f?.score?.final??0;return(h?.score?.final??0)-y}).slice(r,r+t),u=await Promise.all(d.map(async f=>{if(!f||typeof f!="object")return null;let h=f;if(!h.name)return null;if(n){let y=await Ai(h.name,!0);if(y.pkg)return y}return{pkg:LS(h),rawResponseChars:0}})),m=u.map(f=>f?.pkg).filter(f=>!!f),p=u.reduce((f,h)=>f+(h?.rawResponseChars??0),0);return{packages:m,totalFound:a.length,rawResponseChars:c+p}}async function MS(e,t,n,r=0){try{let o=r>0?`&from=${r}`:"",i=`${vr}/-/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:`NPM registry search failed: ${f instanceof Error?f.message:String(f)}`,hints:["Check package name for typos","Try searching with a simpler term"]}}let a=Ne(s);if(!s||typeof s!="object")return{packages:[],totalFound:0,rawResponseChars:a};let c=Bu.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 d=[...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),u=await Promise.all(d.map(async f=>{if(n){let h=await Ai(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"?Ot(f.links.repository):null,version:f.version??"unknown",source:"registry",...f.description?{description:f.description}:{},...f.links?.homepage?{homepage:f.links.homepage}:{}},rawResponseChars:0}})),m=u.map(f=>f.pkg).filter(f=>!!f),p=u.reduce((f,h)=>f+h.rawResponseChars,0);return{packages:m,totalFound:xS(c.data.total,m.length),rawResponseChars:a+p}}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 Vu(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:Ne(i)};let s=i;if(!Array.isArray(s.results))return{packages:[],totalFound:0,rawResponseChars:Ne(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"?Ot(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:Ne(i)}}catch(o){return{error:`Web search failed: ${o instanceof Error?o.message:String(o)}`}}}async function Wu(e,t,n,r=0){try{let o=await FS(e,t,n,r);if(!("error"in o))return o}catch{}return MS(e,t,n,r)}async function Ku(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}):Yu(t.name),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):Zu(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)]}}async function ed(e,t,n,r=0){let o=Ee("npm-search",{name:e,limit:t,metadata:n,from:r});return Te(o,async()=>{if($u(vr)){if(r===0&&t===1&&Fr(e)){let d=await qu(e,n);if(d.pkg){let u=await _i(e,d.pkg,d.rawResponseChars);return{packages:u.pkg?[u.pkg]:[],totalFound:u.pkg?1:0,rawResponseChars:u.rawResponseChars}}}let l=await Vu(e,t);return!("error"in l)&&l.packages.length>0?l:{error:"npm registry circuit open and web search returned no results.",hints:["Use `ghSearchRepos` to find the source repo directly."]}}if(r===0&&Fr(e)){let l=await vS(e,n,t===1);if("error"in l){if(!Xu(l.error))return l}else if(l.packages.length>0||t===1)return l}let s=await Wu(e,t,n,r);if(!("error"in s)&&s.packages.length>0)return Ku(s);let a=wS(e);if(a!==e){let l=await Wu(a,t,n,r);if(!("error"in l)&&l.packages.length>0)return Ku(l)}let c=await Vu(e,t);return!("error"in c)&&c.packages.length>0?c:"error"in s?{...s,hints:["npm registry and web search (npms.io) are both unreachable.","Use `ghSearchRepos` to find the source repo directly by package name or domain terms."]}:s},{shouldCache:i=>!("error"in i||"totalFound"in i&&i.totalFound===0)})}async function Li(e){try{let t=await Cn("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=zu.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 td(e){let t=Fr(e.name),n=e.itemsPerPage??(t?1:10),r=Math.max(0,((e.page??1)-1)*n);return ed(e.name,n,!0,r)}function NS(e){return"error"in e}function Jt(e){return"npmUrl"in e}function Oi(e){return Jt(e)&&e.path?e.path:e.name}function nd(e){return Jt(e)?e.repoUrl:e.repository}function HS(e){if(!e)return;let t=e.replace(/^\.\//,"").replace(/^\//,"");return t.length>0?t:void 0}function DS(e){if(!e)return{};let t=e.match(/github\.com\/([^/]+)\/([^/]+)/);return t?.[1]&&t[2]?{owner:t[1],repo:t[2].replace(/\.git$/,"").replace(/\/$/,"")}:{}}function GS(e){let t=Oi(e),n=nd(e),r={name:t};Jt(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.weeklyDownloads=e.weeklyDownloads)),n&&(r.repository=n);let o=HS(Jt(e)?e.repositoryDirectory:void 0);return o&&(r.repositoryDirectory=o),r}function $S(e,t){let n=[],r=Oi(e);t?.deprecated&&n.push(`DEPRECATED: ${r} \u2014 ${t.message??"use an alternative"}`);let o=Jt(e)?e.source:void 0;o==="cdn"?n.push("Metadata from npm CDN cache \u2014 verify version when registry access is restored."):o==="web"&&n.push("Metadata from npms.io fallback \u2014 verify version when registry access is restored."),n.push(`Install: npm install ${r}`);let i=nd(e),{owner:s,repo:a}=DS(i);return s&&a?n.push(`Browse source: use ghViewRepoStructure owner=${s} repo=${a}`):i?n.push(`Repository: ${i} \u2014 use ghSearchRepos to find on GitHub.`):n.push(`No repository URL for "${r}" \u2014 use ghSearchRepos to find the source repo.`),n}function US(e,t,n,r){let o=Math.max(1,e.page??1),i=r?10:1,s=Math.max(1,Math.ceil(t/i));return{currentPage:o,totalPages:s,perPage:i,totalFound:t,returned:n,hasMore:o<s}}function BS(e){if(e.totalFound===0||e.totalPages<=1)return[];if(e.currentPage>e.totalPages)return[`Requested page ${e.currentPage}/${e.totalPages} is past the end. Retry page=${e.totalPages}.`];let t=(e.currentPage-1)*e.perPage+1,n=Math.min(t+e.returned-1,e.totalFound);return e.hasMore?[`Page ${e.currentPage}/${e.totalPages} (showing ${t}-${n} of ${e.totalFound} packages). Next: page=${e.currentPage+1}`]:[]}function zS(e,t){return[`Found ${e}${t>e?` of ${t}`:""} packages. Re-run with an exact name for source details, install command, and repo navigation.`]}async function rd(e){return J(e.queries,async t=>{try{if(!t.packageName)return A("Package name is required for package search",t);let n=await td({name:t.packageName,page:t.page,itemsPerPage:t.itemsPerPage,mainResearchGoal:t.mainResearchGoal,researchGoal:t.researchGoal,reasoning:t.reasoning});if(NS(n))return A(n.error,t,{rawResponse:n,customHints:[...n.hints??[],...oe(S.PACKAGE_SEARCH,"error",{originalError:n.error})]});let r=n.packages,o=r.map(GS),i=o.length>0,s=r.length>1||n.totalFound>1,a=US(t,n.totalFound,o.length,s),c=null;if(!s&&i&&r[0]){let u=Jt(r[0])?r[0].source:void 0;u!=="cdn"&&u!=="web"&&(c=await Li(Oi(r[0])))}let l=[...BS(a),...i?s?zS(o.length,n.totalFound):$S(r[0],c):oe(S.PACKAGE_SEARCH,"empty",{name:t.packageName})];return Se(t,{packages:o,pagination:a},i,S.PACKAGE_SEARCH,{extraHints:l,rawResponse:n.rawResponseChars??n})}catch(n){return A(n,t,{customHints:oe(S.PACKAGE_SEARCH,"error",{originalError:n instanceof Error?n.message:String(n)})})}},{toolName:S.PACKAGE_SEARCH,keysPriority:["packages","pagination","error"],peerHints:!0},e)}import{z as ie}from"zod";import{NpmPackageQuerySchema as od}from"@octocodeai/octocode-core/schemas";var id={page:q,mode:ie.enum(["lean","full"]).optional()},sd=te(od,id),ad=X(ae(od,id,{strict:!0}),{maxQueries:5}),SF=ie.object({results:ie.array(ie.looseObject({id:ie.string(),data:ie.looseObject({packages:ie.array(ie.object({name:ie.string(),version:ie.string().optional(),description:ie.string().optional(),license:ie.string().optional(),weeklyDownloads:ie.number().optional(),repository:ie.string().optional(),repositoryDirectory:ie.string().optional()}).passthrough()).optional(),pagination:ie.object({currentPage:ie.number(),totalPages:ie.number(),perPage:ie.number(),totalFound:ie.number(),returned:ie.number(),hasMore:ie.boolean()}).optional()}).optional(),status:ie.string().optional()})).optional()}).extend(xe);var Ii={hasTool(e){return uo(e)},getDescription(e){return lo[e]??""},getToolName(e){return S[e]??String(e)}};var cd=(e,t=Ii)=>t.getDescription(e);function QS(e,t){return t.getToolName(e)}function ze(e,t,n){let r=QS(t,e);return{...n,name:r,description:cd(r,e)}}function jS(e=Ii){let t=ze(e,"GITHUB_SEARCH_CODE",{isDefault:!0,isLocal:!1,type:"search",direct:{schema:vc,inputSchema:Fc,executionFn:Oc,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),n=ze(e,"GITHUB_FETCH_CONTENT",{isDefault:!0,isLocal:!1,type:"content",direct:{schema:hr,inputSchema:pc,executionFn:Ac,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),r=ze(e,"GITHUB_VIEW_REPO_STRUCTURE",{isDefault:!0,isLocal:!1,type:"content",direct:{schema:ol,inputSchema:il,executionFn:tl,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),o=ze(e,"GITHUB_SEARCH_REPOSITORIES",{isDefault:!0,isLocal:!1,type:"search",direct:{schema:qc,inputSchema:el,executionFn:Xc,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),i=ze(e,"GITHUB_SEARCH_PULL_REQUESTS",{isDefault:!0,isLocal:!1,type:"history",direct:{schema:Pr,inputSchema:Qc,executionFn:jc,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),s=ze(e,"PACKAGE_SEARCH",{isDefault:!0,isLocal:!1,type:"search",direct:{schema:sd,inputSchema:ad,executionFn:rd,security:"remote",requiresServerRuntime:!0}}),a=ze(e,"GITHUB_CLONE_REPO",{isDefault:!0,isLocal:!0,isClone:!0,type:"content",skipMetadataCheck:!0,direct:{schema:Xo,inputSchema:lc,executionFn:ac,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),c=ze(e,"LOCAL_RIPGREP",{isDefault:!0,isLocal:!0,type:"search",direct:{schema:gt,inputSchema:Gl,executionFn:Zl,security:"basic"}}),l=ze(e,"LOCAL_VIEW_STRUCTURE",{isDefault:!0,isLocal:!0,type:"content",direct:{schema:_r,inputSchema:tu,executionFn:lu,security:"basic"}}),d=ze(e,"LOCAL_FIND_FILES",{isDefault:!0,isLocal:!0,type:"search",direct:{schema:wr,inputSchema:kl,executionFn:Nl,security:"basic"}}),u=ze(e,"LOCAL_FETCH_CONTENT",{isDefault:!0,isLocal:!0,type:"content",direct:{schema:Tr,inputSchema:Al,executionFn:Ll,security:"basic"}}),m={name:Re,description:cd(Re,e),isDefault:!0,isLocal:!0,skipMetadataCheck:!0,type:"content",direct:{schema:Si,inputSchema:Ci,executionFn:yi,security:"basic",requiresServerRuntime:!0}},p=ze(e,"LOCAL_BINARY_INSPECT",{isDefault:!1,isLocal:!0,isBinary:!0,type:"content",direct:{schema:Er,inputSchema:al,executionFn:Pl,security:"basic"}});return{GITHUB_SEARCH_CODE:t,GITHUB_FETCH_CONTENT:n,GITHUB_VIEW_REPO_STRUCTURE:r,GITHUB_SEARCH_REPOSITORIES:o,GITHUB_SEARCH_PULL_REQUESTS:i,PACKAGE_SEARCH:s,GITHUB_CLONE_REPO:a,LOCAL_RIPGREP:c,LOCAL_VIEW_STRUCTURE:l,LOCAL_FIND_FILES:d,LOCAL_FETCH_CONTENT:u,LSP_GET_SEMANTIC_CONTENT:m,LOCAL_BINARY_INSPECT:p,ALL_TOOLS:[t,n,r,o,i,s,a,c,l,d,u,m,p]}}var ke=jS(),ZF=ke.GITHUB_SEARCH_CODE,qF=ke.GITHUB_FETCH_CONTENT,eM=ke.GITHUB_VIEW_REPO_STRUCTURE,tM=ke.GITHUB_SEARCH_REPOSITORIES,nM=ke.GITHUB_SEARCH_PULL_REQUESTS,rM=ke.PACKAGE_SEARCH,oM=ke.GITHUB_CLONE_REPO,iM=ke.LOCAL_RIPGREP,sM=ke.LOCAL_VIEW_STRUCTURE,aM=ke.LOCAL_FIND_FILES,cM=ke.LOCAL_FETCH_CONTENT,lM=ke.LSP_GET_SEMANTIC_CONTENT,uM=ke.LOCAL_BINARY_INSPECT,ld=ke.ALL_TOOLS;import{completeMetadata as VS}from"@octocodeai/octocode-core";var wn=null;function ud(){return wn||(wn=VS),wn}async function mM(){return ud()}async function fM(){ud()}function hM(){return wn}function gM(){wn=null}import{z as Fi}from"zod";import{ContentSanitizer as WS}from"octocode-security";import{maskSensitiveData as dd}from"octocode-security/mask";function Nr(e){let t=e;if(t.content?.length&&(t={...t,content:t.content.map(n=>{if(n.type==="text"&&"text"in n&&typeof n.text=="string")try{let r=WS.sanitizeContent(n.text),o=r.hasSecrets?dd(r.content):dd(n.text);return{...n,text:o}}catch{return n}return n})}),t.structuredContent)try{t={...t,structuredContent:Ye(t.structuredContent)}}catch{}return t}var KS="TOOL_CALLBACK_EXCEPTION";function pd(e,t){let n=YS(t),r={content:[{type:"text",text:`error: tool "${e}" threw an exception
|
|
61
|
-
|
|
62
|
-
message: Set ENABLE_CLONE=true (and ENABLE_LOCAL=true) to enable repository cloning.
|
|
63
|
-
hints:
|
|
64
|
-
- To browse without cloning, use ghViewRepoStructure to list files or ghGetFileContent to read specific files.`}],structuredContent:{status:"error",tool:e,code:"TOOL_DISABLED",error:{message:"ghCloneRepo is disabled \u2014 set ENABLE_CLONE=true (and ENABLE_LOCAL=true) to enable repository cloning."},hints:["To browse without cloning, use ghViewRepoStructure to list files or ghGetFileContent to read specific files."]},isError:!0}):await pC(n,r)}finally{e===Re&&await JS()}}function Sd(e){return{name:e.name,schema:e.schema,inputSchema:e.inputSchema}}function Di(e){return gd.find(t=>t.name===e)}function uC(e,t){let n=e.inputSchema.safeParse(t);if(!n.success)throw n.error;return n.data}async function dC(e){e.requiresServerRuntime&&(ki||(ki=ns()),await ki),e.requiresProviders&&(vi||(vi=Ga().then(()=>{})),await vi)}async function pC(e,t){try{let n=e.security==="remote"?await mC(e,t):await fC(e,t);return Nr(n)}catch(n){return pd(e.name,n)}}async function mC(e,t){return Qi(e.name,async(r,o,i)=>e.execute({...r,authInfo:o,sessionId:i}))(t,{})}async function fC(e,t){return ji(e.execute,e.name)(t)}import{getConfigSync as Cd}from"octocode-shared";function QM(){return process.env.VSCODE_PID||process.env.VSCODE_IPC_HOOK?"vscode":process.env.CURSOR_CHANNEL||process.env.CURSOR_TRACE_ID?"cursor":"standalone"}function jM(){try{return Cd().local.enabled}catch{return!1}}function VM(){try{if(!Cd().local.enabled)return"Local tools are disabled (ENABLE_LOCAL=false). MCP LSP tools are unavailable."}catch{}return null}function XM(e,t){let n=we(),r=t.maxOutputChars??n,o=t.recommendedCharLength??n,i=[];if(t.charLength!==void 0||t.charOffset!==void 0){let s=t.charLength??o,a=t.charOffset??0,c=tt(e,a,s),l=dn(c);return{content:c.paginatedContent,wasLimited:!0,pagination:l,warnings:i,paginationHints:Pd(l)}}if(e.length>r){i.push(`Auto-paginated: Output (${e.length} chars) exceeds ${r} char limit. Use charOffset/charLength to navigate.`);let s=tt(e,0,o),a=dn(s);return{content:s.paginatedContent,wasLimited:!0,pagination:a,warnings:i,paginationHints:Pd(a)}}return{content:e,wasLimited:!1,warnings:i,paginationHints:[]}}function Pd(e){let t=[];if(e.hasMore){let n=(e.charOffset??0)+(e.charLength??0),r=(e.charOffset??0)+1,o=n;t.push(`Page ${e.currentPage}/${e.totalPages} (chars ${r}-${o} of ${e.totalChars}). Next: charOffset=${n}`)}return t}import{z as H}from"zod";var Dr=H.object({text:H.string()}),hC=H.object({match:H.object({text:H.string()}).optional(),start:H.number(),end:H.number()}),gC=H.object({type:H.literal("match"),data:H.object({path:Dr,lines:H.object({text:H.string()}),line_number:H.number(),absolute_offset:H.number(),submatches:H.array(hC)})}),yC=H.object({type:H.literal("context"),data:H.object({path:Dr,lines:H.object({text:H.string()}),line_number:H.number(),absolute_offset:H.number()})}),RC=H.object({type:H.literal("begin"),data:H.object({path:Dr})}),bC=H.object({type:H.literal("end"),data:H.object({path:Dr,stats:H.object({elapsed:H.object({human:H.string()}),searches:H.number(),searches_with_match:H.number()}).optional()})}),SC=H.object({type:H.literal("summary"),data:H.object({elapsed_total:H.object({human:H.string()}),stats:H.object({elapsed:H.object({human:H.string()}),searches:H.number(),searches_with_match:H.number(),bytes_searched:H.number(),bytes_printed:H.number(),matched_lines:H.number(),matches:H.number()})})}),qM=H.discriminatedUnion("type",[gC,yC,RC,bC,SC]);var CC=1e5,Gi=new Set(["hints","warnings","pagination","outputPagination"]);function Ed(){return Math.min(Math.max(we(),1),CC)}function Td(e,t=Ed()){return{offset:e.offset??0,length:Math.max(e.length??t,1),explicit:e.offset!==void 0||e.length!==void 0}}function ye(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function ve(e){return JSON.stringify(e)}function wd(e,t,n,r){let o=Math.max(r,1),i=Math.max(n,0),s=Math.max(1,Math.ceil(i/o)),a=i===0?0:Math.max(i-1,0),c=Math.min(Math.max(e,0),a),l=i===0?1:Math.min(s,Math.floor(c/o)+1),d=e+t<i;return{currentPage:l,totalPages:d?Math.max(s,l+1):l,hasMore:d,charOffset:e,charLength:t,totalChars:i}}function xd(e,t,n,r){let o=Array.isArray(e.hints)?e.hints.filter(p=>typeof p=="string"):[],i=t.charOffset??0,s=t.charLength??0,a=t.totalChars??0,c=i+s,l=`Page ${t.currentPage}/${t.totalPages} (${s} of ${a} chars)`,d=n==="response"?`Use responseCharOffset=${c} to continue this paginated bulk response.`:`Use charOffset=${c} to continue this paginated result.`,u=`Auto-paginated: Output (${a} chars) exceeds ${r.requestedLength} char limit.`,m=[...o];return r.autoPaginated&&t.hasMore&&!m.includes(u)&&m.push(u),m.includes(l)||m.push(l),t.hasMore&&!m.includes(d)&&m.push(d),{...e,hints:m}}function PC(e,t){let n={...e};delete n.outputPagination;for(let s of t)s.kind==="array"&&Array.isArray(n[s.field])&&(n[s.field]=[]),s.kind==="record"&&ye(n[s.field])&&(n[s.field]={});let r=ve(n).length,o=[],i=r;for(let s of t){let a=e[s.field];if(s.kind==="array"&&Array.isArray(a)&&a.length>0){let c=!0;for(let l of a){let d=ve(l),u=`${c?"":","}${d}`.length;o.push({field:s.field,kind:"array",value:l,start:i,end:i+u,itemPaginator:s.itemPaginator}),i+=u,c=!1}continue}if(s.kind==="record"&&ye(a)){let c=!0;for(let[l,d]of Object.entries(a)){let u=ve(d),m=`${c?"":","}${ve(l)}:${u}`.length;o.push({field:s.field,kind:"record",key:l,value:d,start:i,end:i+m,itemPaginator:s.itemPaginator}),i+=m,c=!1}}}return{baseObject:n,baseChars:r,segments:o,totalChars:i}}function EC(e,t){let n={...e};for(let r of t){if(r.kind==="array"){let i=Array.isArray(n[r.field])?[...n[r.field]]:[];i.push(r.value),n[r.field]=i;continue}let o=ye(n[r.field])?{...n[r.field]}:{};r.key!==void 0&&(o[r.key]=r.value),n[r.field]=o}return n}function TC(e,t,n,r){let o=n.findIndex(c=>c.end>r.offset);if(o===-1)return{selectedSegments:[],actualOffset:r.offset,pageEnd:r.offset};let i=[],s,a=0;for(let c=o;c<n.length;c+=1){let l=n[c],d=c===o?Math.max(0,r.offset-l.start):0,u=s===void 0?0:a-s,m=Math.max(r.length-u,1),p=l.end-l.start;if(d===0&&p<=m){s===void 0&&(s=r.offset<e?0:l.start),i.push(l),a=l.end;continue}if(l.itemPaginator){let f=l.itemPaginator(l.value,{offset:d,length:m,explicit:!0});if(f){s===void 0&&(s=r.offset<e?0:l.start+f.actualOffset),i.push({...l,value:f.value}),a=l.start+f.pageEnd;let h=f.pageEnd>=f.totalChars,y=a-s<r.length;if(h&&y)continue;break}}s===void 0&&(s=r.offset<e?0:l.start),i.push(l),a=l.end;break}return s===void 0&&(s=r.offset<e?0:Math.min(r.offset,t),a=Math.min(t,Math.max(e,s))),{selectedSegments:i,actualOffset:s,pageEnd:a}}function $i(e,t,n,r,o=!0){return!o||!e.explicit&&t<=e.length?{value:n,actualOffset:0,pageEnd:t,totalChars:t,paginated:!1}:e.offset>=t?{value:r,actualOffset:e.offset,pageEnd:e.offset,totalChars:t,paginated:!0}:null}function He(e,t,n){let r=ve(e).length;if(n.length===0)return{value:e,actualOffset:0,pageEnd:r,totalChars:r,paginated:!1};let{baseObject:o,baseChars:i,segments:s,totalChars:a}=PC(e,n),c=$i(t,a,e,o,s.length>0);if(c)return c;let l=TC(i,a,s,t);return{value:EC(o,l.selectedSegments),actualOffset:l.actualOffset,pageEnd:l.pageEnd,totalChars:a,paginated:!0}}function Gr(e,t){let n=Array.from(e),r=n.map(f=>Math.max(JSON.stringify(f).length-2,0)),i=2+r.reduce((f,h)=>f+h,0),s=$i(t,i,e,"");if(s)return s;let a=0,c=0;if(t.offset>1){let f=1,h=!1;for(let y=0;y<r.length;y+=1){let b=r[y];if(f+b>t.offset){a=y,c=f,h=!0;break}f+=b}if(!h)return{value:"",actualOffset:t.offset,pageEnd:t.offset,totalChars:i,paginated:!0}}let l=Math.max(1,t.length-(a===0?1:0)-1),d=0,u=a;for(;u<n.length;){let f=r[u];if(d+f>l&&u>a||(d+=f,u+=1,d>=l))break}u===a&&u<n.length&&(d+=r[u],u+=1);let m=a===0?0:c,p=d+(a===0?1:0)+(u===n.length?1:0);return{value:n.slice(a,u).join(""),actualOffset:m,pageEnd:Math.min(i,m+Math.max(p,1)),totalChars:i,paginated:!0}}function _d(e,t,n,r,o){let i={...e,[t]:r};delete i.outputPagination;let s=Math.max(ve(i).length-2,0),a=o(e[t],{offset:n.offset<=s?0:n.offset-s,length:n.offset<=s?Math.max(1,n.length-s):n.length,explicit:!0}),c=s+a.totalChars,l=$i(n,c,e,i);return l||{value:{...i,[t]:a.value},actualOffset:n.offset<=s?0:s+a.actualOffset,pageEnd:s+a.pageEnd,totalChars:c,paginated:!0}}function $r(e,t,n){return typeof e[t]!="string"?null:_d(e,t,n,"",(r,o)=>Gr(r,o))}function wC(e,t,n){return ye(e[t])?_d(e,t,n,{},(r,o)=>Ui(r,o)):null}function xC(e,t){return typeof e=="string"?Gr(e,t):ye(e)?Ui(e,t):null}function Ui(e,t){let n=[];for(let[i,s]of Object.entries(e))Gi.has(i)||Array.isArray(s)&&s.length>0&&n.push({field:i,kind:"array",itemPaginator:xC});let r=He(e,t,n);if(r.paginated)return r;for(let[i,s]of Object.entries(e)){if(Gi.has(i)||typeof s!="string")continue;let a=$r(e,i,t);if(a?.paginated)return a}for(let[i,s]of Object.entries(e)){if(Gi.has(i)||!ye(s))continue;let a=wC(e,i,t);if(a?.paginated)return a}let o=ve(e).length;return{value:e,actualOffset:0,pageEnd:o,totalChars:o,paginated:!1}}function _C(e,t){return ye(e)?He(e,t,[{field:"text_matches",kind:"array",itemPaginator:(n,r)=>typeof n=="string"?Gr(n,r):ye(n)?$r(n,"value",r):null}]):null}function AC(e,t){return!ye(e)||ve(e).length<=Ed()?null:He(e,t,[{field:"fileChanges",kind:"array",itemPaginator:(n,r)=>ye(n)?$r(n,"patch",r):null}])}function LC(e,t){return ye(e)?$r(e,"value",t):null}function OC(e,t){return ye(e)?He(e,t,[{field:"matches",kind:"array",itemPaginator:LC}]):null}function Ad(e,t,n){let r;switch(e){case S.GITHUB_SEARCH_CODE:r=He(t,n,[{field:"files",kind:"array",itemPaginator:_C}]);break;case S.GITHUB_SEARCH_REPOSITORIES:r=He(t,n,[{field:"repositories",kind:"array"},{field:"repositoryDetails",kind:"array"}]);break;case S.GITHUB_VIEW_REPO_STRUCTURE:r=He(t,n,[{field:"structure",kind:"record"}]);break;case S.PACKAGE_SEARCH:r=He(t,n,[{field:"packages",kind:"array"}]);break;case S.GITHUB_CLONE_REPO:r=He(t,n,[{field:"hints",kind:"array",itemPaginator:(o,i)=>typeof o=="string"?Gr(o,i):null}]);break;case S.LOCAL_RIPGREP:r=He(t,n,[{field:"files",kind:"array",itemPaginator:OC}]);break;case S.LOCAL_VIEW_STRUCTURE:r=He(t,n,[{field:"entries",kind:"array"}]);break;case S.GITHUB_SEARCH_PULL_REQUESTS:r=He(t,n,[{field:"pull_requests",kind:"array",itemPaginator:AC}]);break;case S.LOCAL_FIND_FILES:{let o=ve(t).length;return{value:t,actualOffset:0,pageEnd:o,totalChars:o,paginated:!1}}case S.GITHUB_FETCH_CONTENT:case S.LOCAL_FETCH_CONTENT:return{value:t,actualOffset:0,pageEnd:ve(t).length,totalChars:ve(t).length,paginated:!1};default:r={value:t,actualOffset:0,pageEnd:ve(t).length,totalChars:ve(t).length,paginated:!1};break}return r.paginated?r:Ui(t,n)}function IC(e,t,n){if(!ye(e)||!ye(e.data)||e.status!==void 0)return null;let r={...e,data:{}},o=Math.max(ve(r).length-2,0),i=Ad(n,e.data,{offset:t.offset<=o?0:t.offset-o,length:t.offset<=o?Math.max(1,t.length-o):t.length,explicit:!0}),s=o+i.totalChars;if(!i.paginated&&(!t.explicit||s<=t.length))return{value:e,actualOffset:0,pageEnd:s,totalChars:s,paginated:!1};if(t.offset>=s)return{value:r,actualOffset:t.offset,pageEnd:t.offset,totalChars:s,paginated:!0};let a=wd(i.actualOffset,Math.max(0,i.pageEnd-i.actualOffset),i.totalChars,t.length),c=i.paginated&&ye(i.value)?xd({...i.value,outputPagination:a,...n===S.LOCAL_FIND_FILES&&{charPagination:a}},a,"output",{autoPaginated:!1,requestedLength:t.length}):i.value;return{value:{...e,data:c},actualOffset:t.offset<=o?0:o+i.actualOffset,pageEnd:o+i.pageEnd,totalChars:s,paginated:!0}}function rN(e,t,n){if(!ye(e.data)||e.status!==void 0)return e;let r=Td({offset:typeof t.charOffset=="number"?t.charOffset:void 0,length:typeof t.charLength=="number"?t.charLength:void 0});if(!r.explicit)return e;let o=Ad(n,e.data,r);if(!o.paginated)return e;let i=wd(o.actualOffset,Math.max(0,o.pageEnd-o.actualOffset),o.totalChars,r.length),s=xd({...o.value,outputPagination:i},i,"output",{autoPaginated:!r.explicit,requestedLength:r.length});return{...e,data:s}}function oN(e,t,n){let r=Td(t,Vs(e.results.length));if(!r.explicit&&e.results.length>0&&e.results.every(i=>ye(i?.data)&&i.data.outputPagination!==void 0))return e;let o=He({results:e.results},r,[{field:"results",kind:"array",itemPaginator:(i,s)=>IC(i,s,n)}]);return o.paginated?{results:Array.isArray(o.value.results)?o.value.results:[]}:e}import{securityRegistry as SG,ContentSanitizer as CG}from"octocode-security";import{maskSensitiveData as EG}from"octocode-security/mask";import{configureSecurity as wG}from"octocode-security/withSecurityValidation";import{getOctocodeDir as _G,paths as AG,getDirectorySizeBytes as LG,formatBytes as OG,isWindows as IG,isMac as kG,HOME as vG,getAppDataPath as FG,storeCredentials as MG,getCredentials as NG,getCredentialsSync as HG,deleteCredentials as DG,isTokenExpired as GG,isRefreshTokenExpired as $G,getCredentialsFilePath as UG,getEnvTokenSource as BG,hasEnvToken as zG,resolveTokenFull as QG,refreshAuthToken as jG,getTokenWithRefresh as VG,getGhCliToken as WG}from"octocode-shared";import{completeMetadata as YG}from"@octocodeai/octocode-core";import{z as JG}from"zod";export{XC as ALL_ERROR_CODES,ld as ALL_TOOLS,Jp as BASE_SCHEMA,Ln as BaseCommandBuilder,lc as BulkCloneRepoLocalSchema,Ci as BulkLspGetSemanticsQuerySchema,Qr as CONFIG_ERRORS,ur as CORE_ALLOWED_ENV_VARS,Pi as CircuitOpenError,Xo as CloneRepoQueryLocalSchema,or as ContentBuilder,CG as ContentSanitizer,yI as DEFAULTS,$v as DEFAULT_CIRCUIT_FAILURE_THRESHOLD,Ii as DEFAULT_TOOL_METADATA_GATEWAY,lo as DESCRIPTIONS,md as DIRECT_TOOL_CATEGORIES,IM as DIRECT_TOOL_DEFINITIONS,st as DirectToolInputError,j as ERROR_CODES,de as ERROR_MESSAGES,ct as FETCH_ERRORS,Ae as FILE_OPERATION_ERRORS,pc as FileContentBulkQueryLocalSchema,Dh as FileContentQueryBaseLocalSchema,hr as FileContentQueryLocalSchema,yE as GENERIC_ERROR_HINTS,oM as GITHUB_CLONE_REPO,qF as GITHUB_FETCH_CONTENT,Ji as GITHUB_FILE_CONTENT_DEFAULT_CHAR_LENGTH,ZF as GITHUB_SEARCH_CODE,De as GITHUB_SEARCH_DEFAULT_LIMIT,me as GITHUB_SEARCH_MAX_LIMIT,WC as GITHUB_SEARCH_MAX_PAGES,nM as GITHUB_SEARCH_PULL_REQUESTS,tM as GITHUB_SEARCH_REPOSITORIES,Et as GITHUB_STRUCTURE_DEFAULTS,KC as GITHUB_STRUCTURE_DEFAULT_ENTRIES_PER_PAGE,Wi as GITHUB_STRUCTURE_MAX_ENTRIES_PER_PAGE,eM as GITHUB_VIEW_REPO_STRUCTURE,FA as GitHubCloneRepoOutputLocalSchema,Fc as GitHubCodeSearchBulkQueryLocalSchema,AL as GitHubCodeSearchOutputLocalSchema,vc as GitHubCodeSearchQueryLocalSchema,BA as GitHubFetchContentOutputLocalSchema,rr as GitHubProvider,Qc as GitHubPullRequestSearchBulkQueryLocalSchema,Pr as GitHubPullRequestSearchQueryLocalSchema,el as GitHubReposSearchBulkQueryLocalSchema,qc as GitHubReposSearchSingleQueryLocalSchema,$L as GitHubSearchPullRequestsOutputLocalSchema,hO as GitHubSearchRepositoriesOutputLocalSchema,il as GitHubViewRepoStructureBulkQueryLocalSchema,IO as GitHubViewRepoStructureOutputLocalSchema,ol as GitHubViewRepoStructureQueryLocalSchema,Go as HINTS,vG as HOME,Wp as IGNORED_FILE_EXTENSIONS,Vp as IGNORED_FILE_NAMES,Es as IGNORED_FOLDER_NAMES,uM as LOCAL_BINARY_INSPECT,Yi as LOCAL_DEFAULT_FILES_PER_PAGE,cM as LOCAL_FETCH_CONTENT,aM as LOCAL_FIND_FILES,kt as LOCAL_MAX_DEPTH,kn as LOCAL_MAX_FILES_PER_PAGE,It as LOCAL_MAX_LIMIT,iM as LOCAL_RIPGREP,B as LOCAL_TOOL_ERROR_CODES,Zi as LOCAL_TOOL_ERROR_REGISTRY,sM as LOCAL_VIEW_STRUCTURE,lM as LSP_GET_SEMANTIC_CONTENT,Re as LSP_GET_SEMANTIC_CONTENT_TOOL_NAME,al as LocalBinaryInspectBulkQuerySchema,Er as LocalBinaryInspectQuerySchema,Al as LocalFetchContentBulkQuerySchema,Tr as LocalFetchContentQuerySchema,kl as LocalFindFilesBulkQuerySchema,wr as LocalFindFilesQuerySchema,Gl as LocalRipgrepBulkQuerySchema,gt as LocalRipgrepQuerySchema,Wd as LocalToolErrorCategory,tu as LocalViewStructureBulkQuerySchema,_r as LocalViewStructureQuerySchema,uS as LspGetSemanticsOutputSchema,Si as LspGetSemanticsQueryDisplaySchema,Yb as LspGetSemanticsQuerySchema,fp as MAX_BRANCH_CACHE_SIZE,vt as MAX_CHAR_LENGTH,Xi as MAX_CONTEXT_LINES,js as MAX_DEFAULT_OUTPUT_CHAR_LENGTH,Am as MAX_DIRECTORY_FILES,Fn as MAX_MATCH_CONTENT_LENGTH,vn as MAX_PAGE_NUMBER,Lm as MAX_TOTAL_SIZE,to as NETWORK_ERROR_PATTERNS,zu as NpmDeprecationOutputSchema,Bu as NpmRegistrySearchSchema,ad as NpmSearchBulkQueryLocalSchema,SF as NpmSearchOutputLocalSchema,sd as NpmSearchQueryLocalSchema,kr as NpmViewResultSchema,lp as OctokitWithThrottling,rM as PACKAGE_SEARCH,lt as PROMISE_ERRORS,Ia as PROVIDER_CAPABILITIES,Ba as PROXY_ENV_VARS,bt as PR_CONTENT_DEFAULT_ITEMS_PER_PAGE,Ki as PR_CONTENT_MAX_ITEMS_PER_PAGE,Yo as ProviderInitializationError,zx as QuickResult,Gn as RATE_LIMIT_CONFIG,no as RATE_LIMIT_PATTERNS,We as REPOSITORY_ERRORS,$l as REQUIRED_COMMANDS,Me as RESOURCE_LIMITS,In as RipgrepCommandBuilder,qM as RipgrepJsonMessageSchema,ne as SEARCH_ERRORS,is as SEMANTIC_CONTENT_TYPES,Q_ as SENSITIVE_ENV_VARS,Vd as STARTUP_ERRORS,K as STATIC_TOOL_NAMES,hs as STATUS_TO_ERROR_CODE,ir as StatusEmoji,Hf as StatusEmojis,yn as TOOLING_ALLOWED_ENV_VARS,Mn as TOOL_ERRORS,gE as TOOL_HINTS,jd as TOOL_METADATA_ERRORS,S as TOOL_NAMES,Pe as ToolError,Fe as ToolErrors,at as VALIDATION_ERRORS,wS as _packageNameToSearchKeywords,gM as _resetMetadataState,oF as _resetNpmRegistryUrlCache,fP as _resetTokenResolvers,mP as _setTokenResolvers,Hd as allowRipgrepCommandName,oN as applyBulkResponsePagination,Js as applyContentPagination,ou as applyEntryFilters,mg as applyExactMatchRanking,XM as applyOutputSizeLimit,tt as applyPagination,Jn as applyPartialContentFilter,rN as applyQueryOutputPagination,Aa as applyStructurePagination,Du as assertCircuitAvailable,U as attachRawResponseChars,CT as buildBlockBoundaryHint,Qo as buildChildProcessEnv,Rs as buildCodeSearchQuery,Uc as buildContentHints,GM as buildDirectToolExampleQuery,ui as buildEntryPaginationHints,Lc as buildGhSearchCodeFinalizer,_c as buildGithubFetchContentFinalizer,Gg as buildPRSearchOutput,Wt as buildPaginationHints,Ss as buildPullRequestSearchQuery,bs as buildRepoSearchQuery,dy as buildRepoStructureOutput,Yt as buildSearchResult,pd as buildToolErrorResult,di as buildWalkWarnings,zm as byteSlice,Wn as byteToCharIndex,Ws as charToByteIndex,xk as checkAllCommandsAvailability,si as checkCommandAvailability,BO as checkLargeOutputSafety,Dv as checkNpmAvailability,Li as checkNpmDeprecation,iF as checkNpmRegistryReachable,ai as checkRegexSafety,F as clampedInt,hP as cleanup,qP as clearAllCache,Ak as clearAvailabilityCache,tE as clearLSPToolCache,eE as clearLocalToolCache,$P as clearOctokitInstances,Mx as clearProviderCache,nE as clearRemoteAPICache,ja as cloneRepo,gr as collectFlatErrors,ah as commonDirPrefix,Yr as compactLocation,Mt as compactResolvedSymbol,Vc as compareIsoDateDescending,YG as completeMetadata,gh as computeQueryTimeout,Bv as configureCircuitBreaker,wG as configureSecurity,jt as contextLinesField,fT as convertByteMatchToChar,G as countSerializedChars,yo as createBasePRTransformation,Qn as createCacheMeta,Sn as createCallItemKey,A as createErrorResult,nt as createGitHubProviderError,nr as createGitHubProviderErrorFromResult,Be as createLazyProviderContext,dn as createPaginationInfo,wh as createProviderExecutionContext,X as createRelaxedBulkQuerySchema,gn as createResponseFormat,Bx as createResult,sr as createRoleBasedResult,M0 as createSafeRegExp,Se as createSuccessResult,xt as dedupeHints,DG as deleteCredentials,QM as detectEnvironment,jn as ensureCloneParentDir,zt as evictExpiredClones,J as executeBulkOperation,ac as executeCloneRepo,UM as executeDirectTool,Ll as executeFetchContent,Nl as executeFindFiles,Wl as executeGrepFallbackSearch,Pl as executeInspectBinary,yi as executeLspGetSemantics,Cn as executeNpmCommand,ft as executeProviderOperation,sc as executeProviderOperations,Zl as executeRipgrepSearch,jl as executeRipgrepSearchInternal,lu as executeViewStructure,Ya as executeWithErrorIsolation,Le as executeWithToolBoundary,tl as exploreMultipleRepositoryStructures,Yn as extractMatchingLines,Ka as fallbackOnBestEffortFailure,wl as fetchContent,Ds as fetchDirectoryContents,Po as fetchDirectoryContentsRecursivelyAPI,Zs as fetchFileTimestamp,ea as fetchGitHubFileContentAPI,lw as fetchGitHubPullRequestByNumberAPI,Co as fetchGitHubPullRequestByNumberAPIInternal,Ea as fetchHistory,Ac as fetchMultipleGitHubFileContents,Bs as fetchRawGitHubFileContent,yt as fetchWithRetries,ta as filterPatch,uy as filterStructure,ii as finalizeFetchContentResult,Fl as finalizeFindFilesResult,Ql as finalizeRipgrepResult,cu as finalizeViewStructureResult,yd as findDirectToolDefinition,vl as findFiles,mn as findNextBlockBoundary,OG as formatBytes,Qx as formatCallToolResultForOutput,FM as formatDirectToolMetadataSchemaText,HM as formatDirectToolOutputSchemaText,vM as formatDirectToolSchemaText,rC as formatDirectToolValidationIssues,D0 as formatEntryString,Kt as formatFileSize,yr as formatFinalizedResponse,fn as formatPRForResponse,rO as formatRepoLine,pi as gatherIncomingCallsRecursive,mi as gatherOutgoingCallsRecursive,Ee as generateCacheKey,_a as generatePaginationHints,er as generateStructurePaginationHints,rn as getActiveProvider,Kr as getActiveProviderConfig,FG as getAppDataPath,Vs as getBulkDefaultCharLength,Ks as getByteLength,rE as getCacheStats,gm as getCacheTTL,Un as getCloneDir,NG as getCredentials,UG as getCredentialsFilePath,HG as getCredentialsSync,cd as getDescription,MM as getDirectToolAutoFilledFields,Hr as getDirectToolCategory,DM as getDirectToolDescription,Rd as getDirectToolDisplayFields,NM as getDirectToolOutputFields,LG as getDirectorySizeBytes,bE as getDynamicHints,Uo as getDynamicToolHints,BG as getEnvTokenSource,iE as getExtension,Ma as getFileContent,SE as getGenericErrorHintsSync,WG as getGhCliToken,rs as getGitHubToken,oe as getHints,VM as getLspEnvironmentHint,ym as getMaxCacheSizeBytes,Rm as getMaxCloneCount,hM as getMetadataOrNull,_k as getMissingCommandError,wi as getNpmRegistryUrl,_G as getOctocodeDir,re as getOctokit,we as getOutputCharLimit,Lp as getOwnerQualifier,To as getProvider,ee as getRawResponseChars,Ha as getRepoStructure,Is as getReposBaseDir,Nn as getServerConfig,Nt as getSessionManager,yP as getTokenSource,VG as getTokenWithRefresh,RE as getToolHintsSync,No as ghCloneRepoHints,Io as ghSearchCodeHints,Fo as ghSearchPRsHints,vo as ghViewRepoStructureHints,ko as githubFetchContentHints,Mo as githubSearchReposHints,ge as handleCatchError,Z as handleGitHubAPIError,lr as handleProviderError,$o as hasDynamicHints,zG as hasEnvToken,Nc as hasExpensiveContentRequest,Za as hoistSharedFields,je as ignoreBestEffortFailure,ns as initialize,Ga as initializeProviders,_P as initializeSession,fM as initializeToolMetadata,H_ as invokeCallbackSafely,zn as isCacheHit,ks as isCacheValid,$u as isCircuitOpen,Hn as isCloneEnabled,Fr as isExactPackageName,Tt as isGitHubAPIError,hf as isGitHubAPISuccess,gP as isLocalEnabled,Xr as isLocalTool,os as isLoggingEnabled,kG as isMac,pn as isMidBlockCut,Ct as isNoResultsSearchError,Eh as isProviderError,mr as isProviderSuccess,$G as isRefreshTokenExpired,gf as isRepository,GG as isTokenExpired,jr as isToolError,uo as isToolInMetadata,IG as isWindows,Vt as lineNumberField,mM as loadToolContent,Ao as localFetchContentHints,Oo as localFindFilesHints,_o as localRipgrepHints,Lo as localViewStructureHints,as as logPackageRegistryFailure,OP as logPromptCall,ut as logRateLimit,D as logSessionError,AP as logSessionInit,LP as logToolCall,Do as lspSemanticContentHints,gc as mapCodeSearchProviderResult,fc as mapCodeSearchToolQuery,Pc as mapFileContentProviderResult,Cc as mapFileContentToolQuery,Sc as mapPullRequestProviderResultData,bc as mapPullRequestToolQuery,Rc as mapRepoSearchProviderRepositories,yc as mapRepoSearchToolQuery,Tc as mapRepoStructureProviderResult,Ec as mapRepoStructureToolQuery,EG as maskSensitiveData,hn as normalizeOwnerRepo,Mc as normalizePullRequestContentRequest,$n as normalizeResponseHeaders,Ho as npmSearchHints,li as paginateEntries,YA as paginateGroupsCharWindow,xR as parseCountOutput,Rn as parseFileSize,wR as parseFilesOnlyOutput,pe as parseGitHubProjectId,Ul as parseRipgrepJson,zl as parseRipgrepOutput,AG as paths,xr as preflightValidateRipgrepPattern,nC as prepareDirectToolInput,$M as prepareDirectToolInputFromJsonText,qs as processFileContentAPI,fr as providerSupports,mo as readCacheMeta,Gu as recordCircuitFailure,Ti as recordCircuitSuccess,nn as redactPath,jG as refreshAuthToken,Ja as relativizeResultPaths,q as relaxedPageNumberField,fo as removeCloneDir,Uv as resetCircuitBreaker,IP as resetSessionManager,$e as resolveDefaultBranch,fi as resolveFileAnchor,Qd as resolveRgFromPath,On as resolveRipgrepBinary,mu as resolveSymbolAnchor,QG as resolveTokenFull,xe as responseEnvelopeFields,Oe as safeExec,Nr as sanitizeCallToolResult,Ye as sanitizeStructuredContent,va as searchCode,Jl as searchContentRipgrep,As as searchGitHubCodeAPI,Ca as searchGitHubPullRequestsAPI,xa as searchGitHubReposAPI,Oc as searchMultipleGitHubCode,jc as searchMultipleGitHubPullRequests,Xc as searchMultipleGitHubRepos,ed as searchNpmPackage,td as searchPackage,rd as searchPackages,Na as searchPullRequests,Fa as searchRepos,SG as securityRegistry,yT as serializeForPagination,$c as shapePullRequestForContent,an as shouldIgnoreDir,Ut as shouldIgnoreFile,jM as shouldUseMCPLsp,Cs as shouldUseSearchForPRs,RT as sliceByCharRespectLines,go as sliceContent,Kn as snapToSemanticBoundary,kM as sortDirectToolNames,dr as spawnCheckSuccess,j_ as spawnCollectStdout,wt as spawnWithTimeout,VE as startCacheGC,WE as stopCacheGC,MG as storeCredentials,ci as summarizeEntries,su as toEntryObject,iu as toGroupedLists,qi as toToolError,Sf as transformCodeSearchResult,Ef as transformFileContentResult,qn as transformPullRequestItemFromREST,ga as transformPullRequestItemFromSearch,_f as transformPullRequestResult,Cf as transformRepoSearchResult,Lf as transformRepoStructureResult,na as trimDiffContext,pr as validateArgs,Ce as validateToolPath,Oa as viewGitHubRepositoryStructureAPI,au as viewStructure,ji as withBasicSecurityValidation,Te as withDataCache,Jx as withResponseEnvelope,Qi as withSecurityValidation,Bn as writeCacheMeta,JG as z};
|
|
44
|
+
`)}async function Zy(e,t){let n=await od(CO(e,t));if(!n.success)return n;let o=(!t&&n.commandUsed?xO(n.stdout,n.commandUsed):n.stdout).split(`
|
|
45
|
+
`).map(i=>i.trim()).filter(Boolean);return{...n,entries:o}}async function eb(e,t){return od(PO(e,t))}function wO(e,t){let n={command:"tar",args:["-xf",e,"-C",t]},r={command:"unzip",args:["-o","-q",e,"-d",t]},o={command:"bsdtar",args:["-xf",e,"-C",t]},i=["x",`-o${t}`,"-y","-bd","--",e],s={command:"7z",args:i},a={command:"7zz",args:i},c={command:"aa",args:["extract","-i",e,"-d",t]};return bt(Jy,e)?[c]:bt(rd,e)?[s,a,o,n,r]:bt(nd,e)?[o,s,a,n,r]:bt(td,e)?[n,o,s,a,r]:[r,n,o,s,a]}async function tb(e,t){return od(wO(e,t))}var td,nd,rd,Jy,nb=y(()=>{"use strict";Pa();td=[".tar",".tar.gz",".tgz",".tar.bz2",".tbz2",".tbz",".tar.xz",".txz",".tar.zst",".tzst"],nd=[".7z",".iso",".cab",".cpio",".xar",".pkg",".ar",".deb",".lha",".lzh"],rd=[".dmg",".rar",".cpgz"],Jy=[".aar",".yaa"]});function OO(e){let t=e.toLowerCase();for(let{ext:n,format:r}of EO)if(t.endsWith(n))return r}async function vO(e){let t=await Er("file",["--mime-type","-b",e]);if(t.success)return kO[t.stdout.trim().toLowerCase()]}async function AO(e,t){let n=[{command:e.command,args:e.args(t)},...e.fallback?[{command:e.fallback.command,args:e.fallback.args(t)}]:[]];for(let i of n){let s=await Er(i.command,i.args);if(s.success)return{success:!0,stdout:s.stdout,stderr:s.stderr,commandUsed:i.command}}let r=n[n.length-1];return{success:!1,stdout:"",stderr:(await Er(r.command,r.args)).stderr,commandUsed:r.command}}async function rb(e,t){let n;if(t!=="auto"?n=t:n=OO(e)??await vO(e),!n)return{success:!1,error:"Could not detect compression format from extension or mime-type. Set format: gzip|bzip2|xz|lzma|zstd|lz4|brotli|lzfse explicitly."};let r=TO[n],o=await AO(r,e);return o.success?{success:!0,format:n,backend:o.commandUsed,content:o.stdout}:{success:!1,format:n,backend:o.commandUsed,error:o.stderr||`${o.commandUsed} failed`}}var TO,EO,kO,ob=y(()=>{"use strict";Pa();TO={gzip:{command:"zcat",args:e=>[e],fallback:{command:"gunzip",args:e=>["-c",e]}},bzip2:{command:"bzcat",args:e=>[e]},xz:{command:"xzcat",args:e=>[e]},lzma:{command:"xzcat",args:e=>["--format=lzma",e]},zstd:{command:"zstdcat",args:e=>[e],fallback:{command:"zstd",args:e=>["-dcq",e]}},lz4:{command:"lz4cat",args:e=>[e]},brotli:{command:"brotli",args:e=>["-dc",e]},lzfse:{command:"lzfse",args:e=>["-decode","-i",e,"-o","/dev/stdout"]}},EO=[{ext:".gz",format:"gzip"},{ext:".bz2",format:"bzip2"},{ext:".xz",format:"xz"},{ext:".lzma",format:"lzma"},{ext:".zst",format:"zstd"},{ext:".zstd",format:"zstd"},{ext:".lz4",format:"lz4"},{ext:".br",format:"brotli"},{ext:".lzfse",format:"lzfse"}],kO={"application/gzip":"gzip","application/x-gzip":"gzip","application/x-bzip2":"bzip2","application/x-bzip":"bzip2","application/x-xz":"xz","application/x-lzma":"lzma","application/zstd":"zstd","application/x-zstd":"zstd","application/x-lz4":"lz4","application/x-brotli":"brotli","application/x-lzfse":"lzfse"}});function ib(e){try{return{success:!0,info:F.inspectBinaryNative(e)}}catch(t){return{success:!1,error:t instanceof Error?t.message:String(t)}}}function sb(e,t,n,r=0){try{let o=F.extractBinaryStringsNative(e,t,n,r);return{success:!0,strings:o.strings,totalFound:o.totalFound,truncated:o.truncated,nextScanOffset:o.nextScanOffset}}catch(o){return{success:!1,error:o instanceof Error?o.message:String(o)}}}var ab=y(()=>{"use strict";be()});import{promises as kr}from"fs";import{join as id,basename as xa,dirname as LO,resolve as cb,sep as _O}from"node:path";import{securityRegistry as IO}from"@octocodeai/octocode-engine/registry";function ub(e=new Date){return e.toISOString().replace(/[:.]/g,"-")}function DO(e){return id(ne.unzip,`${xa(e)}-${ub()}`)}function NO(e,t){return id(ne.binary,`${xa(e)}-${t}-${ub()}`)}function GO(e){return e.replace(/\\/g,"/").split("/").filter(n=>n&&n!=="."&&n!=="..").join("/")||"content.txt"}async function sd(e,t,n,r){let o=cb(NO(e,t)),i=cb(id(o,GO(n)));if(!i.startsWith(o+_O)&&i!==o)throw new Error("Derived binary output path escaped its tmp directory.");return await kr.mkdir(LO(i),{recursive:!0}),await kr.writeFile(i,r,"utf-8"),i}function zO(){if(!lb){try{IO.addAllowedCommands(HO)}catch{}lb=!0}}function ad(e,t,n){let r=F.extractMatchingLines(e,t,{isRegex:!0,caseSensitive:!1,contextLines:n});return r.lines.length>0?r.lines.join(`
|
|
46
|
+
`):null}function cd(e,t,n,r){let s=Rr(e,t??0,n??r),a=s.hasMore||s.totalPages>1?{currentPage:s.currentPage,totalPages:s.totalPages,hasMore:s.hasMore,charOffset:s.charOffset,charLength:s.charLength,totalChars:s.totalChars,...s.hasMore&&s.nextCharOffset!==void 0?{nextCharOffset:s.nextCharOffset}:{}}:void 0;return{content:s.paginatedContent,isPartial:s.hasMore,pagination:a}}function UO(e,t){let n=ib(e);if(!n.success||!n.info)return M(n.error??"inspect failed",t);let r=n.info,o=t.detailed??!1;return{status:"success",mode:"inspect",path:e,format:r.format,description:r.description,magicBytes:r.magicHex,...r.arch?{arch:r.arch}:{},...r.bits?{bits:r.bits}:{},...r.endianness?{endianness:r.endianness}:{},...r.stripped!==void 0?{stripped:r.stripped}:{},...r.entry?{entry:r.entry}:{},symbolCount:r.symbolCount,importCount:r.importCount,exportCount:r.exportCount,...o&&r.symbols.length?{symbols:r.symbols}:{},...o&&r.imports.length?{imports:r.imports}:{},...o&&r.exports.length?{exports:r.exports}:{},...o&&r.sections.length?{sections:r.sections}:{},...r.libraries.length?{libraries:r.libraries}:{},...o?{detailed:!0}:{},...r.truncated?{truncated:!0}:{},...r.notes.length?{warnings:r.notes}:{}}}async function jO(e,t){let n=t.verbose??!1,r=await Zy(e,n);if(!r.success)return M(r.stderr||"All archive backends failed",t);let o=r.entries??[],i=Math.min(t.maxEntries??BO,o.length),s=o.slice(0,i),a=t.entriesPerPage,c=t.entryPageNumber??1,l=a?s.slice((c-1)*a,c*a):s,u=a?Math.ceil(s.length/a):1,d=a?c<u:!1;return{status:"success",mode:"list",path:e,backend:r.commandUsed,totalEntries:o.length,entries:l,...a&&{pagination:{currentPage:c,totalPages:u,hasMore:d,entriesPerPage:a,totalEntries:s.length}}}}async function $O(e,t){let n=t.archiveFile,r=await eb(e,n);if(!r.success)return M(r.stderr||"Extraction failed",t);let o=r.stdout;if(!o)return M("Entry is empty",t);let i=await sd(e,"extract",n,o);if(t.matchString){let c=ad(o,t.matchString,t.matchStringContextLines??3);if(!c)return M(`No lines match "${t.matchString}" in the extracted entry`,t);o=c}let s=et(),a=cd(o,t.charOffset,t.charLength,s);return{status:"success",mode:"extract",path:e,archiveFile:n,backend:r.commandUsed,localPath:i,content:a.content,contentLength:o.length,isPartial:a.isPartial,...a.pagination?{pagination:a.pagination}:{}}}async function qO(e,t){let n=await rb(e,t.format??"auto");if(!n.success)return M(n.error??"Decompression failed",t);let r=n.content??"";if(!r)return M("Decompressed file is empty",t);let o=await sd(e,"decompress",`${xa(e)}.decompressed.txt`,r);if(t.matchString){let a=ad(r,t.matchString,t.matchStringContextLines??3);if(!a)return M(`No lines match "${t.matchString}" in the decompressed content`,t);r=a}let i=et(),s=cd(r,t.charOffset,t.charLength,i);return{status:"success",mode:"decompress",path:e,format:n.format,backend:n.backend,localPath:o,content:s.content,contentLength:r.length,isPartial:s.isPartial,...s.pagination?{pagination:s.pagination}:{}}}async function VO(e,t){let n=t.minLength??QO,r=t.includeOffsets??!1,o=t.scanOffset??0,i=sb(e,n,r,o);if(!i.success)return M(i.error??"strings extraction failed",t);let s=(i.strings??[]).join(`
|
|
47
|
+
`),a=s?await sd(e,"strings",`${xa(e)}.strings.txt`,s):void 0;if(t.matchString){let d=ad(s,t.matchString,t.matchStringContextLines??3);if(!d)return M(`No lines match "${t.matchString}" in extracted strings`,t);s=d}let l=!!a&&t.charOffset===void 0&&t.charLength===void 0&&!t.matchString?Math.min(MO,et()):et(),u=cd(s,t.charOffset,t.charLength,l);return{status:"success",mode:"strings",path:e,content:u.content,...a?{localPath:a}:{},contentLength:s.length,totalFound:i.totalFound??0,isPartial:u.isPartial,...u.pagination?{pagination:u.pagination}:{},scanOffset:o,...i.nextScanOffset!==void 0?{nextScanOffset:i.nextScanOffset}:{}}}async function WO(e,t){try{await kr.stat(e)}catch{return M(`File not found: ${e}`,t)}let n=DO(e);await kr.mkdir(n,{recursive:!0});let r=await tb(e,n);if(!r.success)return M(`Unpack failed: ${r.stderr||"no backend could extract this archive"}`,t);let o=0;try{o=(await kr.readdir(n)).length}catch{}return{status:"success",mode:"unpack",path:e,localPath:n,cached:!1,topLevelEntries:o}}async function db(e){zO();let t=Ke(e,FO);if(!t.isValid)return t.errorResult;let n=t.sanitizedPath;try{if(!(await kr.stat(n)).isFile())return M(`Path is not a regular file: ${n}`,e)}catch{return M(`File not found: ${n}`,e)}switch(e.mode){case"inspect":return UO(n,e);case"list":return jO(n,e);case"extract":return $O(n,e);case"decompress":return qO(n,e);case"strings":return VO(n,e);case"unpack":return WO(n,e);default:return M(`Unknown mode: ${String(e.mode)}`,e)}}var FO,MO,HO,lb,BO,QO,pb=y(()=>{"use strict";fe();mn();Et();be();No();yr();nb();ob();ab();FO=A.LOCAL_BINARY_INSPECT,MO=4e3;HO=["file","unzip","tar","bsdtar","7z","7zz","aa","zcat","gunzip","bzcat","xzcat","zstdcat","zstd","lz4cat","brotli","lzfse"],lb=!1;BO=1e3,QO=8});async function fb(e){let{queries:t}=e;return se(t||[],async n=>Ve({toolName:A.LOCAL_BINARY_INSPECT,query:n,contextMessage:"localBinaryInspect execution failed",execute:async()=>{let r=Ue(Tr,n);if(r.ok===!1)return r.error;let o=await db(r.data),i=o,s=typeof i.content=="string"?i.content.length:typeof i.strings=="object"&&i.strings!==null?JSON.stringify(i.strings).length:0;return j(o,s),o}}),{toolName:A.LOCAL_BINARY_INSPECT},e)}var ld=y(()=>{"use strict";ri();fe();je();Fe();oe();Ht();pb()});var zq,kt,Or=y(()=>{"use strict";zq={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 Qq(e){return t=>{}}function mb(e,t){return n=>t}var ud=y(()=>{"use strict"});import{open as KO,readFile as YO,stat as XO}from"fs/promises";import{ContentSanitizer as JO}from"@octocodeai/octocode-engine/contentSanitizer";function dd(e,t){let n=Math.abs(t-e);return n>=50&&n/e>=.02?{sourceChars:e,sourceBytes:t}:{sourceChars:e}}function gb(e,t,n){return{...e,...dd(t,n)}}function ZO(e){let t=e.fullContent===!0,n=e.matchString!==void 0,r=e.startLine!==void 0||e.endLine!==void 0;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 ev(e,t){try{return{fileStats:await XO(t)}}catch(n){let r=Xe.fileAccessFailed(e.path,n instanceof Error?n:void 0);return{errorResult:M(r,e,{toolName:A.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function tv(e,t){return t>kt.LARGE_FILE_THRESHOLD_KB&&!e.matchString&&!e.startLine&&!e.fullContent}function nv(e,t,n){let r=Xe.fileTooLarge(e.path,n,kt.LARGE_FILE_THRESHOLD_KB);return M(r,e,{toolName:A.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}function rv(e,t){let n=Xe.binaryFileUnsupported(e.path);return M(n,e,{toolName:A.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}async function ov(e){let n=Buffer.alloc(8192),r;try{r=await KO(e,"r");let{bytesRead:o}=await r.read(n,0,8192,0);if(o===0)return!1;let i=n.subarray(0,o);if(i.includes(0))return!0;try{new TextDecoder("utf-8",{fatal:!0}).decode(i)}catch{return!0}let s=0,a=0,c=0;for(;c<i.length;){let 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(mb("binary sample handle close",void 0))}}async function iv(e,t){try{return{content:await YO(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:M(i,e,{toolName:A.LOCAL_FETCH_CONTENT,extra:{resolvedPath:t}})}}}function sv(e,t){return{status:"empty",errorCode:$.NO_MATCHES,totalLines:t}}function av(e,t,n){let r=As(t,e.matchString,e.contextLines??5,e.matchStringIsRegex??!1,e.matchStringCaseSensitive??!1);if(r.lines.length===0)return{isPartial:!1,earlyResult:sv(e,n)};let o=r.lines.join(`
|
|
48
|
+
`),i=e.contextLines??5,s=r.matchingLines.slice(0,10).join(", "),a=r.matchingLines.length>10?` (+${r.matchingLines.length-10} more)`:"",c=`Found ${r.matchCount} occurrence${r.matchCount===1?"":"s"} of "${e.matchString}" on line${r.matchingLines.length===1?"":"s"} ${s}${a} \u2014 all shown as ${r.matchRanges.length} slice${r.matchRanges.length===1?"":"s"}, \xB1${i} lines of context each; these lines are lineHint anchors for lspGetSemantics.`,l,u,d;if(r.matchRanges.length>0){let p=r.matchRanges[0],f=r.matchRanges[r.matchRanges.length-1];p&&f&&(l=p.start,u=f.end,r.matchRanges.length>1&&(d=r.matchRanges))}return{resultContent:o,isPartial:!0,actualStartLine:l,actualEndLine:u,matchRanges:d,warnings:[c]}}function cv(e){return e.startLine!==void 0&&e.endLine!==void 0}function lv(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:$.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:$.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:t.slice(i-1,s).join(`
|
|
49
|
+
`),isPartial:!0,actualStartLine:i,actualEndLine:s,warnings:a}}function uv(e,t,n){let r=t.split(`
|
|
50
|
+
`),o=Dt(t);return e.matchString?av(e,r,o):cv(e)?lv(e,r,o):{resultContent:t,isPartial:!1}}function dv(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?F.applyContentViewMinification(t.resultContent,c):t.resultContent,u=e.charLength,d=e.charOffset??0,p=u,f=!1,m=d;p===void 0&&l.length>o&&(p=o,f=!0,a.push(`Auto-paginated: Content (${l.length} chars) exceeds ${o} char limit`));let g="char-limit",b=p;if(p!==void 0){let E=Os(l,m,p,c);g=E.chunkMode,b=E.length}let S=Rr(l,m,b,p!==void 0?{pageSize:p}:void 0),C=t.isPartial||S.hasMore,k;if(S.hasMore&&g==="char-limit"&&Go(S.paginatedContent)){let E=S.charOffset+S.charLength;k=Ho(l,E,c)}let _=S.hasMore&&S.nextCharOffset!==void 0?{continueChars:{tool:"localGetFileContent",query:{path:c,charOffset:S.nextCharOffset,charLength:p??S.charLength,minify:e.minify}}}:void 0;return{path:c,content:S.paginatedContent,...s!=="standard"&&{contentView:s},...C&&{isPartial:C},totalLines:r,...t.actualStartLine!==void 0&&t.actualEndLine!==void 0&&{startLine:t.actualStartLine,endLine:t.actualEndLine,...t.matchRanges!==void 0&&{matchRanges:t.matchRanges}},...n.mtime&&{modified:n.mtime.toISOString()},...(p!==void 0||d>0||f)&&{pagination:{...Ng(S),chunkMode:g,...k!==void 0&&{nextBlockChar:k}}},..._?{next:_}:{},...a.length>0&&{warnings:a}}}function pv(e,t,n=!1){return typeof e.content!="string"?e:{...e,contentView:t,...n?{isSkeleton:!0}:{}}}async function wa(e){let t=et();try{let n=Ke(e,A.LOCAL_FETCH_CONTENT);if(!n.isValid)return n.errorResult;let r=ZO(e);if(r)return r;let o=n.sanitizedPath,i=String(e.path),{fileStats:s,errorResult:a}=await ev(e,o);if(a||!s)return a;let c=typeof s.size=="bigint"?Number(s.size):s.size,l=c/1024;if(await ov(o))return j(rv(e,o),c);if(tv(e,l))return j(nv(e,o,l),c);let{content:u,errorResult:d}=await iv(e,o);if(d||u===void 0)return d;let p=JO.sanitizeContent(u,i),f=p.content,m=f.length,g=Buffer.byteLength(f,"utf-8"),b=p.hasSecrets?`Secrets detected and redacted: ${p.secretsDetected.join(", ")}`:void 0,S=e.minify,C=S==="standard"||S==="symbols",k=C?"standard":"none",_;if(S==="symbols"){let I=F.extractSignatures(f,i);if(I===null){let v=_s(f,i);if(v!==null)return j({path:e.path,content:v,contentView:"symbols",isSkeleton:!0,totalLines:Dt(f),...dd(m,g),...b?{warnings:[b]}:{}},m);_=`minify:"symbols" is not supported for this file type (${i.split(".").pop()??"unknown"}) \u2014 falling back to standard content view.`}if(I!==null){let v=Dt(f),D=F.applyContentViewMinification(I,i);return j({path:e.path,content:D,contentView:"symbols",isSkeleton:!0,totalLines:v,...dd(m,g),...b?{warnings:[b]}:{}},m)}}let E=Dt(f),O=uv(e,f,t),w=I=>{let v=[..._?[_]:[],...b?[b]:[]];if(v.length===0)return I;let D=I.warnings??[];return{...I,warnings:[...D,...v]}};if(O.earlyResult){let I=O.earlyResult.content,v=C&&typeof I=="string"?{...O.earlyResult,content:F.applyContentViewMinification(I,i)}:O.earlyResult;return j(gb(w(pd(pv(v,k),e,E)),m,g),m)}let H=dv(e,O,s,E,t,C,k);return j(gb(w(pd(H,e,E)),m,g),m)}catch(n){return M(n,e,{toolName:A.LOCAL_FETCH_CONTENT})}}function pd(e,t,n){return e}var oi=y(()=>{"use strict";Ls();be();No();vs();Or();br();yr();fe();Et();eo();jn();ud();oe();Is()});import{z as fv}from"zod";import{FetchContentQuerySchema as hb}from"@octocodeai/octocode-core/schemas";var mv,yb,gv,vr,Ta,ii=y(()=>{"use strict";me();Be();tt();mv=fv.enum(["none","standard","symbols"]).optional().default("standard"),yb={startLine:Pr,endLine:Pr,contextLines:Cr.default(5),charOffset:G(0,1e8).optional(),charLength:G(1,5e4).optional(),minify:mv},gv=he(hb,yb),vr=ue(hb,yb),Ta=ie(gv,{maxQueries:5})});async function bb(e){let{queries:t}=e;return se(t||[],async n=>Ve({toolName:A.LOCAL_FETCH_CONTENT,query:n,contextMessage:"localGetFileContent execution failed",execute:async()=>{let r=Ue(vr,n);return r.ok===!1?r.error:await wa(r.data)}}),{toolName:A.LOCAL_FETCH_CONTENT},e)}var fd=y(()=>{"use strict";fe();je();oi();ii();Fe();Ht();oi()});import{z as hv}from"zod";import{FindFilesQuerySchema as yv}from"@octocodeai/octocode-core/schemas";function bv(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 Rb,Sb,Rv,Ar,Ea,si=y(()=>{"use strict";me();Be();tt();Rb={maxDepth:G(0,100).optional(),minDepth:G(0,100).optional(),limit:G(1,1e4).optional(),page:ae.default(1),itemsPerPage:G(1,50).optional()},Sb=hv.object(Object.fromEntries(Object.entries(yv.shape).filter(([e])=>e!=="regexType")));Rv=he(Sb,Rb),Ar=ue(Sb,Rb).superRefine(bv),Ea=ie(Rv,{maxQueries:5})});function Lr(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 ai(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 ci=y(()=>{"use strict"});function Cv(e,t){let n=t??Sv,r=new Set(e.split("/").filter(Boolean));return n.filter(o=>!r.has(o))}async function _r(e){let t=e.details??!1,n=e.showFileLastModified??!1,r=n||(e.sortBy||"modified")==="modified";try{let o=Ke(e,A.LOCAL_FIND_FILES);if(!o.isValid)return o.errorResult;let i={...e,path:o.sanitizedPath},s={...i,excludeDir:Cv(i.path,i.excludeDir)},a=Ev(s),c=e.limit??1e4,l=F.queryFileSystem({path:s.path,recursive:!0,includeRoot:!0,showHidden:!0,maxDepth:s.maxDepth,minDepth:s.minDepth,names:s.names,pathPattern:s.pathPattern,regex:s.regex,entryType:s.entryType,empty:s.empty,modifiedWithin:s.modifiedWithin,modifiedBefore:s.modifiedBefore,accessedWithin:s.accessedWithin,sizeGreater:s.sizeGreater,sizeLess:s.sizeLess,permissions:s.permissions,executable:s.executable,readable:s.readable,writable:s.writable,excludeDir:s.excludeDir,limit:c}),u=l.totalDiscovered,d=l.wasCapped,p=l.entries.map(v=>Pv(v,r)),f=e.sortBy||"modified";xv(p,f,r);let m=wv(p,t,n),g=m.length,b=e.itemsPerPage||20,S=e.page||1,C=Math.max(1,Math.ceil(g/b)),k=(S-1)*b,_=Math.min(k+b,g),O=m.slice(k,_),w=[...l.warnings,...l.skipped>0?[`${l.skipped} entr${l.skipped===1?"y":"ies"} skipped during filesystem traversal`]:[]],H=[...a,...w],I={...g===0?{status:"empty"}:{},path:i.path,files:O,pagination:{currentPage:S,totalPages:C,filesPerPage:b,totalFiles:g,hasMore:S<C,...S<C?{nextPage:S+1}:{},...d?{totalFilesFound:u}:{}},...H.length>0&&{warnings:H}};return j(Cb(I,e,{totalFiles:g}),l.entries.reduce((v,D)=>v+D.path.length,0))}catch(o){return M(o,e,{toolName:A.LOCAL_FIND_FILES})}}function Pv(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 Cb(e,t,n){return e}function xv(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 wv(e,t,n){return e.map(r=>{let o={path:r.path,type:r.type};return r.size!==void 0&&r.type!=="directory"&&(o.sizeFormatted=Lr(r.size)),t&&r.permissions&&(o.permissions=r.permissions),r.modified&&(o.modified=r.modified),o})}function Ev(e){let t=[],n=[{key:"modifiedBefore",value:e.modifiedBefore},{key:"modifiedWithin",value:e.modifiedWithin},{key:"accessedWithin",value:e.accessedWithin}];for(let{key:r,value:o}of n)o&&!Tv.test(o)&&t.push(`${r}="${o}" has an unsupported format \u2014 filter was skipped. Use a relative duration like "7d", "2h", "1w", or "3m".`);return t}var Sv,Tv,li=y(()=>{"use strict";Et();ci();be();fe();me();oe();Sv=[];Tv=/^\d+[hdwm]$/});async function Pb(e){let{queries:t}=e;return se(t||[],async n=>Ve({toolName:A.LOCAL_FIND_FILES,query:n,contextMessage:"localFindFiles execution failed",execute:async()=>{let r=Ue(Ar,n);return r.ok===!1?r.error:await _r(r.data)}}),{toolName:A.LOCAL_FIND_FILES},e)}var md=y(()=>{"use strict";si();fe();je();li();Fe();Ht();li()});import{z as Ir}from"zod";import{RipgrepQuerySchema as xb}from"@octocodeai/octocode-core/schemas";var kv,Ov,wb,vv,Av,Lv,tn,ka,Fr=y(()=>{"use strict";me();Be();tt();kv=["paginated","discovery","detailed","structural"],Ov=["semanticRanking"],wb={mode:Ir.enum(kv).optional().default("paginated").describe('"paginated" snippets; "discovery" paths only; "detailed" snippets plus context; "structural" AST/code-shape search with pattern or rule. Structural matches return line/capture anchors that can feed lspGetSemantics when symbol identity matters.'),pattern:Ir.string().optional().describe("Structural only: code-shaped AST pattern with $X (one node) or $$$ARGS (node list). Use this to find syntax shape, then use lspGetSemantics for semantic proof."),rule:Ir.string().optional().describe("Structural only: YAML ast-grep rule for not/inside/has/all/any. Use for partial or relational AST queries before escalating matched anchors to lspGetSemantics."),contextLines:Cr,matchContentLength:G(1,1e5).optional().default(500),maxMatchesPerFile:G(1,1e5).optional(),maxFiles:G(1,1e5).optional(),matchPage:ae.optional(),itemsPerPage:G(1,1e3).optional(),page:ae.default(1),unique:Ir.boolean().optional().describe("With onlyMatching, return each matched value once per file."),countUnique:Ir.boolean().optional().describe("With onlyMatching, return each matched value once per file with its frequency.")},vv={...wb,semanticRanking:Ir.never().optional()},Av=he(xb,vv),Lv=ue(xb,wb,{strict:!0,omit:Ov}),tn=Lv.superRefine((e,t)=>{let n=e;if(n.caseSensitive&&n.caseInsensitive&&t.addIssue({code:"custom",message:"caseSensitive and caseInsensitive are mutually exclusive.",path:["caseSensitive"]}),n.fixedString&&n.perlRegex&&t.addIssue({code:"custom",message:"fixedString and perlRegex are mutually exclusive.",path:["fixedString"]}),n.filesOnly&&n.filesWithoutMatch&&t.addIssue({code:"custom",message:"filesOnly and filesWithoutMatch are mutually exclusive.",path:["filesOnly"]}),n.countLinesPerFile&&n.countMatchesPerFile&&t.addIssue({code:"custom",message:"countLinesPerFile and countMatchesPerFile are mutually exclusive.",path:["countLinesPerFile"]}),n.multilineDotall&&!n.multiline&&t.addIssue({code:"custom",message:"multilineDotall requires multiline=true.",path:["multilineDotall"]}),n.mode==="structural"){for(let r of["unique","countUnique"])n[r]&&t.addIssue({code:"custom",message:`\`${r}\` is not valid with mode:"structural".`,path:[r]});return}n.unique&&!n.onlyMatching&&t.addIssue({code:"custom",message:"unique requires onlyMatching:true.",path:["unique"]}),n.countUnique&&!n.onlyMatching&&t.addIssue({code:"custom",message:"countUnique requires onlyMatching:true.",path:["countUnique"]})}),ka=ie(Av,{maxQueries:5})});function yd(e){return Ob.exec(e)?.[1]?.toLowerCase()??""}function Qv(e){let t=yd(e);if(!t)return!1;for(let n of Bv)if(ui[n].extensions.includes(t))return!0;return!1}function Uv(e,t,n){if(n&&n!=="auto")return ui[n];let r=yd(e),o=(t??"").toLowerCase();for(let i of Tb){let s=ui[i];if(i!=="generic"&&o&&(i===o||s.extensions.includes(o)))return s}for(let i of Tb){let s=ui[i];if(i!=="generic"&&s.extensions.includes(r))return s}return ui.generic}function vb(e){return Mv.test(e)?"generated":Nv.test(e)?"fixture":Dv.test(e)?"test":Hv.test(e)?"config":Gv.test(e)?"docs":!hd.test(e)&&(zv.test(e)||Qv(e))?"source":"unknown"}function jv(e){if(!e)return;let t=/[A-Za-z_$][\w$]*/.exec(e);return t?t[0]:void 0}function $v(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 qv(e,t,n,r,o){if(!e||e.length===0)return 0;let i=rA(n.keyword),s=0,a="";for(let c of e){let l=c.value??"";if(!l)continue;let u=oA(l,r,n.caseSensitive),d=0,p=[];r&&i&&(new RegExp(`(^|[^\\w$])${Lb(r)}([^\\w$]|$)`,n.caseSensitive?"":"i").test(u)?(d+=ce.exactWholeWord,p.push("whole-word match")):!n.caseSensitive&&u.toLowerCase().includes(r.toLowerCase())?(d+=ce.exactCaseInsensitive,p.push("case-insensitive match")):u.includes(r)&&(d+=ce.substring,p.push("substring match")));let f=c.kind;if(f)d+=Vv(f,p);else{let m=iA(u,r,t.id,n.caseSensitive);m!=="code"?(d+=ce.commentOrStringPenalty,p.push(m==="comment"?"comment match (weak)":"string literal (weak)")):(gd(t.declaration,u)&&(d+=ce.declarationLine,p.push("declaration line")),gd(t.export,u)&&(d+=ce.exportLine,p.push("export/public line")),gd(t.import,u)&&(d+=ce.importLine,p.push("import line")),t.id==="markdown"&&Fv.test(u)&&(d+=ce.headingLine,p.push("markdown heading")),(t.id==="json"||t.id==="yaml")&&Wv(u,r)&&(d+=ce.configKeyLine,p.push("config key match")))}d>s&&(s=d,a=p.join(", "))}return a&&o.push(a),s}function Vv(e,t){switch(e){case"declaration":return t.push("AST: declaration"),ce.declarationLine;case"export":return t.push("AST: export/public"),ce.exportLine;case"configKey":return t.push("AST: config key"),ce.configKeyLine;case"heading":return t.push("AST: heading"),ce.headingLine;case"import":return t.push("AST: import"),ce.importLine;case"comment":case"string":return t.push(`AST: ${e} (weak)`),ce.commentOrStringPenalty;case"callsite":return t.push("AST: callsite"),1;default:return 0}}function Wv(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 Kv(e,t,n,r,o,i){let s=0;if(n){let c=e.toLowerCase(),l=n.toLowerCase();c.split("/").some(u=>u.replace(Ob,"").includes(l))&&(s+=ce.pathSegmentToken,i.push("query token in path"))}let a=yd(e);return r.extensions.includes(a)&&t.langType&&(s+=ce.extMatchesLangType,i.push("extension matches langType")),o==="source"&&(s+=ce.sourceDir,i.push("source file")),s}function Yv(e,t,n){return t.explicitLowSignal?0:e==="generated"||e==="fixture"?(n.push(`${e} file (penalized)`),ce.lowSignalPathPenalty):0}function Xv(e,t){if(e<=0)return 0;let n=Math.log2(e+1)*ce.matchCountScale,r=Math.min(n,ce.matchCountCap);return e>1&&t.push(`match count saturated (${e})`),r}function Jv(e,t){let n=$v(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=>Zv(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 Zv(e,t,n){let r=n?"":"i",o=new RegExp(`(^|[^\\w$])${Lb(t)}([^\\w$]|$)`,r);for(let i of e.matches??[])if(o.test(i.value??""))return!0;return o.test(e.path)}function eA(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*ce.rareQueryTokenScale,ce.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 tA(e,t,n){let r=Uv(e.path,t.langType,t.profileOverride),o=vb(e.path),i=jv(t.keyword),s=[],a=0;return a+=qv(e.matches,r,t,i,s),a+=Kv(e.path,t,i,r,o,s),t.queryPath&&e.path.startsWith(t.queryPath.replace(/\/+$/,"")+"/")&&(a+=ce.pathUnderQuery,s.push("under requested subtree")),a+=Yv(o,t,s),hd.test(e.path)&&!t.explicitLowSignal&&(a+=ce.lowSignalPathPenalty,s.push("low-signal path (penalized)")),a+=Xv(e.matchCount??0,s),a+=eA(e,n,s),{score:Math.round(a*100)/100,profile:r.id,pathRole:o,reasons:s}}function Ab(e,t,n,r={}){if(t==="matchCount")return{files:[...e].sort(kb),cappedCandidates:0};if(t==="path")return{files:[...e].sort((d,p)=>d.path.localeCompare(p.path)),cappedCandidates:0};if(t==="created"||t==="modified"||t==="accessed")return{files:[...e],cappedCandidates:0};let o=r.candidateCap??_v,i=e,s=[],a=0;if(e.length>o){let d=[...e].sort(kb);i=d.slice(0,o),s=d.slice(o),a=s.length}let c=Jv(i,n),l=i.map(d=>{try{return{file:d,s:tA(d,n,c)}}catch{return{file:d,s:nA()}}});l.sort((d,p)=>{if(p.s.score!==d.s.score)return p.s.score-d.s.score;let f=(p.file.matchCount??0)-(d.file.matchCount??0);return f!==0?f:d.file.path.localeCompare(p.file.path)});let u={files:[...l.map(d=>d.file),...s],cappedCandidates:a};return r.debug&&(u.debug=new Map(l.map(d=>[d.file.path,d.s]))),u}function nA(){return{score:0,profile:"generic",pathRole:"unknown",reasons:["ranking unavailable for this file"]}}function kb(e,t){let n=(t.matchCount??0)-(e.matchCount??0);return n!==0?n:e.path.localeCompare(t.path)}function gd(e,t){for(let n of e)if(n.test(t))return!0;return!1}function Lb(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function rA(e){return!!e&&/^[A-Za-z_$][\w$]*$/.test(e.trim())}function oA(e,t,n){if(e.indexOf(`
|
|
51
|
+
`)<0)return e;let o=e.split(`
|
|
52
|
+
`);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 iA(e,t,n,r){if(n==="markdown")return/<!--/.test(e)?"comment":"code";if(n==="json")return"code";if(Iv.test(e))return"comment";let o=sA(e,t,r);if(o<0)return"code";let i=aA(e);return i>=0&&o>i?"comment":cA(e,o)?"string":"code"}function sA(e,t,n){return t?n?e.indexOf(t):e.toLowerCase().indexOf(t.toLowerCase()):-1}function aA(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 cA(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 _b(e){if(!e)return!1;if(hd.test(e))return!0;let t=vb(e);return t==="test"||t==="docs"||t==="fixture"||t==="generated"}var Tb,ce,_v,Iv,Eb,ui,Fv,hd,Mv,Dv,Nv,Gv,Hv,zv,Bv,Ob,Ib=y(()=>{"use strict";Tb=["typescript","javascript","rust","python","go","java","scala","markdown","json","yaml","generic"],ce={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,rareQueryTokenScale:2,rareQueryTokenCap:3,matchCountScale:1.5,matchCountCap:6},_v=2e3,Iv=/^\s*(\/\/|#|\*|\/\*|<!--|--)/,Eb={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+['"]/]},ui={typescript:{id:"typescript",extensions:["ts","tsx","mts","cts"],...Eb},javascript:{id:"javascript",extensions:["js","jsx","mjs","cjs"],...Eb},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/]}},Fv=/^\s*#{1,6}\s/,hd=/(^|\/)(dist|build|out|coverage|node_modules|vendor|\.next|__snapshots__)(\/|$)/,Mv=/(\.min\.|\.bundle\.|\.generated\.|\.d\.ts$|-lock\.)/,Dv=/(^|\/)(tests?|__tests__|spec|e2e)(\/|$)|\.(test|spec)\./,Nv=/(^|\/)(fixtures?|__fixtures__|snapshots?)(\/|$)/,Gv=/(^|\/)(docs?|examples?)(\/|$)|\.(md|markdown|mdx|rst|txt)$/i,Hv=/(^|\/)(config|\.github)(\/|$)|\.(json|ya?ml|toml|ini|cfg|conf|env)$|(^|\/)[^/]*\.config\.[jt]s$/i,zv=/(^|\/)(src|lib|app|packages|internal|pkg|cmd|crates|include|sources?)(\/|$)/,Bv=new Set(["typescript","javascript","rust","python","go","java","scala"]),Ob=/\.([a-z0-9]+)$/i});async function va(e,t,n,r,o){let i=t.sort??"relevance",s;try{s=Ab(e,i,gA(t),{debug:!!t.debugRanking})}catch{s={files:e,cappedCandidates:0},r.push("Relevance ranking failed; returning results in unranked engine order.")}let a=s.files,c=s.debug,l=a.length,u=!!(t.filesOnly||t.filesWithoutMatch),d=!!(t.countLinesPerFile||t.countMatchesPerFile),p=u||d,f=a.reduce((D,Q)=>D+(Q.matchCount??0),0),m=p?o?.totalOccurrences??o?.totalStructuralMatches??f:f,g=t,b=Math.min(g.itemsPerPage||kt.DEFAULT_FILES_PER_PAGE,t.maxFiles||Number.POSITIVE_INFINITY),S=g.page||1,C=Math.max(1,Math.ceil(l/b)),k=(S-1)*b,_=Math.min(k+b,l),E=a.slice(k,_),O=g.maxMatchesPerFile||kt.DEFAULT_MATCHES_PER_PAGE,w=E.map(D=>{let Q=D.matches?.length??0,ee=Math.ceil(Q/O),B=Math.max(1,g.matchPage||1),Me=(B-1)*O,Ee=Math.min(Me+O,Q),Ct=p?void 0:D.matches?.slice(Me,Ee),dn=Ct?.length,Y=c?.get(D.path);return{path:D.path,...u?{}:t.countLinesPerFile?{totalMatchedLines:D.matchCount||1}:t.countMatchesPerFile?{totalOccurrences:D.matchCount||1}:{totalMatchRows:Q,...dn!==void 0?{returnedMatchRows:dn}:{}},...Ct!==void 0&&{matches:Ct},...Y?{ranking:{score:Y.score,profile:Y.profile,pathRole:Y.pathRole,reasons:Y.reasons}}:{},pagination:!p&&Q>O?{currentPage:B,totalPages:ee,matchesPerPage:O,totalMatches:Q,hasMore:B<ee,...B<ee?{nextMatchPage:B+1}:{}}:void 0}}),H=w.filter(D=>D.pagination?.hasMore),I=dA(w,t,n,{isFileListMode:p,currentPage:S,totalFilePages:C,matchPage:g.matchPage||1,matchesPerPage:O,hasFileWithMoreMatches:H.length>0}),v={searchEngine:n,...o?{stats:o}:{},files:w,pagination:{currentPage:S,totalPages:C,filesPerPage:b,totalFiles:l,...u?{}:{totalMatches:m},hasMore:S<C,...S<C?{nextPage:S+1}:{}},...r.length>0?{warnings:r}:{},...Object.keys(I).length>0?{next:I}:{}};return Mb(v,t,{totalMatches:m,totalFiles:l})}function Mb(e,t,n){return e}function dA(e,t,n,r){let o=e.find(a=>a.path),i=o?.matches?.find(a=>a.line),s={};if(o?.path){if(i?.line){let c=pA(i);s.fetchExact={tool:"localGetFileContent",query:Oa({path:o.path,startLine:c.startLine,endLine:c.endLine,minify:"none"}),why:"Read exact source around the first grep match before editing, quoting, or validating comments/tests.",confidence:"exact"},s.fetchStandard={tool:"localGetFileContent",query:Oa({path:o.path,startLine:c.startLine,endLine:c.endLine,minify:"standard"}),why:"Read a token-efficient source slice around the first grep match.",confidence:"exact"}}else r.isFileListMode&&(s.fetchStandard={tool:"localGetFileContent",query:{path:o.path,minify:"standard"},why:"Read the first matched file from file-list/count mode.",confidence:"heuristic"});s.fetchSymbols={tool:"localGetFileContent",query:{path:o.path,minify:"symbols"},why:"Get a symbol skeleton for fast orientation before opening large bodies.",confidence:"exact"};let a=fA(i,t,n);if(a&&i?.line){let c={uri:o.path,symbolName:a,lineHint: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:"heuristic"},s.lspReferences={tool:"lspGetSemantics",query:{...c,type:"references"},why:"Use the grep line as an LSP lineHint to inspect semantic usages.",confidence:"heuristic"}}}return r.currentPage<r.totalFilePages&&(s.nextPage={tool:"localSearchCode",query:Oa({...t,page:r.currentPage+1}),why:"Continue to the next page of matched files.",confidence:"exact"}),r.hasFileWithMoreMatches&&(s.nextMatchPage={tool:"localSearchCode",query:Oa({...t,maxMatchesPerFile:r.matchesPerPage,matchPage:r.matchPage+1}),why:"Continue within files that have more matches than this response returned.",confidence:"exact"}),s}function pA(e){let t=Math.max(1,e.line??1),n=Math.max(t,e.endLine??t);return{startLine:Math.max(1,t-Fb),endLine:n+Fb}}function fA(e,t,n){if(!(t.countLinesPerFile||t.countMatchesPerFile||t.countUnique||t.unique)){if(n==="structural")return mA(e?.metavars);if(!t.matchWindow)return t.onlyMatching?bd(e?.value):bd(t.keywords)}}function mA(e){if(e)for(let t of Object.values(e))for(let n of t){let r=bd(n);if(r)return r}}function bd(e){if(typeof e!="string")return;let t=e.trim();if(uA.test(t)&&!lA.has(t))return t}function Oa(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function gA(e){let t=e.rankingProfile,n=!!(e.include?.length||_b(e.path));return{queryPath:e.path,keyword:e.keywords,langType:e.langType,caseSensitive:e.caseSensitive,wholeWord:e.wholeWord,profileOverride:t,explicitLowSignal:n}}var Fb,lA,uA,di=y(()=>{"use strict";Or();Ib();Fb=8,lA=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"]),uA=/^[A-Za-z_$][A-Za-z0-9_$]*$/});function Db(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=F.validateRipgrepPattern(r,e.fixedString,e.perlRegex);return o.valid||t.push(`invalid regex: ${o.error??"unknown regex parse error"}`),!e.fixedString&&hA(r)&&n.push(`pattern '${r}' looks literal \u2014 pass fixedString: true to skip regex parsing and avoid accidental wildcards`),!e.perlRegex&&yA(r)&&n.push("pattern uses lookaround (?= / ?! / ?<= / ?<!) which requires perlRegex: true; ripgrep will refuse it otherwise"),{isValid:t.length===0,errors:t,warnings:n}}function hA(e){return/[\\^$|()[\]{}+*?]/.test(e)?!1:!!(e.includes(".")&&/^[\w.\-/:]+$/.test(e))}function yA(e){return/\(\?[=!<]/.test(e)}var Rd=y(()=>{"use strict";be()});import{validateRipgrepQuery as bA}from"@octocodeai/octocode-core/schemas/runtime";function RA(e){return e==="created"||e==="modified"||e==="accessed"?e:"path"}function SA(e){return{path:e.path,pattern:e.keywords??"",fixedString:e.fixedString,perlRegex:e.perlRegex,caseSensitive:e.caseSensitive,caseInsensitive:e.caseInsensitive,wholeWord:e.wholeWord,invertMatch:e.invertMatch,multiline:e.multiline,multilineDotall:e.multilineDotall,filesOnly:e.filesOnly,filesWithoutMatch:e.filesWithoutMatch,countLinesPerFile:e.countLinesPerFile,countMatchesPerFile:e.countMatchesPerFile,contextLines:e.contextLines,langType:e.langType,include:e.include,exclude:e.exclude,excludeDir:e.excludeDir,noIgnore:e.noIgnore,hidden:e.hidden,sort:RA(e.sort),sortReverse:e.sortReverse,classifyMatches:e.sort==="relevance"||e.sort===void 0,maxSnippetChars:e.matchContentLength,onlyMatching:e.onlyMatching,unique:e.unique,countUnique:e.countUnique,matchWindow:e.matchWindow}}function CA(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 Nb(e){let t=[],n=bA(e);if(!n.isValid)return M(new Error(`Query validation failed: ${n.errors.join("; ")}`),e,{toolName:A.LOCAL_RIPGREP,extra:{warnings:n.warnings}});t.push(...n.warnings);let r=tn.safeParse(e);if(!r.success){let g=r.error.issues.map(b=>b.message);return M(new Error(`Query validation failed: ${g.join(", ")}`),e,{toolName:A.LOCAL_RIPGREP,extra:{warnings:t}})}let o=r.data;if(!o.path)return M(new Error("Path is required for search"),o,{toolName:A.LOCAL_RIPGREP,extra:{warnings:t}});let s=Ke(o,A.LOCAL_RIPGREP);if(!s.isValid)return s.errorResult;let a={...o,path:s.sanitizedPath},c=Db({pattern:a.keywords??"",fixedString:a.fixedString,perlRegex:a.perlRegex});if(!c.isValid)return M(new Error(`Pattern validation failed: ${c.errors.join("; ")}`),o,{toolName:A.LOCAL_RIPGREP,extra:{warnings:[...t,...c.warnings]}});let l=[...c.warnings],u;try{u=await F.searchRipgrep(SA(a))}catch(g){return M(g instanceof Error?g:new Error(String(g)),o,{toolName:A.LOCAL_RIPGREP})}let d=u.files.map(g=>({path:g.path,matchCount:g.matchCount,matches:g.matches.map(b=>{let S={line:b.line,column:b.column,value:b.value};return b.count!==void 0&&(S.count=b.count),b.kind!==void 0&&(S.kind=b.kind),b.scoreHint!==void 0&&(S.scoreHint=b.scoreHint),S})})),p=CA(d),f={totalOccurrences:u.stats.matchCount,matchedLines:u.stats.matchedLines,filesMatched:u.stats.filesMatched,filesSearched:u.stats.filesSearched,bytesSearched:u.stats.bytesSearched??void 0,searchTime:u.stats.searchTime};if(d.length===0)return j({status:"empty",searchEngine:"rg",stats:f,warnings:[...t,...l]},p);!a.filesOnly&&p>kt.LARGE_RESULT_BYTES_HINT&&l.push(`Result payload is large (~${Math.round(p/1024)}KB).`);let m=await va(d,o,"rg",[...t,...l],f);return j(m,p)}var Sd=y(()=>{"use strict";Et();Fr();Or();fe();di();Rd();oe();be()});function wA(e){return e.trim().replace(/^\./,"").toLowerCase()}function Mr(e){if(!e?.trim())return;let t=wA(e),n=PA[t]??xA[t];return n?{raw:e,normalized:t,...n}:{raw:e,normalized:t,kind:"unknown",canonicalLanguage:e.trim()}}function TA(e){return[...e??[]].map(t=>`**/*.${t}`)}function Cd(e){return[...e??[]].map(t=>`*.${t}`)}function Aa(e){let t=Mr(e);return t?t.kind==="extension"&&t.extension?{extension:t.extension}:t.canonicalLanguage?{language:t.canonicalLanguage}:{}:{}}function Pd(e){let t=Mr(e);return t?t.kind==="extension"&&t.extension?{include:TA([t.extension])}:t.kind==="language"?{langType:t.normalized}:t.normalized?{langType:t.normalized}:{}:{}}function xd(e){let t=Mr(e);return t?t.kind==="extension"&&t.extension?Cd([t.extension]):t.kind==="language"?Cd(t.extensions):t.normalized?Cd([t.normalized]):[]:[]}function Gb(e){let t=Mr(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}function wd(e){return Mr(e)?.canonicalLanguage}var PA,xA,Td=y(()=>{"use strict";PA={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"]}},xA={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"]}}});import{readFile as EA,stat as kA}from"node:fs/promises";function LA(e){if(!e||!/\)\s*\{/.test(e))return"";let t=e.replace(/\)\s*\{/,"): $R {");return t===e?"":` Try: \`${t}\`.`}function zb(e){return e.include?.length?e.include:Gb(e.langType)}async function _A(e){try{return(await kA(e)).isFile()}catch{return!1}}async function IA(e,t){let n=await EA(e,"utf8"),r=F.structuralSearch(n,e,t.pattern,t.rule);return{files:r.length>0?[{path:e,matches:r}]:[],totalMatches:r.length,parsedFiles:1,skippedByPreFilter:0,skippedUnreadable:0,skippedLarge:0,warnings:[]}}async function Bb(e){let t=Ke(e,A.LOCAL_RIPGREP);if(!t.isValid)return t.errorResult;let n;try{n=await _A(t.sanitizedPath)?await IA(t.sanitizedPath,e):F.structuralSearchFiles({path:t.sanitizedPath,pattern:e.pattern,rule:e.rule,...zb(e)?{include:zb(e)}:{},...e.exclude?.length?{exclude:e.exclude}:{},...e.excludeDir?.length?{excludeDir:e.excludeDir}:Hb.length?{excludeDir:Hb}:{},...e.hidden!==void 0?{hidden:e.hidden}:{},...e.noIgnore!==void 0?{noIgnore:e.noIgnore}:{},maxFiles:e.maxFiles??OA,maxFileBytes:vA})}catch(s){let a=s instanceof Error?s.message:String(s),c=e.langType||"source";return M(new Error(`Invalid structural ${e.rule?"rule":"pattern"}: ${a} \u2014 patterns must be valid ${c} and match a complete node; a class/def usually needs a body (add \`$$$BODY\`). Run \`octocode tools localSearchCode --scheme\` for the live schema.`),e,{toolName:A.LOCAL_RIPGREP})}let r=n.files.map(s=>({path:s.path,matchCount:s.matches.length,matches:s.matches.map(a=>({line:a.startLine,endLine:a.endLine,value:a.text.split(`
|
|
53
|
+
`,1)[0],column:a.startCol,endColumn:a.endCol,metavars:a.metavars,...a.metavarRanges&&Object.keys(a.metavarRanges).length>0?{metavarRanges:a.metavarRanges}:{}}))})),o={totalStructuralMatches:n.totalMatches},i=[...n.warnings];return(r.length===0||n.totalMatches===0)&&e.pattern&&!e.rule&&i.push(AA+LA(e.pattern)),await va(r,e,"structural",i,o)}var Hb,OA,vA,AA,Qb=y(()=>{"use strict";be();Et();fe();Td();di();Hb=[],OA=2e3,vA=1e6,AA="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 FA(e){let t=e.mode;if(!t)return e;let n={...e};return t==="discovery"&&n.filesOnly===void 0?n.filesOnly=!0:t==="detailed"&&n.contextLines===void 0&&(n.contextLines=3),n}async function nn(e){let t=FA(e);if(t.mode==="structural")return await Bb(t);t.contextLines===void 0&&(t.contextLines=2);try{return await Nb(t)}catch(n){let r=n instanceof Error?n.message:String(n);return r.includes("Output size limit exceeded")?{status:"error",error:r,errorCode:$.OUTPUT_TOO_LARGE}:M(n,t,{toolName:A.LOCAL_RIPGREP})}}var La=y(()=>{"use strict";Et();jn();fe();Sd();Qb()});async function Ub(e){let{queries:t}=e;return se(t||[],async n=>Ve({toolName:A.LOCAL_RIPGREP,query:n,contextMessage:"localSearchCode execution failed",execute:async()=>{let r=Ue(tn,n);return r.ok===!1?r.error:await nn(r.data)}}),{toolName:A.LOCAL_RIPGREP},e)}var Ed=y(()=>{"use strict";Fr();fe();je();La();Fe();Ht();di()});import{ViewStructureQuerySchema as jb}from"@octocodeai/octocode-core/schemas";var $b,MA,Dr,_a,pi=y(()=>{"use strict";me();Be();tt();$b={maxDepth:G(0,20).optional(),limit:G(1,1e4).optional(),page:ae.default(1),itemsPerPage:G(1,50).optional()},MA=he(jb,$b),Dr=ue(jb,$b),_a=ie(MA,{maxQueries:5})});function GA(e,t){let n=t+1;for(;n<e.length&&e[n]!=="]";)e[n]==="\\"&&n++,n++;return n+1}function qb(e,t){let n=e[t];return n===void 0?!1:DA.has(n)||n==="{"&&BA(e,t)}function HA(e,t,n){let r=n.pop()??!1,o=qb(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?Vb(e,t+1):t+1})}function zA(e,t,n){return n.some(r=>r)?{unsafe:!0,next:t+1}:(n.length>0&&(n[n.length-1]=!0),{unsafe:!1,next:Vb(e,t)})}function kd(e){if(e.length>NA)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=GA(e,r);continue}if(o==="("){n.push(!1),r++;continue}if(o===")"){let i=HA(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}if(qb(e,r)){let i=zA(e,r,n);if(i.unsafe)return{safe:!1,reason:t};r=i.next;continue}r++}return{safe:!0}}function BA(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 Vb(e,t){return e[t]==="{"?t=e.indexOf("}",t)+1:t++,t<e.length&&(e[t]==="?"||e[t]==="+")&&t++,t}function GW(e,t){let n=kd(e);if(!n.safe)throw new Error(n.reason);return new RegExp(e,t)}var DA,NA,Od=y(()=>{"use strict";DA=new Set(["+","*","?"]),NA=1e3});function Wb(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(!kd(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 t.directoriesOnly&&(n=n.filter(r=>r.type==="directory")),t.filesOnly&&(n=n.filter(r=>r.type==="file")),n}function Kb(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 Yb(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 vd=y(()=>{"use strict";Od()});function Ad(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+ai(i.size):o,0);return`${e.length} entries (${t} files, ${n} dirs, ${Lr(r)})`}function Ld(e,t){let n=e.length,r=t.itemsPerPage||kt.DEFAULT_ENTRIES_PER_PAGE,o=Math.max(1,Math.ceil(n/r)),i=Math.min(t.page||1,o),s=(i-1)*r,a=Math.min(s+r,n),c=i<o;return{paginatedEntries:e.slice(s,a),endIdx:a,pagination:{currentPage:i,totalPages:o,entriesPerPage:r,totalEntries:n,hasMore:c,...c?{nextPage:i+1}:{}}}}function QA(e,t,n,r){if(!n.hasMore)return[];let o=e.slice(r,r+3).map(i=>i.name).join(", ");return[`Page ${n.currentPage}/${n.totalPages} (showing ${t} of ${n.totalEntries}). Next: page=${n.currentPage+1}${o?` (starts with: ${o}...)`:""}`]}function _d(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 Id=y(()=>{"use strict";Or();ci()});async function Ia(e){try{let t=Ke(e,A.LOCAL_VIEW_STRUCTURE);if(!t.isValid)return t.errorResult;let n=e.showFileLastModified??(e.sortBy==="time"||e.details===!0);return UA(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}}}function UA(e,t,n=!1){let r=!!(e.maxDepth||e.recursive),o=r?e.maxDepth||(e.recursive?5:2):1,i=$A(e),s=r&&e.limit&&!jA(e,i)?e.limit*2:1e4,a;try{a=F.queryFileSystem({path:t,recursive:r,includeRoot:!1,showHidden:e.hidden??!1,maxDepth:o,names:i,extensions:e.extensions,entryType:qA(e),limit:s})}catch(k){return KA(k,e,t)}let c=a.entries.map(k=>VA(k,n,e.details??!1)),l=Wb(c,e),u=e.sortBy??"name";l=l.sort((k,_)=>{let E=0;switch(u){case"size":{let O=k.sizeBytes??(k.size?ai(k.size):0),w=_.sizeBytes??(_.size?ai(_.size):0);E=O-w;break}case"time":n&&k.modified&&_.modified?E=k.modified.localeCompare(_.modified):E=k.name.localeCompare(_.name);break;case"extension":E=(k.extension||"").localeCompare(_.extension||"");break;default:E=k.name.localeCompare(_.name);break}return e.reverse?-E:E}),e.limit&&(l=l.slice(0,e.limit));let d=l.length,{paginatedEntries:p,pagination:f}=Ld(l,e),g=e.details===!0||e.showFileLastModified===!0?{path:t,entries:p.map(k=>({...Yb(k),path:k.path??`${t.replace(/\/$/,"")}/${k.name}`}))}:{path:t,...Kb(p)},b=[...a.warnings,..._d({skipped:a.skipped,permissionDenied:a.permissionDenied}),...a.wasCapped?[`Results capped at ${s} entries \u2014 add a pattern/extensions filter or reduce depth to narrow the scope.`]:[]],S=d===0,C=Ad(l);return j(Xb({...S?{status:"empty"}:{},...g,summary:C,...f.hasMore||f.totalPages>1?{pagination:f}:{},...b.length>0&&{warnings:b}},e),a.entries.reduce((k,_)=>k+_.path.length,0))}function jA(e,t){return!!((typeof e.pattern=="string"?e.pattern:void 0)&&!t)}function $A(e){let t=typeof e.pattern=="string"?e.pattern:void 0;if(t&&!t.includes("["))return t.includes("*")||t.includes("?")?[t]:[`*${t}*`]}function qA(e){if(e.filesOnly&&!e.directoriesOnly)return"f";if(e.directoriesOnly&&!e.filesOnly)return"d"}function VA(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:Lr(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=WA(e.permissions)),o}function WA(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 KA(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 M(a,t,{toolName:A.LOCAL_VIEW_STRUCTURE})}function Xb(e,t){return e}var fi=y(()=>{"use strict";ci();fe();Et();eo();vd();Id();oe();be()});async function Jb(e){let{queries:t}=e;return se(t||[],async n=>Ve({toolName:A.LOCAL_VIEW_STRUCTURE,query:n,contextMessage:"localViewStructure execution failed",execute:async()=>{let r=Ue(Dr,n);return r.ok===!1?r.error:await Ia(r.data)}}),{toolName:A.LOCAL_VIEW_STRUCTURE,keysPriority:["path","summary","pagination","files","folders","entries"]},e)}var Fd=y(()=>{"use strict";pi();fe();je();fi();Fe();Ht();fi()});function eR(e){return Array.isArray(e.queries)}function tR(e){return Array.isArray(e.queries)}function nR(e){return Array.isArray(e.children)}var rn,Fa,Zb,mi=y(()=>{"use strict";rn=["code","content","structure","files","semantics","repositories","packages","pullRequests","commits","artifacts","diff","research","graph","materialize"],Fa=["fixes","dataflow"],Zb=["packages","repositories"]});import{z as h}from"zod";var Dd,Md,YA,rR,oR,XA,JA,Nr,iR,ZA,eL,An,sR,aR,cR,lR,Ma,tL,dK,nL,rL,uR,Nd,Da,dR,pR,Ln,Gr=y(()=>{"use strict";mi();Dd=h.lazy(()=>h.union([h.strictObject({kind:h.literal("local"),path:h.string().min(1)}),h.strictObject({kind:h.literal("github"),repo:h.string().min(1).optional(),owner:h.string().min(1).optional(),ref:h.string().min(1).optional()}),h.strictObject({kind:h.literal("materialized"),localPath:h.string().min(1),source:Dd.optional()}),h.strictObject({kind:h.literal("npm")})])),Md=h.union([h.string(),h.array(h.string()).max(100)]),YA=h.strictObject({path:Md.optional(),language:Md.optional(),include:h.array(h.string()).max(100).optional(),exclude:h.array(h.string()).max(100).optional(),excludeDir:h.array(h.string()).max(100).optional(),hidden:h.boolean().optional(),noIgnore:h.boolean().optional(),minDepth:h.number().int().min(0).max(64).optional(),maxDepth:h.number().int().min(0).max(64).optional()}).optional(),rR=h.enum(["smart","sensitive","insensitive"]),oR=h.string().max(1e4),XA=h.strictObject({id:h.string().optional(),kind:h.literal("text"),value:oR,case:rR.optional(),wholeWord:h.boolean().optional()}),JA=h.strictObject({id:h.string().optional(),kind:h.literal("regex"),value:oR,dialect:h.enum(["rust","pcre2","provider"]).optional(),case:rR.optional(),wholeWord:h.boolean().optional(),multiline:h.boolean().optional(),dotAll:h.boolean().optional()}),Nr=h.lazy(()=>h.strictObject({pattern:h.string().optional(),kind:h.string().optional(),inside:Nr.optional(),has:Nr.optional(),not:Nr.optional(),all:h.array(Nr).optional(),any:h.array(Nr).optional(),stopBy:h.literal("end").optional()})),iR=h.union([Nr,h.string().min(1)]),ZA=h.strictObject({id:h.string().optional(),kind:h.literal("structural"),lang:h.string().min(1),pattern:h.string().optional(),rule:iR.optional()}),eL=h.strictObject({id:h.string().optional(),kind:h.literal("field"),field:h.enum(["path","basename","extension","size","modified","accessed","empty","permissions","executable","readable","writable","entryType"]),op:h.enum(["=","!=","in","exists","glob","regex",">",">=","<","<=","within","before"]),value:h.unknown().optional()}),An=h.lazy(()=>h.discriminatedUnion("kind",[h.strictObject({kind:h.literal("all"),id:h.string().optional(),of:h.array(An).min(1)}),h.strictObject({kind:h.literal("any"),id:h.string().optional(),of:h.array(An).min(1)}),h.strictObject({kind:h.literal("not"),id:h.string().optional(),predicate:An}),XA,JA,ZA,eL])),sR=h.strictObject({mode:h.enum(["never","auto","required"]),strategy:h.enum(["file","tree","subtree","repo"]).optional(),allowFullRepo:h.boolean().optional(),forceRefresh:h.boolean().optional()}),aR=h.strictObject({content:h.strictObject({range:h.strictObject({startLine:h.number().int().min(1).optional(),endLine:h.number().int().min(1).optional(),contextLines:h.number().int().min(0).max(100).optional()}).optional(),match:h.strictObject({text:h.string(),regex:h.boolean().optional(),caseSensitive:h.boolean().optional()}).optional(),contentView:h.enum(["exact","compact","symbols"]).optional(),charOffset:h.number().int().min(0).max(1e8).optional(),charLength:h.number().int().min(1).max(5e4).optional(),fullContent:h.boolean().optional()}).optional(),tree:h.strictObject({maxDepth:h.number().int().min(0).max(64).optional(),pattern:h.string().optional(),includeSizes:h.boolean().optional(),extensions:h.array(h.string()).optional(),filesOnly:h.boolean().optional(),directoriesOnly:h.boolean().optional(),sortBy:h.enum(["name","size","time","extension"]).optional(),reverse:h.boolean().optional()}).optional()}),cR=h.strictObject({search:h.strictObject({countLinesPerFile:h.boolean().optional(),countMatchesPerFile:h.boolean().optional(),onlyMatching:h.boolean().optional(),unique:h.boolean().optional(),countUnique:h.boolean().optional(),contextLines:h.number().int().min(0).max(100).optional(),invertMatch:h.boolean().optional(),matchWindow:h.number().int().min(0).optional(),matchContentLength:h.number().int().min(1).optional(),maxMatchesPerFile:h.number().int().min(1).optional(),matchPage:h.number().int().min(1).optional(),sort:h.enum(["relevance","matchCount","path","modified","accessed","created"]).optional(),sortReverse:h.boolean().optional(),rankingProfile:h.string().optional(),debugRanking:h.boolean().optional()}).optional(),budget:h.strictObject({maxFiles:h.number().int().min(1).optional(),maxCandidates:h.number().int().min(1).optional(),maxBytes:h.number().int().min(1).optional(),maxMaterializedBytes:h.number().int().min(1).optional(),maxPlanNodes:h.number().int().min(1).optional(),maxBooleanExpansion:h.number().int().min(1).optional(),timeoutMs:h.number().int().min(1).optional()}).optional()}),lR=h.enum(["discovery","paginated","detailed"]),Ma=h.strictObject({schema:h.literal("oql"),id:h.string().optional(),target:h.enum(rn),from:Dd.optional(),scope:YA,where:An.optional(),materialize:sR.optional(),fetch:aR.optional(),select:h.array(h.string()).optional(),view:lR.optional(),controls:cR.optional(),limit:h.number().int().min(1).optional(),page:h.number().int().min(1).optional(),itemsPerPage:h.number().int().min(1).optional(),params:h.record(h.string(),h.unknown()).optional(),explain:h.boolean().optional()}),tL=h.strictObject({schema:h.literal("oql"),id:h.string().optional(),queries:h.array(Ma).min(1).max(5),combine:h.enum(["independent","merge"]).optional(),limit:h.number().int().min(1).optional(),page:h.number().int().min(1).optional(),itemsPerPage:h.number().int().min(1).optional(),explain:h.boolean().optional()}),dK=h.union([Ma,tL]),nL=rn,rL=[...rn,...Fa],uR={schema:h.literal("oql").optional(),id:h.string().optional(),mainResearchGoal:h.string().optional(),researchGoal:h.string().optional(),reasoning:h.string().optional()},Nd={...uR,target:h.enum(rL).optional().describe("REQUIRED unless inferable from sugar (text/regex/pattern/rule/boolean \u2192 code, fetch.content \u2192 content, fetch.tree \u2192 structure). One of the active targets \u2014 run `search --scheme` for the full list and recipes."),from:Dd.optional().describe('Source. Defaults to local cwd when omitted; use {kind:"github",owner,repo} for remote or {kind:"materialized",localPath} after a fetch/clone.'),where:An.optional().describe("Canonical predicate tree (kind: text | regex | structural | field | all | any | not). Mutually exclusive with the flat shorthand fields (text/regex/pattern/and/or/...): use ONE shape, not both."),materialize:h.union([sR,h.enum(["never","auto","required"])]).optional(),fetch:aR.optional(),select:h.array(h.string()).optional(),view:lR.optional(),controls:cR.optional(),limit:h.number().int().min(1).optional(),page:h.number().int().min(1).optional(),itemsPerPage:h.number().int().min(1).optional(),params:h.record(h.string(),h.unknown()).optional(),explain:h.boolean().optional(),repo:h.string().optional(),owner:h.string().optional(),ref:h.string().optional(),path:Md.optional(),text:h.string().optional().describe("Shorthand text search (\u2192 where.text, target code). Do not combine with a canonical `where`."),regex:h.string().optional(),pattern:h.string().optional().describe("Shorthand AST/structural pattern (\u2192 structural where, target code). A function pattern must match a COMPLETE node \u2014 include return type (e.g. `function $N($$$A): $R { $$$B }`) or use a `rule` for partial/relational matches."),rule:iR.optional(),lang:h.string().optional(),and:h.array(h.unknown()).optional(),or:h.array(h.unknown()).optional(),xor:h.array(h.unknown()).optional(),noneOf:h.array(h.unknown()).optional(),oneOf:h.array(h.unknown()).optional(),invert:h.unknown().optional(),filesOnly:h.boolean().optional(),filesWithoutMatch:h.boolean().optional(),verbose:h.boolean().optional()},Da=h.object({...Nd,target:h.enum(nL).optional().describe("REQUIRED unless inferable from sugar (text/regex/pattern/rule/boolean \u2192 code, fetch.content \u2192 content, fetch.tree \u2192 structure). One of the active targets \u2014 run `search --scheme` for the full list and recipes.")}).catchall(h.unknown()),dR=h.object(Nd).catchall(h.unknown()),pR=h.object({...uR,queries:h.array(h.unknown()).min(1)}).catchall(h.unknown()),Ln=h.object({...Nd,queries:h.array(h.unknown()).min(1).max(5).optional(),combine:h.enum(["independent","merge"]).optional()}).catchall(h.unknown())});function x(e,t,n={}){let r=n.severity??(iL.has(e)?"error":"warning"),o=n.blocksAnswer??(oL.has(e)||r==="error");return{code:e,severity:r,message:t,blocksAnswer:o,...n.queryPath?{queryPath:n.queryPath}:{},...n.predicateId?{predicateId:n.predicateId}:{},...n.backend?{backend:n.backend}:{},...n.repair?{repair:n.repair}:{},...n.continuation?{continuation:n.continuation}:{}}}function fR(e){return e.some(t=>t.blocksAnswer)}var oL,iL,on,Rt=y(()=>{"use strict";oL=new Set(["invalidQuery","ambiguousSugar","unknownField","unsupportedTarget","unsupportedPredicate","unsupportedBoolean","unsupportedScope","negativeUniverseRequired","residualNotExact","fieldTypeMismatch","requiresMaterialization","vendorNoEquivalent","lossyTransform","unsupportedVendorPredicate","responseShapeMismatch","materializationNotAllowed","materializationFailed","parserFailed","lspUnavailable","budgetExhausted","contentTruncated"]),iL=new Set(["invalidQuery","ambiguousSugar","unknownField","unsupportedTarget","unsupportedPredicate","unsupportedBoolean","unsupportedScope","fieldTypeMismatch","unsupportedVendorPredicate","responseShapeMismatch","materializationNotAllowed","materializationFailed"]);on=class extends Error{diagnostics;constructor(t){super(t.map(n=>`${n.code}: ${n.message}`).join("; ")),this.name="OqlValidationError",this.diagnostics=t}}});import{z as P}from"zod";function gR(e,t){let n=hL[e];if(!n||t===void 0)return null;let r=n.safeParse(t);return r.success?null:r.error.issues.map(o=>`params.${o.path.join(".")||"(root)"}: ${o.message}`).join("; ")}var de,Gd,mR,sL,aL,cL,lL,uL,dL,pL,fL,mL,gL,hL,hR=y(()=>{"use strict";de=P.number().int().min(1),Gd=P.number().int().min(0),mR=P.enum(["symbols","files","dependencies","relations"]),sL=P.object({match:P.enum(["file","path"]).optional(),concise:P.boolean().optional(),extension:P.string().optional(),filename:P.string().optional(),page:de.optional(),limit:de.optional()}).passthrough(),aL=P.object({type:P.enum(["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation","workspaceSymbol","supertypes","subtypes","diagnostic"]).optional(),uri:P.string().optional(),symbolName:P.string().optional(),symbolKind:P.string().optional(),lineHint:de.optional(),orderHint:P.number().int().optional(),includeDeclaration:P.boolean().optional(),depth:P.number().int().min(0).max(20).optional(),groupByFile:P.boolean().optional(),workspaceRoot:P.string().optional(),format:P.enum(["structured","compact"]).optional(),page:de.optional(),itemsPerPage:de.optional()}).passthrough(),cL=P.object({keywords:P.array(P.string()).optional(),topicsToSearch:P.union([P.string(),P.array(P.string())]).transform(e=>typeof e=="string"?[e]:e).optional(),language:P.string().optional(),owner:P.string().optional(),stars:P.union([P.string(),P.number()]).optional(),forks:P.string().optional(),goodFirstIssues:P.string().optional(),size:P.string().optional(),created:P.string().optional(),updated:P.string().optional(),license:P.string().optional(),match:P.array(P.enum(["name","description","readme"])).optional(),visibility:P.enum(["public","private"]).optional(),archived:P.boolean().optional(),sort:P.enum(["stars","forks","help-wanted-issues","updated","best-match"]).optional(),concise:P.boolean().optional(),page:de.optional()}).passthrough(),lL=P.object({packageName:P.string().optional(),keywords:P.array(P.string()).optional(),mode:P.enum(["lean","full"]).optional(),page:de.optional()}).passthrough(),uL=P.object({prNumber:de.optional(),concise:P.boolean().optional(),state:P.enum(["open","closed","merged"]).optional(),author:P.string().optional(),label:P.union([P.string(),P.array(P.string())]).optional(),keywordsToSearch:P.union([P.string(),P.array(P.string())]).transform(e=>typeof e=="string"?[e]:e).optional(),head:P.string().optional(),base:P.string().optional(),created:P.string().optional(),updated:P.string().optional(),closed:P.string().optional(),"merged-at":P.string().optional(),draft:P.boolean().optional(),archived:P.boolean().optional(),sort:P.enum(["created","updated","best-match","comments","reactions"]).optional(),order:P.enum(["asc","desc"]).optional(),reviewMode:P.string().optional(),filePage:de.optional(),commentPage:de.optional(),commitPage:de.optional(),charOffset:Gd.optional(),charLength:de.optional(),minify:P.enum(["none","standard"]).optional(),limit:de.optional(),page:de.optional(),matchString:P.string().optional(),matchScope:P.enum(["body","title","comments","reviews","all"]).optional(),content:P.record(P.string(),P.unknown()).optional()}).passthrough(),dL=P.object({path:P.string().optional(),branch:P.string().optional(),since:P.string().optional(),until:P.string().optional(),author:P.string().optional(),includeDiff:P.boolean().optional(),limit:de.optional(),page:de.optional()}).passthrough(),pL=P.object({mode:P.enum(["inspect","list","extract","decompress","strings","unpack"]).optional(),archiveFile:P.string().optional(),entryPageNumber:de.optional(),maxEntries:de.optional(),entriesPerPage:de.optional(),minLength:P.number().int().min(1).max(128).optional(),scanOffset:Gd.optional(),charOffset:Gd.optional(),charLength:de.optional(),matchString:P.string().optional(),detailed:P.boolean().optional(),format:P.string().optional(),verbose:P.boolean().optional(),includeOffsets:P.boolean().optional()}).passthrough(),fL=P.object({prNumber:de.optional(),files:P.array(P.string()).optional(),baseRef:P.string().optional(),headRef:P.string().optional(),path:P.string().optional()}).passthrough(),mL=P.object({goal:P.string().optional(),intent:P.enum(["general","reachability","dependencies","symbols"]).optional(),facets:P.array(mR).optional(),mode:P.enum(["plan","analyze","prove"]).optional(),maxFiles:de.optional()}).passthrough(),gL=P.object({goal:P.string().optional(),intent:P.enum(["general","reachability","dependencies","symbols"]).optional(),facets:P.array(mR).optional(),mode:P.enum(["plan","analyze","prove"]).optional(),maxFiles:de.optional(),subject:P.string().optional(),subjectKind:P.enum(["file","symbol","function","class","method","interface","type","dependency","package","entrypoint"]).optional(),relation:P.union([P.string(),P.array(P.string())]).optional(),verdict:P.union([P.string(),P.array(P.string())]).optional(),direction:P.enum(["incoming","outgoing","both"]).optional(),proof:P.enum(["none","lsp"]).optional(),proofLimit:de.max(25).optional(),includePackets:P.boolean().optional(),includeFacts:P.boolean().optional(),includeEdges:P.boolean().optional()}).passthrough(),hL={semantics:aL,repositories:cL,packages:lL,pullRequests:uL,commits:dL,artifacts:pL,diff:fL,research:mL,graph:gL,code:sL}});function J(...e){throw new on(e)}function yR(e){return eR(e)?bL(e):bR(e)}function bL(e){let t=pR.safeParse(e);t.success||J(x("invalidQuery",Na(t.error)));let n=t.data,r=new Set(["schema","id","queries","combine","limit","page","itemsPerPage","explain"]);for(let i of Object.keys(n))r.has(i)||J(x("unknownField",`Unknown batch field "${i}" is not part of OQL.`,{queryPath:i}));n.queries.length>5&&J(x("invalidQuery","OQL batches are capped at 5 queries per call.",{queryPath:"queries"}));let o=n.queries.map((i,s)=>{try{return bR(i)}catch(a){throw a instanceof on?new on(a.diagnostics.map(c=>({...c,queryPath:`queries[${s}]${c.queryPath?`.${c.queryPath}`:""}`}))):a}});return{schema:"oql",...n.id?{id:n.id}:{},queries:o,combine:n.combine??"independent",...n.limit!==void 0?{limit:n.limit}:{},...n.page!==void 0?{page:n.page}:{},...n.itemsPerPage!==void 0?{itemsPerPage:n.itemsPerPage}:{},...n.explain!==void 0?{explain:n.explain}:{}}}function bR(e){let t=dR.safeParse(e);t.success||J(x("invalidQuery",Na(t.error)));let n={...t.data},r=n.filesWithoutMatch?"files":n.target??RL(n);r===void 0&&J(x("invalidQuery",`Could not determine \`target\`; specify one of: ${rn.join(", ")}.`,{queryPath:"target"})),Fa.includes(r)&&J(x("unsupportedTarget",`Target "${r}" is reserved until proof/dry-run support exists.`,{queryPath:"target",repair:{message:`Use an active target: ${rn.join(", ")}.`}})),rn.includes(r)||J(x("unknownField",`Unknown target "${r}".`));for(let m of Object.keys(n))yL.has(m)||J(x("unknownField",`Unknown field "${m}" is not part of OQL.`,{queryPath:m}));let o=n.filesOnly===!0?Array.isArray(n.select)?n.select:["path","next.fetch"]:n.select,i=n.filesOnly===!0?"discovery":n.view??"paginated",s=xL(n,r),a=TL(n,s),c=EL(n,r),l=_L(n,s,c,r),u=IL(n),d=CL(n,r),p={schema:"oql",...n.id?{id:n.id}:{},target:r,...s?{from:s}:{},...d?{params:d}:{},...a?{scope:a}:{},...c?{where:c}:{},...l?{materialize:l}:{},...u?{fetch:u}:{},...o?{select:o}:{},view:i,...n.controls?{controls:n.controls}:{},...n.limit!==void 0?{limit:n.limit}:{},...n.page!==void 0?{page:n.page}:{},...n.itemsPerPage!==void 0?{itemsPerPage:n.itemsPerPage}:{},...n.explain!==void 0?{explain:n.explain}:{}};if(p.target==="code"&&!p.where&&J(x("invalidQuery",'target:"code" requires a `where` predicate (text/regex/structural). `where` omission is not a wildcard.',{queryPath:"where"})),(p.target==="content"||p.target==="structure")&&p.where&&J(x("invalidQuery",`target:"${p.target}" does not use \`where\`. Use fetch.content.match for content anchors, or target:"code"/"files" for predicates.`,{queryPath:"where"})),(p.target==="content"||p.target==="structure")&&p.from?.kind==="github"&&!(p.from.repo&&p.from.repo.includes("/"))&&J(x("invalidQuery",`target:"${p.target}" over GitHub requires a concrete repository ("owner/name"); a provider-wide or owner-only source cannot read a specific tree.`,{queryPath:"from",repair:{message:'Set from:{kind:"github",repo:"owner/name"} (and scope.path for a subtree).'}})),p.target==="materialize"&&(p.where&&J(x("invalidQuery",'target:"materialize" does not use `where`; it clones/caches a corpus and returns a stable local checkpoint. Run a search against the returned localPath instead.',{queryPath:"where"})),p.from?.kind!=="github"&&p.from?.kind!=="materialized"&&J(x("invalidQuery",'target:"materialize" needs from:{kind:"github",repo:"owner/name"} (and scope.path to bound the subtree) or an already-materialized `from`.',{queryPath:"from",repair:{message:'Set from:{kind:"github",repo:"owner/name"} with scope.path.'}}))),p.params!==void 0){let m=gR(p.target,p.params);m&&J(x("invalidQuery",m,{queryPath:"params"}))}let f=Ma.safeParse(p);return f.success||J(x("invalidQuery",Na(f.error))),f.data}function RL(e){if(e.where!==void 0||typeof e.text=="string"||typeof e.regex=="string"||typeof e.pattern=="string"||e.rule!==void 0||Array.isArray(e.and)||Array.isArray(e.or)||Array.isArray(e.xor)||Array.isArray(e.noneOf)||Array.isArray(e.oneOf))return"code";if(e.fetch?.content)return"content";if(e.fetch?.tree)return"structure"}function CL(e,t){let n=e.params?{...e.params}:void 0;return t!=="graph"||!n||!PL(n)?n:{...n,proof:"lsp",proofLimit:typeof n.proofLimit=="number"&&n.proofLimit>0?n.proofLimit:5}}function PL(e){if(e.proof!==void 0||e.mode==="plan"||e.mode==="prove")return!1;if(e.relation!==void 0||e.direction!==void 0)return!0;let t=typeof e.goal=="string"?e.goal.toLowerCase():"";return SL.some(n=>t.includes(n))}function xL(e,t){let n=e.from,r=typeof e.repo=="string"||typeof e.owner=="string",o=e.path;if(n)return r&&J(x("ambiguousSugar","Provide either `from` or top-level repo/owner sugar, not both.",{queryPath:"from"})),wL(n);if(r){let i=typeof e.owner=="string"?e.owner:void 0,s=typeof e.repo=="string"?e.repo:void 0;i&&s&&!s.includes("/")&&(s=`${i}/${s}`);let a={kind:"github"};return s&&(a.repo=s),i&&!s&&(a.owner=i),typeof e.ref=="string"&&(a.ref=e.ref),a}if(typeof o=="string")return{kind:"local",path:o};if(Array.isArray(o)&&typeof o[0]=="string")return{kind:"local",path:o[0]};if(t==="packages")return{kind:"npm"};if(t==="repositories")return{kind:"github"};Zb.includes(t)||J(x("invalidQuery","A corpus is required: provide `from`, a `repo`, or a local `path`.",{queryPath:"from"}))}function wL(e){if(e.kind!=="github")return e;let t=e.owner,n=e.repo;if(t&&n&&!n.includes("/")){n=`${t}/${n}`;let r={kind:"github",repo:n};return e.ref&&(r.ref=e.ref),r}return e}function TL(e,t){let n={...e.scope??{}},r=e.path,o=t?.kind==="local"&&!e.from&&typeof e.repo!="string"&&typeof e.owner!="string";return r!==void 0&&!o&&(e.scope&&e.scope.path!==void 0&&J(x("ambiguousSugar","Both top-level `path` and `scope.path` provided; the path intent is ambiguous.",{queryPath:"path"})),n.path=r),Object.keys(n).length>0?n:void 0}function EL(e,t){let n=vL(e);e.where&&n&&J(x("ambiguousSugar","Provide either a canonical `where` predicate or top-level match sugar, not both.",{queryPath:"where"}));let r=e.where??n;if(e.filesWithoutMatch&&r&&(r={kind:"not",predicate:r}),e.invert===!0&&r&&(r={kind:"not",predicate:r}),!r)return void 0;zd(r,"where");let o=An.safeParse(r);return o.success||J(x("invalidQuery",Na(o.error),{queryPath:"where"})),o.data}function Hd(e){return e.kind==="all"||e.kind==="any"?1+e.of.reduce((t,n)=>t+Hd(n),0):e.kind==="not"?1+Hd(e.predicate):1}function OL(e){let t=e.controls?.budget?.maxBooleanExpansion;return typeof t=="number"&&t>0?t:kL}function vL(e){let t=n=>{let r=Hd(n),o=OL(e);return r>o&&J(x("budgetExhausted",`Boolean sugar expanded to ${r} predicate nodes, over controls.budget.maxBooleanExpansion (${o}). Narrow the query or raise the budget.`,{queryPath:"where"})),n};if(Array.isArray(e.and))return{kind:"all",of:e.and.map(Hr)};if(Array.isArray(e.or))return{kind:"any",of:e.or.map(Hr)};if(Array.isArray(e.noneOf))return{kind:"not",predicate:{kind:"any",of:e.noneOf.map(Hr)}};if(Array.isArray(e.xor)){e.xor.length!==2&&J(x("invalidQuery","xor is binary; use oneOf for multi-way exclusive matching.",{queryPath:"xor"}));let n=Hr(e.xor[0]),r=Hr(e.xor[1]);return t({kind:"any",of:[{kind:"all",of:[n,{kind:"not",predicate:r}]},{kind:"all",of:[{kind:"not",predicate:n},r]}]})}if(Array.isArray(e.oneOf))return t(AL(e.oneOf.map(Hr)));if(typeof e.pattern=="string"||e.rule!==void 0)return typeof e.pattern=="string"&&e.rule!==void 0&&J(x("invalidQuery","A structural predicate uses exactly one of `pattern` or `rule`.",{queryPath:"pattern"})),typeof e.lang!="string"&&J(x("invalidQuery","Structural sugar requires `lang`.",{queryPath:"lang"})),{kind:"structural",lang:e.lang,...typeof e.pattern=="string"?{pattern:e.pattern}:{},...e.rule!==void 0?{rule:e.rule}:{}};if(typeof e.text=="string")return{kind:"text",value:e.text};if(typeof e.regex=="string")return{kind:"regex",value:e.regex}}function Hr(e){if(e&&typeof e=="object"&&"kind"in e)return e;J(x("invalidQuery","Boolean sugar children must be predicate objects with a `kind`.",{queryPath:"where"}))}function AL(e){return{kind:"any",of:e.map((n,r)=>{let o=e.filter((i,s)=>s!==r).map(i=>({kind:"not",predicate:i}));return{kind:"all",of:[n,...o]}})}}function zd(e,t){switch(e.kind){case"all":case"any":(!Array.isArray(e.of)||e.of.length===0)&&J(x("invalidQuery",`Empty \`${e.kind}.of\` is invalid.`,{queryPath:t})),e.of.forEach((n,r)=>zd(n,`${t}.of[${r}]`));break;case"not":e.predicate||J(x("invalidQuery","`not` must contain exactly one child.",{queryPath:t})),zd(e.predicate,`${t}.predicate`);break;case"structural":typeof e.pattern=="string"==(e.rule!==void 0)&&J(x("invalidQuery","A structural predicate uses exactly one of `pattern` or `rule`.",{queryPath:t}));break;case"field":LL(e,t);break;default:break}}function LL(e,t){if(e.op==="exists"){e.value!==void 0&&J(x("fieldTypeMismatch","`exists` takes no value.",{queryPath:t}));return}e.value===void 0&&J(x("fieldTypeMismatch",`Operator "${e.op}" requires a value.`,{queryPath:t})),e.op==="in"&&(!Array.isArray(e.value)||e.value.length===0)&&J(x("fieldTypeMismatch","`in` requires a non-empty array of values.",{queryPath:t}))}function RR(e){if(!e)return!1;switch(e.kind){case"structural":return!0;case"regex":return e.dialect==="pcre2";case"all":case"any":return!0;case"not":return RR(e.predicate);default:return!1}}function _L(e,t,n,r){let o;return typeof e.materialize=="string"?o={mode:e.materialize}:e.materialize&&typeof e.materialize=="object"&&(o=e.materialize),r==="materialize"&&t?.kind==="github"?o?{...o,mode:o.mode==="never"?"required":o.mode,strategy:o.strategy??"subtree"}:{mode:"required",strategy:"subtree"}:r==="semantics"&&t?.kind==="github"?{...o??{},mode:"required",strategy:"file"}:t?.kind!=="github"||o?o:RR(n)?{mode:"auto",strategy:"subtree"}:{mode:"never"}}function IL(e){return e.fetch?{...e.fetch}:void 0}function Na(e){let t=e;return t&&Array.isArray(t.issues)?t.issues.map(n=>`${n.path.join(".")||"(root)"}: ${n.message}`).join("; "):"Invalid OQL query."}var yL,SL,kL,SR=y(()=>{"use strict";Gr();Rt();hR();mi();yL=new Set(["schema","id","target","from","scope","where","materialize","fetch","select","view","controls","limit","page","itemsPerPage","params","explain","repo","owner","ref","path","text","regex","pattern","rule","lang","and","or","xor","noneOf","oneOf","invert","filesOnly","filesWithoutMatch","mainResearchGoal","researchGoal","reasoning","verbose"]);SL=["relationship","relationships","reference","references","who uses","used by","usage","caller","callers","callee","callees","call hierarchy","blast radius","safe to delete","what breaks","delete","dead code","unused export","unused symbol","retained by"];kL=64});function FL(e){return e?.mode==="auto"||e?.mode==="required"}function ML(e,t){let n=e.target==="files"?_n:sn;switch(t.kind){case"text":case"regex":case"structural":return{route:"PUSHDOWN",backend:sn,exact:!0,reason:`${t.kind} evaluated locally by ${sn}`};case"field":return{route:"PUSHDOWN",backend:n,exact:!0,reason:`field predicate evaluated locally by ${n}`}}}function DL(e,t,n){let r=FL(e.materialize);if(n)return NL(e,t,r);if(e.target==="files")return t.kind==="text"||t.kind==="regex"&&t.dialect!=="pcre2"?r?{route:"ROUTE",backend:_n,exact:!0,reason:"files-containing-term routed to materialization for an exact file set"}:{route:"PUSHDOWN",backend:zt,exact:!1,reason:"files containing the term listed via provider code search (approximate)",diagnostic:{code:"providerSemanticsApproximate",message:"GitHub lists files containing a term via provider code search; materialize for an exact file set."}}:t.kind==="field"&&t.op==="="&&(t.field==="path"||t.field==="basename"||t.field==="extension")?r?{route:"ROUTE",backend:_n,exact:!0,reason:"path/name field equality routed to materialization for an exact file set"}:{route:"PUSHDOWN",backend:zt,exact:!0,reason:"path/name field equality listed via provider path search"}:r?{route:"ROUTE",backend:_n,exact:!0,reason:`${Ga(t)} over a file listing routed to materialization`}:{route:"UNSUPPORTED",backend:_n,exact:!1,reason:`GitHub cannot enumerate files by ${Ga(t)} without materialization`,diagnostic:{code:"requiresMaterialization",message:`target:"files" over GitHub cannot enumerate by ${Ga(t)} without materialization (set materialize.mode "auto"/"required" with scope.path).`}};switch(t.kind){case"text":return e.materialize?.mode==="required"?{route:"ROUTE",backend:sn,exact:!0,reason:"literal text routed to materialization because materialize.mode is required"}:t.case==="sensitive"||t.wholeWord===!0?r?{route:"ROUTE",backend:sn,exact:!0,reason:"case-sensitive / whole-word text routed to materialization for exact proof"}:{route:"PUSHDOWN",backend:zt,exact:!1,reason:"GitHub code search cannot honor case:sensitive / wholeWord (case-insensitive substring); approximate",diagnostic:{code:"providerSemanticsApproximate",message:"GitHub code search is a case-insensitive substring match and cannot honor case:sensitive or wholeWord; materialize for exact proof."}}:{route:"PUSHDOWN",backend:zt,exact:!0,reason:"literal text pushed to GitHub code search"};case"regex":return t.dialect==="pcre2"?Bd(e,"PCRE2 regex",r):r?{route:"ROUTE",backend:sn,exact:!0,reason:"regex routed to bounded materialization for exact local proof"}:{route:"PUSHDOWN",backend:zt,exact:!1,reason:"regex pushed to GitHub search (provider regex is approximate)",diagnostic:{code:"providerSemanticsApproximate",message:"GitHub regex search is approximate; materialize for exact regex proof."}};case"structural":return Bd(e,"structural AST",r);case"field":return t.field==="path"||t.field==="basename"||t.field==="extension"?t.op==="glob"||t.op==="regex"?r?{route:"ROUTE",backend:_n,exact:!0,reason:"path glob/regex routed to materialization for proof"}:{route:"PUSHDOWN",backend:zt,exact:!1,reason:"provider path filter is prefix-only / approximate",diagnostic:{code:"providerSemanticsApproximate",message:"GitHub path qualifiers are prefix filters; materialize to prove glob/regex."}}:{route:"PUSHDOWN",backend:zt,exact:!0,reason:"path/name predicate pushed to provider"}:Bd(e,`field "${t.field}"`,r)}}function Ga(e){switch(e.kind){case"text":return"text match";case"regex":return e.dialect==="pcre2"?"PCRE2 regex":"regex match";case"structural":return"structural AST match";case"field":return`field "${e.field}"`}}function NL(e,t,n){let r=Ga(t);return n?{route:"ROUTE",backend:e.target==="files"?_n:sn,exact:!0,reason:`negated ${r} needs a complete universe; routed to bounded materialization for local proof`}:{route:"UNSUPPORTED",backend:zt,exact:!1,reason:`negated ${r} cannot be proven by the GitHub provider (no complete universe)`,diagnostic:{code:"negativeUniverseRequired",message:"Negation over a GitHub provider source needs a complete candidate universe; materialize to prove absence."}}}function Bd(e,t,n){if(n)return{route:"ROUTE",backend:sn,exact:!0,reason:`${t} requires local proof; routed to bounded materialization`};let r=e.materialize?.mode;return{route:"UNSUPPORTED",backend:zt,exact:!1,reason:`${t} cannot be evaluated by the GitHub provider`,diagnostic:r==="never"?{code:"materializationNotAllowed",message:`${t} needs local proof but materialize.mode is "never".`}:{code:"requiresMaterialization",message:`${t} needs bounded materialization (set materialize.mode "auto" or "required").`}}}function CR(e,t,n=!1){return e.sourceKind==="github"?DL(e,t,n):ML(e,t)}var sn,_n,zt,PR=y(()=>{"use strict";sn="localSearchCode",_n="localFindFiles",zt="ghSearchCode"});function zr(e){let t=e??{};return t.prNumber!==void 0&&t.prNumber!==null?{kind:"prPatch",prNumber:t.prNumber,...Array.isArray(t.files)?{files:t.files}:{}}:typeof t.baseRef=="string"&&typeof t.headRef=="string"&&typeof t.path=="string"?{kind:"directFile",baseRef:t.baseRef,headRef:t.headRef,path:t.path}:{kind:"neither"}}var Ha=y(()=>{"use strict"});function xR(e){let t=[];return e.fetch?.content?.contentView==="symbols"&&GL.has(e.target)&&t.push(x("signatureUnsupported",`A "symbols" content view is not available for target:"${e.target}" (PR/commit/diff content has no symbol skeleton); request "exact" or "compact".`,{queryPath:"fetch.content.contentView",severity:"warning",blocksAnswer:!1,repair:{message:'Set fetch.content.contentView to "exact" or "compact".'}})),t}var GL,wR=y(()=>{"use strict";Rt();GL=new Set(["pullRequests","commits","diff"])});function TR(e){let t={schema:ut.schema,view:e.view??ut.view,page:e.page??ut.page,itemsPerPage:e.itemsPerPage??ut.itemsPerPage,maxPlanNodes:e.controls?.budget?.maxPlanNodes??ut.maxPlanNodes};return e.from?.kind==="github"&&(t["materialize.mode"]=e.materialize?.mode??ut.githubMaterializeMode),e.target==="content"&&(t["fetch.content.contentView"]=e.fetch?.content?.contentView??ut.contentView),e.target==="code"&&(t.codeContext=e.view==="detailed"?ut.detailedCodeContext:ut.normalCodeContext,t["search.sort"]=e.controls?.search?.sort??ut.localSearchSort),t}var ut,ER=y(()=>{"use strict";ut={schema:"oql",view:"paginated",page:1,itemsPerPage:25,githubMaterializeMode:"never",textCase:"smart",regexDialectLocal:"rust",regexCase:"smart",contentView:"compact",contentCharLength:2e4,matchContentLength:500,maxPlanNodes:128,maxBooleanExpansion:64,normalCodeContext:2,detailedCodeContext:3,localSearchSort:"relevance",localRankingProfile:"auto"}});function kR(e){return JSON.stringify(e)}function Qd(e,t){let n=" ".repeat(t),r=[];e.pattern!==void 0&&r.push(`${n}pattern: ${kR(e.pattern)}`),e.kind!==void 0&&r.push(`${n}kind: ${kR(e.kind)}`);for(let o of["inside","has","not"]){let i=e[o];i&&(r.push(`${n}${o}:`),r.push(...Qd(i,t+1)))}for(let o of["all","any"]){let i=e[o];if(i&&i.length>0){r.push(`${n}${o}:`);for(let s of i){let a=Qd(s,t+1),c=`${" ".repeat(t+1)}- `,l=`${" ".repeat(t+1)} `;if(a.length!==0){r.push(c+a[0].trimStart());for(let u of a.slice(1))r.push(l+u.trimStart())}}}}return e.stopBy!==void 0&&r.push(`${n}stopBy: ${e.stopBy}`),r}function OR(e){return["rule:",...Qd(e,1)].join(`
|
|
54
|
+
`)}var vR=y(()=>{"use strict"});function AR(e,t){t==="sensitive"?e.caseSensitive=!0:t==="insensitive"&&(e.caseInsensitive=!0)}function LR(e){switch(e.kind){case"text":{let t={keywords:e.value,fixedString:!0};return AR(t,e.case),e.wholeWord&&(t.wholeWord=!0),{match:t}}case"regex":{let t={keywords:e.value};return e.dialect==="pcre2"&&(t.perlRegex=!0),AR(t,e.case),e.wholeWord&&(t.wholeWord=!0),e.multiline&&(t.multiline=!0),e.dotAll&&(t.multilineDotall=!0),{match:t}}case"structural":{let t={mode:"structural",langType:e.lang};return typeof e.pattern=="string"&&(t.pattern=e.pattern),typeof e.rule=="string"?t.rule=e.rule:e.rule!==void 0&&(t.rule=OR(e.rule)),{match:t}}case"field":return{unsupported:{code:"unsupportedPredicate",message:"Field predicates compile through the files backend, not local code search.",predicateId:e.id}};default:return{unsupported:{code:"unsupportedBoolean",message:`Boolean predicate "${e.kind}" is not compilable to a single local-search call.`}}}}function In(e){if(e.kind==="text"||e.kind==="regex"||e.kind==="structural"||e.kind==="field")return LR(e);if(e.kind==="not"){let t=e.predicate;if(t.kind==="text"||t.kind==="regex"||t.kind==="field"){let n=LR(t);return n.unsupported?n:{...n,negate:!0}}return{unsupported:{code:"unsupportedBoolean",message:"not() over structural/boolean predicates is not supported by the local-search adapter."}}}return{unsupported:{code:"unsupportedBoolean",message:`Boolean predicate "${e.kind}" requires multiple backend calls; not supported by the single-call local-search adapter.`}}}var Ud=y(()=>{"use strict";vR()});var za=y(()=>{"use strict";Td()});function jd(e){if(e?.kind!=="github")return{};if(e.repo?.includes("/")){let[t,n]=e.repo.split("/");return{owner:t,repo:n}}return{...e.owner?{owner:e.owner}:{},...e.repo?{repo:e.repo}:{}}}function nt(e){if(e?.path)return Array.isArray(e.path)?e.path[0]:e.path}function Br(e){if(e?.language)return Array.isArray(e.language)?e.language[0]:e.language}function $d(e){return typeof e.limit=="number"?e.limit:typeof e.itemsPerPage=="number"?e.itemsPerPage:void 0}var gi=y(()=>{"use strict"});function HL(e){if(e.kind!=="field"||e.op!=="="||typeof e.value!="string"||e.value.length===0)return null;switch(e.field){case"basename":return{filename:e.value,match:"path"};case"extension":return{extension:e.value.replace(/^\./,""),match:"path"};case"path":return{keywords:[e.value],match:"path"};default:return null}}function hi(e,t={}){if(!e.where)return{ok:!1,diagnostics:[x("vendorNoEquivalent",t.unsupportedMessage??"GitHub code search needs a positive code predicate.",{backend:t.unsupportedBackend??"ghSearchCode"})]};let n=HL(e.where);if(n){let p=_R(e,t);if(p.length>0)return{ok:!1,diagnostics:p};let{owner:f,repo:m}=jd(e.from),g=e.params??{},b=typeof g.extension=="string"||typeof n.extension=="string"?{}:Aa(Br(e.scope)),S=$d(e),C=nt(e.scope);return{ok:!0,diagnostics:[],query:{...f?{owner:f}:{},...m?{repo:m}:{},...b,...n,...C?{path:C}:{},...typeof g.extension=="string"?{extension:g.extension}:{},...S?{limit:S}:{},...e.page?{page:e.page}:{}}}}let r=In(e.where);if(r.unsupported||r.negate||r.match?.mode==="structural")return{ok:!1,diagnostics:[x("unsupportedVendorPredicate",r.unsupported?.message??t.unsupportedMessage??"This predicate cannot be evaluated by GitHub code search; materialize for local proof.",{backend:t.unsupportedBackend??"ghSearchCode",...r.unsupported?.predicateId?{predicateId:r.unsupported.predicateId}:{}})]};let o=_R(e,t);if(o.length>0)return{ok:!1,diagnostics:o};let i=r.match?.keywords??"";if(i.trim().length===0)return{ok:!1,diagnostics:[x("vendorNoEquivalent","GitHub code search needs a non-empty search term.",{backend:t.unsupportedBackend??"ghSearchCode"})]};let{owner:s,repo:a}=jd(e.from),c=e.params??{},l=typeof c.extension=="string"?{}:Aa(Br(e.scope)),u=$d(e),d=typeof c.match=="string"?c.match:t.defaultMatch;return{ok:!0,diagnostics:[],query:{...s?{owner:s}:{},...a?{repo:a}:{},keywords:[i],...l,...nt(e.scope)?{path:nt(e.scope)}:{},...d?{match:d}:{},...typeof c.concise=="boolean"?{concise:c.concise}:{},...typeof c.extension=="string"?{extension:c.extension}:{},...typeof c.filename=="string"?{filename:c.filename}:{},...u?{limit:u}:{},...e.page?{page:e.page}:{}}}}function _R(e,t){let n=[],r=t.unsupportedBackend??"ghSearchCode";return Array.isArray(e.scope?.language)&&e.scope.language.length>1&&n.push(x("lossyTransform","GitHub code search cannot express multiple scope.language values without dropping values; materialize for local proof.",{backend:r,queryPath:"scope.language"})),Array.isArray(e.scope?.path)&&e.scope.path.length>1&&n.push(x("lossyTransform","GitHub code search cannot express multiple scope.path values without dropping values; materialize for local proof.",{backend:r,queryPath:"scope.path"})),n}var qd=y(()=>{"use strict";Ud();Rt();za();gi()});function Qr(e){if(e.target==="diff"&&e.variant){let t=e.sourceKind==="materialized"?"local":e.sourceKind;return Vd.find(n=>n.id===`${t}.diff.${e.variant}`)}return Vd.find(t=>t.target===e.target&&t.sourceKinds.includes(e.sourceKind))}function Wd(e){return Vd.find(t=>t.id===e)}function Kd(e){let t=zL(e.source,e.target);if(e.target==="diff"){let n=zr(e.params),r=n.kind==="prPatch"?"prPatch":n.kind==="directFile"?"directFile":void 0;if(r)return Qr({sourceKind:t,target:"diff",variant:r})}return Qr({sourceKind:t,target:e.target})}function IR(e,t){return e.backends.map(n=>({backend:n.backend,operation:n.operation,exact:n.exact,source:t}))}function FR(e){return{id:e.id,status:e.status,sourceKinds:e.sourceKinds,target:e.target,backends:e.backends}}function zL(e,t){return e?.kind?e.kind:t==="packages"?"npm":"github"}var Vd,MR=y(()=>{"use strict";Ha();Vd=[{id:"github.code",target:"code",sourceKinds:["github"],status:"active",backends:[{backend:"ghSearchCode",operation:"searchCode",exact:!0}],rowKind:"code",adapterModule:"transformers/github/code.ts",adapterFunctions:["toGithubCodeSearchToolQuery"]},{id:"github.files",target:"files",sourceKinds:["github"],status:"active",backends:[{backend:"ghSearchCode",operation:"findFiles",exact:!1}],rowKind:"file",adapterModule:"adapters/github.ts",adapterFunctions:["githubFiles"]},{id:"github.content",target:"content",sourceKinds:["github"],status:"active",backends:[{backend:"ghGetFileContent",operation:"getContent",exact:!0}],rowKind:"content",adapterModule:"adapters/github.ts",adapterFunctions:["githubContent"]},{id:"github.structure",target:"structure",sourceKinds:["github"],status:"active",backends:[{backend:"ghViewRepoStructure",operation:"viewStructure",exact:!0}],rowKind:"tree",adapterModule:"adapters/github.ts",adapterFunctions:["githubStructure"]},{id:"local.code.textRegex",target:"code",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"localSearchCode",operation:"searchCode",exact:!0}],rowKind:"code",adapterModule:"adapters/local.ts",adapterFunctions:["executeCode"]},{id:"local.code.structural",target:"code",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"localSearchCode",operation:"searchCode",exact:!0}],rowKind:"code",adapterModule:"adapters/local.ts",adapterFunctions:["executeCode"]},{id:"local.files",target:"files",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"localFindFiles",operation:"findFiles",exact:!0}],rowKind:"file",adapterModule:"adapters/local.ts",adapterFunctions:["executeFiles"]},{id:"local.content",target:"content",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"localGetFileContent",operation:"getContent",exact:!0}],rowKind:"content",adapterModule:"adapters/local.ts",adapterFunctions:["executeContent"]},{id:"local.structure",target:"structure",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"localViewStructure",operation:"viewStructure",exact:!0}],rowKind:"tree",adapterModule:"adapters/local.ts",adapterFunctions:["executeStructure"]},{id:"local.semantics",target:"semantics",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"lspGetSemantics",operation:"getSemantics",exact:!0}],rowKind:"record",recordType:"semantics",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeSemantics"]},{id:"github.semantics",target:"semantics",sourceKinds:["github"],status:"active",backends:[{backend:"ghCloneRepo",operation:"materialize",exact:!0},{backend:"lspGetSemantics",operation:"getSemantics",exact:!0}],rowKind:"record",recordType:"semantics",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeSemantics"]},{id:"github.repositories",target:"repositories",sourceKinds:["github"],status:"active",backends:[{backend:"ghSearchRepos",operation:"searchRepos",exact:!0}],rowKind:"record",recordType:"repository",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeRepositories"]},{id:"npm.packages",target:"packages",sourceKinds:["npm"],status:"active",backends:[{backend:"npmSearch",operation:"searchPackages",exact:!0}],rowKind:"record",recordType:"package",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executePackages"]},{id:"github.pullRequests",target:"pullRequests",sourceKinds:["github"],status:"active",backends:[{backend:"ghHistoryResearch",operation:"searchPullRequests",exact:!0}],rowKind:"record",recordType:"pullRequest",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeHistory"]},{id:"github.commits",target:"commits",sourceKinds:["github"],status:"active",backends:[{backend:"ghHistoryResearch",operation:"searchCommits",exact:!0}],rowKind:"record",recordType:"commit",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeHistory"]},{id:"github.diff.prPatch",target:"diff",sourceKinds:["github"],status:"active",backends:[{backend:"ghHistoryResearch",operation:"diff",exact:!0}],rowKind:"record",recordType:"diff",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeDiff"]},{id:"github.diff.directFile",target:"diff",sourceKinds:["github"],status:"active",backends:[{backend:"ghGetFileContent",operation:"diff",exact:!0}],rowKind:"record",recordType:"diff",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeDiff"]},{id:"local.diff.directFile",target:"diff",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"localGetFileContent",operation:"diff",exact:!0}],rowKind:"record",recordType:"diff",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeDiff"]},{id:"local.artifacts",target:"artifacts",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"localBinaryInspect",operation:"inspectArtifact",exact:!0}],rowKind:"record",recordType:"artifact",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeArtifacts"]},{id:"local.research",target:"research",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"smartOqlResearch",operation:"runResearchFlow",exact:!1}],rowKind:"record",recordType:"research",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeResearch"]},{id:"local.graph",target:"graph",sourceKinds:["local","materialized"],status:"active",backends:[{backend:"smartOqlGraph",operation:"queryRelationshipGraph",exact:!1}],rowKind:"record",recordType:"graph",adapterModule:"adapters/researchTargets.ts",adapterFunctions:["executeGraph"]},{id:"github.materialize",target:"materialize",sourceKinds:["github"],status:"active",backends:[{backend:"ghCloneRepo",operation:"materialize",exact:!0}],rowKind:"record",recordType:"materialized",adapterModule:"adapters/materialize.ts",adapterFunctions:["executeMaterializeCheckpoint"]}]});function BL(e,t){return e.id??t}function Yd(e,t,n,r,o,i=!1){let s=BL(t,n);if(t.kind==="all"||t.kind==="any"){let c=t.of.map((d,p)=>Yd(e,d,`${n}.of[${p}]`,r,o,i)),l=QL(t.kind,c),u=`${t.kind} over ${c.length} children`;return r.sourceKind==="github"&&(r.target==="code"||r.target==="files")&&l!=="UNSUPPORTED"&&(r.materialize?.mode==="auto"||r.materialize?.mode==="required"?(l="ROUTE",u+=" (routed to materialization: GitHub cannot evaluate a multi-leaf boolean in one call)"):(l="UNSUPPORTED",u+=" (GitHub cannot evaluate a multi-leaf boolean; materialize for local proof)",o.diagnostics.push(x("requiresMaterialization","A multi-leaf boolean over a GitHub code source needs bounded materialization (clone then local set-algebra).",{queryPath:n,repair:{message:'Add materialize:{mode:"auto"} with scope.path, or run one query per branch.'}})))),o.nodes.push({predicateId:s,path:n,route:l,reason:u}),l}if(t.kind==="not"){let c=Yd(e,t.predicate,`${n}.predicate`,r,o,!i);return o.nodes.push({predicateId:s,path:n,route:c,reason:"not requires a complete evaluation universe to be exact"}),c}let a=CR(r,t,i);return o.nodes.push({predicateId:s,path:n,route:a.route,backend:a.backend,reason:a.reason}),a.diagnostic&&o.diagnostics.push(x(a.diagnostic.code,a.diagnostic.message,{predicateId:s,queryPath:n,backend:a.backend})),a.route!=="UNSUPPORTED"&&DR(o.backendCalls,{backend:a.backend,source:a.route==="ROUTE"?void 0:e.from,operation:UL(e.target),exact:a.exact}),a.route}function QL(e,t){return t.includes("UNSUPPORTED")&&e==="any"?"UNSUPPORTED":t.every(n=>n==="PUSHDOWN")?"PUSHDOWN":t.includes("ROUTE")?"ROUTE":t.includes("RESIDUAL")||t.includes("UNSUPPORTED")?"RESIDUAL":t[0]??"PUSHDOWN"}function UL(e){switch(e){case"code":return"searchCode";case"content":return"getContent";case"structure":return"viewStructure";case"files":return"findFiles";case"semantics":return"getSemantics";case"repositories":return"searchRepos";case"packages":return"searchPackages";case"pullRequests":return"searchPullRequests";case"commits":return"searchCommits";case"artifacts":return"inspectArtifact";case"diff":return"diff";case"research":return"runResearchFlow";case"graph":return"queryRelationshipGraph";case"materialize":return"materialize"}}function DR(e,t){e.some(r=>r.backend===t.backend&&r.operation===t.operation&&r.exact===t.exact)||e.push(t)}function Xd(e,t){if(!t)return;let n=FR(t);e.transformers?.some(o=>o.id===n.id)||(e.transformers=[...e.transformers??[],n])}function Ba(e,t,n){if(!t)return!1;for(let r of IR(t,n))DR(e.backendCalls,r);return!0}function jL(e,t){return NR(e,t,"files")}function NR(e,t,n,r=Qr({sourceKind:"materialized",target:n})){let o=Qr({sourceKind:"github",target:"materialize"});if(!o||!r)return!1;e.transformers=(e.transformers??[]).filter(s=>s.id!==`github.${n}`),Xd(e,o),Xd(e,r);let i=new Set(r.backends.map(s=>`${s.backend}:${s.operation}`));return e.backendCalls=e.backendCalls.filter(s=>!i.has(`${s.backend}:${s.operation}`)),Ba(e,o,t),Ba(e,r,void 0),!0}function Qa(e){return e?e.kind==="structural"?!0:e.kind==="all"||e.kind==="any"?e.of.some(Qa):e.kind==="not"?Qa(e.predicate):!1:!1}function $L(e){return e.target==="code"?Wd(Qa(e.where)?"local.code.structural":"local.code.textRegex"):Qr({sourceKind:"materialized",target:e.target})}function qL(e,t){return e.target==="code"&&(t.kind==="local"||t.kind==="materialized")?Wd(Qa(e.where)?"local.code.structural":"local.code.textRegex")??Kd({source:t,target:e.target,params:e.params}):Kd({source:t,target:e.target,params:e.params})}function Jd(e){return e?e.kind==="all"||e.kind==="any"?1+e.of.reduce((t,n)=>t+Jd(n),0):e.kind==="not"?1+Jd(e.predicate):1:0}function GR(e,t){let n={nodes:[],diagnostics:[],backendCalls:[],transformers:[]},r=e.materialize,o=e.from??{kind:"github"},i={sourceKind:o.kind==="npm"?"github":o.kind,target:e.target,materialize:r},s=qL(e,o);if(Xd(n,s),e.where)Yd(e,e.where,"where",i,n),o.kind==="github"&&n.nodes.some(m=>m.route==="ROUTE")&&NR(n,o,e.target,$L(e));else if(e.target==="diff"){let m=zr(e.params);m.kind==="prPatch"||m.kind==="directFile"?Ba(n,s,o)||n.diagnostics.push(x("unsupportedTarget",`No transformer registered for target:"diff" lane "${m.kind}".`,{queryPath:"target",backend:"ghHistoryResearch",severity:"error"})):n.diagnostics.push(x("invalidQuery",'target:"diff" needs either {prNumber} (PR patch diff) or {baseRef,headRef,path} (direct file diff between two refs).',{queryPath:"params",backend:"ghHistoryResearch",repair:{message:"Add params.prNumber for a PR patch, or params.baseRef + params.headRef + params.path for a direct file diff."}}))}else{let m=o.kind==="github"&&e.target==="files"&&!e.where,g=r?.mode==="auto"||r?.mode==="required";!(m?g&&jL(n,o):Ba(n,s,o))&&(!m||g)&&n.diagnostics.push(x("unsupportedTarget",m?'No transformer chain registered for target:"files" GitHub materialization.':`No transformer registered for target:"${e.target}" from ${o.kind}.`,{queryPath:"target",severity:"error"}))}o.kind==="github"&&e.target==="files"&&!e.where&&(r?.mode==="auto"||r?.mode==="required"||n.diagnostics.push(x("requiresMaterialization",'target:"files" over a GitHub source needs bounded materialization to enumerate files (set materialize.mode "auto"/"required" with scope.path), or use a local source.',{queryPath:"target",backend:"localFindFiles",severity:"error",repair:{message:'Add materialize:{mode:"auto"} with scope.path, or use a local `from`.'}}))),n.diagnostics.push(...VL(e,n.nodes)),n.diagnostics.push(...xR(e));let a=WL(e,n.diagnostics),c=e.controls?.budget?.maxPlanNodes??ut.maxPlanNodes,l=!1,u=n.nodes;u.length>c&&(l=!0,u=u.slice(0,c),n.diagnostics.push(x("planTruncated",`Explain plan truncated to ${c} nodes; execution semantics are unchanged.`)));let d=Jd(e.where);!l&&n.nodes.length!==d&&n.diagnostics.push(x("invalidQuery",`Planner invariant violated: ${n.nodes.length} routed vs ${d} predicate nodes.`));let p={input:t,normalized:e,defaults:TR(e),nodes:u,backendCalls:n.backendCalls,...n.transformers?.length?{transformers:n.transformers}:{},...a?{materialization:a}:{},budgets:e.controls?.budget,...l?{truncated:l}:{},diagnostics:n.diagnostics},f=!n.nodes.some(m=>m.route==="UNSUPPORTED")&&!n.diagnostics.some(m=>m.severity==="error"&&m.code!=="planTruncated");return{plan:p,executable:f}}function HR(e){return e.kind==="not"&&e.predicate.kind==="not"?HR(e.predicate.predicate):e}function VL(e,t){if(e.from?.kind!=="github"||e.target!=="code"&&e.target!=="files"||!e.where||e.materialize?.mode==="required"||t.some(o=>o.route==="ROUTE"))return[];let n=HR(e.where),r=hi({...e,where:n},{...e.target==="files"?{defaultMatch:"file"}:{}});return r.ok?[]:r.diagnostics}function WL(e,t){let n=e.materialize;if(!n||e.from?.kind!=="github")return;if(n.mode==="never")return{...n,required:!1,reason:'provider-only execution (materialize.mode:"never")'};let r=!!e.scope?.path||n.strategy==="file",o=n.strategy==="repo";return o&&!n.allowFullRepo?t.push(x("materializationNotAllowed",'strategy:"repo" requires allowFullRepo:true and a byte budget; repair to "subtree" with a concrete scope.path.',{queryPath:"materialize",repair:{message:'Use materialize.strategy:"subtree" with scope.path.'}})):!o&&!r&&t.push(x("materializationNotAllowed",'Bounded materialization needs scope.path (or strategy:"file"); refusing to clone an unbounded scope.',{queryPath:"materialize",repair:{message:"Add scope.path to bound the materialized subtree."}})),{...n,strategy:n.strategy??"subtree",required:n.mode==="required",reason:n.mode==="required"?"local-only proof required; must materialize before execution":"planner may materialize bounded source for local proof"}}var zR=y(()=>{"use strict";PR();Ha();wR();Rt();ER();qd();MR()});function Ua(e){let t=YL(e),n=JL(e),r=t==="proof"&&n;return{...e.queryId?{queryId:e.queryId}:{},...e.queryIndex!==void 0?{queryIndex:e.queryIndex}:{},results:e.results,...e.pagination?{pagination:e.pagination}:{},...e.next&&Object.keys(e.next).length?{next:e.next}:{},diagnostics:e.diagnostics,provenance:e.provenance,evidence:{answerReady:r,complete:n,kind:t},...e.plan?{plan:e.plan}:{}}}function YL(e){return!e.executable||e.diagnostics.some(t=>KL.has(t.code))?"unsupported":e.approximate||XL(e.diagnostics)?"candidate":fR(e.diagnostics)||BR(e)?"partial":"proof"}function XL(e){return e.some(t=>t.code==="providerSemanticsApproximate")}function BR(e){return!!(e.pagination?.hasMore||e.next&&Object.keys(e.next).some(t=>t.startsWith("next.page")||t==="next.matchPage"))}function JL(e){return!e.executable||BR(e)?!1:!e.diagnostics.some(t=>t.blocksAnswer||t.code==="partialResult")}function QR(e){return e.some(t=>!t.exact)}function Zd(e,t,n,r,o){return Ua({queryId:n,queryIndex:r,results:[],diagnostics:e,provenance:[],executable:!1,plan:t,...o&&Object.keys(o).length?{next:o}:{}})}var KL,UR=y(()=>{"use strict";Rt();KL=new Set(["invalidQuery","ambiguousSugar","unknownField","unsupportedTarget","unsupportedPredicate","unsupportedBoolean","unsupportedScope","unsupportedVendorPredicate","vendorNoEquivalent","responseShapeMismatch"])});function Bt(e,t=!1){if(!e)return t?{hasMore:!0}:void 0;let n=e.itemsPerPage??e.entriesPerPage??e.filesPerPage??e.perPage,r=e.totalItems??e.totalEntries??e.totalFiles??e.totalMatches,o=e.totalMatchesCapped===!0,i=!o&&typeof r=="number"&&Number.isFinite(r)&&typeof n=="number"&&Number.isFinite(n)&&n>0,s=i?Math.max(1,Math.ceil(r/n)):void 0,a=i?s:o?void 0:e.totalPages,c=o?e.hasMore??(typeof e.currentPage=="number"&&typeof e.totalPages=="number"?e.currentPage<e.totalPages:t):typeof e.currentPage=="number"&&typeof a=="number"?e.currentPage<a:e.hasMore??t,l=e.nextPage!==void 0&&c?e.nextPage:void 0;return{hasMore:!!c,...e.currentPage!==void 0?{currentPage:e.currentPage}:{},...a!==void 0?{totalPages:a}:{},...l!==void 0?{nextPage:l}:{},...n!==void 0?{itemsPerPage:n}:{},...r!==void 0?{totalItems:r}:{},...e.reportedTotalMatches!==void 0?{reportedTotalItems:e.reportedTotalMatches}:{},...e.reachableTotalMatches!==void 0?{reachableTotalItems:e.reachableTotalMatches}:{},...e.totalMatchesKind!==void 0?{totalItemsKind:e.totalMatchesKind}:{},...e.totalMatchesCapped!==void 0?{totalItemsCapped:e.totalMatchesCapped}:{},...e.uniqueFileCount!==void 0?{uniqueFileCount:e.uniqueFileCount}:{}}}var ja=y(()=>{"use strict"});function ep(e){return Bt(e)}function ZL(e){if(e)return Bt({currentPage:e.currentPage,totalPages:e.totalPages,nextPage:e.nextPage,hasMore:e.hasMore,itemsPerPage:e.filesPerPage??e.itemsPerPage??e.perPage,totalItems:e.totalFiles??e.totalItems,reportedTotalMatches:e.totalMatches??e.reportedTotalMatches,reachableTotalMatches:e.reachableTotalMatches,totalMatchesKind:e.totalFiles!==void 0?"files":e.totalMatchesKind,totalMatchesCapped:e.totalMatchesCapped,uniqueFileCount:e.uniqueFileCount??e.totalFiles})}function $a(e,t){let n=[];for(let r of e.files??[]){let o=r.matches??[];if(o.length===0){let i=r;n.push({kind:"code",source:t,path:r.path,line:1,...i.totalMatchedLines!==void 0?{totalMatchedLines:i.totalMatchedLines}:{},...i.totalOccurrences!==void 0?{totalOccurrences:i.totalOccurrences}:{}});continue}for(let i of o){let s=i.metavars,a=i.metavarRanges;n.push({kind:"code",source:t,path:r.path,line:i.line,...i.endLine!==void 0?{endLine:i.endLine}:{},...i.column!==void 0?{column:i.column}:{},...i.value!==void 0?{snippet:i.value}:{},...s&&Object.keys(s).length?{metavars:s}:{},...a&&Object.keys(a).length?{metavarRanges:a}:{}})}}return{results:n,pagination:e_(ZL(e.pagination),n.length)}}function e_(e,t){if(e)return e.totalItemsKind!=="files"?e:{...e,itemUnit:"files",rowCount:t,...e.reportedTotalItems!==void 0?{reportedRowCount:e.reportedTotalItems}:{}}}function qa(e,t){return{results:(e.files??[]).map(r=>{let o=r.type,i=o==="d"||o==="directory"?"directory":"file";return{kind:"file",source:t,path:r.path,entryType:i,...r.size!==void 0?{size:r.size}:{},...r.modified!==void 0?{modified:r.modified}:{}}}),pagination:ep(e.pagination)}}function jR(e,t){if(!e.entries&&(e.files||e.folders)){let r=e.path??"",o=s=>`${r.replace(/\/$/,"")}/${s}`;return{results:[...(e.folders??[]).map(s=>({kind:"tree",source:t,path:o(s),entryType:"directory",depth:0})),...(e.files??[]).map(s=>({kind:"tree",source:t,path:o(s),entryType:"file",depth:0}))],pagination:ep(e.pagination)}}return{results:(e.entries??[]).map(r=>{let o=r.type,i=o==="dir"||o==="directory"?"directory":"file",s=n_(r.size);return{kind:"tree",source:t,path:r.path??r.name??"",entryType:i,depth:r.depth??0,...s!==void 0?{size:s}:{}}}),pagination:ep(e.pagination)}}function n_(e){if(typeof e=="number")return e;if(typeof e!="string")return;let t=e.trim().match(/^([0-9.]+)\s*([kmgt]?b)$/i);if(!t){let o=Number(e);return Number.isFinite(o)?o:void 0}let n=Number(t[1]),r=t_[t[2].toLowerCase()]??1;return Number.isFinite(n)?Math.round(n*r):void 0}function $R(e,t,n,r="compact"){let o=e.pagination,i=typeof o?.charOffset=="number",s={...e.startLine!==void 0?{startLine:e.startLine}:{},...e.endLine!==void 0?{endLine:e.endLine}:{},...i?{charOffset:o.charOffset,...typeof o.charLength=="number"?{charLength:o.charLength}:{}}:{}};return{results:[{kind:"content",source:t,path:e.filePath??n,content:e.content??"",contentView:r,...Object.keys(s).length?{range:s}:{}}],...o?.hasMore!==void 0?{pagination:{hasMore:!!o.hasMore}}:{}}}var t_,qR=y(()=>{"use strict";ja();t_={b:1,kb:1024,mb:1024**2,gb:1024**3,tb:1024**4}});import Ka from"node:path";import r_ from"node:fs";function o_(e){if(e.from?.kind==="local")return e.from.path;if(e.from?.kind==="materialized")return e.from.localPath;throw new Error("localExecute requires a local or materialized source.")}function Xa(e){let t={};return e?.include&&(t.include=e.include),e?.exclude&&(t.exclude=e.exclude),e?.excludeDir&&(t.excludeDir=e.excludeDir),e?.hidden!==void 0&&(t.hidden=e.hidden),e?.noIgnore!==void 0&&(t.noIgnore=e.noIgnore),t}function KR(e,t){let n=Array.isArray(e)?e.filter(r=>typeof r=="string"):[];return[...new Set([...n,...t])]}function Ja(e,t,n){if(n){e.langType=n;return}let r=Pd(Br(t));r.langType&&(e.langType=r.langType),r.include?.length&&(e.include=KR(e.include,r.include))}function i_(e){return xd(Br(e))}function VR(e){let t=Ya(e),n=t.match(/^\*\*\/(\*\.[^/]+)$/);if(n)return n[1];if(!t.includes("/"))return t}function Za(e){return!!(e?.include?.length||e?.exclude?.length)}function rp(e,t){t?.excludeDir&&(e.excludeDir=t.excludeDir),t?.minDepth!==void 0&&(e.minDepth=t.minDepth),t?.maxDepth!==void 0&&(e.maxDepth=t.maxDepth);let n=(t?.include??[]).map(VR).filter(i=>!!i);n.length>0&&!e.names&&(e.names=KR(e.names,n));let r=(t?.include??[]).filter(i=>!VR(i));r.length===1&&!e.pathPattern&&(e.pathPattern=r[0]);let o=i_(t);o.length>0&&!e.names&&!e.pathPattern&&(e.names=o)}function s_(e,t){if(Za(t.scope)){op(e),e.page=1;return}t.itemsPerPage&&(e.itemsPerPage=t.itemsPerPage),t.page&&(e.page=t.page)}function op(e){e.limit=tp,e.itemsPerPage=tp}async function bi(e){let t=e.from,n=o_(e),r=nt(e.scope),o=r?Ka.join(n,r):n;if(!r_.existsSync(o))return{results:[],diagnostics:[x("invalidQuery",`Local path does not exist: ${o}. Check the path/spelling (and branch or materialization for remote sources) before treating this as absence.`,{backend:"localExecute",queryPath:o,repair:{message:'Verify the path exists (orient with target:"structure" on a known-good parent), fix typos, or materialize the remote source first.'}})],provenance:[]};switch(e.target){case"files":return u_(e,t,o);case"structure":return S_(e,t,o);case"content":return C_(e,t,o);default:return XR(e,t,o)}}function a_(e){return e.kind==="all"||e.kind==="any"?!0:e.kind==="not"?JR(e.predicate):!1}function c_(e){return e.kind==="text"||e.kind==="regex"}function YR(e){return e?.kind==="not"&&c_(e.predicate)}async function XR(e,t,n){let r=e.where;if(a_(r))return b_(e,t,n,r);if(e.view==="discovery"&&YR(r))return f_(e,t,n,r);let o=In(r);if(o.unsupported)return{results:[],diagnostics:[x(o.unsupported.code,o.unsupported.message,{backend:"localSearchCode",...o.unsupported.predicateId?{predicateId:o.unsupported.predicateId}:{}})],provenance:[]};let i=o.match,s={path:n,...Xa(e.scope),...e.view==="discovery"?{filesOnly:!0}:{},...e.view==="detailed"?{contextLines:3}:{},...e.itemsPerPage?{itemsPerPage:e.itemsPerPage}:{},...e.page?{page:e.page}:{},...oS(e)};Ja(s,e.scope,i.langType),i.mode==="structural"?(s.mode="structural",i.pattern!==void 0&&(s.pattern=i.pattern),i.rule!==void 0&&(s.rule=i.rule)):(s.keywords=i.keywords,i.fixedString&&(s.fixedString=!0),i.perlRegex&&(s.perlRegex=!0),i.caseSensitive&&(s.caseSensitive=!0),i.caseInsensitive&&(s.caseInsensitive=!0),i.wholeWord&&(s.wholeWord=!0),i.multiline&&(s.multiline=!0),i.multilineDotall&&(s.multilineDotall=!0),o.negate&&(s.invertMatch=!0));let a=await nn(s),c=$a(a,t),l=Ur(a,"localSearchCode"),u=l_(a);if(u.length>0){let d=u.reduce((f,m)=>f+(m.total??0),0),p=u.reduce((f,m)=>f+m.shown,0);l.push(x("matchTruncated",`${u.length} file(s) have more matches (showed ${p} of ${d}) \u2014 page with controls.search.matchPage, or raise controls.search.maxMatchesPerFile.`,{backend:"localSearchCode",severity:"info",blocksAnswer:!1,repair:{message:"Follow next.matchPage to page within files, or set controls.search.maxMatchesPerFile higher."}}))}return i.mode==="structural"&&i.pattern!==void 0&&c.results.length===0&&l.push(x("zeroMatches","Structural pattern matched 0 nodes. A pattern must match the COMPLETE node \u2014 if the target has a return type or typed params the pattern omits, it returns 0 (not genuine absence).",{backend:"localSearchCode",severity:"info",blocksAnswer:!1,repair:{message:'To find a named symbol, prefer a rule over a pattern: where = { kind:"structural", lang, rule:{ kind:"<node e.g. function_declaration>", has:{ pattern:"<name>" } } }. Or complete the pattern (e.g. add a return type `: $R`).'}})),{...c,diagnostics:l,provenance:[jr("localSearchCode",t,r)]}}function l_(e){let t=[];for(let n of e.files??[]){let r=n.returnedMatchRows??n.matches?.length??0,o=n.pagination?.totalMatches??n.totalMatchRows??n.matchCount,i=n.pagination?.hasMore===!0,s=typeof o=="number"&&o>r;(i||s)&&t.push({path:n.path,shown:r,total:o})}return t}async function u_(e,t,n){let r=e.where;if(YR(r))return p_(e,t,n,r);if(r&&JR(r))return d_(e,t,n,r);if(r&&nS(r)){let l=await XR({...e,view:"discovery"},t,n),u=l.results.map(d=>({kind:"file",source:t,path:d.path,entryType:"file"}));return{...l,results:u}}let o={path:n,details:!0,showFileLastModified:!0};rp(o,e.scope),s_(o,e);let i=[];r&&rS(r,o,i);let s=await _r(o),a=sp(s,e,n);return{...qa(a,t),diagnostics:[...i,...Ur(a,"localFindFiles")],provenance:[jr("localFindFiles",t,r)]}}function JR(e){return e.kind==="all"||e.kind==="any"||e.kind==="not"}async function d_(e,t,n,r){let o=[],i=[],a=[...(await Va(e,r,t,n,o,i)).values()].sort((c,l)=>c.path.localeCompare(l.path));return a.length===0&&!i.some(c=>c.severity==="error")&&i.push(x("zeroMatches","Boolean file query matched no files.",{backend:"localSearchCode",severity:"info",blocksAnswer:!1})),{results:a,diagnostics:i,provenance:o}}async function Va(e,t,n,r,o,i){switch(t.kind){case"all":return(await Promise.all(t.of.map(a=>Va(e,a,n,r,o,i)))).reduce((a,c)=>a===void 0?c:m_(a,c));case"any":{let s=await Promise.all(t.of.map(c=>Va(e,c,n,r,o,i))),a=new Map;for(let c of s)for(let[l,u]of c)a.set(l,ip(a.get(l),u));return a}case"not":{let s=await eS(e,n,r,o),a=await Va(e,t.predicate,n,r,o,i);return new Map([...s].filter(([c])=>!a.has(c)))}default:return tS(e,t,n,r,o,i)}}async function p_(e,t,n,r){let o=await nn(ZR(e,n,r.predicate)),i=Ur(o,"localSearchCode");return{results:(o.files??[]).map(a=>({kind:"file",source:t,path:a.path,entryType:"file"})),diagnostics:i,provenance:[jr("localSearchCode",t,r)]}}async function f_(e,t,n,r){let o=await nn(ZR(e,n,r.predicate));return{...$a(o,t),diagnostics:Ur(o,"localSearchCode"),provenance:[jr("localSearchCode",t,r)]}}function ZR(e,t,n){let o=In(n).match,i={path:t,filesWithoutMatch:!0,...Xa(e.scope),...e.itemsPerPage?{itemsPerPage:e.itemsPerPage}:{},...e.page?{page:e.page}:{},...oS(e)};return Ja(i,e.scope,o.langType),i.keywords=o.keywords,o.fixedString&&(i.fixedString=!0),o.perlRegex&&(i.perlRegex=!0),o.caseSensitive&&(i.caseSensitive=!0),o.caseInsensitive&&(i.caseInsensitive=!0),o.wholeWord&&(i.wholeWord=!0),o.multiline&&(i.multiline=!0),o.multilineDotall&&(i.multilineDotall=!0),i}function m_(e,t){let n=new Map;for(let[r,o]of e){let i=t.get(r);i&&n.set(r,ip(o,i))}return n}function g_(e,t){return new Set([...e].filter(n=>t.has(n)))}function ip(e,t){return e?{...e,...t,entryType:e.entryType==="directory"||t.entryType==="directory"?"directory":"file",...e.size!==void 0||t.size!==void 0?{size:e.size??t.size}:{},...e.modified!==void 0||t.modified!==void 0?{modified:e.modified??t.modified}:{}}:t}async function h_(e,t,n){return new Set((await eS(e,e.from,t,n)).keys())}async function eS(e,t,n,r){let o={path:n,entryType:"f"};rp(o,e.scope),Za(e.scope)&&(op(o),o.page=1);let i=await _r(o),s=sp(i,e,n);return r.push({backend:"localFindFiles",source:e.from}),np(qa({...s,files:(s.files??[]).filter(a=>a.type===void 0||a.type==="f"||a.type==="file")},t).results)}async function y_(e,t,n,r,o){return new Set((await tS(e,t,e.from,n,r,o)).keys())}async function tS(e,t,n,r,o,i){if(t.kind==="field"){let u={path:r,details:!0};rp(u,e.scope),rS(t,u,i),Za(e.scope)&&(op(u),u.page=1);let d=await _r(u),p=sp(d,e,r);return o.push({backend:"localFindFiles",source:e.from}),np(qa(p,n).results)}let s=In(t);if(s.unsupported)return i.push(x(s.unsupported.code,s.unsupported.message,{backend:"localSearchCode"})),new Map;let a=s.match,c={path:r,filesOnly:!0,maxFiles:tp,...Xa(e.scope)};Ja(c,e.scope,a.langType),a.mode==="structural"?(c.mode="structural",a.pattern!==void 0&&(c.pattern=a.pattern),a.rule!==void 0&&(c.rule=a.rule)):(c.keywords=a.keywords,a.fixedString&&(c.fixedString=!0),a.perlRegex&&(c.perlRegex=!0),a.caseSensitive&&(c.caseSensitive=!0),a.caseInsensitive&&(c.caseInsensitive=!0),a.wholeWord&&(c.wholeWord=!0));let l=await nn(c);return o.push({backend:"localSearchCode",source:e.from}),np((l.files??[]).map(u=>({kind:"file",source:n,path:u.path,entryType:"file"})))}function np(e){let t=new Map;for(let n of e)t.set(n.path,ip(t.get(n.path),n));return t}async function b_(e,t,n,r){let o=[],i=[],s=await Wa(e,r,t,n,o,i),a=new Set,c=s.rows.filter(l=>s.files.has(l.path)).filter(l=>{let u=`${l.path}:${l.line??""}`;return a.has(u)?!1:(a.add(u),!0)});return c.length===0&&!i.some(l=>l.severity==="error")&&i.push(x("zeroMatches","Boolean code query matched no occurrences.",{backend:"localSearchCode",severity:"info",blocksAnswer:!1})),{results:c,diagnostics:i,provenance:o}}async function Wa(e,t,n,r,o,i){switch(t.kind){case"all":{let s=await Promise.all(t.of.map(l=>Wa(e,l,n,r,o,i))),a=s.map(l=>l.files).reduce((l,u)=>l===void 0?u:g_(l,u)),c=s.flatMap(l=>l.rows);return{files:a,rows:c}}case"any":{let s=await Promise.all(t.of.map(l=>Wa(e,l,n,r,o,i))),a=new Set;for(let l of s)for(let u of l.files)a.add(u);let c=s.flatMap(l=>l.rows);return{files:a,rows:c}}case"not":{let s=await h_(e,r,o),a=await Wa(e,t.predicate,n,r,o,i);return{files:new Set([...s].filter(c=>!a.files.has(c))),rows:[]}}case"field":return{files:await y_(e,t,r,o,i),rows:[]};default:{let s=await R_(e,t,n,r,o,i);return{files:new Set(s.map(a=>a.path)),rows:s}}}}async function R_(e,t,n,r,o,i){let s=In(t);if(s.unsupported)return i.push(x(s.unsupported.code,s.unsupported.message,{backend:"localSearchCode"})),[];let a=s.match,c={path:r,...Xa(e.scope)};Ja(c,e.scope,a.langType),a.mode==="structural"?(c.mode="structural",a.pattern!==void 0&&(c.pattern=a.pattern),a.rule!==void 0&&(c.rule=a.rule)):(c.keywords=a.keywords,a.fixedString&&(c.fixedString=!0),a.perlRegex&&(c.perlRegex=!0),a.caseSensitive&&(c.caseSensitive=!0),a.caseInsensitive&&(c.caseInsensitive=!0),a.wholeWord&&(c.wholeWord=!0),a.multiline&&(c.multiline=!0),a.multilineDotall&&(c.multilineDotall=!0));let l=await nn(c);return o.push({backend:"localSearchCode",source:n}),$a(l,n).results}async function S_(e,t,n){let r={path:n,details:!0,...e.fetch?.tree?.maxDepth!==void 0?{maxDepth:e.fetch.tree.maxDepth,recursive:!0}:{},...e.fetch?.tree?.pattern?{pattern:e.fetch.tree.pattern}:{},...e.fetch?.tree?.includeSizes?{includeSizes:!0}:{},...e.fetch?.tree?.extensions?.length?{extensions:e.fetch.tree.extensions}:{},...e.fetch?.tree?.filesOnly?{filesOnly:!0}:{},...e.fetch?.tree?.directoriesOnly?{directoriesOnly:!0}:{},...e.fetch?.tree?.sortBy?{sortBy:e.fetch.tree.sortBy}:{},...e.fetch?.tree?.reverse?{reverse:!0}:{},...e.scope?.hidden!==void 0?{hidden:e.scope.hidden}:{},...e.limit?{limit:e.limit}:{},...e.itemsPerPage?{itemsPerPage:e.itemsPerPage}:{},...e.page?{page:e.page}:{}},o=await Ia(r);return{...jR(o,t),diagnostics:Ur(o,"localViewStructure"),provenance:[jr("localViewStructure",t,void 0)]}}async function C_(e,t,n){let r=e.fetch?.content,o=r?.contentView==="exact"?"none":r?.contentView==="symbols"?"symbols":"standard",i=E_(r?.range),s={path:n,minify:o,...i,...r?.match?.text!==void 0?{matchString:r.match.text}:{},...r?.match?.regex?{matchStringIsRegex:!0}:{},...r?.match?.caseSensitive?{matchStringCaseSensitive:!0}:{},...r?.range?.contextLines!==void 0&&r?.range?.startLine===void 0?{contextLines:r.range.contextLines}:{},...r?.charOffset!==void 0?{charOffset:r.charOffset}:{},...r?.charLength!==void 0?{charLength:r.charLength}:{},...r?.fullContent?{fullContent:!0}:{}},a=await wa(s),c=r?.contentView==="exact"?"exact":r?.contentView==="symbols"?"symbols":"compact";return{...$R(a,t,n,c),diagnostics:Ur(a,"localGetFileContent"),provenance:[jr("localGetFileContent",t,void 0)]}}function sp(e,t,n){if(!Za(t.scope)||e.status==="error")return e;let r=(e.files??[]).filter(d=>P_(d.path,n,t.scope)),o=Math.max(1,t.page??1),i=Math.max(1,(t.itemsPerPage??t.limit??r.length)||1),s=Math.max(1,Math.ceil(r.length/i)),a=(o-1)*i,c=r.slice(a,a+i),{status:l,...u}=e;return{...u,...c.length===0?{status:"empty"}:{},files:c,pagination:{currentPage:o,totalPages:s,filesPerPage:i,totalFiles:r.length,hasMore:o<s,...o<s?{nextPage:o+1}:{}}}}function P_(e,t,n){let r=Ya(x_(e,t)),o=n?.include??[];return o.length>0&&!o.some(i=>WR(r,i))?!1:!(n?.exclude??[]).some(i=>WR(r,i))}function x_(e,t){let n=Ka.relative(t,e);return!n||n.startsWith("..")||Ka.isAbsolute(n)?e:n}function Ya(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function WR(e,t){let n=Ya(t),r=Ya(e),o=w_(n);return o.test(r)?!0:n.includes("/")?!1:o.test(Ka.posix.basename(r))}function w_(e){let t="^";for(let n=0;n<e.length;n++){let r=e[n],o=e[n+1],i=e[n+2];if(r==="*"&&o==="*"&&i==="/"){t+="(?:.*/)?",n+=2;continue}if(r==="*"&&o==="*"){t+=".*",n+=1;continue}if(r==="*"){t+="[^/]*";continue}if(r==="?"){t+="[^/]";continue}t+=T_(r)}return new RegExp(`${t}$`)}function T_(e){return/[|\\{}()[\]^$+?.]/.test(e)?`\\${e}`:e}function E_(e){if(e?.startLine===void 0)return{};let t=e.contextLines??0,n=Math.max(1,e.startLine-t),r=(e.endLine??e.startLine)+t;return{startLine:n,endLine:r}}function nS(e){return e.kind==="text"||e.kind==="regex"||e.kind==="structural"?!0:e.kind==="not"?nS(e.predicate):!1}function rS(e,t,n){let r=e.kind==="not",o=e.kind==="not"?e.predicate:e;if(o.kind!=="field"){n.push(x("unsupportedPredicate","Only field predicates (and field-negation) compile to the files backend.",{backend:"localFindFiles"}));return}let i=o,s=i.value;switch(i.field){case"basename":case"path":i.op==="regex"?t.regex=String(s):i.op==="glob"||i.op==="="||i.op==="in"?t.names=Array.isArray(s)?s.map(String):[String(s)]:n.push(yi(i));break;case"extension":{let a=(Array.isArray(s)?s:[s]).map(c=>`*.${String(c).replace(/^\./,"")}`);i.op==="="||i.op==="in"||i.op==="glob"?t.names=a:n.push(yi(i));break}case"size":i.op===">"||i.op===">="?t.sizeGreater=String(s):i.op==="<"||i.op==="<="?t.sizeLess=String(s):n.push(yi(i));break;case"modified":i.op==="within"?t.modifiedWithin=String(s):i.op==="before"?t.modifiedBefore=String(s):n.push(x("unsupportedPredicate",'field "modified" supports only `within` / `before` (relative windows like "7d"); findFiles has no absolute-date filter for >/</>=/<=.',{backend:"localFindFiles"}));break;case"accessed":i.op==="within"?t.accessedWithin=String(s):n.push(yi(i));break;case"empty":t.empty=!!s;break;case"permissions":t.permissions=String(s);break;case"executable":case"readable":case"writable":t[i.field]=!!s;break;case"entryType":t.entryType=String(s)==="directory"?"d":"f";break;default:n.push(yi(i));break}r&&n.push(x("residualNotExact","Negated field predicates over findFiles are best-effort.",{backend:"localFindFiles",severity:"warning"}))}function yi(e){return x("unsupportedPredicate",`field "${e.field}" with operator "${e.op}" is not supported by the files backend.`,{backend:"localFindFiles"})}function oS(e){let t={},n=e.controls?.search;return n&&(n.onlyMatching&&(t.onlyMatching=!0),n.unique&&(t.unique=!0),n.countUnique&&(t.countUnique=!0),n.countMatchesPerFile&&(t.countMatchesPerFile=!0),n.countLinesPerFile&&(t.countLinesPerFile=!0),n.contextLines!==void 0&&(t.contextLines=n.contextLines),n.invertMatch&&(t.invertMatch=!0),n.matchWindow!==void 0&&(t.matchWindow=n.matchWindow),n.matchContentLength!==void 0&&(t.matchContentLength=n.matchContentLength),n.maxMatchesPerFile!==void 0&&(t.maxMatchesPerFile=n.maxMatchesPerFile),n.matchPage!==void 0&&(t.matchPage=n.matchPage),n.sort&&(t.sort=n.sort),n.sortReverse&&(t.sortReverse=!0),n.rankingProfile&&(t.rankingProfile=n.rankingProfile),n.debugRanking&&(t.debugRanking=!0)),e.controls?.budget?.maxFiles!==void 0&&(t.maxFiles=e.controls.budget.maxFiles),t}function Ur(e,t){let n=[];e.status==="error"?n.push(x("invalidQuery",e.error??"Backend error",{backend:t})):e.status==="empty"&&n.push(x("zeroMatches","Query ran and matched nothing.",{backend:t,severity:"info",blocksAnswer:!1}));for(let r of e.warnings??[])n.push(x(k_(r),r,{backend:t,severity:"warning",blocksAnswer:!1}));return n}function k_(e){let t=e.toLowerCase();return t.includes("skipped parsing")||t.includes("parse error")?"partialParse":t.includes("capped")||t.includes("truncat")?"matchTruncated":t.includes("redact")||t.includes("sanitiz")||t.includes("secret")?"sanitized":"partialResult"}function jr(e,t,n){return{backend:e,source:t,...n?.id?{pushed:[n.id]}:{}}}var tp,ap=y(()=>{"use strict";me();La();li();fi();oi();Ud();qR();Rt();za();gi();tp=1e4});import{completeMetadata as O_}from"@octocodeai/octocode-core";function p2(e){return v_.has(e)}var V,ve,Fn,v_,Ri=y(()=>{"use strict";V=O_.toolNames,ve=V.LSP_GET_SEMANTIC_CONTENT,Fn="oqlSearch",v_=new Set([V.LOCAL_RIPGREP,V.LOCAL_FETCH_CONTENT,V.LOCAL_FIND_FILES,V.LOCAL_VIEW_STRUCTURE,V.LOCAL_BINARY_INSPECT,ve])});function Mn(e){return{name:e.name,uri:e.uri,foundAtLine:e.foundAtLine,...e.orderHint!==void 0&&{orderHint:e.orderHint},...e.isAmbiguous===!0&&{isAmbiguous:!0}}}function cp(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 iS,Dn=y(()=>{"use strict";Ri();iS=["definition","references","callers","callees","callHierarchy","hover","documentSymbols","typeDefinition","implementation","workspaceSymbol","supertypes","subtypes","diagnostic"]});import{z as te}from"zod";import{NpmPackageQuerySchema as sS}from"@octocodeai/octocode-core/schemas";var aS,ec,tc,C2,nc=y(()=>{"use strict";Be();tt();Gt();aS={page:ae,mode:te.enum(["lean","full"]).optional()},ec=ue(sS,aS),tc=ie(he(sS,aS,{strict:!0}),{maxQueries:5}),C2=te.object({results:te.array(te.looseObject({id:te.string(),data:te.looseObject({packages:te.array(te.object({name:te.string(),version:te.string().optional(),description:te.string().optional(),license:te.string().optional(),downloads:te.number().optional(),repository:te.string().optional(),repositoryDirectory:te.string().optional(),next:te.record(te.string(),te.unknown()).optional()}).passthrough()).optional(),pagination:te.object({currentPage:te.number(),totalPages:te.number(),perPage:te.number(),totalFound:te.number(),returned:te.number(),hasMore:te.boolean(),nextPage:te.number().optional()}).optional()}).optional(),status:te.string().optional()})).optional()}).extend(Qe)});import{z as R}from"zod";import{LspGetSemanticsQuerySchema as uS}from"@octocodeai/octocode-core/schemas";import{ErrorDataSchema as A_}from"@octocodeai/octocode-core/schemas/outputs";var L_,__,I_,dS,F_,Si,M_,Ci,cS,D_,N_,rc,oc,G_,H_,pS,$r,z_,B_,Q_,fS,U_,j_,$_,q_,V_,W_,K_,lS,Y_,Pi=y(()=>{"use strict";me();Be();tt();Dn();L_=G(1,1e9).describe("1-based source line for symbol-anchored semantic operations. Get it from search/localSearchCode, structural AST captures, or documentSymbols; never guess."),__=G(0,1e5).optional(),I_=["structured","compact"],dS={type:R.enum(iS).default("definition").describe("Semantic operation for local code intelligence. Use after text or structural AST search when you need identity, references, call flow, type relations, hover, symbols, or diagnostics."),symbolName:R.string().min(1).max(1024).optional().describe("Exact bare identifier at the lineHint anchor for symbol operations; workspaceSymbol uses this as the fuzzy project-wide symbol query."),lineHint:L_.optional(),orderHint:__,depth:G(0,20).optional(),includeDeclaration:R.boolean().optional().default(!0),page:ae,itemsPerPage:G(1,100).optional(),contextLines:G(0,100).optional(),format:R.enum(I_).optional().default("structured")},F_=he(uS,dS),Si=ue(uS,dS),M_=Si,Ci=ie(F_,{maxQueries:5}),cS=R.object({line:R.number(),character:R.number()}),D_=R.object({start:cS,end:cS}),N_=R.object({startLine:R.number(),endLine:R.number()}),rc=R.object({uri:R.string(),content:R.string().optional(),displayRange:N_.optional(),isDefinition:R.boolean().optional()}),oc=R.string(),G_=R.object({name:R.string(),uri:R.string(),foundAtLine:R.number(),orderHint:R.number().optional()}),H_=R.object({serverAvailable:R.boolean().optional(),provider:R.string().optional(),source:R.string().optional()}),pS=R.enum(["serverUnavailable","unsupportedOperation","symbolNotFound","anchorFailed","noLocations","noReferences","noHover","noCalls","noWorkspaceSymbols","noTypeHierarchy","noDiagnostics"]),$r=R.object({category:pS,reason:R.string()}),z_=R.object({currentPage:R.number(),totalPages:R.number(),totalResults:R.number(),hasMore:R.boolean(),itemsPerPage:R.number(),nextPage:R.number().optional()}),B_=R.object({name:R.string(),kind:R.string(),line:R.number(),character:R.number(),endLine:R.number(),childCount:R.number(),containerName:R.string().optional()}),Q_=R.string(),fS=R.object({name:R.string(),kind:R.string(),uri:R.string(),line:R.number(),endLine:R.number(),selectionLine:R.number().optional()}),U_=R.string(),j_=R.object({direction:R.enum(["incoming","outgoing"]),item:fS,ranges:R.array(R.object({line:R.number(),character:R.number()})),rangeCount:R.number(),rangeSampleCount:R.number(),contentPreview:R.string().optional()}),$_=R.string(),q_=R.object({complete:R.boolean(),truncatedByDepth:R.boolean(),cycleCount:R.number(),failedRequestCount:R.number(),dynamicCallsExcluded:R.literal(!0),stdlibCallsExcluded:R.number().optional()}),V_=R.object({uri:R.string(),count:R.number(),firstLine:R.number(),firstCharacter:R.number(),lines:R.array(R.number()),hasDefinition:R.boolean().optional()}),W_=R.string(),K_=R.discriminatedUnion("kind",[R.object({kind:R.literal("definition"),locations:R.array(R.union([rc,oc]))}),R.object({kind:R.literal("typeDefinition"),locations:R.array(R.union([rc,oc]))}),R.object({kind:R.literal("implementation"),locations:R.array(R.union([rc,oc]))}),R.object({kind:R.literal("references"),locations:R.array(R.union([rc,oc])).optional(),byFile:R.array(R.union([V_,W_])).optional(),totalReferences:R.number(),totalFiles:R.number(),empty:$r.optional()}),...["callers","callees","callHierarchy"].map(e=>R.object({kind:R.literal(e),root:R.union([fS,U_]).optional(),direction:R.enum(["incoming","outgoing","both"]),calls:R.array(R.union([j_,$_])),incomingCalls:R.number(),outgoingCalls:R.number(),completeness:q_,empty:$r.optional()})),R.object({kind:R.literal("hover"),markdown:R.string().optional(),text:R.string().optional(),range:D_.optional()}),R.object({kind:R.literal("documentSymbols"),symbols:R.array(R.union([B_,Q_])),totalSymbols:R.number().optional(),topLevelSymbols:R.number().optional(),empty:$r.optional()}),R.object({kind:R.literal("workspaceSymbol"),query:R.string(),symbols:R.array(R.unknown()),totalSymbols:R.number(),empty:$r.optional()}),R.object({kind:R.literal("typeHierarchy"),direction:R.enum(["supertypes","subtypes"]),root:R.unknown().optional(),items:R.array(R.unknown()),totalItems:R.number(),empty:$r.optional()}),R.object({kind:R.literal("diagnostic"),diagnostics:R.array(R.unknown()),totalDiagnostics:R.number(),errorCount:R.number(),warningCount:R.number(),empty:$r.optional()}),R.object({kind:R.literal("empty"),category:pS,reason:R.string()})]),lS=R.object({type:R.string(),uri:R.string(),format:R.enum(["structured","compact"]).optional(),resolvedSymbol:G_.optional(),lsp:H_,payload:K_,pagination:z_.optional(),summary:R.record(R.string(),R.unknown()).optional(),warnings:R.array(R.string()).optional()}),Y_=R.object({base:R.string().optional(),shared:R.record(R.string(),R.union([R.string(),R.number(),R.boolean()])).optional(),results:R.array(R.union([R.object({id:R.string().min(1),status:R.literal("empty"),data:lS}),R.object({id:R.string().min(1),status:R.literal("error"),data:A_}),R.object({id:R.string().min(1),data:lS})]))})});import{z as lp}from"zod";function sc(e){return Z_.find(t=>t.name===e)}function ic(e){return e.startsWith("gh")?"GitHub":e.startsWith("local")||e.startsWith("lsp")?"Local Code":e===V.PACKAGE_SEARCH?"Package":"Other"}function W2(e){return[...e].sort((t,n)=>{let r=mS.indexOf(ic(t)),o=mS.indexOf(ic(n));if(r!==o)return r-o;let i=gS.get(t)??Number.MAX_SAFE_INTEGER,s=gS.get(n)??Number.MAX_SAFE_INTEGER;return i!==s?i-s:t.localeCompare(n)})}function K2(e){let t=sc(e);if(!t)return"{}";try{return JSON.stringify(lp.toJSONSchema(t.inputSchema),null,2)}catch{return JSON.stringify(lp.toJSONSchema(t.schema),null,2)}}function Y2(e){return JSON.stringify(e??{},null,2)}function X2(e){let t=ic(e),n=[...J_];return(t==="GitHub"||t==="Package")&&n.splice(1,0,"mainResearchGoal"),n}function J2(){return RS.map(e=>({...e}))}function Z2(){return JSON.stringify(Object.fromEntries(RS.map(e=>[e.name,e.optional?`${e.type} (optional)`:e.type])),null,2)}function e4(e,t){return t?.tools?.[e]?.description??e}function SS(e){let t=sc(e);if(!t)return[];let n=lp.toJSONSchema(t.schema);if(!qr(n))return[];let r=an(n.properties)?n.properties:{},o=new Set(Array.isArray(n.required)?n.required.filter(i=>!mp.has(i)&&!fp(r[i])):[]);return pp(r,o)}function hS(e,t){return`tools ${e} --queries '${JSON.stringify(t)}'`}function eI(e){let t=nI(e);if(t.length>0)return t.map(r=>({...r,command:hS(e,r.query)}));let n=tI(e);return Object.keys(n).length===0?[]:[{label:"schema-derived",query:n,command:hS(e,n)}]}function t4(e){return eI(e)[0]?.query??{}}function tI(e){if(!sc(e))return{};let t=SS(e),n=t.filter(i=>!i.name.includes(".")),r=uI(n),o={};for(let i of r)o[i.name]=mI(i.name,i.type);return e.startsWith("lsp")&&t.some(i=>i.name==="uri")&&(o.uri??="uri"),e===ve&&(o.type??="definition",o.symbolName??="symbolName",o.lineHint??=1),o}function nI(e){return e===Fn?[{label:"local code query",query:{schema:"oql",target:"code",from:{kind:"local",path:"."},where:{kind:"text",value:"executeDirectTool"},view:"discovery",limit:5}}]:e===V.GITHUB_SEARCH_PULL_REQUESTS?[{label:"PR search",query:{type:"prs",owner:"facebook",repo:"react",keywordsToSearch:["useState"],concise:!0,limit:5}},{label:"commit history",query:{type:"commits",owner:"facebook",repo:"react",path:"packages/react/src",since:"2024-01-01T00:00:00Z",perPage:5}}]:e===V.GITHUB_SEARCH_CODE?[{label:"path search",query:{keywords:["package.json"],owner:"facebook",repo:"react",match:"path",concise:!0,limit:5}},{label:"content search",query:{keywords:["useState"],owner:"facebook",repo:"react",extension:"js",limit:5}}]:e===V.GITHUB_SEARCH_REPOSITORIES?[{label:"repository search",query:{keywords:["react"],language:"TypeScript",stars:">1000",concise:!0,limit:5}},{label:"owner repositories",query:{owner:"facebook",concise:!0,limit:5}}]:e===V.GITHUB_VIEW_REPO_STRUCTURE?[{label:"repo tree",query:{owner:"facebook",repo:"react",path:"packages",maxDepth:2,itemsPerPage:50}}]:e===V.GITHUB_CLONE_REPO?[{label:"full repo clone",query:{owner:"bgauryy",repo:"octocode"}},{label:"subtree clone",query:{owner:"facebook",repo:"react",sparsePath:"packages/react"}}]:e===V.LOCAL_RIPGREP?[{label:"text search",query:{path:".",keywords:"runCLI"}},{label:"structural code search",query:{path:"src",mode:"structural",pattern:"eval($X)"}}]:e===V.LOCAL_FETCH_CONTENT?[{label:"exact line range",query:{path:"src/index.ts",startLine:1,endLine:40,minify:"none"}},{label:"matched slice",query:{path:"src/index.ts",matchString:"registerTool",contextLines:8,minify:"standard"}}]:e===V.LOCAL_FIND_FILES?[{label:"basename globs",query:{path:".",names:["*.ts","package.json"],entryType:"f",itemsPerPage:20}},{label:"monorepo path glob",query:{path:".",pathPattern:"packages/*/src/**",entryType:"f",itemsPerPage:20}}]:e===V.LOCAL_BINARY_INSPECT?[{label:"archive listing",query:{path:"archive.zip",mode:"list",entriesPerPage:50}},{label:"binary strings",query:{path:"dist/app.node",mode:"strings",minLength:8,charLength:2e3}}]:e===ve?[{label:"semantic definition",query:{uri:"/path/to/file.ts",type:"definition",symbolName:"myFunction",lineHint:42}},{label:"symbol outline",query:{uri:"/path/to/file.ts",type:"documentSymbols"}}]:[]}function n4(e,t,n={}){if(typeof t!="string")return null;let r;try{r=JSON.parse(t)}catch{throw new Ot("Tool input must be valid JSON.")}return rI(e,r,n)}function rI(e,t,n={}){let r=iI(e,t,n),o=sc(e);if(!o)throw new Ot(`Unknown tool: ${e}`);let i=o.inputSchema.safeParse(r);if(!i.success)throw new Ot("Tool input does not match the expected schema.",oI(i.error));return i.data}function oI(e){return e.issues.map(t=>`${t.path.length>0?t.path.join("."):"input"}: ${t.message}`)}function iI(e,t,n){let r=[];if(Array.isArray(t))r=t;else if(an(t)&&Array.isArray(t.queries))r=t.queries;else if(an(t))r=[t];else throw new Ot('Tool input must be a JSON object, an array of query objects, or { "queries": [...] }.');if(r.length===0)throw new Ot("At least one query is required.");let o=an(t)&&Array.isArray(t.queries)?Object.fromEntries(Object.entries(t).filter(([c])=>c!=="queries")):{},i=!1,s={...n,onUnknownFields:(c,l)=>{i=!0,n.onUnknownFields?.(c,l)}},a=r.map((c,l)=>sI(e,l,cI(e,c,l,s),{sourceLabel:n.sourceLabel}));if(i&&n.onUnknownFields!==void 0)throw new Ot("Tool input contains unknown fields. See warnings above for details.");return{...o,queries:a}}function sI(e,t,n,r){let o={...n},i=ic(e),s=r.sourceLabel??"direct tool execution",a=aI(e,s);return(typeof o.id!="string"||o.id.trim().length===0)&&(o.id=`${e}-${t+1}`),(i==="GitHub"||i==="Package")&&(typeof o.mainResearchGoal!="string"||o.mainResearchGoal.trim().length===0)&&(o.mainResearchGoal=a),(typeof o.researchGoal!="string"||o.researchGoal.trim().length===0)&&(o.researchGoal=a),(typeof o.reasoning!="string"||o.reasoning.trim().length===0)&&(o.reasoning=`Executed via ${s} tool command`),o}function aI(e,t){return`Execute ${e} via ${t}`}function cI(e,t,n,r={}){if(!an(t))throw new Ot("Tool input must be a JSON object or an array of objects.");let o=new Set([...SS(e).filter(a=>!a.name.includes(".")).map(a=>a.name),...mp]),i={},s=[];for(let[a,c]of Object.entries(t)){if(o.has(a)){i[a]=c;continue}s.push(a)}return s.length>0&&o.size>0&&r.onUnknownFields?.(s,n),i}function lI(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 up(e){if(Array.isArray(e.enum)&&e.enum.length>0)return`enum(${e.enum.map(String).join(", ")})`;if(e.type==="array"){let n=qr(e.items)?e.items:void 0;return`array<${n?up(n):"value"}>`}let t=Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:void 0;if(t){let n=t.filter(qr).map(up).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 uI(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&&dI(i)).sort(pI),o=Math.max(yS,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=>!CS.has(i.name)).filter(i=>i.type!=="boolean").slice(0,yS)}function dI(e){return CS.has(e.name)||e.type==="boolean"?!1:fI(e)?dp.has(e.name):!0}function pI(e,t){let n=dp.get(e.name)??Number.MAX_SAFE_INTEGER,r=dp.get(t.name)??Number.MAX_SAFE_INTEGER;return n!==r?n-r:e.name.localeCompare(t.name)}function fI(e){return e.constraints?.includes("default ")===!0}function pp(e,t,n=""){let r=[];for(let[o,i]of Object.entries(e)){if(!n&&mp.has(o))continue;let s=qr(i)?i:{},a=n?`${n}.${o}`:o;if(r.push({name:a,required:t.has(o),type:up(s),constraints:lI(s),description:typeof s.description=="string"?s.description:void 0}),an(s.properties)){let l=new Set(Array.isArray(s.required)?s.required.filter(u=>typeof u=="string"?!fp(s.properties?.[u]):!1):[]);r.push(...pp(s.properties,l,a))}let c=s.type==="array"&&qr(s.items)?s.items:void 0;if(c&&an(c.properties)){let l=new Set(Array.isArray(c.required)?c.required.filter(u=>typeof u=="string"?!fp(c.properties?.[u]):!1):[]);r.push(...pp(c.properties,l,a))}}return r}function mI(e,t){if(t.startsWith("array<")){let n=t.slice(6,-1);return[bS(e,n)]}return bS(e,t)}function bS(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"facebook";case"repo":return"react";case"extension":return"ts";case"filename":return"package.json";case"language":return"TypeScript";case"symbolName":return"myFunction";case"name":case"packageName":return"react";default:return e}}function an(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function qr(e){return an(e)}function fp(e){return qr(e)&&"default"in e}var mS,gS,Ot,X_,mp,J_,RS,Z_,yS,dp,CS,gp=y(()=>{"use strict";Ri();Dn();ta();ei();la();ni();ya();Sa();nc();ii();si();Fr();pi();Pi();ri();Gr();mS=["GitHub","Local Code","Package","Other"],gS=new Map([V.GITHUB_SEARCH_CODE,V.GITHUB_SEARCH_REPOSITORIES,V.GITHUB_SEARCH_PULL_REQUESTS,V.GITHUB_FETCH_CONTENT,V.GITHUB_VIEW_REPO_STRUCTURE,V.GITHUB_CLONE_REPO,V.LOCAL_RIPGREP,V.LOCAL_FIND_FILES,V.LOCAL_FETCH_CONTENT,V.LOCAL_VIEW_STRUCTURE,ve,V.PACKAGE_SEARCH,Fn].map((e,t)=>[e,t])),Ot=class extends Error{constructor(n,r=[]){super(n);this.details=r;this.name="DirectToolInputError"}details},X_=["id","mainResearchGoal","researchGoal","reasoning"],mp=new Set([...X_]),J_=["id","researchGoal","reasoning"],RS=[{name:"content",type:"Array<{ type: string; text: string }>"},{name:"structuredContent",type:"object",optional:!0},{name:"isError",type:"boolean",optional:!0}],Z_=[{name:V.GITHUB_SEARCH_CODE,schema:aa,inputSchema:ca},{name:V.GITHUB_FETCH_CONTENT,schema:xr,inputSchema:na},{name:V.GITHUB_VIEW_REPO_STRUCTURE,schema:ba,inputSchema:Ra},{name:V.GITHUB_SEARCH_REPOSITORIES,schema:ga,inputSchema:ha},{name:V.GITHUB_SEARCH_PULL_REQUESTS,schema:wr,inputSchema:ma},{name:V.PACKAGE_SEARCH,schema:ec,inputSchema:tc},{name:V.GITHUB_CLONE_REPO,schema:Zo,inputSchema:ea},{name:V.LOCAL_RIPGREP,schema:tn,inputSchema:ka},{name:V.LOCAL_VIEW_STRUCTURE,schema:Dr,inputSchema:_a},{name:V.LOCAL_FIND_FILES,schema:Ar,inputSchema:Ea},{name:V.LOCAL_FETCH_CONTENT,schema:vr,inputSchema:Ta},{name:ve,schema:Si,inputSchema:Ci},{name:V.LOCAL_BINARY_INSPECT,schema:Tr,inputSchema:Ca},{name:Fn,schema:Da,inputSchema:Ln}];yS=4,dp=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]]),CS=new Set(["page","itemsPerPage","limit","matchPage","maxFiles","maxMatchesPerFile","matchContentLength","responseCharLength","responseCharOffset"])});import{existsSync as PS}from"fs";import{delimiter as gI,dirname as hI,join as xS}from"path";function wS(){return process.platform==="win32"?"npm.cmd":"npm"}function yI(){let e=hI(process.execPath);return xS(e,wS())}function bI(){return process.platform==="win32"?[]:["/opt/homebrew/bin","/usr/local/bin","/usr/bin"]}function RI(){let e=(process.env.PATH??"").split(gI).map(t=>t.trim()).filter(Boolean);return[...new Set([...e,...bI()])]}function TS(){let e=yI();if(PS(e))return{command:process.execPath,argsPrefix:[e]};let t=wS();for(let n of RI()){let r=xS(n,t);if(PS(r))return{command:r,argsPrefix:[]}}return{command:t,argsPrefix:[]}}async function a4(e=1e4){let t=TS();return Dh(t.command,[...t.argsPrefix,"--version"],e)}async function xi(e,t,n={}){if(!SI.includes(e))return{stdout:"",stderr:"",error:new Error(`Command '${e}' is not allowed`)};let r=Xs(t);if(!r.valid)return{stdout:"",stderr:"",error:new Error(`Invalid arguments: ${r.error}`)};let{timeout:o=3e4,cwd:i,env:s}=n,a=TS(),c=await kn(a.command,[...a.argsPrefix,e,...t],{timeout:o,cwd:i,env:s,allowEnvVars:CI});return{stdout:c.stdout,stderr:c.stderr,exitCode:c.exitCode??void 0,error:c.error}}var SI,CI,hp=y(()=>{"use strict";Xo();SI=["view","search","ping","config","whoami"],CI=[...Yo,...Mh]});function Ti(e){try{return new URL(e).host||e}catch{return e}}function ES(e,t=Date.now()){let n=Vr.get(Ti(e));if(!(!n||n.state==="closed")&&n.state==="open"){let r=t-n.openedAt;if(r<wi)throw new yp(Ti(e),wi-r);n.state="half-open"}}function Rp(e){let t=Vr.get(Ti(e));t&&(t.failures=0,t.state="closed")}function kS(e,t=Date.now()){let n=Ti(e),r=Vr.get(n)??{failures:0,state:"closed",openedAt:0};r.state==="half-open"?(r.state="open",r.openedAt=t):(r.failures+=1,r.failures>=bp&&(r.state="open",r.openedAt=t)),Vr.set(n,r)}function u4(){Vr.clear(),bp=5,wi=3e4}function d4(e){typeof e.failureThreshold=="number"&&(bp=e.failureThreshold),typeof e.cooldownMs=="number"&&(wi=e.cooldownMs)}function OS(e,t=Date.now()){let n=Vr.get(Ti(e));return!n||n.state==="closed"?!1:n.state==="open"?t-n.openedAt<wi:!1}var l4,Vr,bp,wi,yp,ac=y(()=>{"use strict";l4=5,Vr=new Map,bp=5,wi=3e4;yp=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 vS(e){let t=e.get("Retry-After");if(!t)return;let n=parseInt(t,10);return isNaN(n)?void 0:n}function xI(e,t,n,r){e&&Yt({limit_type:"primary",retry_after_seconds:vS(r),api_method:t,api_url:n,provider:e})}function wI(e,t,n,r,o){e.body?.cancel?.().catch(()=>{});let i=new Error(Xr.FETCH_HTTP_ERROR.message(e.status,e.statusText));return i.status=e.status,i.headers=e.headers,r&&e.status!==404&&$m(r),e.status===429&&xI(o,t,n,e.headers),i.retryable=e.status===429||e.status===408||e.status>=500&&e.status<600,i}function TI(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=vS(r.headers);i!==void 0&&(o=Math.min(i*1e3,n))}return o}async function cn(e,t={}){let{maxRetries:n=3,initialDelayMs:r=1e3,maxDelayMs:o=PI,headers:i={},method:s="GET",includeVersion:a=!1,signal:c,rateLimitProvider:l,packageRegistry:u}=t,d=e;if(a){let b=e.includes("?")?"&":"?";d=`${e}${b}version=${encodeURIComponent(Cn)}`}let p={"User-Agent":`Octocode-MCP/${Cn}`,...i},f=globalThis.fetch;if(!f)throw new Error(Xr.FETCH_NOT_AVAILABLE.message);ES(d);let m,g=n+1;for(let b=1;b<=g;b++){if(c?.aborted)throw new Error("Request aborted");try{let S=await f(d,{method:s,headers:p,signal:c});if(!S.ok)throw wI(S,s,d,u,l);if(S.status===204)return Rp(d),null;let C=await S.json();return Rp(d),C}catch(S){let C=S;if(c?.aborted||S instanceof Error&&S.name==="AbortError")throw new Error("Request aborted");if(C&&C.retryable===!1)throw S;if(m=S instanceof Error?S:new Error(String(S)),b===g)break;let k=TI(b,r,o,C);await new Promise(_=>setTimeout(_,k))}}throw kS(d),new Error(Xr.FETCH_FAILED_AFTER_RETRIES.message(g,m?.message||""))}var PI,Sp=y(()=>{"use strict";gs();ft();wo();ac();PI=6e4});import{z as L}from"zod";var cc,EI,AS,LS,Cp=y(()=>{"use strict";cc=L.looseObject({name:L.string(),version:L.string(),repository:L.union([L.string(),L.object({url:L.string().optional(),type:L.string().optional(),directory:L.string().optional()})]).optional(),main:L.string().optional(),module:L.string().optional(),type:L.string().optional(),exports:L.unknown().optional(),types:L.string().optional(),typings:L.string().optional(),description:L.string().optional(),keywords:L.array(L.string()).optional(),license:L.union([L.string(),L.object({type:L.string().optional()})]).optional(),homepage:L.string().optional(),author:L.union([L.string(),L.object({name:L.string().optional(),email:L.string().optional(),url:L.string().optional()})]).optional(),maintainers:L.array(L.object({name:L.string().optional(),email:L.string().optional()})).optional(),engines:L.record(L.string(),L.string()).optional(),dependencies:L.record(L.string(),L.string()).optional(),devDependencies:L.record(L.string(),L.string()).optional(),peerDependencies:L.record(L.string(),L.string()).optional(),time:L.record(L.string(),L.string().optional()).optional()}),EI=L.looseObject({package:L.looseObject({name:L.string().nullish(),version:L.string().nullish(),description:L.string().nullish(),links:L.looseObject({npm:L.string().nullish(),homepage:L.string().nullish(),repository:L.string().nullish()}).nullish()}),score:L.looseObject({final:L.number().nullish(),detail:L.looseObject({quality:L.number().nullish(),popularity:L.number().nullish(),maintenance:L.number().nullish()}).nullish()}).nullish()}),AS=L.looseObject({objects:L.array(EI),total:L.union([L.number(),L.string()]).optional()}),LS=L.union([L.string(),L.boolean(),L.number(),L.null(),L.record(L.string(),L.unknown())])});async function Pp(){if(Ei)return Ei;try{let e=await xi("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 Ei=t,t}}catch{}return Ei=lc,lc}function E4(){Ei=null}async function k4(){try{let e=await Pp(),t=globalThis.fetch;return t?(await t(e,{method:"HEAD",signal:AbortSignal.timeout(5e3)})).ok:!1}catch{return!1}}function Nn(e){return e.replace(/^git\+/,"").replace(/\.git$/,"")}function rt(e){return e===void 0?0:U(e)}async function NS(e){try{let t=`${OI}/${encodeURIComponent(e)}`,n=await cn(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 uc(e){return e.startsWith("@")&&e.includes("/")?!0:e.includes(" ")?!1:/^[a-z0-9][a-z0-9._-]*$/i.test(e)}function GS(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")}function vI(e){return e.replace(/^@/,"").replace(/[/_-]/g," ").replace(/\s+/g," ").trim()}function AI(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}function _S(e){if(typeof e=="string")return[e];if(!e||typeof e!="object")return;let n=Object.entries(e).flatMap(([r,o])=>typeof o=="string"?[`${r}:${o}`]:o&&typeof o=="object"?Object.entries(o).filter(([,i])=>typeof i=="string").map(([i,s])=>`${r}:${i}:${s}`):[]).slice(0,12);return n.length>0?n:void 0}function IS(e,t){if(typeof e=="string"){let n=t?.replace(/^@[^/]+\//,"")??"";return[n?`${n} \u2192 ${e}`:e]}if(e&&typeof e=="object"){let n=Object.entries(e).filter(([,r])=>typeof r=="string").map(([r,o])=>`${r} \u2192 ${o}`).slice(0,8);return n.length>0?n:void 0}}function LI(e){return e.type==="module"||e.module?"module":e.main?"commonjs":e.types||e.typings?"types-only":"unknown"}function xp(e,t=!1,n="cli"){let r=null,o;e.repository&&(typeof e.repository=="string"?r=Nn(e.repository):(e.repository.url&&(r=Nn(e.repository.url)),e.repository.directory&&(o=e.repository.directory.replace(/^\.\//,""))));let i;if(e.time){let c=(e.version?e.time[e.version]:void 0)||e.time.modified;c&&(i=c)}let s={name:e.name,npmUrl:`https://www.npmjs.com/package/${encodeURIComponent(e.name)}`,repoUrl:r,version:e.version||"latest",mainEntry:e.main||null,moduleEntry:e.module||null,typeDefinitions:e.types||e.typings||null,packageType:LI(e),...o?{repositoryDirectory:o}:{},..._S(e.exports)?{exports:_S(e.exports)}:{},...IS(e.bin,e.name)?{bin:IS(e.bin,e.name)}:{},lastPublished:i,source:n};return e.description&&(s.description=e.description),e.license&&(s.license=typeof e.license=="string"?e.license:e.license.type),t&&(e.author&&(typeof e.author=="string"?s.author=e.author:e.author.name&&(s.author=e.author.name)),e.keywords&&e.keywords.length>0&&(s.keywords=e.keywords),e.homepage&&(s.homepage=e.homepage),e.engines&&Object.keys(e.engines).length>0&&(s.engines=e.engines),e.dependencies&&Object.keys(e.dependencies).length>0&&(s.dependencies=e.dependencies),e.peerDependencies&&Object.keys(e.peerDependencies).length>0&&(s.peerDependencies=e.peerDependencies)),s}function _I(e){return typeof e.links?.repository=="string"?Nn(e.links.repository):typeof e.repository=="string"?Nn(e.repository):typeof e.repository?.url=="string"?Nn(e.repository.url):null}function II(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:_I(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 HS(e){return e.startsWith("@")?"@"+e.slice(1).replace("/","%2F"):e}async function zS(e){try{let t=await Pp(),n=HS(e),r=`${t}/${n}`,o=AbortSignal.timeout(8e3);try{let s=await cn(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 cn(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 wp(e,t,n){let[r,o]=await Promise.all([NS(e),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):zS(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 dc(e){let t=e.toLowerCase();return t.includes("404")||t.includes("not found")||t.includes("e404")}async function FI(e,t){try{let n=await xi("view",[e,"--json"],{timeout:kI});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,...dc(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=cc.safeParse(o);return s.success?{pkg:xp(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,...dc(r)?{}:{errorDetail:r},rawResponseChars:0}}}async function MI(e,t){try{let n=await Pp(),r=HS(e),o=`${n}/${r}/latest`,i;try{i=await cn(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=cc.safeParse(i);return a.success?{pkg:xp(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,...dc(r)?{}:{errorDetail:r},rawResponseChars:0}}}function DI(e){return[`https://cdn.jsdelivr.net/npm/${e}/package.json`,`https://unpkg.com/${e}/package.json`]}async function BS(e,t){let n=0,r;for(let o of DI(e)){let i;try{i=await cn(o,{maxRetries:0,initialDelayMs:300,headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3)})}catch(c){let l=c instanceof Error?c.message:String(c);dc(l)||(r=l);continue}if(n+=rt(i),!i||typeof i!="object")continue;let s=cc.safeParse(i);if(!s.success){r="Invalid npm CDN package.json response format";continue}return{pkg:xp(s.data,t,"cdn"),rawResponseChars:n}}return{pkg:null,...r?{errorDetail:r}:{},rawResponseChars:n}}async function Tp(e,t=!1){let[n,r]=await Promise.allSettled([FI(e,t),MI(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?wp(e,s.pkg,s.rawResponseChars):{pkg:null,errorDetail:o.errorDetail||i.errorDetail,rawResponseChars:o.rawResponseChars+i.rawResponseChars}}async function NI(e,t,n=!1){let{pkg:r,errorDetail:o,rawResponseChars:i}=await Tp(e,t);if(!r){if(o){let s=GS(o);if(s&&n){let a=await BS(e,t);if(a.pkg){let c=await wp(e,a.pkg,a.rawResponseChars);return{packages:c.pkg?[c.pkg]:[],totalFound:c.pkg?1:0,rawResponseChars:i+c.rawResponseChars}}}return{error:`NPM view failed for '${e}': ${o}`,rawResponseChars:i,hints:s?["npm registry is unreachable.","Use `ghSearchRepos` to find the source repo directly by package name or domain terms."]:["Ensure npm is installed and available in PATH","Check package name for typos",`Try: npm view ${e} --json`]}}return{packages:[],totalFound:0,rawResponseChars:i}}return{packages:[r],totalFound:1,rawResponseChars:i}}async function GI(e,t,n,r=0){let o=Math.max(t+r,t),i=await xi("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((m,g)=>{let b=m?.score?.final??0;return(g?.score?.final??0)-b}).slice(r,r+t),d=await Promise.all(u.map(async m=>{if(!m||typeof m!="object")return null;let g=m;if(!g.name)return null;if(n){let b=await Tp(g.name,!0);if(b.pkg)return b}return{pkg:II(g),rawResponseChars:0}})),p=d.map(m=>m?.pkg).filter(m=>!!m),f=d.reduce((m,g)=>m+(g?.rawResponseChars??0),0);return{packages:p,totalFound:a.length,rawResponseChars:c+f}}async function HI(e,t,n,r=0){try{let o=r>0?`&from=${r}`:"",i=`${lc}/-/v1/search?text=${encodeURIComponent(e)}&size=${t}${o}`,s;try{s=await cn(i,{maxRetries:1,initialDelayMs:500,signal:AbortSignal.timeout(8e3),packageRegistry:"npm"})}catch(m){return{error:`NPM registry search failed: ${m instanceof Error?m.message:String(m)}`,hints:["Check package name for typos","Try searching with a simpler term"]}}let a=rt(s);if(!s||typeof s!="object")return{packages:[],totalFound:0,rawResponseChars:a};let c=AS.safeParse(s);if(!c.success)return{error:`Invalid npm registry search response format: ${c.error.issues.map(g=>g.message).join("; ")}`,rawResponseChars:a,hints:["Try a different search term","Try itemsPerPage=1 for an exact package lookup"]};let u=[...c.data.objects].sort((m,g)=>{let b=m.score?.final??0;return(g.score?.final??0)-b}).map(m=>m.package).filter(m=>typeof m.name=="string"&&m.name.length>0).slice(0,t),d=await Promise.all(u.map(async m=>{if(n){let g=await Tp(m.name,!0);if(g.pkg)return g}return{pkg:{name:m.name,npmUrl:(m.links?.npm??"")||`https://www.npmjs.com/package/${encodeURIComponent(m.name)}`,repoUrl:m.links?.repository&&typeof m.links.repository=="string"?Nn(m.links.repository):null,version:m.version??"unknown",source:"registry",...m.description?{description:m.description}:{},...m.links?.homepage?{homepage:m.links.homepage}:{}},rawResponseChars:0}})),p=d.map(m=>m.pkg).filter(m=>!!m),f=d.reduce((m,g)=>m+g.rawResponseChars,0);return{packages:p,totalFound:AI(c.data.total,p.length),rawResponseChars:a+f}}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 FS(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 cn(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"?Nn(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 MS(e,t,n,r=0){try{let o=await GI(e,t,n,r);if(!("error"in o))return o}catch{}return HI(e,t,n,r)}async function DS(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}):NS(t.name),t.lastPublished?Promise.resolve({lastPublished:void 0,rawResponseChars:0}):zS(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)]}}async function QS(e,t,n,r=0){let o=He("npm-search",{name:e,limit:t,metadata:n,from:r});return ze(o,async()=>{if(OS(lc)){if(r===0&&t===1&&uc(e)){let u=await BS(e,n);if(u.pkg){let d=await wp(e,u.pkg,u.rawResponseChars);return{packages:d.pkg?[d.pkg]:[],totalFound:d.pkg?1:0,rawResponseChars:d.rawResponseChars}}}let l=await FS(e,t);return!("error"in l)&&l.packages.length>0?l:{error:"npm registry circuit open and web search returned no results.",hints:["Use `ghSearchRepos` to find the source repo directly."]}}if(r===0&&uc(e)){let l=await NI(e,n,t===1);if("error"in l){if(!GS(l.error))return l}else if(l.packages.length>0||t===1)return l}let s=await MS(e,t,n,r);if(!("error"in s)&&s.packages.length>0)return DS(s);let a=vI(e);if(a!==e){let l=await MS(a,t,n,r);if(!("error"in l)&&l.packages.length>0)return DS(l)}let c=await FS(e,t);return!("error"in c)&&c.packages.length>0?c:"error"in s?{...s,hints:["npm registry and web search (npms.io) are both unreachable.","Use `ghSearchRepos` to find the source repo directly by package name or domain terms."]}:s},{shouldCache:i=>!("error"in i||"totalFound"in i&&i.totalFound===0)})}async function zI(e){try{let t=await xi("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=LS.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 lc,kI,Ei,OI,Ep=y(()=>{"use strict";hp();Sp();Mt();ac();Cp();oe();lc="https://registry.npmjs.org",kI=3e3,Ei=null;OI="https://api.npmjs.org/downloads/point/last-week"});async function US(e){let t=uc(e.name),n=e.itemsPerPage??(t?1:10),r=Math.max(0,((e.page??1)-1)*n);return QS(e.name,n,!0,r)}var kp=y(()=>{"use strict";Ep()});function BI(e){return"error"in e}function pc(e){return"npmUrl"in e}function QI(e){return pc(e)&&e.path?e.path:e.name}function UI(e){return pc(e)?e.repoUrl:e.repository}function jI(e){if(!e)return;let t=e.replace(/^\.\//,"").replace(/^\//,"");return t.length>0?t:void 0}function $I(e){if(!e)return;let t=e.trim();if(!t)return;t=t.replace(/^git\+/,"");let n=i=>i.replace(/\.git$/,""),r=t.match(/^[^@/]+@([^:/]+):(.+)$/);if(r&&r[1]&&r[2])return n(`https://${r[1]}/${r[2]}`);let o=t.match(/^(?:ssh|git|https?):\/\/(.+)$/);if(o&&o[1]){let i=o[1].replace(/^[^@/]+@/,"");return n(`https://${i}`)}return n(t)}function qI(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 VI(e,t){let n=qI(e);if(!n)return;let{owner:r,repo:o}=n;return{viewRepoStructure:{tool:"ghViewRepoStructure",query:{owner:r,repo:o,...t?{path:t}:{}}},searchCode:{tool:"ghSearchCode",query:{owner:r,repo:o}},cloneRepo:{tool:"ghCloneRepo",query:{owner:r,repo:o,...t?{sparsePath:t}:{}}}}}function WI(e){let t=QI(e),n=$I(UI(e)),r={name:t};pc(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=jI(pc(e)?e.repositoryDirectory:void 0);o&&(r.repositoryDirectory=o);let i=VI(n,o);return i&&(r.next=i),r}function KI(e,t,n,r){let o=Math.max(1,e.page??1),i=r?10:1,s=r&&n>=i,a=Math.max(1,Math.ceil(t/i)),c=s||o<a,l=s&&o>=a?o+1:a;return{currentPage:o,totalPages:l,perPage:i,totalFound:t,returned:n,hasMore:c,...c?{nextPage:o+1}:{}}}async function jS(e){return se(e.queries,async t=>{try{if(!t.packageName)return M("Package name is required for package search",t);let n=await US({name:t.packageName,page:t.page,itemsPerPage:t.itemsPerPage,mainResearchGoal:t.mainResearchGoal,researchGoal:t.researchGoal,reasoning:t.reasoning});if(BI(n))return M(n.error,t,{rawResponse:n});let r=n.packages,o=r.map(WI),i=o.length>0,s=r.length>1||n.totalFound>1,a=KI(t,n.totalFound,o.length,s);return _e(t,{packages:o,pagination:a},i,A.PACKAGE_SEARCH,{rawResponse:n.rawResponseChars??n})}catch(n){return M(n,t,{toolName:A.PACKAGE_SEARCH})}},{toolName:A.PACKAGE_SEARCH,keysPriority:["packages","pagination","error"]},e)}var Op=y(()=>{"use strict";kp();je();Fe();fe()});import{safeReadFile as YI}from"@octocodeai/octocode-engine/lsp/validation";function ki(e){return`${e.uri}:${e.range.start.line}:${e.name}`}async function qS(e,t,n){if(t<=0)return e;let r=await YI(e.uri);if(!r)return e;let o=Do(r),i=n?.[0]?.start.line??e.range.start.line,s=Math.max(0,i-t),a=Math.min(o.length-1,i+t),c=o.slice(s,a+1).map((l,u)=>{let d=s+u+1;return`${d===i+1?">":" "}${String(d).padStart(4," ")}| ${l}`}).join(`
|
|
55
|
+
`);return{...e,content:c,displayRange:{startLine:s+1,endLine:a+1}}}async function XI(e,t){return Promise.all(e.map(async n=>({...n,from:await qS(n.from,t,n.fromRanges)})))}async function JI(e,t){return Promise.all(e.map(async n=>({...n,to:await qS(n.to,t)})))}async function vp(e,t,n,r,o){if(n<=0||!e)return{calls:[],...$S};try{let i=await e.getIncomingCalls(t),s=o>0?await XI(i,o):i;if(n===1)return{calls:s,truncatedByDepth:s.length>0,cycleCount:0,failedRequestCount:0};let a=await Promise.all(s.map(async c=>{let l=ki(c.from);return r.has(l)?{calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0}:(r.add(l),vp(e,c.from,n-1,r,o))}));return{calls:[...s,...a.flatMap(c=>c.calls)],truncatedByDepth:a.some(c=>c.truncatedByDepth),cycleCount:a.reduce((c,l)=>c+l.cycleCount,0),failedRequestCount:a.reduce((c,l)=>c+l.failedRequestCount,0)}}catch{return{calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1}}}async function Ap(e,t,n,r,o){if(n<=0||!e)return{calls:[],...$S};try{let i=await e.getOutgoingCalls(t),s=o>0?await JI(i,o):i;if(n===1)return{calls:s,truncatedByDepth:s.length>0,cycleCount:0,failedRequestCount:0};let a=await Promise.all(s.map(async c=>{let l=ki(c.to);return r.has(l)?{calls:[],truncatedByDepth:!1,cycleCount:1,failedRequestCount:0}:(r.add(l),Ap(e,c.to,n-1,r,o))}));return{calls:[...s,...a.flatMap(c=>c.calls)],truncatedByDepth:a.some(c=>c.truncatedByDepth),cycleCount:a.reduce((c,l)=>c+l.cycleCount,0),failedRequestCount:a.reduce((c,l)=>c+l.failedRequestCount,0)}}catch{return{calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:1}}}var $S,Lp=y(()=>{"use strict";br();$S={truncatedByDepth:!1,cycleCount:0,failedRequestCount:0}});import{readFile as ZI,stat as eF}from"node:fs/promises";import{SymbolResolver as tF,SymbolResolutionError as nF}from"@octocodeai/octocode-engine/lsp/resolver";import{LSP_ERROR_CODES as fc}from"@octocodeai/octocode-engine/lsp/lspErrorCodes";async function _p(e,t){let n=e.uri,r=Ke({...e,path:n},t);if(!r.isValid)return{ok:!1,error:r.errorResult};let o=r.sanitizedPath;try{if((await eF(o)).isDirectory())return{ok:!1,error:{status:"error",error:`Path is a directory, not a file: ${o}. lspGetSemantics needs a single file uri.`,errorType:"not_a_file",errorCode:fc.LSP_REQUEST_FAILED,hints:["Pass the path to a specific source file (e.g. via search --op on a file, or workspaceSymbol with symbolName for whole-project lookup)."]}}}catch{return{ok:!1,error:{status:"error",error:`File not found: ${o}. Check the path and spelling.`,errorType:"file_not_found",errorCode:fc.LSP_REQUEST_FAILED,hints:[`Could not find file: ${n??"<missing>"}. Run search/localFindFiles to get the exact path first.`]}}}try{return{ok:!0,value:{uri:o,absolutePath:o,content:await ZI(o,"utf-8")}}}catch(i){return{ok:!1,error:{status:"error",error:i instanceof Error?i.message:String(i),errorType:"file_not_found",errorCode:fc.LSP_REQUEST_FAILED,hints:[`Could not read file: ${n??"<missing>"}`]}}}}async function VS(e,t){let n=await _p(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 tF({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=Math.abs(o.foundAtLine-(e.lineHint??0)),l=a>1&&c>3?!0:void 0;return{ok:!0,value:{...n.value,resolvedSymbol:{name:e.symbolName,uri:n.value.absolutePath,range:rF(o.position),foundAtLine:o.foundAtLine,orderHint:e.orderHint,position:o.position,...l&&{isAmbiguous:l}}}}}catch(o){if(o instanceof nF)return{ok:!1,error:{status:"empty",error:o.message,errorType:"symbol_not_found",errorCode:fc.SYMBOL_NOT_FOUND,searchRadius:o.searchRadius,hints:[`Symbol "${e.symbolName}" was not found near line ${e.lineHint}.`,"Run localSearchCode with the exact symbol name to refresh lineHint, then retry."]}};throw o}}function rF(e){return{start:e,end:{line:e.line,character:e.character}}}var Ip=y(()=>{"use strict";Et()});import Oi from"node:path";import{fileURLToPath as oF}from"node:url";import{acquirePooledClient as gc,isLanguageServerAvailable as hc}from"@octocodeai/octocode-engine/lsp/manager";import{resolveImportAliasDefinitions as iF}from"@octocodeai/octocode-engine/lsp/resolver";import{resolveWorkspaceRootForFile as Dp}from"@octocodeai/octocode-engine/lsp/workspaceRoot";function XS(e){return Fp||(Fp=new Set(F.getSupportedJsTsExtensions().map(t=>`.${t}`))),Fp.has(Oi.extname(e).toLowerCase())}function aF(e,t){let n=e.startsWith("file://")?oF(e):e;return Oi.isAbsolute(n)?n:Oi.resolve(t,n)}function JS(){return[...F.getSupportedJsTsExtensions(),...sF]}function cF(){return JS().map(e=>`**/*.${e}`)}async function uF(e,t){let n=e.symbolName?.trim();if(n)try{return(await F.searchRipgrep({path:t,pattern:n,fixedString:!0,caseSensitive:!0,filesOnly:!0,include:cF(),excludeDir:[...lF],maxSnippetChars:1})).files[0]?.path}catch{return}}async function dF(e,t){if(e.uri)return aF(e.uri,t);let n=await uF(e,t);if(n)return n;try{let o=F.queryFileSystem({path:t,recursive:!0,includeRoot:!1,showHidden:!1,entryType:"f",extensions:JS(),maxDepth:5,limit:1}).entries[0];if(o)return o.path}catch{}return t}function pF(e){return e instanceof Error?e.message:String(e)}function fF(e,t){if(!XS(e))return null;try{let n=F.extractJsSymbols(t,e);if(!n)return null;let r=JSON.parse(n);return Array.isArray(r)?r:null}catch{return null}}async function Np(e){return se(e.queries||[],async t=>Ve({toolName:ve,query:t,contextMessage:"lspGetSemantics execution failed",execute:async()=>{let n=await TF(t);return hF(yF(t,n))}}),{toolName:ve,minQueryTimeoutMs:3e4},e)}function hF(e){return j(e,U(e))}function yF(e,t){return e.format!=="compact"||!bF(t)?t:RF(t)}function bF(e){return Gn(e)&&typeof e.type=="string"&&typeof e.uri=="string"&&Gn(e.payload)}function RF(e){return{...e,format:"compact",payload:SF(e.payload)}}function SF(e){switch(e.kind){case"definition":case"typeDefinition":case"implementation":return{kind:e.kind,locations:e.locations.map(WS)};case"references":return{kind:"references",...e.byFile?{byFile:e.byFile.map(PF)}:{locations:(e.locations??[]).map(WS)},totalReferences:e.totalReferences,totalFiles:e.totalFiles};case"callers":case"callees":case"callHierarchy":return{kind:e.kind,...e.root?{root:eC(e.root)}:{},direction:e.direction,calls:e.calls.map(xF),...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(CF)};case"hover":case"empty":case"workspaceSymbol":case"typeHierarchy":case"diagnostic":return e}}function CF(e){if(!Gn(e))return String(e);let t=Ye(e,"line"),n=Ye(e,"character"),r=Ye(e,"endLine"),o=Qt(e,"kind"),i=Qt(e,"name"),s=Ye(e,"childCount"),a=Qt(e,"containerName");return[`${t}:${n}${r!==t?`-${r}`:""}`,o,i,a?`< ${a}`:"",s>0?`children=${s}`:""].filter(Boolean).join(" ")}function WS(e){if(typeof e=="string")return e;let t=e.displayRange?`${e.displayRange.startLine}-${e.displayRange.endLine}`:"?",n=e.isDefinition?" def":"",r=e.content?` | ${nC(e.content,180)}`:"";return`${e.uri}:${t}${n}${r}`}function PF(e){if(!Gn(e))return String(e);let t=Qt(e,"uri"),n=Ye(e,"firstLine"),r=Ye(e,"firstCharacter"),o=Ye(e,"count"),i=tC(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 xF(e){if(!Gn(e))return String(e);let t=Qt(e,"direction"),n=eC(e.item),r=tC(e,"ranges").map(wF).join(","),o=Ye(e,"rangeCount"),i=Ye(e,"rangeSampleCount"),s=Qt(e,"contentPreview");return[t,n,r?`ranges=${r}`:"",o>i?`totalRanges=${o}`:"",s?`| ${nC(s,180)}`:""].filter(Boolean).join(" ")}function eC(e){if(!Gn(e))return String(e);let t=Qt(e,"name"),n=Qt(e,"kind"),r=Qt(e,"uri"),o=Ye(e,"line"),i=Ye(e,"endLine"),s=Ye(e,"selectionLine"),a=s>0?` sel=${s}`:"";return`${t} ${n} ${r}:${o}-${i}${a}`}function wF(e){return Gn(e)?`${Ye(e,"line")}:${Ye(e,"character")}`:String(e)}function Gn(e){return typeof e=="object"&&e!==null}function Qt(e,t,n=""){let r=e[t];return typeof r=="string"?r:n}function Ye(e,t,n=0){let r=e[t];return typeof r=="number"?r:n}function tC(e,t){let n=e[t];return Array.isArray(n)?n:[]}function nC(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}async function TF(e){if(e.type==="documentSymbols")return EF(e);if(e.type==="workspaceSymbol")return LF(e);if(e.type==="diagnostic")return FF(e);let t=await VS(e,ve);if(t.ok===!1){let i=typeof t.error.error=="string"?t.error.error:"Symbol anchor resolution failed";return jF(e,i)}let n=e.workspaceRoot??await Dp(t.value.uri);if(!await hc(t.value.uri,n)){if(e.type==="references"){let i=OF(e,t.value);if(i)return i}return St(e.type,t.value,"Language server unavailable")}let o=await gc(n,t.value.uri);if(!o)return St(e.type,t.value,"Language server unavailable");switch(e.type){case"definition":return o.hasCapability("definitionProvider")?Mp(e,t.value,"definition","definitionProvider",await iF({anchorUri:t.value.uri,symbolName:t.value.resolvedSymbol.name,locations:await o.gotoDefinition(t.value.uri,t.value.resolvedSymbol.position,t.value.content)})):St(e.type,t.value,"definitionProvider unsupported",!0);case"typeDefinition":return o.hasCapability("typeDefinitionProvider")?Mp(e,t.value,"typeDefinition","typeDefinitionProvider",await o.typeDefinition(t.value.uri,t.value.resolvedSymbol.position,t.value.content)):St(e.type,t.value,"typeDefinitionProvider unsupported",!0);case"implementation":return o.hasCapability("implementationProvider")?Mp(e,t.value,"implementation","implementationProvider",await o.implementation(t.value.uri,t.value.resolvedSymbol.position,t.value.content)):St(e.type,t.value,"implementationProvider unsupported",!0);case"references":return o.hasCapability("referencesProvider")?rC(e,t.value,await o.findReferences(t.value.uri,t.value.resolvedSymbol.position,e.includeDeclaration??!0,t.value.content)):St(e.type,t.value,"referencesProvider unsupported",!0);case"hover":return o.hasCapability("hoverProvider")?vF(e,t.value,await o.hover(t.value.uri,t.value.resolvedSymbol.position,t.value.content)):St(e.type,t.value,"hoverProvider unsupported",!0);case"callers":case"callees":case"callHierarchy":return o.hasCapability("callHierarchyProvider")?AF(e,t.value,o):St(e.type,t.value,"callHierarchyProvider unsupported",!0);case"supertypes":case"subtypes":return o.hasCapability("typeHierarchyProvider")?IF(e,t.value,o):St(e.type,t.value,"typeHierarchyProvider unsupported",!0)}}async function EF(e){let t=await _p(e,ve);if(t.ok===!1)return t.error;let n=e.workspaceRoot??await Dp(t.value.uri),r=await hc(t.value.uri,n),o=r?await gc(n,t.value.uri):null,i=!!o?.hasCapability("documentSymbolProvider"),s=[],a,c=fF(t.value.uri,t.value.content);if(c?.length)s=c,a="native";else if(i&&o){let S=await o.documentSymbols(t.value.uri,t.value.content);s=Array.isArray(S)?S:[],a="lsp"}else{let S=zg(t.value.content,t.value.uri);S&&(s=S,a="markdown")}let l=a!==void 0,u=NF(s),d=zF(s),{pageItems:p,pagination:f}=Hn(u,e.page??1,e.itemsPerPage??yc),m=BF(u,S=>S.kind),b=l?void 0:{category:r?"unsupportedOperation":"serverUnavailable",reason:(l?void 0:r?"documentSymbolProvider unsupported":"Language server unavailable; native outline supports JS/TS only")??"document symbols unavailable"};return{type:"documentSymbols",uri:t.value.uri,lsp:{serverAvailable:r,...a==="lsp"?{provider:"documentSymbolProvider"}:{},...a?{source:a}:{}},summary:{totalSymbols:u.length,returnedSymbols:p.length,topLevelSymbols:d,kinds:m},payload:{kind:"documentSymbols",symbols:p,...b?{empty:b}:{}},pagination:f}}function Mp(e,t,n,r,o){let i=o.length>0,s=o.map(cp),{pageItems:a,pagination:c}=Hn(s,e.page??1,e.itemsPerPage??ZS);return{type:e.type,uri:t.uri,resolvedSymbol:Mn(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 rC(e,t,n,r=kF){let o=r.kind==="native",i=n.map(d=>{let p=d.uri===t.uri&&d.range.start.line===t.resolvedSymbol.position.line&&d.range.start.character===t.resolvedSymbol.position.character;return{...d,...p?{isDefinition:!0}:{}}}),s=e.groupByFile?$F(i):void 0,a=s??i.map(cp),{pageItems:c,pagination:l}=Hn(a,e.page??1,e.itemsPerPage??ZS),u=i.length===0?{category:"noReferences",reason:o?"no in-file references found":"referencesProvider returned no references"}:void 0;return{type:"references",uri:t.uri,resolvedSymbol:Mn(t.resolvedSymbol),lsp:o?{serverAvailable:!1,source:"native"}:{serverAvailable:!0,provider:"referencesProvider",source:"lsp"},payload:{kind:"references",...s?{byFile:c}:{locations:c},totalReferences:i.length,totalFiles:new Set(i.map(d=>d.uri)).size,...u?{empty:u}:{}},pagination:l,...u&&o?{warnings:["source: native (oxc) \u2014 same-file references only; install a language server for cross-file references."]}:{}}}function OF(e,t){if(!XS(t.uri))return null;let n;try{let i=F.findInFileReferences(t.content,t.uri,t.resolvedSymbol.position.line,t.resolvedSymbol.position.character);if(!i)return null;let s=JSON.parse(i);if(!Array.isArray(s))return null;n=s}catch{return null}let r=t.content.split(`
|
|
56
|
+
`),o=n.map(i=>({uri:t.uri,range:i,content:(r[i.start.line]??"").trim()}));return rC(e,t,o,{kind:"native",scope:"file"})}async function vF(e,t,n){let r=qF(n),o=!!(r.markdown||r.text);return{type:"hover",uri:t.uri,resolvedSymbol:Mn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"hoverProvider"},payload:o?{kind:"hover",...r}:{kind:"empty",category:"noHover",reason:"hoverProvider returned no hover content"}}}async function AF(e,t,n){let o=(await n.prepareCallHierarchy(t.uri,t.resolvedSymbol.position,t.content))[0];if(!o)return St(e.type,t,"No callable symbol found",!0);let i=e.depth??1,s={calls:[],truncatedByDepth:!1,cycleCount:0,failedRequestCount:0},a=e.type==="callers"||e.type==="callHierarchy"?await vp(n,o,i,new Set([ki(o)]),e.contextLines??0):s,c=e.type==="callees"||e.type==="callHierarchy"?await Ap(n,o,i,new Set([ki(o)]),e.contextLines??0):s,l=C=>/node_modules\/typescript\/lib\/lib\.[^/]*\.d\.ts$/.test(C.to.uri),u=c.calls.filter(l).length,d=c.calls.filter(C=>!l(C)),p=[...a.calls.map(C=>({direction:"incoming",...C})),...d.map(C=>({direction:"outgoing",...C}))],f=p.map(C=>C.direction==="incoming"?QF(C,e.contextLines??0):UF(C,e.contextLines??0)),{pageItems:m,pagination:g}=Hn(f,e.page??1,e.itemsPerPage??mF),b=e.type==="callers"?"incoming":e.type==="callees"?"outgoing":"both",S=!a.truncatedByDepth&&!c.truncatedByDepth&&a.failedRequestCount+c.failedRequestCount===0;return{type:e.type,uri:t.uri,resolvedSymbol:Mn(t.resolvedSymbol),lsp:{serverAvailable:!0,provider:"callHierarchyProvider"},payload:{kind:e.type,root:Gp(o),direction:b,calls:m,incomingCalls:a.calls.length,outgoingCalls:d.length,completeness:{complete:S,truncatedByDepth:a.truncatedByDepth||c.truncatedByDepth,cycleCount:a.cycleCount+c.cycleCount,failedRequestCount:a.failedRequestCount+c.failedRequestCount,dynamicCallsExcluded:!0,...u>0&&{stdlibCallsExcluded:u}},...p.length===0?{empty:{category:"noCalls",reason:"callHierarchyProvider returned no calls"}}:{}},pagination:g}}async function LF(e){let t=e.symbolName??"",n=Oi.resolve(e.workspaceRoot??process.cwd()),r=await dF(e,n);if(!await hc(r,n))return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!1},payload:{kind:"empty",category:"serverUnavailable",reason:"Language server unavailable"}};let i=await gc(n,r);if(!i)return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!1},payload:{kind:"empty",category:"serverUnavailable",reason:"Language server unavailable"}};if(!i.hasCapability("workspaceSymbolProvider"))return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:"workspaceSymbolProvider unsupported"}};let s;try{Oi.extname(r)&&await i.openDocument(r),s=await i.workspaceSymbol(t)}catch(u){return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},payload:{kind:"empty",category:"unsupportedOperation",reason:`workspaceSymbolProvider failed: ${pF(u)}`}}}let a=_F(s),{pageItems:c,pagination:l}=Hn(a,e.page??1,e.itemsPerPage??yc);return{type:"workspaceSymbol",uri:r,lsp:{serverAvailable:!0,provider:"workspaceSymbolProvider"},summary:{query:t,totalSymbols:a.length},payload:a.length>0?{kind:"workspaceSymbol",query:t,symbols:c,totalSymbols:a.length}:{kind:"empty",category:"noWorkspaceSymbols",reason:`workspaceSymbolProvider returned no symbols for query "${t}"`},pagination:l}}function _F(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:mc(o),line:c,character:s?.start?.character??0,endLine:l,childCount:0,...u?{containerName:u}:{},uri:a}]})}async function IF(e,t,n){let o=(await n.prepareTypeHierarchy(t.uri,t.resolvedSymbol.position,t.content))[0];if(!o)return St(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}=Hn(s,e.page??1,e.itemsPerPage??yc);return{type:e.type,uri:t.uri,resolvedSymbol:Mn(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}}async function FF(e){let t=e.uri??"",n=e.workspaceRoot??(t?await Dp(t):process.cwd());if(!await hc(t,n))return{type:"diagnostic",uri:t,lsp:{serverAvailable:!1},payload:{kind:"empty",category:"serverUnavailable",reason:"Language server unavailable"}};let o=await gc(n,t);if(!o)return{type:"diagnostic",uri:t,lsp:{serverAvailable:!1},payload:{kind:"empty",category:"serverUnavailable",reason:"Language server unavailable"}};if(!o.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 i=await o.getDiagnostics(t),s=MF(i),a=s.filter(d=>d.severity===1).length,c=s.filter(d=>d.severity===2).length,{pageItems:l,pagination:u}=Hn(s,e.page??1,e.itemsPerPage??yc);return{type:"diagnostic",uri:t,lsp:{serverAvailable:!0,provider:"diagnosticProvider"},summary:{totalDiagnostics:s.length,errorCount:a,warningCount:c},payload:s.length>0?{kind:"diagnostic",diagnostics:l,totalDiagnostics:s.length,errorCount:a,warningCount:c}:{kind:"empty",category:"noDiagnostics",reason:"No diagnostics \u2014 file has no errors or warnings"},pagination:u}}function MF(e){if(e&&typeof e=="object"){let t=e;return(Array.isArray(t.items)?t.items:[]).flatMap(r=>DF(r))}return[]}function DF(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}:{}}]:[]}function Hn(e,t,n){let r=Math.max(1,n),o=Math.max(1,Math.ceil(e.length/r)),i=Math.min(Math.max(1,t),o),s=(i-1)*r,a=e.slice(s,s+r),c=i<o;return{pageItems:a,pagination:{currentPage:i,totalPages:o,totalResults:e.length,hasMore:c,itemsPerPage:r,...c?{nextPage:i+1}:{}}}}function NF(e){let t=[];for(let n of e)oC(n,t);return t.sort((n,r)=>n.line-r.line||n.character-r.character)}function oC(e,t,n){if(!e||typeof e!="object")return;let r=e,o=HF(r);if(typeof r.name=="string"&&o&&t.push({name:r.name,kind:mc(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)&&GF.has(mc(r.kind))){let i=typeof r.name=="string"?r.name:n;for(let s of r.children)oC(s,t,i)}}function HF(e){if(KS(e.range))return e.range;let t=e.location;return t&&KS(t.range)?t.range:void 0}function KS(e){if(!e||typeof e!="object")return!1;let t=e;return YS(t.start)&&YS(t.end)}function YS(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.line=="number"&&typeof t.character=="number"}function zF(e){return e.filter(t=>t&&typeof t=="object"&&"name"in t).length}function BF(e,t){let n={};for(let r of e){let o=t(r);n[o]=(n[o]??0)+1}return n}function QF(e,t){let n=iC(e.fromRanges);return{direction:"incoming",item:Gp(e.from),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...sC(e.from,t)}}function UF(e,t){let n=iC(e.fromRanges);return{direction:"outgoing",item:Gp(e.to),ranges:n,rangeCount:e.fromRanges.length,rangeSampleCount:n.length,...sC(e.to,t)}}function Gp(e){return{name:e.name,kind:mc(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 iC(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>=gF))break}return n}function sC(e,t){return t<=0||!e.content?{}:{contentPreview:e.content}}function mc(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"}}function aC(e,t){return/unavailable/i.test(t)?"serverUnavailable":/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 jF(e,t){let n=e.uri??"";return{type:e.type,uri:n,lsp:{},payload:{kind:"empty",category:aC(e.type,t),reason:t}}}function St(e,t,n,r=!1){return{type:e,uri:t.uri,resolvedSymbol:Mn(t.resolvedSymbol),lsp:{serverAvailable:r},payload:{kind:"empty",category:aC(e,n),reason:n}}}function $F(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 qF(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=>VF(r)).join(`
|
|
57
|
+
`).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 VF(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 Fp,sF,lF,yc,ZS,mF,gF,kF,GF,bc=y(()=>{"use strict";je();oe();Ht();Lp();Dn();Ip();be();Is();sF=["py","rs","go","java","kt","cs","c","cc","cpp","h","hpp","rb","php","swift","scala","lua","dart","ex","exs","erl","hrl","clj","cljs"];lF=[".git","node_modules","dist","out","coverage","target"];yc=40,ZS=40,mF=10,gF=8;kF={kind:"lsp"};GF=new Set(["file","module","namespace","package","class","enum","interface","markdownHeading","struct"])});var Hp,zp=y(()=>{"use strict";fe();Hp={hasTool(e){return Gl(e)},getDescription(e){return Dl[e]??""},getToolName(e){return A[e]??String(e)}}});function WF(e,t){return t.getToolName(e)}function dt(e,t,n){let r=WF(t,e);return{...n,name:r,description:Bp(r,e)}}function KF(e=Hp){let t=dt(e,"GITHUB_SEARCH_CODE",{isDefault:!0,isLocal:!1,type:"search",direct:{schema:aa,inputSchema:ca,executionFn:ky,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),n=dt(e,"GITHUB_FETCH_CONTENT",{isDefault:!0,isLocal:!1,type:"content",direct:{schema:xr,inputSchema:na,executionFn:wy,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),r=dt(e,"GITHUB_VIEW_REPO_STRUCTURE",{isDefault:!0,isLocal:!1,type:"content",direct:{schema:ba,inputSchema:Ra,executionFn:qy,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),o=dt(e,"GITHUB_SEARCH_REPOSITORIES",{isDefault:!0,isLocal:!1,type:"search",direct:{schema:ga,inputSchema:ha,executionFn:Uy,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),i=dt(e,"GITHUB_SEARCH_PULL_REQUESTS",{isDefault:!0,isLocal:!1,type:"history",direct:{schema:wr,inputSchema:ma,executionFn:Ny,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),s=dt(e,"PACKAGE_SEARCH",{isDefault:!0,isLocal:!1,type:"search",direct:{schema:ec,inputSchema:tc,executionFn:jS,security:"remote",requiresServerRuntime:!0}}),a=dt(e,"GITHUB_CLONE_REPO",{isDefault:!0,isLocal:!0,isClone:!0,type:"content",skipMetadataCheck:!0,direct:{schema:Zo,inputSchema:ea,executionFn:ny,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}}),c=dt(e,"LOCAL_RIPGREP",{isDefault:!0,isLocal:!0,type:"search",direct:{schema:tn,inputSchema:ka,executionFn:Ub,security:"basic"}}),l=dt(e,"LOCAL_VIEW_STRUCTURE",{isDefault:!0,isLocal:!0,type:"content",direct:{schema:Dr,inputSchema:_a,executionFn:Jb,security:"basic"}}),u=dt(e,"LOCAL_FIND_FILES",{isDefault:!0,isLocal:!0,type:"search",direct:{schema:Ar,inputSchema:Ea,executionFn:Pb,security:"basic"}}),d=dt(e,"LOCAL_FETCH_CONTENT",{isDefault:!0,isLocal:!0,type:"content",direct:{schema:vr,inputSchema:Ta,executionFn:bb,security:"basic"}}),p={name:ve,description:Bp(ve,e),isDefault:!0,isLocal:!0,skipMetadataCheck:!0,type:"content",direct:{schema:Si,inputSchema:Ci,executionFn:Np,security:"basic",requiresServerRuntime:!0}},f=dt(e,"LOCAL_BINARY_INSPECT",{isDefault:!0,isLocal:!0,isBinary:!0,type:"content",direct:{schema:Tr,inputSchema:Ca,executionFn:fb,security:"basic"}}),m={name:Fn,description:Bp(Fn,e),isDefault:!0,isLocal:!1,type:"search",direct:{schema:Da,inputSchema:Ln,executionFn:lC,security:"remote",requiresServerRuntime:!0,requiresProviders:!0}};return{GITHUB_SEARCH_CODE:t,GITHUB_FETCH_CONTENT:n,GITHUB_VIEW_REPO_STRUCTURE:r,GITHUB_SEARCH_REPOSITORIES:o,GITHUB_SEARCH_PULL_REQUESTS:i,PACKAGE_SEARCH:s,GITHUB_CLONE_REPO:a,LOCAL_RIPGREP:c,LOCAL_VIEW_STRUCTURE:l,LOCAL_FIND_FILES:u,LOCAL_FETCH_CONTENT:d,LSP_GET_SEMANTIC_CONTENT:p,LOCAL_BINARY_INSPECT:f,OQL_SEARCH:m,ALL_TOOLS:[t,n,r,o,i,s,a,c,l,u,d,p,f,m]}}var Bp,$e,NY,GY,HY,zY,BY,QY,UY,jY,$Y,qY,VY,WY,KY,YY,cC,Qp=y(()=>{"use strict";ta();ei();la();ni();ya();Sa();nc();ii();si();Fr();pi();Pi();ri();Gr();ld();Gu();zu();Qu();Yu();Zu();ed();Op();fd();md();Ed();Fd();bc();Up();Dn();Ri();zp();Bp=(e,t=Hp)=>t.getDescription(e);$e=KF(),NY=$e.GITHUB_SEARCH_CODE,GY=$e.GITHUB_FETCH_CONTENT,HY=$e.GITHUB_VIEW_REPO_STRUCTURE,zY=$e.GITHUB_SEARCH_REPOSITORIES,BY=$e.GITHUB_SEARCH_PULL_REQUESTS,QY=$e.PACKAGE_SEARCH,UY=$e.GITHUB_CLONE_REPO,jY=$e.LOCAL_RIPGREP,$Y=$e.LOCAL_VIEW_STRUCTURE,qY=$e.LOCAL_FIND_FILES,VY=$e.LOCAL_FETCH_CONTENT,WY=$e.LSP_GET_SEMANTIC_CONTENT,KY=$e.LOCAL_BINARY_INSPECT,YY=$e.OQL_SEARCH,cC=$e.ALL_TOOLS});import{ContentSanitizer as YF}from"@octocodeai/octocode-engine/security";function jp(e){let t=e;if(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}=YF.sanitizeContent(n.text);return{...n,text:r}}catch{return n}return n})}),t.structuredContent)try{t={...t,structuredContent:Tt(t.structuredContent)}}catch{}return t}function $p(e,t){let n=JF(t),r={content:[{type:"text",text:`error: tool "${e}" threw an exception
|
|
58
|
+
message: ${n.message}`}],structuredContent:{status:"error",tool:e,code:XF,error:{name:n.name,message:n.message,code:n.code}},isError:!0};try{return jp(r)}catch{return r}}function JF(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:ZF(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 ZF(e){try{return JSON.stringify(e)}catch{return}}var XF,qp=y(()=>{"use strict";Ko();XF="TOOL_CALLBACK_EXCEPTION"});import{releaseAllPooledClients as e0}from"@octocodeai/octocode-engine/lsp/manager";function t0(e){return async t=>e(t)}function n0(e){let{direct:t}=e;return{name:e.name,schema:t.schema,inputSchema:t.inputSchema,execute:t0(t.executionFn),security:t.security,isLocal:e.isLocal,isClone:e.isClone,requiresServerRuntime:t.requiresServerRuntime,requiresProviders:t.requiresProviders}}function o0(e){return r0.find(t=>t.name===e)}async function Kp(e,t){let n=o0(e);if(!n)throw new Error(`Unknown tool: ${e}`);try{let r=i0(n,t);return await s0(n),a0(n),await c0(n,r)}catch(r){return $p(n.name,r)}finally{e===ve&&await e0()}}function i0(e,t){let n=e.inputSchema.safeParse(t);if(!n.success)throw n.error;return n.data}async function s0(e){e.requiresServerRuntime&&(Vp||(Vp=Um()),await Vp),e.requiresProviders&&(Wp||(Wp=Ih().then(()=>{})),await Wp)}function a0(e){if(!e.isLocal&&!e.isClone)return;let t=ge();if(e.isLocal&&!t.local.enabled){let n=new Error(`Tool "${e.name}" requires local tools. Set ENABLE_LOCAL=true to use it.`);throw n.code="localToolsDisabled",n}if(e.isClone&&!(t.local.enabled&&t.local.enableClone)){let n=new Error(`Tool "${e.name}" requires clone support. Set ENABLE_CLONE=true and ENABLE_LOCAL=true to use it.`);throw n.code="cloneDisabled",n}}async function c0(e,t){try{let n=e.security==="remote"?await l0(e,t):await u0(e,t);return jp(n)}catch(n){return $p(e.name,n)}}async function l0(e,t){return pf(e.name,async(r,o,i)=>e.execute({...r,authInfo:o,sessionId:i}))(t,{})}async function u0(e,t){return ff(e.execute,e.name)(t)}var Vp,Wp,r0,uC=y(()=>{"use strict";lr();Qs();Ae();Dn();Qp();qp();Oc();gp();Vp=null,Wp=null;r0=cC.map(n0)});var Yp=y(()=>{"use strict";gp();uC()});function Pe(e,t){return Kp(e,{queries:[{...d0,...t}]})}var d0,Rc=y(()=>{"use strict";Yp();d0={mainResearchGoal:"octocode search (OQL)",researchGoal:"OQL target execution",reasoning:"Compiled from an OQL query."}});function fC(e){if(e?.kind!=="github")return{};if(e.repo&&e.repo.includes("/")){let[t,n]=e.repo.split("/");return{owner:t,repo:n}}return{owner:e.owner}}function vi(e){let n=e.structuredContent?.results?.[0];if(n)return"data"in n?n.data:n}function p0(e){return e.structuredContent?.results?.[0]?.status}function Sc(e,t){return e>0?[]:[x("providerUnindexed",`${t} returned no results \u2014 GitHub may not index this repo/branch (or the name redirected). Do not treat this as absence: verify with \`search owner/repo[/path] --tree\`, then use bounded local proof via \`search <term> <path> --repo owner/repo --materialize required\`, \`clone owner/repo[/path]\`, or \`cache fetch owner/repo [path] --depth file|tree|clone\`.`,{backend:t,severity:"warning",blocksAnswer:!0})]}function mC(e){return!e||e==="."?"":e.replace(/^\/+|\/+$/g,"")}function dC(...e){return e.map(mC).filter(Boolean).join("/")}function f0(e){return e?Array.isArray(e)?[...e]:Object.entries(e).map(([t,n])=>({dir:t,files:n.files,folders:n.folders})):[]}function pC(e){return mC(e).split("/").filter(Boolean).length}function m0(e){return e.trim().toLowerCase().replace(/^\*\./,"").replace(/^\./,"")}function g0(e){let t=e.split("/").pop()??e,n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}function h0(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function y0(e,t){let n=t.trim();if(!n)return!0;let r=e.split("/").pop()??e;if(!n.includes("*")&&!n.includes("?"))return r.includes(n)||e.includes(n);let o=n.split("**").map(s=>s.split("*").map(a=>a.split("?").map(h0).join("[^/]")).join("[^/]*")).join(".*"),i=new RegExp(`^${o}$`);return i.test(r)||i.test(e)}function b0(e,t){let n=t.fetch?.tree;if(!n)return[...e];let r=(n.extensions??[]).map(m0).filter(Boolean);return e.filter(o=>n.filesOnly&&o.entryType!=="file"||n.directoriesOnly&&o.entryType!=="directory"||n.pattern&&!y0(o.path,n.pattern)?!1:o.entryType==="directory"||r.length===0||r.includes(g0(o.path)))}function gC(e){if(typeof e!="string")return e.path;let t=e.indexOf(":");return t>=0?e.slice(t+1):e}function R0(e){if(typeof e=="string")return;let t={...e.owner!==void 0?{owner:e.owner}:{},...e.repo!==void 0?{repo:e.repo}:{},...e.queryId!==void 0?{queryId:e.queryId}:{}};return Object.keys(t).length?t:void 0}function S0(e){return typeof e=="string"?[]:e.matches??[]}async function hC(e){switch(e.target){case"content":return x0(e);case"structure":return w0(e);case"files":return C0(e);default:return P0(e)}}async function C0(e){let t=hi(e,{defaultMatch:"file",unsupportedBackend:"localFindFiles",unsupportedMessage:'target:"files" over a GitHub source can only list files containing a term via the provider; everything else needs materialization (set materialize.mode:"auto" with a bounded scope.path, or use a local source).'});if(!t.ok)return{results:[],diagnostics:t.diagnostics,provenance:[]};let n=await Pe("ghSearchCode",t.query),r=vi(n),o=new Set,i=[];for(let a of r?.files??[]){let c=gC(a);o.has(c)||(o.add(c),i.push({kind:"file",source:Te(e),path:c,entryType:"file"}))}let s=Bt(r?.pagination);return{results:i,...s?{pagination:s}:{},diagnostics:[...Cc(n,"ghSearchCode"),...Sc(i.length,"ghSearchCode"),...i.length>0?[x("providerSemanticsApproximate","GitHub lists files containing a term via provider code search (index may be incomplete); materialize for an exact file set.",{backend:"ghSearchCode",severity:"info",blocksAnswer:!1})]:[]],provenance:[{backend:"ghSearchCode",source:Te(e)}]}}function Te(e){return e.from??{kind:"github"}}async function P0(e){let t=hi(e);if(!t.ok)return{results:[],diagnostics:t.diagnostics,provenance:[]};let n=await Pe("ghSearchCode",t.query),r=vi(n),o=[];for(let s of r?.files??[]){let a=gC(s),c=R0(s),l=S0(s);if(l.length===0){o.push({kind:"code",source:Te(e),path:a,...c?{metadata:c}:{}});continue}for(let u of l)o.push({kind:"code",source:Te(e),path:a,...u.value!==void 0?{snippet:u.value}:{},...u.matchIndices!==void 0?{matchIndices:u.matchIndices}:{},...c?{metadata:c}:{}})}let i=Bt(r?.pagination);return{results:o,...i?{pagination:i}:{},diagnostics:[...Cc(n,"ghSearchCode"),...Sc(o.length,"ghSearchCode"),...o.length>0?[x("providerSemanticsApproximate","GitHub code search returns path-level hits without line numbers; follow next.fetch for exact location/lines.",{backend:"ghSearchCode",severity:"info",blocksAnswer:!1})]:[]],provenance:[{backend:"ghSearchCode",source:Te(e)}]}}async function x0(e){let{owner:t,repo:n}=fC(Te(e)),r=e.fetch?.content,o=r?.contentView==="exact"?"none":r?.contentView==="symbols"?"symbols":"standard",i=T0(r?.range),s={...t?{owner:t}:{},...n?{repo:n}:{},path:nt(e.scope)??"",type:"file",minify:o,...Te(e).kind==="github"&&Te(e).ref?{branch:Te(e).ref}:{},...i,...r?.match?.text!==void 0?{matchString:r.match.text}:{},...r?.match?.regex?{matchStringIsRegex:!0}:{},...r?.match?.caseSensitive?{matchStringCaseSensitive:!0}:{},...r?.charOffset!==void 0?{charOffset:r.charOffset}:{},...r?.charLength!==void 0?{charLength:r.charLength}:{},...r?.fullContent?{fullContent:!0}:{}},a=await Pe("ghGetFileContent",s),c=vi(a),l=o==="none"?"exact":o==="symbols"?"symbols":"compact",u=c?.pagination,d=c?.results??c?.files??[],p=d.map(m=>{let g=m.pagination??u,b=typeof g?.charOffset=="number",S={...m.startLine!==void 0?{startLine:m.startLine}:{},...m.endLine!==void 0?{endLine:m.endLine}:{},...b?{charOffset:g.charOffset,...typeof g.charLength=="number"?{charLength:g.charLength}:{}}:{}};return{kind:"content",source:Te(e),path:m.path,content:m.content,contentView:l,...Object.keys(S).length?{range:S}:{}}}),f=u??d.find(m=>m.pagination)?.pagination;return{results:p,...f?.hasMore!==void 0?{pagination:{hasMore:!!f.hasMore,...f.currentPage!==void 0?{currentPage:f.currentPage}:{},...f.totalPages!==void 0?{totalPages:f.totalPages}:{},...f.charLength!==void 0?{itemsPerPage:f.charLength}:{},...f.totalChars!==void 0?{totalItems:f.totalChars,totalItemsKind:"chars"}:{}}}:{},diagnostics:[...Cc(a,"ghGetFileContent"),...Sc(p.length,"ghGetFileContent")],provenance:[{backend:"ghGetFileContent",source:Te(e)}]}}async function w0(e){let{owner:t,repo:n}=fC(Te(e)),r={...t?{owner:t}:{},...n?{repo:n}:{},path:nt(e.scope)??"",...Te(e).kind==="github"&&Te(e).ref?{branch:Te(e).ref}:{},...e.fetch?.tree?.maxDepth!==void 0?{maxDepth:e.fetch.tree.maxDepth}:{},...e.fetch?.tree?.includeSizes?{includeSizes:!0}:{},...e.itemsPerPage?{itemsPerPage:e.itemsPerPage}:{},...e.page?{page:e.page}:{}},o=await Pe("ghViewRepoStructure",r),i=vi(o),s=[],a=nt(e.scope);for(let u of f0(i?.structure)){let d=u.dir??".";for(let p of u.folders??[]){let f=dC(a,d,p);s.push({kind:"tree",source:Te(e),path:f,entryType:"directory",depth:pC(f)})}for(let p of u.files??[]){let f=dC(a,d,p);s.push({kind:"tree",source:Te(e),path:f,entryType:"file",depth:pC(f)})}}let c=b0(s,e),l=Bt(i?.pagination);return{results:e.limit!==void 0?c.slice(0,e.limit):c,...l?{pagination:l}:{},diagnostics:[...Cc(o,"ghViewRepoStructure"),...Sc(c.length,"ghViewRepoStructure")],provenance:[{backend:"ghViewRepoStructure",source:Te(e)}]}}function T0(e){if(e?.startLine===void 0)return{};let t=e.contextLines??0,n=Math.max(1,e.startLine-t),r=(e.endLine??e.startLine)+t;return{startLine:n,endLine:r}}function Cc(e,t){let n=p0(e);if(n==="error"){let r=vi(e);return[x("invalidQuery",r?.error??"GitHub backend error",{backend:t})]}return n==="empty"?[x("zeroMatches","Query ran and matched nothing.",{backend:t,severity:"info",blocksAnswer:!1})]:[]}var yC=y(()=>{"use strict";Rc();ja();Rt();qd();gi()});import bC from"node:path";function RC(e){return[...new Set(e)]}function CC(e){if(e.kind!=="github")return{};if(e.repo&&e.repo.includes("/")){let[t,n]=e.repo.split("/");return{owner:t,repo:n}}return{owner:e.owner}}function PC(e){let t=e.structuredContent,n=t?.results?.[0],r=n?.data;return{localPath:r?.localPath&&t?.base&&!bC.isAbsolute(r.localPath)?bC.join(t.base,r.localPath):r?.localPath,cached:r?.cached,error:r?.error,status:n?.status}}async function xC(e){if(e.from?.kind!=="github")return bi(e);let t=e.from,{owner:n,repo:r}=CC(t);if(!n||!r)return{results:[],diagnostics:[x("materializationFailed","Materialization requires a concrete owner/repo.",{backend:"ghCloneRepo"})],provenance:[]};let o=nt(e.scope),i={owner:n,repo:r,...t.ref?{branch:t.ref}:{},...e.materialize?.strategy!=="repo"&&o?{sparsePath:o}:{},...e.materialize?.forceRefresh?{forceRefresh:!0}:{}},s=await Pe("ghCloneRepo",i),{localPath:a,cached:c,error:l,status:u}=PC(s);if(u==="error"||!a)return{results:[],diagnostics:[x("materializationFailed",l??"Clone/fetch failed; cannot run local proof.",{backend:"ghCloneRepo"})],provenance:[{backend:"ghCloneRepo",source:t}]};let d=e.scope??{},p={...e,from:{kind:"materialized",localPath:a,source:t},scope:{...d,path:void 0,excludeDir:RC([...d.excludeDir??[],".git"]),exclude:RC([...d.exclude??[],".octocode-clone-meta.json","**/.octocode-clone-meta.json"])}},f=await bi(p);return{...f,diagnostics:[...f.diagnostics,...c?[x("staleCache","Result came from a cached clone; set materialize.forceRefresh to refresh.",{backend:"ghCloneRepo",severity:"info",blocksAnswer:!1})]:[]],provenance:[{backend:"ghCloneRepo",source:t,materializedPath:a,cache:c?"hit":"miss"},...f.provenance]}}async function wC(e){if(e.from?.kind==="materialized"){let f=e.from.localPath;return{results:[SC(f,e.from.source,void 0,!0)],diagnostics:[],provenance:[{backend:"ghCloneRepo",source:e.from}]}}if(e.from?.kind!=="github")return{results:[],diagnostics:[x("invalidQuery",'target:"materialize" needs a GitHub source (owner/repo) or an already-materialized `from`.',{backend:"ghCloneRepo"})],provenance:[]};let t=e.from,{owner:n,repo:r}=CC(t);if(!n||!r)return{results:[],diagnostics:[x("materializationFailed","Materialization requires a concrete owner/repo.",{backend:"ghCloneRepo"})],provenance:[]};let i=e.materialize?.strategy==="repo"?void 0:nt(e.scope),s={owner:n,repo:r,...t.ref?{branch:t.ref}:{},...i?{sparsePath:i}:{},...e.materialize?.forceRefresh?{forceRefresh:!0}:{}},a=await Pe("ghCloneRepo",s),{localPath:c,cached:l,error:u,status:d}=PC(a);if(d==="error"||!c)return{results:[],diagnostics:[x("materializationFailed",u??"Clone/fetch failed; no checkpoint produced.",{backend:"ghCloneRepo"})],provenance:[{backend:"ghCloneRepo",source:t}]};let p=!i;return{results:[SC(c,t,t.ref,p,l)],diagnostics:l?[x("staleCache","Checkpoint served from a cached clone; set materialize.forceRefresh to refresh.",{backend:"ghCloneRepo",severity:"info",blocksAnswer:!1})]:[],provenance:[{backend:"ghCloneRepo",source:t,materializedPath:c,cache:l?"hit":"miss"}]}}function SC(e,t,n,r,o){return{kind:"record",recordType:"materialized",id:e,...t?{source:t}:{},data:{localPath:e,repoRoot:e,...t?{sourceRef:t}:{},...n?{ref:n}:{},cache:o?"hit":"miss",complete:r}}}var TC=y(()=>{"use strict";Rc();ap();Rt();gi()});import{builtinModules as E0}from"node:module";import Re from"node:path";import{readFile as Pc,readdir as k0}from"node:fs/promises";async function Zp(e){let t=Re.resolve(e.root),n=e.mode??"analyze",r=e.goal?.trim()||"Analyze this repository.",o=L0(r,e.intent,e.facets),i=_0(o,e.facets),s=I0(o,i),a=Q0();if(n==="plan")return F0({root:t,goal:r,intent:o,facets:i,mode:n,flow:s,graphCapabilities:kC([],[],a)});let c=await M0(t,e.maxFiles??5e3),l=await D0(c.filter(w=>w.endsWith(O0))),u=await z0(t,c),d=u.map(w=>w.graphFacts).filter(w=>w!==void 0),p=kC(u,d,a);await tM(u);let f=new Set(l.map(w=>w.name).filter(_C)),m=$0(u),g=q0(t,l,u),b=V0(g,m),S=u.filter(w=>!b.has(w.path)).map(w=>({kind:"unusedFile",file:w.rel,retainedBy:[],verdict:"unused-file"})),C=W0(t,l,u,f),k=await Y0(u),_=Z0(k,u,b),E=_.filter(w=>w.verdict==="candidate-unused-export"||w.verdict==="unused-export").length,O=_.filter(w=>w.verdict==="transitive-dead").length;return{kind:"researchFlow",goal:r,intent:o,facets:i,mode:n,root:t,flow:s,summary:{manifests:l.length,sourceFiles:u.length,entrypoints:g.length,reachableFiles:b.size,unusedFiles:S.length,unlistedDependencies:C.filter(w=>w.kind==="unlistedDependency").length,unusedDependencies:C.filter(w=>w.kind==="unusedDependency").length,duplicateDependencies:C.filter(w=>w.kind==="duplicateDependency").length,exportedSymbols:_.length,candidateUnusedExports:E,transitiveDeadExports:O,nativeGraphFiles:d.length,nativeGraphDeclarations:d.reduce((w,H)=>w+H.declarations.length,0),nativeGraphCalls:d.reduce((w,H)=>w+H.calls.length,0)},manifests:l.map(w=>({manifest:zn(t,w.path),...w.name?{name:w.name}:{},entrypoints:w.entrypoints.map(H=>zn(t,H)),dependencyCount:[...w.deps.keys()].length})),files:S,dependencies:C,symbols:_,graphFacts:d,graphCapabilities:p,caveats:["This is a smart research flow with native AST graph facts where available plus heuristic cross-file reachability. LSP references should be used before destructive cleanup.","Graph capability coverage is explicit: tree-sitter/OXC facts are syntax inventory, not semantic deletion proof.","Dynamic imports, framework entrypoints, generated files, test-only retention, and package-manager-specific workspace rules may require project-specific refinement."]}}function L0(e,t,n){let r=`${t??""} ${n?.join(" ")??""} ${e}`.toLowerCase();return/dead|unused|reachab|entry\s*point|transitive/.test(r)?"reachability":/dep|package|manifest|unlisted|duplicate/.test(r)?"dependencies":/symbol|export|reference|lsp|ast/.test(r)?"symbols":"general"}function _0(e,t){if(t&&t.length>0)return[...new Set(t)];switch(e){case"reachability":return["entrypoints","files","symbols","dependencies"];case"dependencies":return["manifests","dependencies","imports"];case"symbols":return["symbols","references","ast","lsp"];case"general":return["structure","symbols","dependencies"]}}function I0(e,t){let n=[{id:"orient",purpose:"Discover manifests, source files, and analysis boundaries.",tools:["localFindFiles","localViewStructure"],produces:["fileUniverse","manifestSet"],evidence:"proof"},{id:"manifest-graph",purpose:"Extract package entrypoints, declared dependencies, workspace package names, and script hints.",tools:["package.json parser"],produces:["entrypoints","declaredDependencies","workspacePackages"],evidence:"heuristic"}];return(e==="reachability"||t.includes("symbols"))&&n.push({id:"symbol-inventory",purpose:"Enumerate exports and declaration anchors for symbol-level questions.",tools:["localSearchCode structural","lspGetSemantics documentSymbols"],produces:["symbols","lineHints"],evidence:"proof"},{id:"reference-proof",purpose:"Use references grouped by file to separate direct, external, and transitive retention.",tools:["lspGetSemantics references","localSearchCode"],produces:["directRefs","externalRefs","retainedBy","transitiveDead"],evidence:"proof"}),(e==="dependencies"||t.includes("dependencies"))&&n.push({id:"dependency-audit",purpose:"Compare import specifiers with package manifests to find unlisted, unused, and duplicate dependencies.",tools:["package.json parser","import graph"],produces:["unlistedDependencies","unusedDependencies","duplicateDependencies"],evidence:"heuristic"}),n}function F0(e){return{kind:"researchFlow",goal:e.goal,intent:e.intent,facets:e.facets,mode:e.mode,root:e.root,flow:e.flow,summary:{manifests:0,sourceFiles:0,entrypoints:0,reachableFiles:0,unusedFiles:0,unlistedDependencies:0,unusedDependencies:0,duplicateDependencies:0,exportedSymbols:0,candidateUnusedExports:0,transitiveDeadExports:0,nativeGraphFiles:0,nativeGraphDeclarations:0,nativeGraphCalls:0},manifests:[],files:[],dependencies:[],symbols:[],graphFacts:[],graphCapabilities:e.graphCapabilities,caveats:["Planning mode returned the research flow without scanning files."]}}async function M0(e,t){let n=[];async function r(o){if(n.length>=t)return;let i=await k0(o,{withFileTypes:!0});for(let s of i){if(n.length>=t)return;if(s.isDirectory()){if(v0.has(s.name))continue;await r(Re.join(o,s.name));continue}s.isFile()&&n.push(Re.join(o,s.name))}}return await r(e),n}async function D0(e){return(await Promise.all(e.map(async n=>N0(n)))).filter(n=>n!==null)}async function N0(e){let t=await G0(e);if(!t)return null;let n=Re.dirname(e),r=new Map;for(let o of["dependencies","devDependencies","peerDependencies","optionalDependencies"]){let i=iM(t[o]);if(i)for(let s of Object.keys(i))r.set(s,[...r.get(s)??[],o])}return{path:e,dir:n,name:LC(t.name),deps:r,entrypoints:H0(n,t)}}async function G0(e){try{let t=JSON.parse(await Pc(e,"utf8"));return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}function H0(e,t){let n=new Set;for(let o of["main","module","types","typings"]){let i=LC(t[o]);i&&n.add(Re.resolve(e,i))}let r=t.bin;if(typeof r=="string"&&n.add(Re.resolve(e,r)),r&&typeof r=="object"&&!Array.isArray(r))for(let o of Object.values(r))typeof o=="string"&&n.add(Re.resolve(e,o));vC(e,t.exports,n);for(let o of["src/index.ts","src/index.tsx","src/index.js","index.ts","index.js","src/lib.rs","src/main.rs","main.rs","__init__.py","main.py","src/main.py","main.go","cmd/main.go","src/main/java/Main.java"])n.add(Re.resolve(e,o));return[...n]}function vC(e,t,n){if(typeof t=="string"){n.add(Re.resolve(e,t));return}if(!(!t||typeof t!="object"||Array.isArray(t)))for(let r of Object.values(t))vC(e,r,n)}async function z0(e,t){let n=ef(),r=t.filter(i=>n.has(Re.extname(i).toLowerCase()));return await Promise.all(r.map(async i=>{let s=await Pc(i,"utf8").catch(()=>""),a=Re.extname(i).toLowerCase(),c=B0(s,i,zn(e,i)),l=aM(c?c.imports.map(u=>u.specifier):j0(s));return{path:i,rel:zn(e,i),extension:a,language:c?.language??a.slice(1),imports:l,externalPackages:l.filter(u=>!AC(u)).map(oM).filter(_C).filter(u=>!A0.has(u)),...c?{graphFacts:c}:{}}}))}function B0(e,t,n){try{let r=F.extractGraphFacts(e,t);if(!r)return;let o=JSON.parse(r);return o.kind!=="graphFacts"||o.source!=="native-ast"||!Array.isArray(o.declarations)||!Array.isArray(o.imports)||!Array.isArray(o.exports)||!Array.isArray(o.calls)||!Array.isArray(o.edges)?void 0:{file:n,source:o.source,language:o.language??Re.extname(t).slice(1),declarations:o.declarations.map(i=>({name:i.name,kind:i.kind,line:i.line,exported:i.exported,...i.parent?{parent:i.parent}:{}})),imports:o.imports.map(i=>({specifier:i.specifier,line:i.line,importKind:i.importKind,...i.localName?{localName:i.localName}:{},...i.importedName?{importedName:i.importedName}:{}})),exports:o.exports.map(i=>({name:i.name,line:i.line,exportKind:i.exportKind,...i.localName?{localName:i.localName}:{},...i.source?{source:i.source}:{}})),calls:o.calls.map(i=>({caller:i.caller,callee:i.callee,line:i.line,kind:i.kind})),edges:o.edges.map(i=>({from:i.from,to:i.to,relation:i.relation,source:i.source,line:i.line})),diagnostics:Array.isArray(o.diagnostics)?o.diagnostics.filter(sM):[]}}catch{return}}function ef(){if(Ai)return Ai;try{let e=F.getSupportedGraphFactExtensions().map(t=>(t.startsWith(".")?t:`.${t}`).toLowerCase());Ai=new Set(e.length>0?e:EC)}catch{Ai=new Set(EC)}return Ai}function Q0(){if(Li)return Li;try{let e=JSON.parse(F.getGraphFactCapabilities());Li=Array.isArray(e)?e.filter(U0):[]}catch{Li=[]}return Li}function U0(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.extension=="string"&&typeof t.language=="string"&&Array.isArray(t.factFamilies)}function kC(e,t,n){let r=n.length>0?n.map(l=>l.extension).sort():[...ef()].map(l=>l.slice(1)).sort(),o=[...new Set(n.flatMap(l=>l.factFamilies))].sort(),i=OC(e,l=>l.language),s=OC(t,l=>l.language),a=new Set(t.map(l=>l.file)),c=new Map;for(let l of e)a.has(l.rel)||c.set(l.extension,(c.get(l.extension)??0)+1);return{graphFactExtensions:r,capabilityCount:n.length,factFamilies:o,sourceFilesByLanguage:i,graphFilesByLanguage:s,missingGraphFacts:[...c.entries()].sort(([l],[u])=>l.localeCompare(u)).map(([l,u])=>({extension:l.startsWith(".")?l.slice(1):l,files:u,reason:"extension entered the source universe, but native graph facts were unavailable or parser output was empty"}))}}function OC(e,t){let n={};for(let r of e){let o=t(r)||"unknown";n[o]=(n[o]??0)+1}return n}function j0(e){let t=[],n=[/\bimport\s+(?:type\s+)?(?:[^'"]*?\s+from\s+)?['"]([^'"]+)['"]/g,/\bexport\s+(?:type\s+)?[^'"]*?\s+from\s+['"]([^'"]+)['"]/g,/\bimport\s*\(\s*['"]([^'"]+)['"]\s*\)/g,/\brequire\s*\(\s*['"]([^'"]+)['"]\s*\)/g];for(let r of n)for(let o of e.matchAll(r))o[1]&&t.push(o[1]);return t}function $0(e){let t=new Set(e.map(o=>o.path)),n=new Map(e.map(o=>[o.path,Re.dirname(o.path)])),r=new Map;for(let o of e){let i=[],s=n.get(o.path)??Re.dirname(o.path);for(let a of o.imports){if(!AC(a))continue;let c=rM(s,a,t);c&&i.push(c)}r.set(o.path,i)}return r}function q0(e,t,n){let r=new Set(n.map(i=>i.path)),o=new Set;for(let i of t)for(let s of i.entrypoints){let a=Jp(s,r);a&&o.add(a)}for(let i of["src/index.ts","src/index.tsx","src/index.js","index.ts","index.js"]){let s=Jp(Re.resolve(e,i),r);s&&o.add(s)}return[...o]}function V0(e,t){let n=new Set,r=[...e];for(;r.length>0;){let o=r.pop();if(!(!o||n.has(o))){n.add(o);for(let i of t.get(o)??[])r.push(i)}}return n}function W0(e,t,n,r){let o=new Map,i=new Map;for(let a of n){let c=K0(a.path,t);if(!c)continue;let l=o.get(c.path)??new Set;o.set(c.path,l);for(let u of a.externalPackages){l.add(u);let d=i.get(`${c.path}\0${u}`)??new Set;d.add(a.rel),i.set(`${c.path}\0${u}`,d)}}let s=[];for(let a of t){let c=o.get(a.path)??new Set;for(let l of c)r.has(l)||a.deps.has(l)||s.push({kind:"unlistedDependency",packageName:l,manifest:zn(e,a.path),usedBy:[...i.get(`${a.path}\0${l}`)??[]],declaredIn:[],verdict:"unlisted-dependency"});for(let[l,u]of a.deps)u.length>1&&s.push({kind:"duplicateDependency",packageName:l,manifest:zn(e,a.path),usedBy:[...i.get(`${a.path}\0${l}`)??[]],declaredIn:u,verdict:"duplicate-dependency"}),!c.has(l)&&!r.has(l)&&s.push({kind:"unusedDependency",packageName:l,manifest:zn(e,a.path),usedBy:[],declaredIn:u,verdict:"candidate-unused-dependency"})}return s}function K0(e,t){return t.filter(r=>e.startsWith(`${r.dir}${Re.sep}`)).sort((r,o)=>o.dir.length-r.dir.length)[0]}async function Y0(e){return(await Promise.all(e.map(async n=>{let r=X0(n);if(r.length>0)return r;let o=await Pc(n.path,"utf8").catch(()=>"");return J0(n.rel,o)}))).flat()}function X0(e){let t=e.graphFacts;return t?t.declarations.filter(n=>n.exported).map(n=>({symbol:n.name,kind:n.kind,file:e.rel,line:n.line,evidenceSource:"ast"})):[]}function J0(e,t){let n=[],r=t.split(/\r?\n/);for(let o=0;o<r.length;o++){let i=r[o]??"",s=/\bexport\s+(?:async\s+)?(?:function|class|const|let|var|type|interface|enum)\s+([A-Za-z_$][\w$]*)/.exec(i);s&&n.push({symbol:s[1],kind:nM(i),file:e,line:o+1,evidenceSource:"regex"});let a=/\bexport\s*\{([^}]+)\}/.exec(i);if(a)for(let c of a[1].split(",")){let l=c.trim().split(/\s+as\s+/)[0]?.trim();l&&/^[A-Za-z_$][\w$]*$/.test(l)&&n.push({symbol:l,kind:"export",file:e,line:o+1,evidenceSource:"regex"})}}return n}function Z0(e,t,n){let r=new Map(t.map(o=>[o.rel,o]));return e.map(o=>{let i=t.filter(u=>u.rel!==o.file&&eM(u.path,o.symbol)),s=i.filter(u=>n.has(u.path)),a=r.get(o.file),c=a?n.has(a.path):!1,l=s.length>0?"reachable":i.length>0?"transitive-dead":c?"candidate-unused-export":"unused-export";return{symbol:o.symbol,kind:o.kind,file:o.file,line:o.line,evidenceSource:o.evidenceSource,directRefs:i.length,externalRefs:s.length,retainedBy:i.map(u=>u.rel),verdict:l}})}function eM(e,t){return Xp.get(e)?.has(t)??!1}async function tM(e){Xp.clear(),await Promise.all(e.map(async t=>{let n=await Pc(t.path,"utf8").catch(()=>"");Xp.set(t.path,new Set(n.match(/[A-Za-z_$][\w$]*/g)??[]))}))}function nM(e){return/\b(function|class|const|let|var|type|interface|enum)\b/.exec(e)?.[1]??"export"}function rM(e,t,n){return Jp(Re.resolve(e,t),n)}function Jp(e,t){let n=ef(),r=[e];for(let o of n)r.push(`${e}${o}`);for(let o of n)r.push(Re.join(e,`index${o}`));return r.find(o=>t.has(o))}function AC(e){return e.startsWith("./")||e.startsWith("../")}function oM(e){if(e.startsWith("@")){let[t,n]=e.split("/");return t&&n?`${t}/${n}`:void 0}return e.split("/")[0]}function iM(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function LC(e){return typeof e=="string"&&e.trim()?e:void 0}function _C(e){return typeof e=="string"&&e.length>0}function sM(e){return typeof e=="string"}function aM(e){return[...new Set(e)]}function zn(e,t){return Re.relative(e,t)||Re.basename(t)}var EC,O0,v0,A0,Ai,Li,Xp,IC=y(()=>{"use strict";be();EC=[".ts",".tsx",".js",".jsx",".mjs",".cjs",".mts",".cts"],O0="package.json",v0=new Set([".claude",".context",".cursor",".git","node_modules","dist","out","coverage","target",".next",".turbo",".yarn"]),A0=new Set(E0.flatMap(e=>[e,`node:${e}`]));Xp=new Map});import tf from"node:path";function nf(e){let t=e.root,n=[...e.symbols.map(a=>cM(t,a)),...e.files.map(a=>pM(t,a)),...e.dependencies.filter(a=>a.kind==="unusedDependency").map(a=>fM(a))],r=a=>a==="reachable"?1:a==="unknown"?.5:0;n.sort((a,c)=>r(a.verdict)-r(c.verdict));let o={reachable:0,"candidate-dead":0,"transitive-dead":0,"candidate-unused-file":0,"candidate-unused-dependency":0,unknown:0},i=0,s=0;for(let a of n)o[a.verdict]+=1,i+=a.why.length,s+=a.retainedBy.length+(a.retains?.length??0);return{packets:n,graphSummary:{subjects:n.length,facts:i,edges:s,byVerdict:o}}}function cM(e,t){let n={id:`sym:${t.file}#${t.symbol}`,kind:"symbol",name:t.symbol,symbolKind:t.kind,uri:t.file,range:{start:{line:t.line}}},r=lM(t.verdict),o=r!=="reachable",i=[{id:`${n.id}:exports`,subject:n,claim:"exports",source:t.evidenceSource,confidence:t.evidenceSource==="ast"?"exact":"heuristic",flags:["declaration"]}],s=t.retainedBy.map((c,l)=>({id:`${n.id}:ref:${l}`,from:{id:`file:${c}`,kind:"file",uri:c},to:n,relation:"references",source:"ripgrep",confidence:"heuristic",flags:t.externalRefs>0?void 0:["unreachable"]})),a=[{kind:"lsp-unavailable",severity:o?"high":"low",location:{uri:t.file,range:{start:{line:t.line}}}}];return{subject:n,verdict:r,proofStatus:r==="transitive-dead"&&t.directRefs>0?"conflicting-evidence":"candidate",why:i,retainedBy:s,missingProof:a,risk:uM(r),next:dM(e,t)}}function lM(e){switch(e){case"reachable":return"reachable";case"candidate-unused-export":case"unused-export":return"candidate-dead";case"transitive-dead":return"transitive-dead";default:return"unknown"}}function uM(e){switch(e){case"reachable":return{deleteRisk:"high",reason:"Reachable from entrypoints via reference scan; likely used \u2014 do not delete without confirming."};case"candidate-dead":return{deleteRisk:"medium",reason:"No reachable references found, but the scan is token-based. Confirm with LSP references (next.semantic) before deleting."};case"transitive-dead":return{deleteRisk:"medium",reason:"Only referenced from unreachable code. Confirm the retention chain with LSP before deleting."};default:return{deleteRisk:"unknown",reason:"Insufficient evidence."}}}function dM(e,t){let n=tf.resolve(e,t.file);return{"next.fetch":{query:{schema:"oql",target:"content",from:{kind:"local",path:n},fetch:{content:{range:{startLine:t.line,contextLines:3},contentView:"exact"}}},why:"Read the declaration at this symbol.",confidence:"exact"},"next.semantic":{query:{schema:"oql",target:"semantics",from:{kind:"local",path:n},params:{type:"references",symbolName:t.symbol,lineHint:t.line,includeDeclaration:!1}},why:"Confirm references with LSP \u2014 upgrades this candidate to proof.",confidence:"exact"},"next.search":{query:{schema:"oql",target:"code",from:{kind:"local",path:e},where:{kind:"text",value:t.symbol},view:"discovery"},why:"Find string/dynamic usages of the name the reference scan may miss.",confidence:"heuristic"}}}function pM(e,t){let n={id:`file:${t.file}`,kind:"file",uri:t.file};return{subject:n,verdict:"candidate-unused-file",proofStatus:"needs-framework-graph",why:[{id:`${n.id}:no-importer`,subject:n,claim:"unresolved",source:"graph",confidence:"heuristic",value:{reason:"no static importer reaches this file from an entrypoint"}}],retainedBy:[],missingProof:[{kind:"dynamic-import-unresolved",severity:"medium"},{kind:"framework-entrypoint-unknown",severity:"medium"}],risk:{deleteRisk:"medium",reason:"No static importer found, but dynamic imports, framework entrypoints, and config globs are not modeled. Verify before deleting."},next:{"next.fetch":{query:{schema:"oql",target:"content",from:{kind:"local",path:tf.resolve(e,t.file)},fetch:{content:{contentView:"symbols"}}},why:"Read the file outline.",confidence:"exact"},"next.search":{query:{schema:"oql",target:"code",from:{kind:"local",path:e},where:{kind:"text",value:tf.basename(t.file)},view:"discovery"},why:"Find references to the file name (dynamic import / config).",confidence:"heuristic"}}}}function fM(e){let t={id:`dep:${e.manifest}#${e.packageName}`,kind:"dependency",name:e.packageName,uri:e.manifest};return{subject:t,verdict:"candidate-unused-dependency",proofStatus:"candidate",why:[{id:`${t.id}:declared`,subject:t,claim:"declares",source:"manifest",confidence:"exact",value:{declaredIn:e.declaredIn}},{id:`${t.id}:no-import`,subject:t,claim:"unresolved",source:"regex",confidence:"heuristic",value:{reason:"no import specifier resolves to this package"}}],retainedBy:[],missingProof:[{kind:"manifest-rule-missing",severity:"medium"},{kind:"dynamic-import-unresolved",severity:"low"}],risk:{deleteRisk:"medium",reason:"No import specifier resolves to this dependency, but it may be used via config, scripts, types, or transitive re-export. Verify before removing."},next:{}}}var FC=y(()=>{"use strict"});import{statSync as mM}from"node:fs";import Z from"node:path";function ln(e){let n=e.structuredContent?.results?.[0];return{data:n?.data,status:n?.status}}function MC(e){let n=e.structuredContent?.results?.[0];if(!n)return{};let r="data"in n?n.data:n,o=r?.files?.[0]??r?.results?.[0]??r??{},i=o.content;return{content:typeof i=="string"?i:void 0,status:n.status,error:o.error??r?.error??n.error}}function af(e,t){if(typeof e=="string"&&e.trim())return e;if(e instanceof Error&&e.message)return e.message;if(e&&typeof e=="object"){let n=e;if(typeof n.error=="string"&&n.error.trim())return n.error;if(typeof n.message=="string"&&n.message.trim())return n.message;let r=JSON.stringify(e);if(r)return r}return t}function gM(e,t){if(!t||Z.isAbsolute(t))return t;let n=e.structuredContent;return n?.base?Z.join(n.base,t):t}function hM(e,t,n){let r=t??n??".";if(!e)return r;if(Z.isAbsolute(e))return e;if(n&&Z.isAbsolute(n))return Z.resolve(n,e);if(t&&Z.isAbsolute(t)){let o=KC(t)?t:Z.dirname(t);return Z.resolve(o,e)}return e}function DC(e){let t=e.scope?.path;return Array.isArray(t)?t[0]:t}function jC(e){if(!e)return[];for(let t of UC){let n=e[t];if(Array.isArray(n))return n}return[e]}function bM(e){if(!e)return;let t={};for(let[n,r]of Object.entries(e))yM.has(n)||(r===null||typeof r=="string"||typeof r=="number"||typeof r=="boolean")&&(t[n]=r);return Object.keys(t).length?t:void 0}function Ii(e,t,n,r){return e.map(o=>{let i=o&&typeof o=="object"?o:{value:o},s=zM(t,i);return{kind:"record",recordType:t,...s?{id:s}:{},...n?{source:n}:{},...r?{metadata:r}:{},data:i}})}function $C(e){return e==="plan"||e==="prove"?e:"analyze"}function xc(e,t){let n=Math.max(1,e.page??1),r=Math.max(1,e.itemsPerPage??e.limit??RM),o=Math.max(1,Math.ceil(t/r)),i=(n-1)*r;return{packetsStart:i,packetsEnd:i+r,pagination:{currentPage:n,totalPages:o,itemsPerPage:r,totalItems:t,hasMore:n<o}}}function SM(e){if(!e||e.length===0)return;let t=new Set;for(let n of e){let r=n.trim(),o=r.startsWith("data.")?r.slice(5):r;qC.includes(o)&&t.add(o)}return t.size>0?t:void 0}function CM(e,t){let n=SM(e.select),r={manifests:t.manifests,files:t.files,dependencies:t.dependencies,symbols:t.symbols,graphFacts:t.graphFacts},o={},i=Math.max(1,e.page??1),s,a=1,c=!1;for(let l of qC){if(n&&!n.has(l))continue;let u=r[l]??[],{packetsStart:d,packetsEnd:p,pagination:f}=xc(e,u.length);o[l]=u.slice(d,p),o[`${l}Page`]=f,s=f.itemsPerPage,a=Math.max(a,f.totalPages??1),f.hasMore&&(c=!0)}return Object.keys(o).length===0?{fields:o}:{fields:o,pagination:{currentPage:i,...s!==void 0?{itemsPerPage:s}:{},totalPages:a,hasMore:c||i<a}}}function PM(e,t){if(!e)return t;if(!t)return e;let n=e.currentPage??t.currentPage,r=e.itemsPerPage??t.itemsPerPage;return{...n!==void 0?{currentPage:n}:{},...r!==void 0?{itemsPerPage:r}:{},totalPages:Math.max(e.totalPages??1,t.totalPages??1),...e.totalItems!==void 0?{totalItems:e.totalItems}:{},hasMore:!!(e.hasMore||t.hasMore)}}function NC(e){let n=(Array.isArray(e)?e:e===void 0?[]:[e]).filter(r=>typeof r=="string"&&r.trim().length>0).map(r=>r.trim().toLowerCase());return n.length?new Set(n):void 0}function xM(e){return{...typeof e.subject=="string"&&e.subject.trim()?{subject:e.subject.trim().toLowerCase()}:{},...typeof e.subjectKind=="string"&&e.subjectKind.trim()?{subjectKind:e.subjectKind.trim().toLowerCase()}:{},relations:NC(e.relation),verdicts:NC(e.verdict),direction:e.direction==="incoming"||e.direction==="outgoing"?e.direction:"both",includePackets:e.includePackets!==!1,includeFacts:e.includeFacts!==!1,includeEdges:e.includeEdges!==!1}}function wM(e,t){if(t.subjectKind){let r=e.kind.toLowerCase(),o=e.symbolKind===void 0?void 0:String(e.symbolKind).toLowerCase();if(r!==t.subjectKind&&o!==t.subjectKind)return!1}return t.subject?[e.id,e.name,e.uri].filter(r=>typeof r=="string").map(r=>r.toLowerCase()).some(r=>r.includes(t.subject)):!0}function Wr(e,t){return!t.relations||!e?!0:t.relations.has(e.toLowerCase())}function VC(e,t){if(!wM(e.subject,t)||t.verdicts&&!t.verdicts.has(e.verdict.toLowerCase()))return!1;if(!t.relations)return!0;let n=t.direction!=="outgoing"&&e.retainedBy.some(i=>Wr(i.relation,t)),r=t.direction!=="incoming"&&(e.retains??[]).some(i=>Wr(i.relation,t)),o=e.why.some(i=>Wr(i.claim,t));return n||r||o}function rf(e,t){e.set(t.id,t)}function TM(e,t,n){Wr(t.claim,n)&&e.set(t.id,t)}function of(e,t,n,r){Wr(n.relation,r)&&(rf(e,n.from),rf(e,n.to),t.set(n.id,n))}function EM(e){let t=e.location?.range?.start.line;return[e.kind,e.severity,e.location?.uri??"",t===void 0?"":String(t)].join(":")}function kM(e,t,n,r,o,i){let s=t.filter(g=>VC(g,r)),a=xc(e,s.length),c=s.slice(a.packetsStart,a.packetsEnd),l=new Map,u=new Map,d=new Map,p=new Map,f={},m={};for(let g of s)f[g.verdict]=(f[g.verdict]??0)+1,m[g.proofStatus]=(m[g.proofStatus]??0)+1;for(let g of c){if(rf(l,g.subject),r.includeFacts)for(let b of g.why)TM(d,b,r);if(r.includeEdges){if(r.direction!=="outgoing")for(let b of g.retainedBy)of(l,u,b,r);if(r.direction!=="incoming")for(let b of g.retains??[])of(l,u,b,r)}for(let b of g.missingProof)p.set(EM(b),b)}return r.includeEdges&&AM(i,o,new Set(l.keys()),l,u,r),{data:{kind:"relationshipGraph",filters:{...r.subject?{subject:r.subject}:{},...r.subjectKind?{subjectKind:r.subjectKind}:{},...r.relations?{relation:[...r.relations]}:{},...r.verdicts?{verdict:[...r.verdicts]}:{},direction:r.direction,includePackets:r.includePackets,includeFacts:r.includeFacts,includeEdges:r.includeEdges},summary:{totalPackets:s.length,returnedPackets:c.length,nodes:l.size,edges:u.size,facts:d.size,missingProof:p.size,byVerdict:f,proofStatus:m},graphSummary:n,packetPage:a.pagination,nodes:[...l.values()],edges:[...u.values()],facts:[...d.values()],missingProof:[...p.values()],...r.includePackets?{packets:c}:{},caveats:['target:"graph" uses native AST facts where available plus research-packet reachability. LSP proof is page-bounded; follow next.page / next.semantic before treating deletion as safe.']},pagination:a.pagination}}function WC(e){return{files:e.length,declarations:e.reduce((t,n)=>t+n.declarations.length,0),imports:e.reduce((t,n)=>t+n.imports.length,0),exports:e.reduce((t,n)=>t+n.exports.length,0),calls:e.reduce((t,n)=>t+n.calls.length,0),edges:e.reduce((t,n)=>t+n.edges.length,0)}}function OM(e){let t={reachable:0,"candidate-dead":0,"transitive-dead":0,"candidate-unused-file":0,"candidate-unused-dependency":0,unknown:0},n=0,r=0;for(let o of e)t[o.verdict]+=1,n+=o.why.length,r+=o.retainedBy.length+(o.retains?.length??0);return{subjects:e.length,facts:n,edges:r,byVerdict:t}}function AM(e,t,n,r,o,i){if(n.size!==0)for(let s of t)for(let a of s.edges){let c=LM(a.relation);if(!Wr(c,i))continue;let l=GC(a.from,e,a.line),u=GC(a.to,e,a.line);!n.has(l.id)&&!n.has(u.id)||of(r,o,{id:`ast:${l.id}->${u.id}:${c}:${a.line}`,from:l,to:u,relation:c,source:"ast",confidence:"exact",via:{uri:s.file,range:{start:{line:a.line}}}},i)}}function LM(e){let t=e.trim();return vM.has(t)?t:"references"}function GC(e,t,n){let r=_M(e,t);return r?{id:`sym:${r.uri}#${r.name}`,kind:"symbol",name:r.name,uri:r.uri,range:{start:{line:n}}}:{id:`ast:${e}`,kind:"symbol",name:e,uri:e,range:{start:{line:n}}}}function _M(e,t){if(!e.startsWith("symbol:"))return;let n=e.slice(7),r=n.lastIndexOf("#");if(r<1||r===n.length-1)return;let o=n.slice(0,r),i=n.slice(r+1);return{uri:Z.isAbsolute(o)?Z.relative(t,o):o,name:i}}function HC(e,t){return e==="plan"||t.proof==="none"?!1:t.proof==="lsp"||e==="prove"}function IM(e,t){if(typeof t.proofLimit=="number")return Math.min(25,t.proofLimit);let n=e.itemsPerPage??e.limit??5;return Math.max(1,Math.min(5,n))}async function FM(e,t,n,r,o){let i=n.filter(l=>VC(l,r)),s=xc(t,i.length),a=i.slice(s.packetsStart,s.packetsEnd).filter(l=>l.subject.kind==="symbol").slice(0,o),c=[];for(let l of a){let u=await DM(e,l);if(l.proof={...l.proof??{},lsp:u},u.status==="unavailable"||u.status==="error"){c.push(x(u.status==="unavailable"?"lspUnavailable":"partialResult",u.message??"LSP proof escalation did not complete.",{backend:"lspGetSemantics",severity:"warning"}));continue}if(typeof u.totalReferences!="number"){c.push(x("partialResult","LSP proof escalation returned without a numeric reference count.",{backend:"lspGetSemantics",blocksAnswer:!0}));continue}l.missingProof=l.missingProof.filter(d=>d.kind!=="lsp-unavailable"),MM(l,u),u.paginationOpen&&(l.missingProof.push({kind:"pagination-open",severity:"high",location:l.subject}),c.push(x("partialResult","LSP proof result is paginated; follow the semantic continuation before deletion.",{backend:"lspGetSemantics",blocksAnswer:!0}))),u.totalReferences===0?(l.proofStatus="confirmed-by-lsp",l.risk={deleteRisk:l.verdict==="reachable"?"high":"medium",reason:"LSP references found zero non-declaration references for this symbol. Still verify dynamic/framework retention before deleting."}):typeof u.totalReferences=="number"&&(l.proofStatus=l.verdict==="reachable"?"confirmed-by-lsp":"conflicting-evidence",l.risk={deleteRisk:"high",reason:"LSP found non-declaration references. Inspect proof.lsp.files and next.fetch before deleting."})}return c}function MM(e,t){if(t.status!=="ok"||!t.totalReferences||t.files.length===0)return;let n=new Set(e.retainedBy.map(r=>r.id));for(let[r,o]of t.files.entries()){let i={id:`file:${o}`,kind:"file",uri:o},s={id:`${e.subject.id}:lsp-ref:${r}`,from:i,to:e.subject,relation:"references",source:"lsp",confidence:"exact",flags:o===e.subject.uri?["same-file"]:["external"]};n.has(s.id)||(e.retainedBy.push(s),n.add(s.id))}}async function DM(e,t){let n=t.subject.name,r=t.subject.range?.start.line;if(!n||typeof r!="number")return{status:"error",files:[],paginationOpen:!1,message:"Symbol packet has no name or line hint for LSP proof."};let o=Z.isAbsolute(t.subject.uri)?t.subject.uri:Z.resolve(e,t.subject.uri);try{let i=await Pe("lspGetSemantics",{type:"references",uri:o,symbolName:n,lineHint:r,includeDeclaration:!1,groupByFile:!0,itemsPerPage:50}),s=NM(i);if(s)return{status:s.code==="localToolsDisabled"?"unavailable":"error",files:[],paginationOpen:!1,message:s.message};let{data:a,status:c}=ln(i);if(c==="error")return{status:"error",files:[],paginationOpen:!1,message:cf(a?.error)??"lspGetSemantics returned error."};let l=a?.lsp;if(l?.serverAvailable===!1)return{status:"unavailable",files:[],paginationOpen:!1,message:l.source==="native"?"Language server unavailable; native fallback cannot prove cross-file references.":"Language server unavailable; reference proof is incomplete."};let u=a?.payload&&typeof a.payload=="object"?a.payload:void 0,d=a?.pagination,p=_i(a?.totalReferences)??_i(u?.totalReferences)??_i(a?.referenceCount)??_i(u?.referenceCount)??_i(d?.totalItems)??zC(u)??zC(a);return{status:"ok",...typeof p=="number"?{totalReferences:p}:{},files:GM(a,e),paginationOpen:d?.hasMore===!0}}catch(i){return{status:"error",files:[],paginationOpen:!1,message:i instanceof Error?i.message:"Could not run LSP proof."}}}function NM(e){let t=e.structuredContent;if(!t||typeof t!="object")return;let n=t;if(n.status!=="error")return;let r=n.error&&typeof n.error=="object"?n.error:void 0;return{...typeof r?.code=="string"?{code:r.code}:{},message:typeof r?.message=="string"&&r.message||typeof n.code=="string"&&n.code||"Direct tool call failed."}}function zC(e){if(e)for(let t of["references","locations","results","byFile"]){let n=e[t];if(Array.isArray(n))return t!=="byFile"?n.length:n.reduce((r,o)=>{if(!o||typeof o!="object")return r+1;let i=o.count;return r+(typeof i=="number"?i:1)},0)}}function GM(e,t){let n=new Set;return sf(e,n,t),[...n].slice(0,25)}function sf(e,t,n){if(t.size>=25||e===null||e===void 0)return;if(Array.isArray(e)){for(let o of e)sf(o,t,n);return}if(typeof e!="object")return;let r=e;for(let o of["uri","file","path"]){let i=r[o];typeof i=="string"&&HM(i)&&t.add(Z.isAbsolute(i)?Z.relative(n,i):i)}for(let o of["references","locations","byFile","results","files","groups","items"])sf(r[o],t,n)}function HM(e){return e.includes("/")||e.includes("\\")||/\.[cm]?[jt]sx?$/.test(e)}function _i(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function cf(e){return typeof e=="string"?e:void 0}function BC(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function zM(e,t){let n=r=>typeof t[r]=="string"||typeof t[r]=="number"?String(t[r]):void 0;switch(e){case"repository":return n("fullName")??(n("owner")&&n("repo")?`${n("owner")}/${n("repo")}`:n("url"));case"package":{let r=n("name")??n("packageName"),o=n("version");return r?o?`${r}@${o}`:r:void 0}case"pullRequest":return n("number")?`#${n("number")}`:n("url");case"commit":return n("sha")?.slice(0,12)??n("oid")?.slice(0,12);case"artifact":return n("localPath")??n("path");case"materialized":return n("localPath")??n("repoRoot");case"diff":return n("path")??n("filename");case"semantics":{let r=n("uri"),o=n("line")??n("startLine");return r?o?`${r}:${o}`:r:void 0}case"research":return n("intent")??n("goal")??"research";case"graph":return n("intent")?`graph:${n("intent")}`:"graph"}}function lf(e,t){let{status:n,data:r}=ln(e);return n==="error"?[x("invalidQuery",af(r?.error,`${t} failed`),{backend:t})]:n==="empty"?[x("zeroMatches","Query ran and matched nothing.",{backend:t,severity:"info",blocksAnswer:!1})]:[]}function KC(e){try{let t=Z.isAbsolute(e)?e:Z.resolve(e);return mM(t).isDirectory()}catch{return!1}}function wc(e){if(!e||e.kind!=="github")return{};if(e.repo&&e.repo.includes("/")){let[t,n]=e.repo.split("/");return{owner:t,repo:n}}return{owner:e.owner}}function un(e){return e.params??{}}function BM(e){let t=e.scope?.language;if(t)return Array.isArray(t)?t[0]:t}function uf(e,t){let n={...un(e)};if(n.page===void 0&&e.page!==void 0&&(n.page=e.page),t&&n[t]===void 0){let r=e.limit??e.itemsPerPage;r!==void 0&&(n[t]=r)}return n}function Tc(e,t,n,r){let{data:o,status:i}=ln(e),s=lf(e,n),a=i==="error"?[]:jC(o);a.length===0&&!s.some(d=>d.code==="zeroMatches"||d.severity==="error")&&s.push(x("zeroMatches",`${n} returned no results.`,{backend:n,severity:"info",blocksAnswer:!1}));let c=o?.pagination,l=c?.hasMore===!0||!!o?.next||typeof c?.currentPage=="number"&&typeof c?.totalPages=="number"&&c.currentPage<c.totalPages,u=Bt(c,l);return{results:Ii(a,t,r,bM(o)),...u?{pagination:u}:{},diagnostics:s,provenance:[{backend:n,source:r}]}}function QM(e,t){let n=[],r=e?.lsp;r?.serverAvailable===!1&&n.push(x("lspUnavailable",r.source==="native"?"Language server was unavailable; native fallback returned partial semantic data.":"Language server was unavailable; semantic proof is incomplete.",{backend:"lspGetSemantics"}));let o=e?.pagination;return o?.hasMore&&n.push(x("partialResult","Semantic result is paginated; follow the continuation before treating it as complete proof.",{backend:"lspGetSemantics",blocksAnswer:!0,continuation:YC(o,t)})),n}function YC(e,t){let n=typeof e.nextPage=="number"?e.nextPage:typeof e.currentPage=="number"?e.currentPage+1:(t.page??1)+1;return{query:{...t,params:{...t.params??{},page:n}},why:"Continue the LSP semantic result page.",confidence:"exact"}}function UM(e,t){let n=e?.pagination;if(n?.hasMore)return{hasMore:!0,...n.currentPage!==void 0?{currentPage:n.currentPage}:{},...n.totalPages!==void 0?{totalPages:n.totalPages}:{},...n.itemsPerPage!==void 0?{itemsPerPage:n.itemsPerPage}:{},...n.totalItems!==void 0?{totalItems:n.totalItems}:{},next:YC(n,t)}}async function jM(e){let{owner:t}=wc(e.from),n=uf(e,"limit"),r=typeof n.language=="string"?n.language:BM(e),o=wd(r);o&&(n.language=o);let i=await Pe("ghSearchRepos",{...t?{owner:t}:{},...n});return Tc(i,"repository","ghSearchRepos",e.from??{kind:"github"})}async function $M(e){let t=await Pe("npmSearch",{...uf(e)});return Tc(t,"package","npmSearch",e.from??{kind:"npm"})}async function QC(e){let{owner:t,repo:n}=wc(e.from),r=e.target==="commits",o=r?void 0:WM(e),i=r?qM(e):void 0,s=uf(e,r?"perPage":"limit");(o||i)&&(delete s.matchString,delete s.matchScope);let a=await Pe("ghHistoryResearch",{...t?{owner:t}:{},...n?{repo:n}:{},...r?{type:"commits"}:{},...s}),c=Tc(a,r?"commit":"pullRequest","ghHistoryResearch",e.from??{kind:"github"});return o?YM(c,o):i?VM(c,i):c}function qM(e){let t=un(e);return typeof t.matchString=="string"&&t.matchString.length>0?t.matchString:void 0}function VM(e,t){let n=t.toLowerCase(),r=e.results.length,o=e.results.filter(s=>{if(s.kind!=="record")return!1;let a=s.data,c=a.message,l=typeof c=="string"?c:"",u=l.toLowerCase().indexOf(n);if(u<0)return!1;let d=Math.max(0,u-80),p=Math.min(l.length,u+t.length+80);return a.match={matchString:t,scope:"message",spotlight:(d>0?"\u2026":"")+l.slice(d,p)+(p<l.length?"\u2026":"")},!0}),i=e.diagnostics.filter(s=>s.code!=="zeroMatches");return o.length===0?i.push(x("zeroMatches",`No commit message matched "${t}" (content filter over ${r} fetched commit(s); not a search-index query). Broaden the fetch (branch/perPage/page).`,{backend:"ghHistoryResearch",severity:"info",blocksAnswer:!1})):o.length<r&&i.push(x("partialResult",`Content filter kept ${o.length} of ${r} fetched commit(s) matching "${t}" in message. This filters fetched content only \u2014 page the fetch to widen the candidate set.`,{backend:"ghHistoryResearch",severity:"info",blocksAnswer:!1})),{...e,results:o,diagnostics:i}}function WM(e){let t=un(e),n=typeof t.matchString=="string"?t.matchString:void 0;if(!n)return;let r=t.matchScope==="title"||t.matchScope==="comments"||t.matchScope==="reviews"||t.matchScope==="all"?t.matchScope:"body";return{needle:n,scope:r}}function KM(e,t){let n=[],r=i=>{typeof i=="string"&&i.length>0&&n.push(i)},o=i=>{let s=e[i];if(Array.isArray(s))for(let a of s)a&&typeof a=="object"&&r(a.body)};return(t==="body"||t==="all")&&r(e.body),(t==="title"||t==="all")&&r(e.title),(t==="comments"||t==="all")&&o("comments"),(t==="reviews"||t==="all")&&o("reviews"),n.join(`
|
|
59
|
+
`)}function YM(e,t){let n=t.needle.toLowerCase(),r=e.results.length,o=e.results.filter(s=>{if(s.kind!=="record")return!1;let a=s.data,c=KM(a,t.scope),l=c.toLowerCase().indexOf(n);if(l<0)return!1;let u=Math.max(0,l-80),d=Math.min(c.length,l+t.needle.length+80);return a.match={matchString:t.needle,scope:t.scope,spotlight:(u>0?"\u2026":"")+c.slice(u,d)+(d<c.length?"\u2026":"")},!0}),i=e.diagnostics.filter(s=>s.code!=="zeroMatches");return o.length===0?i.push(x("zeroMatches",`No pull request ${t.scope} matched "${t.needle}" (content filter over ${r} fetched PR(s); not a search-index query). Broaden the fetch (state/keywordsToSearch/page) or the match scope.`,{backend:"ghHistoryResearch",severity:"info",blocksAnswer:!1})):o.length<r&&i.push(x("partialResult",`Content filter kept ${o.length} of ${r} fetched PR(s) matching "${t.needle}" in ${t.scope}. This filters fetched content only \u2014 page the fetch to widen the candidate set.`,{backend:"ghHistoryResearch",severity:"info",blocksAnswer:!1})),{...e,results:o,diagnostics:i}}async function XM(e){let t=un(e),{owner:n,repo:r}=wc(e.from),o=zr(t);if(o.kind==="prPatch"){let i=await Pe("ghHistoryResearch",{...n?{owner:n}:{},...r?{repo:r}:{},content:{patches:{mode:"all"}},...t});return Tc(i,"diff","ghHistoryResearch",e.from??{kind:"github"})}return o.kind==="directFile"?e.from?.kind==="local"||e.from?.kind==="materialized"?JM(e,{baseRef:o.baseRef,headRef:o.headRef,path:o.path}):ZM(e,n,r,{baseRef:o.baseRef,headRef:o.headRef,path:o.path}):{results:[],diagnostics:[x("invalidQuery",'target:"diff" needs either {prNumber} (PR patch diff) or {baseRef,headRef,path} (direct file diff between two refs).',{backend:"ghHistoryResearch",repair:{message:"Add params.prNumber for a PR patch, or params.baseRef + params.headRef + params.path for a direct file diff."}})],provenance:[]}}async function JM(e,t){let n=e.from,r=n?.kind==="local"?n.path:n?.kind==="materialized"?n.localPath:void 0;if(!r)return{results:[],diagnostics:[x("invalidQuery","Local direct file diff needs from.path.",{backend:"localGetFileContent"})],provenance:[]};let o=f=>Pe("localGetFileContent",{path:f,fullContent:!0,minify:"none"}),[i,s]=await Promise.all([o(r),o(t.path)]),a=ln(i),c=ln(s),l=typeof a.data?.content=="string"?a.data.content:void 0,u=typeof c.data?.content=="string"?c.data.content:void 0;if(a.status==="error"||c.status==="error"||l===void 0||u===void 0){let f=af(a.data?.error??c.data?.error,"Could not read local file.");return{results:[],diagnostics:[x("invalidQuery",f,{backend:"localGetFileContent"})],provenance:[{backend:"localGetFileContent",source:e.from}]}}let d=XC(l,u);return{results:[{kind:"record",recordType:"diff",id:`${r}..${t.path}`,...e.from?{source:e.from}:{},data:{path:t.path,basePath:r,headPath:t.path,baseRef:t.baseRef,headRef:t.headRef,additions:d.additions,deletions:d.deletions,patch:d.patch,unchanged:d.unchanged}}],diagnostics:d.additions===0&&d.deletions===0?[x("zeroMatches","Files are identical.",{backend:"localGetFileContent",severity:"info",blocksAnswer:!1})]:[],provenance:[{backend:"localGetFileContent",source:e.from}]}}async function ZM(e,t,n,r){if(!t||!n)return{results:[],diagnostics:[x("invalidQuery","Direct file diff needs a concrete owner/repo.",{backend:"ghGetFileContent"})],provenance:[]};let o=p=>Pe("ghGetFileContent",{owner:t,repo:n,path:r.path,branch:p,fullContent:!0,minify:"none"}),[i,s]=await Promise.all([o(r.baseRef),o(r.headRef)]),a=MC(i),c=MC(s),l=[{label:"base",ref:r.baseRef,...a},{label:"head",ref:r.headRef,...c}].find(p=>p.status==="error"||typeof p.content!="string");if(l){let p=af(l.error,`Could not read ${l.label} ref "${l.ref}" for ${r.path}.`);return{results:[],diagnostics:[x("invalidQuery",p,{backend:"ghGetFileContent"})],provenance:[{backend:"ghGetFileContent",source:e.from}]}}let u=XC(a.content??"",c.content??"");return{results:[{kind:"record",recordType:"diff",id:r.path,...e.from?{source:e.from}:{},data:{path:r.path,baseRef:r.baseRef,headRef:r.headRef,additions:u.additions,deletions:u.deletions,patch:u.patch,unchanged:u.unchanged}}],diagnostics:u.additions===0&&u.deletions===0?[x("zeroMatches","Files are identical at both refs.",{backend:"ghGetFileContent",severity:"info",blocksAnswer:!1})]:[],provenance:[{backend:"ghGetFileContent",source:e.from}]}}function XC(e,t){let n=e===""?[]:e.split(`
|
|
60
|
+
`),r=t===""?[]:t.split(`
|
|
61
|
+
`),o=n.length,i=r.length,s=Array.from({length:o+1},()=>new Array(i+1).fill(0));for(let f=o-1;f>=0;f--)for(let m=i-1;m>=0;m--)s[f][m]=n[f]===r[m]?s[f+1][m+1]+1:Math.max(s[f+1][m],s[f][m+1]);let a=[],c=0,l=0,u=0,d=0,p=0;for(;d<o&&p<i;)n[d]===r[p]?(a.push(` ${n[d]}`),u++,d++,p++):s[d+1][p]>=s[d][p+1]?(a.push(`- ${n[d]}`),l++,d++):(a.push(`+ ${r[p]}`),c++,p++);for(;d<o;)a.push(`- ${n[d++]}`),l++;for(;p<i;)a.push(`+ ${r[p++]}`),c++;return{additions:c,deletions:l,unchanged:u,patch:a.join(`
|
|
62
|
+
`)}}async function eD(e){let t=e.from?.kind==="local"?e.from.path:e.from?.kind==="materialized"?e.from.localPath:void 0;if(!t)return{results:[],diagnostics:[x("invalidQuery",'target:"artifacts" needs a local file `from` (path).',{backend:"localBinaryInspect"})],provenance:[]};let n=await Pe("localBinaryInspect",{path:t,...un(e)}),{data:r,status:o}=ln(n),i=lf(n,"localBinaryInspect");return o==="error"||!r?{results:[],diagnostics:i.length?i:[x("zeroMatches","localBinaryInspect returned no data.",{backend:"localBinaryInspect",severity:"info",blocksAnswer:!1})],provenance:[{backend:"localBinaryInspect",source:e.from}]}:{results:Ii([r],"artifact",e.from),diagnostics:[...i,...tD(r,e)],provenance:[{backend:"localBinaryInspect",source:e.from}]}}function tD(e,t){let n=e.pagination&&typeof e.pagination=="object"?e.pagination:void 0;return e.isPartial!==!0&&n?.hasMore!==!0?[]:[x("partialResult","Artifact text is paginated; follow the artifact continuation before treating the inline content as complete.",{backend:"localBinaryInspect",blocksAnswer:!0,continuation:nD(t,n)})]}function nD(e,t){if(!(t?.hasMore!==!0||typeof t.nextCharOffset!="number"))return{query:{...e,params:{...e.params??{},charOffset:t.nextCharOffset,...typeof t.charLength=="number"?{charLength:t.charLength}:{}}},why:"Read the next inline artifact text window.",confidence:"exact"}}async function rD(e){let t,n,r=[],o=[],i=un(e),s=i.type==="workspaceSymbol",a=typeof i.uri=="string"?i.uri:void 0,c=typeof i.workspaceRoot=="string"?i.workspaceRoot:void 0;if(e.from?.kind==="local")if(s){let E=e.from.path,O=KC(E);n=c??(O?Z.resolve(E):void 0),t=a??(O?void 0:E)}else t=a??e.from.path;else if(e.from?.kind==="materialized"){let E=DC(e),O=E?Z.isAbsolute(E)?E:Z.join(e.from.localPath,E):void 0;s?(n=c??e.from.localPath,t=a??O):t=a??O??e.from.localPath}else if(e.from?.kind==="github"){let{owner:E,repo:O}=wc(e.from);if(!E||!O)return o.push(x("invalidQuery","Remote semantics needs owner/repo.",{backend:"lspGetSemantics"})),{results:[],diagnostics:o,provenance:r};let w=typeof i.uri=="string"?i.uri:void 0,H=DC(e),I=w&&!Z.isAbsolute(w)?w:H,v=await Pe("ghCloneRepo",{owner:E,repo:O,...e.from.ref?{branch:e.from.ref}:{},...I?{sparsePath:I}:{}}),D=ln(v).data,Q=gM(v,D?.localPath);if(!Q)return o.push(x("materializationFailed","Could not materialize repo for remote LSP.",{backend:"ghCloneRepo"})),{results:[],diagnostics:o,provenance:r};r.push({backend:"ghCloneRepo",source:e.from,materializedPath:Q}),s?(n=c??Q,w?t=Z.isAbsolute(w)?w:Z.join(Q,w):H&&(t=Z.isAbsolute(H)?H:Z.join(Q,H))):w?t=Z.isAbsolute(w)?w:Z.join(Q,w):H?t=Z.isAbsolute(H)?H:Z.join(Q,H):t=Q}if(!t&&!n)return o.push(x("invalidQuery",'target:"semantics" needs a `from` anchor.',{backend:"lspGetSemantics"})),{results:[],diagnostics:o,provenance:r};let{uri:l,symbolKind:u,workspaceRoot:d,...p}=i,f=await Pe("lspGetSemantics",{...p,...n?{workspaceRoot:n}:{},...t?{uri:t}:{}}),{data:m,status:g}=ln(f),b=m,S=UM(b,e),C=hM(cf(b?.uri),t,n),k=sD(e,C),_=iD(oD(b),u);return{results:g==="error"?[]:Ii(_,"semantics",k),...S?{pagination:S}:{},diagnostics:[...o,...lf(f,"lspGetSemantics"),...QM(b,e)],provenance:[...r,{backend:"lspGetSemantics",source:k}]}}function oD(e){if(!e)return[];let n=(BC(e.payload)?e.payload:void 0)?.symbols;if(Array.isArray(n)){let r=cf(e.uri);return n.map(o=>BC(o)?{...r&&typeof o.uri!="string"?{uri:r}:{},...o}:o)}return jC(e)}function iD(e,t){if(typeof t!="string"||!t.trim())return e;let n=t.trim().toLowerCase();return e.filter(r=>{if(!r||typeof r!="object")return!1;let o=r.kind;return String(o??"").toLowerCase()===n})}function sD(e,t){return e.from?.kind==="local"?{...e.from,path:t}:e.from?.kind==="materialized"?{...e.from,localPath:t}:e.from?.kind==="github"?{kind:"materialized",localPath:t,source:e.from}:e.from??{kind:"local",path:t}}async function aD(e){let t=un(e),n=e.from?.kind==="local"?e.from.path:e.from?.kind==="materialized"?e.from.localPath:void 0;if(!n)return{results:[],diagnostics:[x("requiresMaterialization",'target:"research" needs a complete local file universe. Use a local/materialized source, or materialize a bounded GitHub corpus first.',{backend:"smartOqlResearch",repair:{message:'Run target:"materialize" for a bounded GitHub repo/subtree, then run target:"research" against the returned localPath.'}})],provenance:[]};let r=Array.isArray(t.facets)?t.facets.filter(m=>typeof m=="string"):void 0,o=$C(t.mode);if(o==="prove"&&typeof t.intent!="string")return{results:[],diagnostics:[x("invalidQuery",'target:"research" mode:"prove" requires params.intent so the proof lane is deterministic. Use intent:"reachability"|"dependencies"|"symbols"|"general", then follow packet next.semantic/next.fetch continuations for missing proof.',{backend:"smartOqlResearch",queryPath:"params.intent",repair:{message:'Add params.intent. Example: params:{ mode:"prove", intent:"reachability", facets:["symbols","files","relations"] }.'}})],provenance:[{backend:"smartOqlResearch",source:e.from}]};let i;try{i=await Zp({root:n,goal:typeof t.goal=="string"?t.goal:void 0,intent:typeof t.intent=="string"?t.intent:void 0,facets:r,mode:o,maxFiles:typeof t.maxFiles=="number"?t.maxFiles:void 0})}catch(m){return{results:[],diagnostics:[x("invalidQuery",m instanceof Error?m.message:"Could not analyze the requested research root.",{backend:"smartOqlResearch"})],provenance:[{backend:"smartOqlResearch",source:e.from}]}}let{packets:s,graphSummary:a}=i.mode==="plan"?{packets:[],graphSummary:void 0}:nf(i),c=[...i.caveats];t.mode==="prove"&&c.push(`mode:"prove" requested on target:"research": packets are candidate-grade unless LSP proof is attached. Native AST facts are included where available, but LSP reference proof is not run here. Use target:"graph" with proof:"lsp" or follow each packet's next.semantic.`);let l=a?xc(e,s.length):void 0,u=l?s.slice(l.packetsStart,l.packetsEnd):[];l&&s.length>0&&l.packetsStart>=s.length&&c.push(`Packet page ${l.pagination.currentPage} is outside the available packet range (${l.pagination.totalPages} page(s)).`);let d=e.view==="detailed"?CM(e,i):{fields:{}},p={kind:i.kind,goal:i.goal,intent:i.intent,facets:i.facets,mode:i.mode,root:i.root,flow:i.flow,summary:i.summary,graphCapabilities:i.graphCapabilities,nativeGraphSummary:WC(i.graphFacts),caveats:c,...a?{graphSummary:a,packetPage:l?.pagination,packets:u}:{},...d.fields},f=PM(l?.pagination,d.pagination);return{results:Ii([p],"research",e.from),...f?{pagination:f}:{},diagnostics:[],provenance:[{backend:"smartOqlResearch",source:e.from}]}}async function cD(e){let t=un(e),n=e.from?.kind==="local"?e.from.path:e.from?.kind==="materialized"?e.from.localPath:void 0;if(!n)return{results:[],diagnostics:[x("requiresMaterialization",'target:"graph" needs a complete local file universe. Use a local/materialized source, or materialize a bounded GitHub corpus first.',{backend:"smartOqlGraph",repair:{message:'Run target:"materialize" for a bounded GitHub repo/subtree, then run target:"graph" against the returned localPath.'}})],provenance:[]};let r=Array.isArray(t.facets)?t.facets.filter(m=>typeof m=="string"):void 0,o=$C(t.mode);if(o==="prove"&&typeof t.intent!="string")return{results:[],diagnostics:[x("invalidQuery",'target:"graph" mode:"prove" requires params.intent so the proof lane is deterministic. Use intent:"reachability"|"dependencies"|"symbols"|"general", then follow graph packet next.semantic/next.fetch continuations for missing proof.',{backend:"smartOqlGraph",queryPath:"params.intent",repair:{message:'Add params.intent. Example: params:{ mode:"prove", intent:"reachability", direction:"incoming" }.'}})],provenance:[{backend:"smartOqlGraph",source:e.from}]};let i;try{i=await Zp({root:n,goal:typeof t.goal=="string"?t.goal:void 0,intent:typeof t.intent=="string"?t.intent:void 0,facets:r,mode:o,maxFiles:typeof t.maxFiles=="number"?t.maxFiles:void 0})}catch(m){return{results:[],diagnostics:[x("invalidQuery",m instanceof Error?m.message:"Could not analyze the requested graph root.",{backend:"smartOqlGraph"})],provenance:[{backend:"smartOqlGraph",source:e.from}]}}let s=i.mode==="plan"?void 0:nf(i),a=xM(t),c=s?.packets??[],l=HC(i.mode,t)?await FM(n,e,c,a,IM(e,t)):[],u=OM(c),d=kM(e,c,u,a,i.graphFacts,n),p=[...d.data.caveats??[],...i.caveats,...i.mode==="plan"?['mode:"plan" requested: graph packets were not built.']:[],...t.mode==="prove"?[HC(i.mode,t)?'mode:"prove" requested: LSP proof escalation ran for the current graph page only. Follow next.page and next.semantic for remaining/open proof.':'mode:"prove" requested: graph rows are candidate-grade only. Follow packet next.semantic to confirm references.']:[]],f={...d.data,goal:i.goal,intent:i.intent,facets:i.facets,mode:i.mode,root:i.root,flow:i.flow,graphCapabilities:i.graphCapabilities,nativeGraphSummary:WC(i.graphFacts),caveats:p};return{results:Ii([f],"graph",e.from),pagination:d.pagination,diagnostics:l,provenance:[{backend:"smartOqlGraph",source:e.from}]}}var UC,yM,RM,qC,vM,JC,ZC=y(()=>{"use strict";Rc();ja();Rt();Ha();za();IC();FC();UC=["repositories","pull_requests","commits","packages","results","locations","references","symbols","strings","entries","incomingCalls","outgoingCalls"],yM=new Set([...UC,"pagination","contentPagination","next"]);RM=25;qC=["manifests","files","dependencies","symbols","graphFacts"];vM=new Set(["contains","defines","exports","imports","references","calls","constructs","extends","implements","typeUses"]);JC={repositories:jM,packages:$M,pullRequests:QC,commits:QC,diff:XM,artifacts:eD,semantics:rD,research:aD,graph:cD}});var lP={};hP(lP,{buildArtifactContinuations:()=>iP,runOqlSearch:()=>lD});import pt from"node:path";import{statSync as tP}from"node:fs";async function lD(e,t={}){let n;try{n=yR(e)}catch(o){if(o instanceof on)return Zd(o.diagnostics);throw o}if(tR(n))return QD(n,e,t);let r=await nP(n,e,t);return df(r.results),r}function df(e){if(e.length===0)return;let t=r=>JSON.stringify(r.source??null),n=t(e[0]);if(e.every(r=>t(r)===n))for(let r of e)delete r.source}async function nP(e,t,n,r){let o=GR(e,t),s=!!e.explain||!!n.dryRun?o.plan:void 0;if(!o.executable||n.dryRun)return FD(o,s,e.id,r,n.dryRun,e);let a=await BD(e,o);MD(e,a.results),uD(e,a);let c=gD(e,a);hD(e,a.results);let l=zD(e,a.results);return Ua({queryId:e.id,queryIndex:r,results:a.results,...a.pagination?{pagination:a.pagination}:{},...Object.keys(c).length?{next:c}:{},diagnostics:[...o.plan.diagnostics,...a.diagnostics,...l],provenance:a.provenance,executable:!0,approximate:QR(o.plan.backendCalls),plan:s})}function uD(e,t){if(e.target==="content"||e.target==="code"&&t.pagination?.totalItemsKind==="files"&&typeof e.limit!="number")return;let n=typeof e.limit=="number"?e.limit:typeof e.itemsPerPage=="number"?e.itemsPerPage:void 0;if(!n||n<1||t.results.length<=n)return;let r=t.pagination?.totalItems??t.results.length,o=t.pagination?.currentPage??e.page??1;t.results=t.results.slice(0,n),t.pagination={...t.pagination,currentPage:o,itemsPerPage:t.pagination?.itemsPerPage??n,totalItems:r,totalPages:t.pagination?.totalPages??Math.max(1,Math.ceil(r/n)),hasMore:!0}}function dD(e){let t=e.where;if(t){if(t.kind==="text")return{text:t.value,...t.case==="sensitive"?{caseSensitive:!0}:{}};if(t.kind==="regex")return{text:t.value,regex:!0,...t.case==="sensitive"?{caseSensitive:!0}:{}}}}function pD(e){let t=e.scope?.path;return Array.isArray(t)?t[0]:t}function fD(e){return e.from?.kind!=="github"?"owner/repo":e.from.repo?.includes("/")?e.from.repo:e.from.owner&&e.from.repo?`${e.from.owner}/${e.from.repo}`:e.from.repo??"owner/repo"}function mD(e){let t=fD(e),n=pD(e),r=e.from?.kind==="github"&&e.from.ref?`${t}@${e.from.ref}`:t,o=n?`${t}/${n}`:t,i=e.from?.kind==="github"&&e.from.ref?` --branch ${e.from.ref}`:"";return n?`Use \`search ${eP(e)} ${n} --repo ${r} --materialize required\` for one-step local proof, or \`clone ${o}${i}\` / \`cache fetch ${t} ${n}${i} --depth tree\` before retrying local search.`:`Choose a bounded path first with \`search ${t} --tree\`, then use \`search ${eP(e)} <path> --repo ${r} --materialize required\`, \`clone ${t}/<path>${i}\`, or \`cache fetch ${t} <path>${i} --depth tree\`. For deliberate whole-repo work, use \`clone ${t}${i}\` or \`cache fetch ${t}${i} --depth clone\`.`}function eP(e){let t=e.where;return t?.kind==="text"||t?.kind==="regex"?t.value:t?.kind==="structural"?"pattern":"<term>"}function gD(e,t){let n={};t.pagination?.hasMore&&e.target!=="content"&&(n["next.page"]=t.pagination.next??{query:{...e,page:(e.page??1)+1},why:"More result pages remain.",confidence:"exact"}),t.diagnostics.some(o=>o.code==="matchTruncated")&&(n["next.matchPage"]={query:{...e,controls:{...e.controls,search:{...e.controls?.search,matchPage:(e.controls?.search?.matchPage??1)+1}}},why:"Per-file matches were capped; page within files.",confidence:"exact"}),t.diagnostics.some(o=>o.code==="providerUnindexed")&&e.from?.kind==="github"&&e.target==="code"&&(n["next.materialize"]={query:{schema:"oql",target:"materialize",from:e.from,...e.scope?{scope:e.scope}:{},materialize:{mode:"required"}},why:`GitHub code search returned no results; this is not proof of absence. ${mD(e)}`,confidence:"heuristic"});let r={query:e,fileFrom:_D(e)};for(let o of t.results){let i=o.kind==="record"?`record:${o.recordType}`:o.kind,s=RD[i];if(!s)continue;let a=s(o,r);a&&Object.keys(a).length&&(o.next=a)}return n}function hD(e,t){for(let n of t)n.proofGrade??=yD(e,n)}function yD(e,t){return t.kind==="code"?Fi(e.where,"structural")||t.metavars!==void 0||t.metavarRanges!==void 0?"structural":Fi(e.where,"text")||Fi(e.where,"regex")||t.line!==void 0||t.snippet!==void 0||t.matchIndices!==void 0?"text":"candidate":t.kind==="content"||t.kind==="file"||t.kind==="tree"?"text":t.kind!=="record"?"candidate":t.recordType==="semantics"?"semantic":t.recordType==="graph"?Ec(t.data)?"missing":"graph":t.recordType==="research"?Ec(t.data)?"missing":t.data.mode==="prove"?"graph":"candidate":t.recordType==="diff"||t.recordType==="artifact"?"text":"candidate"}function Fi(e,t){return e?e.kind===t?!0:e.kind==="all"||e.kind==="any"?e.of.some(n=>Fi(n,t)):e.kind==="not"?Fi(e.predicate,t):!1:!1}function Ec(e){let t=e.missingProof;if(Array.isArray(t)&&t.length>0)return!0;let n=e.packets;return Array.isArray(n)&&n.some(r=>{if(!bD(r))return!1;let o=r.missingProof;return r.proofStatus==="missing"||Array.isArray(o)&&o.length>0})}function bD(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function SD(e,t){let n=e,r=t.fileFrom?t.fileFrom(n.path):n.source??t.query.from;if(!r)return;let o=typeof n.line=="number"?{startLine:n.line,contextLines:2}:void 0,i=o?void 0:dD(t.query),s={"next.fetch":{query:{schema:"oql",target:"content",from:r,...t.fileFrom?{}:{scope:{path:n.path}},fetch:{content:{contentView:"exact",...o?{range:o}:{},...i?{match:i}:{}}}},why:"Read the exact content at this hit.",confidence:"exact"}};return t.fileFrom&&(s["next.semantic"]={query:{schema:"oql",target:"semantics",from:r,params:{type:"documentSymbols"}},why:"List the semantic symbols in this file.",confidence:"exact"}),s}function CD(e,t){let n=e,r=n.range?.charOffset;if(typeof r=="number")return{"next.charRange":{query:{...t.query,fetch:{...t.query.fetch,content:{...t.query.fetch?.content,charOffset:r+(n.range?.charLength??2e4)}}},why:"Read the next content window.",confidence:"exact"}}}function rP(e,t){let n={kind:"local",path:e};return{"next.structure":{query:{schema:"oql",target:"structure",from:n},why:`List the ${t} tree.`,confidence:"exact"},"next.files":{query:{schema:"oql",target:"files",from:n},why:`Enumerate files in the ${t}.`,confidence:"exact"}}}function oP(e){let t=e.data;return typeof t?.localPath=="string"?t.localPath:void 0}function iP(e,t){let n={},r=e.data,o=typeof r?.mode=="string"?r.mode:void 0,i=oP(e);i&&(o==="strings"?n["next.search"]={query:{schema:"oql",target:"code",from:{kind:"local",path:i},where:{kind:"regex",value:"https?://\\S+"},controls:{search:{maxMatchesPerFile:100,matchPage:1}}},why:"Grep this strings dump with local code search (ripgrep) \u2014 swap the regex/pattern for what you need (URLs, hosts, symbols); page noisy hits losslessly with matchPage. For a huge binary this beats reading the capped inline preview.",confidence:"heuristic"}:Object.assign(n,rP(i,"extracted")));let s=typeof r?.nextScanOffset=="number"?r.nextScanOffset:void 0;s!==void 0&&(n["next.artifactStrings"]={query:{...t.query,params:{...t.query.params??{},scanOffset:s}},why:"Scan the next window of printable strings.",confidence:"exact"});let a=r?.pagination&&typeof r.pagination=="object"?r.pagination:void 0,c=typeof a?.nextCharOffset=="number"?a.nextCharOffset:void 0;if(a?.hasMore===!0&&c!==void 0){let l=typeof a.charLength=="number"?a.charLength:void 0;n["next.artifactContent"]={query:{...t.query,params:{...t.query.params??{},charOffset:c,...l!==void 0?{charLength:l}:{}}},why:"Read the next inline artifact text window.",confidence:"exact"}}return Object.keys(n).length?n:void 0}function PD(e){let t=oP(e);return t?rP(t,"materialized"):void 0}function xD(e,t){return sP(e,t,{why:"Upgrade this candidate research to LSP-proven relationships for the current page (bounded proof).",force:!0})}function wD(e,t){let n=t.query.params??{};if(n.proof==="none"||n.proof==="lsp"||n.mode==="prove")return;let r=e.data;if(Ec(r))return sP(e,t,{why:"Upgrade this candidate graph page to LSP-proven relationships (bounded proof)."})}function sP(e,t,n){let r=t.query.from;if(r?.kind!=="local"&&r?.kind!=="materialized")return;let o=e.data;if(!n.force&&!Ec(o))return;let i=typeof o?.intent=="string"&&o.intent.length>0?o.intent:typeof t.query.params?.intent=="string"&&t.query.params.intent.length>0?t.query.params.intent:"reachability",s=Math.min(25,Math.max(1,t.query.itemsPerPage??10)),a=t.query.params??{},c=ED(o,a);return{"next.graph":{query:{schema:"oql",target:"graph",from:r,params:{...a,mode:"prove",proof:"lsp",intent:i,proofLimit:s,...c?{facets:c}:{}},...t.query.page?{page:t.query.page}:{},...t.query.itemsPerPage?{itemsPerPage:t.query.itemsPerPage}:{}},why:n.why,confidence:"exact"}}}function ED(e,t){let n=Array.isArray(t.facets)?t.facets:Array.isArray(e.facets)?e.facets:void 0;if(!n)return;let r=n.filter(o=>typeof o=="string"&&TD.has(o));return r.length>0?r:void 0}function kD(e,t){let n=e.data,r=typeof n?.uri=="string"?n.uri:void 0,o=AD(e)??LD(t.query),i=OD(r,o);if(!i)return;let s=typeof n.line=="number"?n.line:typeof n.startLine=="number"?n.startLine:void 0;return{"next.fetch":{query:{schema:"oql",target:"content",from:{kind:"local",path:i},fetch:{content:{contentView:"exact",...s?{range:{startLine:s,contextLines:2}}:{}}}},why:"Read the code at this symbol location.",confidence:"exact"}}}function OD(e,t){if(e&&pt.isAbsolute(e))return e;if(t&&pt.isAbsolute(t)){let n=vD(t);return e?pt.resolve(n,e):t}return t??e}function vD(e){try{return tP(e).isDirectory()?e:pt.dirname(e)}catch{return pt.dirname(e)}}function AD(e){let t=e.source;if(t?.kind==="local")return t.path;if(t?.kind==="materialized")return t.localPath}function LD(e){if(e.from?.kind==="local")return e.from.path;if(e.from?.kind==="materialized")return e.from.localPath}function _D(e){let t=cP(e);if(!t)return;let n=aP(t).slice(0,-pt.sep.length);return r=>({kind:"local",path:pt.isAbsolute(r)?r:pt.join(n,r)})}function ID(e){if(!(!e||e.from?.kind!=="github"||e.target!=="files"||e.where))return{"next.materialize":{query:{schema:"oql",target:"materialize",from:e.from,...e.scope?{scope:e.scope}:{},materialize:{mode:"required"}},why:'target:"files" over GitHub needs a local corpus to enumerate; clone a bounded path (add scope.path to narrow), then list files from the materialized checkpoint.',confidence:"heuristic"}}}function FD(e,t,n,r,o,i){if(!e.executable){let s=e.plan.nodes.some(a=>a.route==="UNSUPPORTED");return o&&!s?{...n?{queryId:n}:{},...r!==void 0?{queryIndex:r}:{},results:[],diagnostics:e.plan.diagnostics,provenance:[],evidence:{answerReady:!1,complete:!1,kind:"partial"},...t?{plan:t}:{}}:Zd(e.plan.diagnostics,t,n,r,ID(i))}return{...n?{queryId:n}:{},...r!==void 0?{queryIndex:r}:{},results:[],diagnostics:e.plan.diagnostics,provenance:[],evidence:{answerReady:!1,complete:!1,kind:"partial"},...t?{plan:t}:{}}}function aP(e){let t=pt.resolve(e);try{if(tP(t).isDirectory())return`${t}${pt.sep}`}catch{}return`${pt.dirname(t)}${pt.sep}`}function cP(e){return e.from?.kind==="local"?e.from.path:e.from?.kind==="materialized"?e.from.localPath:void 0}function MD(e,t){let n=cP(e);if(!n)return;let r=aP(n);for(let o of t){let i=o.path;typeof i=="string"&&i.startsWith(r)&&(o.path=i.slice(r.length))}}function zD(e,t){let n=e.select;if(!n||n.length===0)return[];let r=new Set,o=new Set,i=!1,s=[];for(let a of n){let c=a.trim();c==="next"?i=!0:c.startsWith("next.")?r.add(c):ND.has(c)?o.add(c):GD.has(c)?o.add("data"):HD.has(c)||(c.includes(".")?o.add("data"):s.push(c))}for(let a of t){let c=a;for(let l of Object.keys(c))if(!DD.has(l)){if(l==="next"){if(i)continue;let u=c.next;if(!u)continue;if(r.size===0){delete c.next;continue}for(let d of Object.keys(u))r.has(d)||delete u[d];Object.keys(u).length===0&&delete c.next;continue}o.has(l)||delete c[l]}}return s.length?[x("unknownField",`select contains unknown field(s): ${s.join(", ")}. They were ignored.`,{queryPath:"select",severity:"warning",blocksAnswer:!1})]:[]}async function BD(e,t){if(e.target==="materialize")return wC(e);let n=JC[e.target];return n?n(e):e.from?.kind==="local"||e.from?.kind==="materialized"?bi(e):e.from?.kind==="github"&&e.target==="files"&&!e.where||t.plan.nodes.some(o=>o.route==="ROUTE")||t.plan.materialization?.required===!0||e.materialize?.mode==="required"?xC(e):hC(e)}async function QD(e,t,n){let r=await Promise.all(e.queries.map(async(i,s)=>{let a=await nP(i,t,n,s);return{queryId:i.id??`q${s}`,queryIndex:s,envelope:a}})),o={...e.id?{batchId:e.id}:{},mode:e.combine??"independent",children:r,diagnostics:[]};if(e.combine==="merge"){let i=UD(r);i.error?o.diagnostics.push(i.error):i.envelope&&(o.merged=i.envelope),o.merged&&df(o.merged.results)}else for(let i of r)df(i.envelope.results);return o}function UD(e){let t=new Set;for(let c of e)for(let l of c.envelope.results)t.add(l.kind);if(t.size>1)return{error:{code:"invalidQuery",severity:"error",message:'combine:"merge" requires compatible rows (same target/result kind); use combine:"independent".',blocksAnswer:!0,repair:{message:'Set combine:"independent" to keep per-query envelopes.'}}};let n=new Set,r=[],o=[],i=[],s=!1,a=!1;for(let c of e){for(let l of c.envelope.results){let u=$D(l);n.has(u)||(n.add(u),r.push(l))}o.push(...c.envelope.diagnostics),i.push(...c.envelope.provenance),c.envelope.evidence.kind==="candidate"&&(s=!0),jD(c.envelope)&&(a=!0)}return a&&o.push(x("partialResult",'combine:"merge" has child queries with more pages remaining; a merged batch carries no single continuation cursor \u2014 page each query with combine:"independent" to reach completeness.',{severity:"info",blocksAnswer:!1})),{envelope:Ua({results:r,...a?{pagination:{hasMore:!0}}:{},diagnostics:o,provenance:i,executable:e.every(c=>c.envelope.evidence.kind!=="unsupported"),approximate:s})}}function jD(e){return!!(e.pagination?.hasMore||e.next&&Object.keys(e.next).some(t=>t.startsWith("next.page")))}function $D(e){let t=e.path??"",n=e.line??"",r=JSON.stringify(e.source??{});return`${e.kind}:${r}:${t}:${n}`}var RD,TD,DD,ND,GD,HD,uP=y(()=>{"use strict";SR();zR();Rt();UR();ap();yC();TC();ZC();mi();RD={code:SD,content:CD,"record:artifact":iP,"record:materialized":PD,"record:semantics":kD,"record:research":xD,"record:graph":wD};TD=new Set(["symbols","files","dependencies","relations"]);DD=new Set(["kind","source","recordType","id","proofGrade"]),ND=new Set(["path","line","endLine","column","snippet","matchIndices","metadata","content","contentView","range","metavars","metavarRanges","proofGrade","size","modified","entryType","depth","children","data"]),GD=new Set(["manifests","files","dependencies","symbols","graphFacts","packets","nodes","edges","facts"]),HD=new Set(["pagination","diagnostics","provenance","evidence","repo","localPath"])});async function lC(e){let t=qD(e),n=Ln.safeParse(t);if(!n.success)throw n.error;let{runOqlSearch:r}=await Promise.resolve().then(()=>(uP(),lP)),o=await r(n.data,{authInfo:e.authInfo});return VD(o)}function qD(e){let t={...e};return delete t.authInfo,delete t.sessionId,delete t.responseCharOffset,delete t.responseCharLength,t}function VD(e){let t=WD(e),n=t.results.some(r=>r.status==="error");return{content:[{type:"text",text:JSON.stringify(e,null,2)}],...n?{isError:!0}:{},structuredContent:t}}function WD(e){return nR(e)?{results:e.children.map(t=>dP(t.envelope,t.queryId)),oql:e,mode:e.mode,...e.merged?{merged:e.merged}:{},...e.diagnostics.length>0?{diagnostics:e.diagnostics}:{}}:{results:[dP(e,e.queryId??"oqlSearch-1")],oql:e}}function dP(e,t){return{id:e.queryId??t,...KD(e),data:e}}function KD(e){return e.evidence.kind==="unsupported"||e.diagnostics.some(t=>t.severity==="error")?{status:"error"}:e.results.length===0?{status:"empty"}:{}}var Up=y(()=>{"use strict";Gr();mi()});Oc();me();ft();eo();jn();Lc();Bi();Ge();Il();Kl();kl();wt();Zl();Jl();Ps();iu();Ns();$o();su();au();Eo();cu();mu();lu();fu();Ss();gu();Qs();yu();Su();bu();hu();Ru();gt();Ko();Be();Gt();lr();wo();Ht();Ts();Au();Gu();ta();zu();Hu();ei();Qu();Bu();la();Uu();Ku();Yu();ni();Zu();ya();qo();ed();Sa();ld();ri();Ls();fd();oi();ii();md();li();si();Ed();Rd();Sd();di();Fr();La();Fd();fi();pi();vd();Up();bc();bc();Pi();Pi();Lp();Ip();Dn();Op();nc();en();On();Qp();Bl();Nl();zp();Hl();Ml();fe();import{completeMetadata as YD}from"@octocodeai/octocode-core";var Mi=null;function pP(){return Mi||(Mi=YD),Mi}async function l5(){return pP()}async function u5(){pP()}function d5(){return Mi}function p5(){Mi=null}Yp();Ri();Fe();Gr();xu();ud();Xu();Or();br();Lu();Od();Ae();function g5(){return process.env.VSCODE_PID||process.env.VSCODE_IPC_HOOK?"vscode":process.env.CURSOR_CHANNEL||process.env.CURSOR_TRACE_ID?"cursor":"standalone"}function h5(){try{return ge().local.enabled}catch{return!1}}function y5(){try{if(!ge().local.enabled)return"Local tools are disabled (ENABLE_LOCAL=false). MCP LSP tools are unavailable."}catch{}return null}hp();Pa();Xo();Xl();gr();ci();Et();Mt();ac();Sp();kp();Ep();Cp();vs();yr();No();Hs();Qo();be();function S5(e,t){let n={contextLines:t.contextLines??0,maxSnippetChars:t.matchContentLength},r=F.parseRipgrepJson(e,n),o=r.files.map(s=>({path:s.path,matchCount:s.matchCount,matches:s.matches.map(a=>({line:a.line,column:a.column,value:a.value}))})),i={totalOccurrences:r.stats.matchCount,matchedLines:r.stats.matchedLines,filesMatched:r.stats.filesMatched,filesSearched:r.stats.filesSearched,bytesSearched:r.stats.bytesSearched??void 0,searchTime:r.stats.searchTime};return{files:o,stats:i}}import{z}from"zod";var kc=z.object({text:z.string()}),XD=z.object({match:z.object({text:z.string()}).optional(),start:z.number(),end:z.number()}),JD=z.object({type:z.literal("match"),data:z.object({path:kc,lines:z.object({text:z.string()}),line_number:z.number(),absolute_offset:z.number(),submatches:z.array(XD)})}),ZD=z.object({type:z.literal("context"),data:z.object({path:kc,lines:z.object({text:z.string()}),line_number:z.number(),absolute_offset:z.number()})}),eN=z.object({type:z.literal("begin"),data:z.object({path:kc})}),tN=z.object({type:z.literal("end"),data:z.object({path:kc,stats:z.object({elapsed:z.object({human:z.string()}),searches:z.number(),searches_with_match:z.number()}).optional()})}),nN=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()})})}),x5=z.discriminatedUnion("type",[JD,ZD,eN,tN,nN]);je();qp();oe();Ws();ia();Fu();Vo();Du();Id();Wc();ji();tl();hl();mn();yl();import{securityRegistry as y6,ContentSanitizer as b6}from"@octocodeai/octocode-engine/security";import{maskSensitiveData as S6}from"@octocodeai/octocode-engine/mask";import{configureSecurity as P6}from"@octocodeai/octocode-engine/withSecurityValidation";import{completeMetadata as A6}from"@octocodeai/octocode-core";import{z as _6}from"zod";export{lN as ALL_ERROR_CODES,cC as ALL_TOOLS,xw as BASE_SCHEMA,ea as BulkCloneRepoLocalSchema,Ci as BulkLspGetSemanticsQuerySchema,vc as CONFIG_ERRORS,Tm as CONFIG_FILE_NAME,Ro as CONFIG_FILE_PATH,go as CONFIG_SCHEMA_VERSION,Ys as CORE_ALLOWED_ENV_VARS,Lt as CREDENTIALS_FILE,yp as CircuitOpenError,Zo as CloneRepoQueryLocalSchema,Us as ContentBuilder,b6 as ContentSanitizer,zq as DEFAULTS,l4 as DEFAULT_CIRCUIT_FAILURE_THRESHOLD,ls as DEFAULT_CONFIG,ho as DEFAULT_GITHUB_CONFIG,Kt as DEFAULT_LOCAL_CONFIG,yo as DEFAULT_LSP_CONFIG,Rf as DEFAULT_MATCH_SNIPPET_CHARS,Zn as DEFAULT_NETWORK_CONFIG,Ft as DEFAULT_OUTPUT_CONFIG,bn as DEFAULT_TOOLS_CONFIG,Hp as DEFAULT_TOOL_METADATA_GATEWAY,Dl as DESCRIPTIONS,mT as DIFF_PREVIEW_MAX_LINES,mS as DIRECT_TOOL_CATEGORIES,Z_ as DIRECT_TOOL_DEFINITIONS,Ot as DirectToolInputError,Yn as ENV_TOKEN_VARS,q as ERROR_CODES,Se as ERROR_MESSAGES,Xr as FETCH_ERRORS,jt as FILE_OPERATION_ERRORS,na as FileContentBulkQueryLocalSchema,nk as FileContentQueryBaseLocalSchema,xr as FileContentQueryLocalSchema,UY as GITHUB_CLONE_REPO,GY as GITHUB_FETCH_CONTENT,bf as GITHUB_FILE_CONTENT_DEFAULT_CHAR_LENGTH,NY as GITHUB_SEARCH_CODE,ot as GITHUB_SEARCH_DEFAULT_LIMIT,xe as GITHUB_SEARCH_MAX_LIMIT,sN as GITHUB_SEARCH_MAX_PAGES,BY as GITHUB_SEARCH_PULL_REQUESTS,zY as GITHUB_SEARCH_REPOSITORIES,Tn as GITHUB_STRUCTURE_DEFAULTS,aN as GITHUB_STRUCTURE_DEFAULT_ENTRIES_PER_PAGE,mf as GITHUB_STRUCTURE_MAX_ENTRIES_PER_PAGE,HY as GITHUB_VIEW_REPO_STRUCTURE,e$ as GitHubCloneRepoOutputLocalSchema,ca as GitHubCodeSearchBulkQueryLocalSchema,q$ as GitHubCodeSearchOutputLocalSchema,aa as GitHubCodeSearchQueryLocalSchema,c$ as GitHubFetchContentOutputLocalSchema,Bs as GitHubProvider,ma as GitHubPullRequestSearchBulkQueryLocalSchema,wr as GitHubPullRequestSearchQueryLocalSchema,ha as GitHubReposSearchBulkQueryLocalSchema,ga as GitHubReposSearchSingleQueryLocalSchema,s1 as GitHubSearchPullRequestsOutputLocalSchema,M1 as GitHubSearchRepositoriesOutputLocalSchema,Ra as GitHubViewRepoStructureBulkQueryLocalSchema,X1 as GitHubViewRepoStructureOutputLocalSchema,ba as GitHubViewRepoStructureQueryLocalSchema,At as HOME,fz as IGNORED_FILE_EXTENSIONS,mz as IGNORED_FILE_NAMES,gz as IGNORED_FOLDER_NAMES,xt as KEY_FILE,KY as LOCAL_BINARY_INSPECT,hf as LOCAL_DEFAULT_FILES_PER_PAGE,VY as LOCAL_FETCH_CONTENT,qY as LOCAL_FIND_FILES,Bn as LOCAL_MAX_DEPTH,Gi as LOCAL_MAX_FILES_PER_PAGE,Ut as LOCAL_MAX_LIMIT,jY as LOCAL_RIPGREP,$ as LOCAL_TOOL_ERROR_CODES,Sf as LOCAL_TOOL_ERROR_REGISTRY,$Y as LOCAL_VIEW_STRUCTURE,WY as LSP_GET_SEMANTIC_CONTENT,ve as LSP_GET_SEMANTIC_CONTENT_TOOL_NAME,Ca as LocalBinaryInspectBulkQuerySchema,Tr as LocalBinaryInspectQuerySchema,Ta as LocalFetchContentBulkQuerySchema,vr as LocalFetchContentQuerySchema,Ea as LocalFindFilesBulkQuerySchema,Ar as LocalFindFilesQuerySchema,ka as LocalRipgrepBulkQuerySchema,tn as LocalRipgrepQuerySchema,PP as LocalToolErrorCategory,_a as LocalViewStructureBulkQuerySchema,Dr as LocalViewStructureQuerySchema,Y_ as LspGetSemanticsOutputSchema,Si as LspGetSemanticsQueryDisplaySchema,M_ as LspGetSemanticsQuerySchema,Hx as MAX_BRANCH_CACHE_SIZE,Qn as MAX_CHAR_LENGTH,yf as MAX_CONTEXT_LINES,Fg as MAX_DEFAULT_OUTPUT_CHAR_LENGTH,Wl as MAX_DIRECTORY_FILES,zi as MAX_MATCH_CONTENT_LENGTH,ir as MAX_OUTPUT_DEFAULT_CHAR_LENGTH,Hi as MAX_PAGE_NUMBER,rr as MAX_RETRIES,tr as MAX_TIMEOUT,Ag as MAX_TOTAL_SIZE,or as MIN_OUTPUT_DEFAULT_CHAR_LENGTH,nr as MIN_RETRIES,er as MIN_TIMEOUT,Tl as NETWORK_ERROR_PATTERNS,LS as NpmDeprecationOutputSchema,AS as NpmRegistrySearchSchema,tc as NpmSearchBulkQueryLocalSchema,C2 as NpmSearchOutputLocalSchema,ec as NpmSearchQueryLocalSchema,cc as NpmViewResultSchema,Fc as OCTOCODE_DIR,Ne as OCTOCODE_HOME,YY as OQL_SEARCH,Fn as OQL_SEARCH_TOOL_NAME,us as OctocodeConfigSchema,Fx as OctokitWithThrottling,Ln as OqlSearchInputSchema,QY as PACKAGE_SEARCH,Jr as PROMISE_ERRORS,Th as PROVIDER_CAPABILITIES,Mh as PROXY_ENV_VARS,pn as PR_CONTENT_DEFAULT_ITEMS_PER_PAGE,gf as PR_CONTENT_MAX_ITEMS_PER_PAGE,Nu as ProviderInitializationError,jU as QuickResult,bs as RATE_LIMIT_CONFIG,El as RATE_LIMIT_PATTERNS,Un as REPOSITORY_ERRORS,kt as RESOURCE_LIMITS,x5 as RipgrepJsonMessageSchema,qe as SEARCH_ERRORS,iS as SEMANTIC_CONTENT_TYPES,pj as SENSITIVE_ENV_VARS,hn as SESSION_FILE,SP as STARTUP_ERRORS,V as STATIC_TOOL_NAMES,yn as STATS_FILE,Zm as STATUS_TO_ERROR_CODE,js as StatusEmoji,oE as StatusEmojis,Yo as TOOLING_ALLOWED_ENV_VARS,CP as TOOL_ERRORS,RP as TOOL_METADATA_ERRORS,A as TOOL_NAMES,De as ToolError,Xe as ToolErrors,Yr as VALIDATION_ERRORS,ml as _getCacheState,vI as _packageNameToSearchKeywords,fl as _resetConfigCache,p5 as _resetMetadataState,E4 as _resetNpmRegistryUrlCache,wm as _resetSessionState,LH as _resetTokenResolvers,AH as _setTokenResolvers,jg as applyContentPagination,Wb as applyEntryFilters,Ak as applyExactMatchRanking,Rr as applyPagination,Fs as applyPartialContentFilter,Sh as applyStructurePagination,ES as assertCircuitAvailable,j as attachRawResponseChars,EB as buildBlockBoundaryHint,ku as buildChildProcessEnv,ng as buildCodeSearchQuery,Bo as buildDiffPreview,eI as buildDirectToolCommandPatterns,t4 as buildDirectToolExampleQuery,QA as buildEntryPaginationHints,Ey as buildGhSearchCodeFinalizer,xy as buildGithubFetchContentFinalizer,KI as buildPackagePagination,p$ as buildPaginationHints,og as buildPullRequestSearchQuery,rg as buildRepoSearchQuery,va as buildSearchResult,$p as buildToolErrorResult,_d as buildWalkWarnings,rT as byteSlice,ks as byteToCharIndex,Mg as charToByteIndex,cq as checkLargeOutputSafety,a4 as checkNpmAvailability,zI as checkNpmDeprecation,k4 as checkNpmRegistryReachable,kd as checkRegexSafety,G as clampedInt,_H as cleanup,iz as clearAllCache,az as clearLSPToolCache,sz as clearLocalToolCache,qH as clearOctokitInstances,NU as clearProviderCache,cz as clearRemoteAPICache,zh as cloneRepo,ra as collectFlatErrors,IE as commonDirPrefix,cp as compactLocation,Mn as compactResolvedSymbol,Gy as compareIsoDateDescending,A6 as completeMetadata,BE as computeQueryTimeout,km as configExists,d4 as configureCircuitBreaker,P6 as configureSecurity,Cr as contextLinesField,RB as convertByteMatchToChar,Dt as countLines,U as countSerializedChars,eu as createBasePRTransformation,Fo as createCacheMeta,ki as createCallItemKey,M as createErrorResult,Nt as createGitHubProviderError,zs as createGitHubProviderErrorFromResult,ct as createLazyProviderContext,Ng as createPaginationInfo,KE as createProviderExecutionContext,ie as createRelaxedBulkQuerySchema,Wo as createResponseFormat,UU as createResult,$s as createRoleBasedResult,GW as createSafeRegExp,_e as createSuccessResult,Wi as decrypt,Vf as deleteCredentials,xm as deleteSession,g5 as detectEnvironment,Vi as encrypt,OP as ensureBinary,Lf as ensureClone,wn as ensureCloneParentDir,$i as ensureHome,$t as ensureOctocodeDir,EP as ensureRepos,io as ensureTmp,kP as ensureTree,vP as ensureUnzip,xs as evictExpiredClones,Ao as evictExpiredTrees,se as executeBulkOperation,ny as executeCloneRepo,Kp as executeDirectTool,bb as executeFetchContent,Pb as executeFindFiles,fb as executeInspectBinary,Np as executeLspGetSemantics,xi as executeNpmCommand,lC as executeOqlSearchTool,Zt as executeProviderOperation,ty as executeProviderOperations,Ub as executeRipgrepSearch,Nb as executeRipgrepSearchInternal,Jb as executeViewStructure,jh as executeWithErrorIsolation,Ve as executeWithToolBoundary,qy as exploreMultipleRepositoryStructures,As as extractMatchingLines,mb as fallbackOnBestEffortFailure,wa as fetchContent,_g as fetchDirectoryContents,pu as fetchDirectoryContentsRecursivelyAPI,Ig as fetchFileContentToDisk,$g as fetchFileTimestamp,Vg as fetchGitHubFileContentAPI,mQ as fetchGitHubPullRequestByNumberAPI,ou as fetchGitHubPullRequestByNumberAPIInternal,hh as fetchHistory,wy as fetchMultipleGitHubFileContents,Cs as fetchRawGitHubFileContent,cn as fetchWithRetries,Wg as filterPatch,gO as filterStructure,pd as finalizeFetchContentResult,Cb as finalizeFindFilesResult,Mb as finalizeRipgrepResult,Xb as finalizeViewStructureResult,sc as findDirectToolDefinition,_r as findFiles,Ho as findNextBlockBoundary,mm as flushSession,gm as flushSessionSync,Ex as formatBytes,$U as formatCallToolResultForOutput,hS as formatDirectToolCommandPattern,Y2 as formatDirectToolMetadataSchemaText,Z2 as formatDirectToolOutputSchemaText,K2 as formatDirectToolSchemaText,oI as formatDirectToolValidationIssues,Lr as formatFileSize,oa as formatFinalizedResponse,Uo as formatPRForResponse,x1 as formatRepoLine,vp as gatherIncomingCallsRecursive,Ap as gatherOutgoingCallsRecursive,He as generateCacheKey,QQ as generatePaginationHints,Gs as generateStructurePaginationHints,Sl as getActiveProvider,Cl as getActiveProviderConfig,Ui as getAppDataPath,Of as getArchitecture,gB as getBulkDefaultCharLength,Dg as getByteLength,lz as getCacheStats,zw as getCacheTTL,Ql as getCloneBaseDir,Sg as getCloneDir,ms as getConfig,vm as getConfigPath,ge as getConfigSync,Bm as getConfigValue,gn as getCredentials,Jf as getCredentialsFilePath,Ji as getCredentialsSync,Af as getDefaultOctocodeHome,Bp as getDescription,X2 as getDirectToolAutoFilledFields,ic as getDirectToolCategory,e4 as getDirectToolDescription,SS as getDirectToolDisplayFields,J2 as getDirectToolOutputFields,xo as getDirectorySizeBytes,Gc as getEnvTokenSource,ag as getExtension,vh as getFileContent,Yi as getGhCliToken,jm as getGitHubToken,Ef as getLocalAppDataPath,y5 as getLspEnvironmentHint,Bw as getMaxCacheSizeBytes,Qw as getMaxCloneCount,d5 as getMetadataOrNull,Pp as getNpmRegistryUrl,Rn as getOctocodeDir,pe as getOctokit,hm as getOrCreateSession,et as getOutputCharLimit,ew as getOwnerQualifier,kf as getPlatformName,Pu as getProvider,le as getRawResponseChars,du as getRecursiveFetchFailureCount,Lh as getRepoStructure,tB as getReposBaseDir,hs as getServerConfig,ym as getSessionId,Zf as getToken,Ki as getTokenFromEnv,MH as getTokenSource,em as getTokenSync,qc as getTokenWithRefresh,Rg as getTreeBaseDir,Ul as getTreeDir,Ie as handleCatchError,re as handleGitHubAPIError,Ks as handleProviderError,Yf as hasCredentials,Xf as hasCredentialsSync,Hc as hasEnvToken,W$ as hasExpensiveContentRequest,Wh as hoistSharedFields,Qq as ignoreBestEffortFailure,Rm as incrementErrors,as as incrementGitHubCacheHits,cs as incrementGitHubCacheRateLimits,Cm as incrementPackageRegistryFailures,Sm as incrementRateLimitByProvider,is as incrementRateLimits,bm as incrementToolCalls,ss as incrementToolCharSavings,fA as inferLspSymbolName,Um as initialize,Ih as initializeProviders,u5 as initializeToolMetadata,sr as invalidateConfigCache,ro as invalidateCredentialsCache,ij as invokeCallbackSafely,Io as isCacheHit,Cg as isCacheValid,OS as isCircuitOpen,FH as isCloneEnabled,uc as isExactPackageName,En as isGitHubAPIError,DT as isGitHubAPISuccess,_c as isLinux,IH as isLocalEnabled,p2 as isLocalTool,oo as isMac,Go as isMidBlockCut,Pn as isNoResultsSearchError,VE as isProviderError,Js as isProviderSuccess,to as isRefreshTokenExpired,NT as isRepository,vt as isTokenExpired,Ac as isToolError,Gl as isToolInMetadata,fn as isWindows,Pr as lineNumberField,Wf as listStoredHosts,Kf as listStoredHostsSync,Om as loadConfig,So as loadConfigSync,l5 as loadToolContent,fy as mapCodeSearchProviderResult,dy as mapCodeSearchToolQuery,Ry as mapFileContentProviderResult,by as mapFileContentToolQuery,yy as mapPullRequestProviderResultData,hy as mapPullRequestToolQuery,gy as mapRepoSearchProviderRepositories,my as mapRepoSearchToolQuery,Cy as mapRepoStructureProviderResult,Sy as mapRepoStructureToolQuery,S6 as maskSensitiveData,jo as normalizeOwnerRepo,Ay as normalizePullRequestContentRequest,Rs as normalizeResponseHeaders,Ld as paginateEntries,ai as parseFileSize,Ce as parseGitHubProjectId,S5 as parseRipgrepJson,ne as paths,Db as preflightValidateRipgrepPattern,rI as prepareDirectToolInput,n4 as prepareDirectToolInputFromJsonText,qg as processFileContentAPI,Zs as providerSupports,jl as readCacheMeta,_t as readCredentialsStore,kS as recordCircuitFailure,Rp as recordCircuitSuccess,$m as recordPackageRegistryFailure,Yt as recordRateLimit,Zr as redactPath,tm as refreshAuthToken,Vh as relativizeResultPaths,ae as relaxedPageNumberField,pl as reloadConfig,ws as removeCloneDir,u4 as resetCircuitBreaker,Pm as resetSessionStats,Qc as resetTokenResolution,dl as resolveConfig,Po as resolveConfigSync,Ze as resolveDefaultBranch,_p as resolveFileAnchor,VS as resolveSymbolAnchor,Uc as resolveToken,Vt as resolveTokenFull,jc as resolveTokenWithRefresh,Qe as responseEnvelopeFields,Er as safeExec,Ue as safeParseOrError,jp as sanitizeCallToolResult,Tt as sanitizeStructuredContent,kh as searchCode,nn as searchContentRipgrep,dg as searchGitHubCodeAPI,mh as searchGitHubPullRequestsAPI,Rh as searchGitHubReposAPI,ky as searchMultipleGitHubCode,Ny as searchMultipleGitHubPullRequests,Uy as searchMultipleGitHubRepos,QS as searchNpmPackage,US as searchPackage,jS as searchPackages,Ah as searchPullRequests,Oh as searchRepos,y6 as securityRegistry,PB as serializeForPagination,Fy as shapePullRequestForContent,ko as shouldIgnoreDir,mr as shouldIgnoreFile,h5 as shouldUseMCPLsp,ig as shouldUseSearchForPRs,xB as sliceByCharRespectLines,Yl as sliceContent,Os as snapToSemanticBoundary,W2 as sortDirectToolNames,Dh as spawnCheckSuccess,fj as spawnCollectStdout,kn as spawnWithTimeout,Do as splitLines,nB as startCacheGC,rB as stopCacheGC,$c as storeCredentials,Ad as summarizeEntries,Yb as toEntryObject,Kb as toGroupedLists,Cf as toToolError,BT as transformCodeSearchResult,jT as transformFileContentResult,Ds as transformPullRequestItemFromREST,lh as transformPullRequestItemFromSearch,WT as transformPullRequestResult,QT as transformRepoSearchResult,YT as transformRepoStructureResult,Kg as trimDiffContext,rk as truncateSnippetChars,Je as updateSessionStats,Zi as updateToken,Xs as validateArgs,ps as validateConfig,Ke as validateToolPath,wh as viewGitHubRepositoryStructureAPI,Ia as viewStructure,ff as withBasicSecurityValidation,ze as withDataCache,JU as withResponseEnvelope,pf as withSecurityValidation,_o as writeCacheMeta,_6 as z};
|