@octocodeai/octocode-core 4.3.0 → 16.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/configLoader.d.ts +0 -4
  2. package/dist/data/compressed.js +1 -1
  3. package/dist/data/default.json +229 -324
  4. package/dist/resources/global.d.ts +3 -0
  5. package/dist/resources/global.js +1 -0
  6. package/dist/resources/tools/ghCloneRepo.d.ts +2 -0
  7. package/dist/resources/tools/ghCloneRepo.js +1 -0
  8. package/dist/resources/tools/ghGetFileContent.d.ts +2 -0
  9. package/dist/resources/tools/ghGetFileContent.js +1 -0
  10. package/dist/resources/tools/ghSearchCode.d.ts +2 -0
  11. package/dist/resources/tools/ghSearchCode.js +1 -0
  12. package/dist/resources/tools/ghSearchPRs.d.ts +2 -0
  13. package/dist/resources/tools/ghSearchPRs.js +1 -0
  14. package/dist/resources/tools/ghSearchRepos.d.ts +2 -0
  15. package/dist/resources/tools/ghSearchRepos.js +1 -0
  16. package/dist/resources/tools/ghViewRepoStructure.d.ts +2 -0
  17. package/dist/resources/tools/ghViewRepoStructure.js +1 -0
  18. package/dist/resources/tools/localFindFiles.d.ts +2 -0
  19. package/dist/resources/tools/localFindFiles.js +1 -0
  20. package/dist/resources/tools/localGetFileContent.d.ts +2 -0
  21. package/dist/resources/tools/localGetFileContent.js +1 -0
  22. package/dist/resources/tools/localSearchCode.d.ts +2 -0
  23. package/dist/resources/tools/localSearchCode.js +1 -0
  24. package/dist/resources/tools/localViewStructure.d.ts +2 -0
  25. package/dist/resources/tools/localViewStructure.js +1 -0
  26. package/dist/resources/tools/lspGetSemantics.d.ts +2 -0
  27. package/dist/resources/tools/lspGetSemantics.js +1 -0
  28. package/dist/resources/tools/npmSearch.d.ts +2 -0
  29. package/dist/resources/tools/npmSearch.js +1 -0
  30. package/dist/schemas/extraTypes.d.ts +0 -36
  31. package/dist/schemas/index.d.ts +81 -65
  32. package/dist/schemas/index.js +1 -1
  33. package/dist/schemas/outputs.d.ts +1 -13
  34. package/dist/schemas/outputs.js +1 -1
  35. package/dist/schemas/runtime.d.ts +0 -21
  36. package/dist/schemas/runtime.js +1 -1
  37. package/dist/types/index.d.ts +11 -52
  38. package/package.json +2 -1
@@ -0,0 +1,3 @@
1
+ import type { ToolNames, BaseSchema } from "../types/index.js";
2
+ export declare const toolNames: ToolNames;
3
+ export declare const baseSchema: BaseSchema;
@@ -0,0 +1 @@
1
+ export const toolNames={GITHUB_FETCH_CONTENT:"ghGetFileContent",GITHUB_SEARCH_CODE:"ghSearchCode",GITHUB_SEARCH_PULL_REQUESTS:"ghSearchPRs",GITHUB_SEARCH_REPOSITORIES:"ghSearchRepos",GITHUB_VIEW_REPO_STRUCTURE:"ghViewRepoStructure",PACKAGE_SEARCH:"npmSearch",GITHUB_CLONE_REPO:"ghCloneRepo",LOCAL_RIPGREP:"localSearchCode",LOCAL_FETCH_CONTENT:"localGetFileContent",LOCAL_FIND_FILES:"localFindFiles",LOCAL_VIEW_STRUCTURE:"localViewStructure",LSP_GET_SEMANTIC_CONTENT:"lspGetSemantics"};export const baseSchema={id:"Query ID.",mainResearchGoal:"Shared goal across batched queries.",researchGoal:"Goal this query answers.",reasoning:"Why this query."};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const ghCloneRepo: ToolSpec;
@@ -0,0 +1 @@
1
+ export const ghCloneRepo={name:"ghCloneRepo",description:'Clone GitHub repo/subtree for repeated reads, grep, or LSP; returns localPath.\nAvailability: requires ENABLE_LOCAL + ENABLE_CLONE server config AND git on PATH. When unavailable, use ghViewRepoStructure + ghGetFileContent(type:"file") instead.\nsparsePath clones only a subdirectory — faster for large monorepos. Must exist in the repo — verify with ghViewRepoStructure first.\nClones are shallow (--depth 1) — no commit history. forceRefresh bypasses the 24h cache.\nPrefer over repeated ghGetFileContent calls when: doing LSP analysis, grepping across many files, or remote searches become expensive — clone once, then use local tools (localSearchCode, localGetFileContent, lspGetSemantics) for all subsequent reads.\nBulk: queries:[{owner,repo,...},{owner,repo,...}] to clone multiple repos in one call (max 5).\nNext: localViewStructure(path=localPath) to orient, localSearchCode(path=localPath), localGetFileContent, lspGetSemantics(uri=<file inside localPath>); evidence.answerReady:true — switch to local tools.',schema:{owner:"GitHub repository owner or organization.",repo:"GitHub repository name without the owner.",branch:"Branch, tag, or commit SHA. Omit to use the repository default branch.",forceRefresh:"Re-clone from GitHub, bypassing the 24h cache. Default: false (serve cached clone when available).",sparsePath:'Repo-relative subdirectory to sparse-clone (e.g. "packages/foo"). Must exist in the repo — verify with ghViewRepoStructure first. Omit for a full shallow clone.'}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const ghGetFileContent: ToolSpec;
@@ -0,0 +1 @@
1
+ export const ghGetFileContent={name:"ghGetFileContent",description:'Read a GitHub file or region.\nChoose one extraction mode — mutually exclusive: matchString (find all occurrences, returns matchRanges line numbers) | startLine/endLine (line range) | fullContent (entire file, small files only) | default (first charLength chars from line 1).\nPick minify by goal (see the minify field): "symbols" to orient on an unknown file, "standard" to read, "none" to quote/diff.\nMutual exclusions: fullContent XOR matchString XOR startLine/endLine; endLine must be >= startLine.\ntype:"directory" materializes a subtree to a local path for LSP work — only available when the server has clone enabled; use ghViewRepoStructure otherwise.\nOutput signals: isPartial:true → check hints[] for the next charOffset value (emitted as \'charOffset=N\' in hints — not a named field); matchRanges[].start/end are 1-based line numbers → use as lineHint for lspGetSemantics; warnings[] → content was sanitized or symbols mode fell back to standard.\nNext: lspGetSemantics(uri, symbolName, lineHint=matchRanges[0].start) for semantics; re-read with startLine=matchRanges[0].start, endLine=matchRanges[0].end to fetch the full matched body; ghSearchCode for usages; ghViewRepoStructure for surrounding paths. When you have N known file paths to read, batch them: queries:[{path:f1,...},{path:f2,...}] (hard limit: max 5 per call — split into multiple calls if N>5).',schema:{owner:"GitHub owner or org.",repo:"Repository name (no owner).",branch:"Branch, tag, or commit SHA. Omit to resolve the repository branch.",path:"Repo-relative path — exact case, no leading slash (e.g. src/utils/foo.ts).",startLine:"1-based first line. Mutually exclusive with fullContent and matchString.",endLine:"1-based last line. Mutually exclusive with fullContent and matchString. Must be >= startLine.",fullContent:"Read the entire file. Mutually exclusive with matchString and startLine/endLine. Reserve for files you know are small — use matchString or startLine/endLine for large files.",matchString:'Text or regex anchor. All occurrences returned as merged slices. matchRanges[].start/end are 1-based line numbers — use as lineHint for lspGetSemantics. Mutually exclusive with startLine/endLine and fullContent. Case-insensitive by default; set matchStringCaseSensitive:true for exact case. Set matchStringIsRegex:true for regex. Not applied when minify:"symbols".',matchStringIsRegex:"Treat matchString as a regex pattern. Use for flexible anchoring (e.g. function signatures, import patterns).",matchStringCaseSensitive:"Use case-sensitive matchString matching. Default is case-insensitive.",forceRefresh:"Bypass the server-side cache and re-fetch from GitHub. Use when you need the latest commit version, not a cached snapshot.",type:"Content target. 'file' (default) reads a single file. 'directory' materializes a subtree to a local path for LSP analysis — only available when the server has clone enabled; if unavailable, use ghViewRepoStructure instead.",contextLines:"Lines of source context returned around each matchString hit — extends the snippet beyond the match itself. Raise to capture a full function body without a follow-up read. Only applies when matchString is set.",charOffset:"Char offset for continuation reads. Read from hints[] in the prior response (emitted as 'charOffset=N') — do not compute this value manually.",charLength:"Page size in chars. Set higher for files larger than ~800 lines. Check isPartial:true for truncation.",minify:'"symbols": structural skeleton with line numbers in the gutter — much smaller. Use for orientation on any unknown file before reading details. Skips matchString and charLength. "standard" (default): strips comments and blank lines. "none": exact raw text — use when quoting or matching whitespace precisely.'}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const ghSearchCode: ToolSpec;
@@ -0,0 +1 @@
1
+ export const ghSearchCode={name:"ghSearchCode",description:'GitHub code and path search.\nmatch:"file" (default) searches file contents, returns snippets with matchIndices. match:"path" searches file paths/names only — no snippet, much cheaper, use to verify a file exists before reading it.\nmatchIndices are char offsets inside the snippet string — NOT file line numbers, NOT usable as lineHint. Get lineHint from ghGetFileContent(matchString=same-keyword).\nEmpty with owner+repo: repo may not be indexed (new or private). Fall back to ghGetFileContent with a known path.\nNext: ghGetFileContent(path, matchString=same-keyword) to read — use files[0].startLine as rough lineHint; ghViewRepoStructure for context; ghSearchRepos if owner/repo unknown.',schema:{keywordsToSearch:"Search keywords. All terms are ANDed — every keyword must appear. Split independent alternatives into separate query objects in the same queries:[q1,q2,...] call (max 5 per call — not separate tool calls). Keep an exact phrase in one item. Use match:'path' instead when searching for a file by name.",owner:"Owner/org scope. Alone: restricts to all repos of that org/user. With repo: targets a single repository.",repo:"Repository name (without owner). owner must also be set — omitting it returns a scope error.",extension:'Extension filter, no dot ("ts"). Combines with keywords.',language:'GitHub language qualifier (e.g. "TypeScript", "Python"). Matches GitHub\'s language detection — broader than extension (covers all relevant extensions for a language).',filename:'Exact filename filter. Matches files whose name equals or contains this value. More precise than keywordsToSearch for known filenames — use instead of keyword search when you know the file name. Examples: "Button.tsx", "jest.config".',path:"Directory-prefix filter (GitHub path:) — matches repo paths starting with this prefix, not a full file path.",match:'"file" (default): searches file contents, returns snippets with matchIndices. "path": searches file paths/names only — no snippets, much cheaper. Use "path" to verify a file exists before reading it.',limit:"Requested results per page.",page:"GitHub result page (1-based). Max page 10 (GitHub caps at 1000 total results).",verbose:"Set true to add html_url per file pinned to the matched commit SHA. Default false — lean output. Only enable when you need to surface clickable links."}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const ghSearchPRs: ToolSpec;
@@ -0,0 +1 @@
1
+ export const ghSearchPRs={name:"ghSearchPRs",description:'PR search/review. Two modes:\nLIST MODE (no prNumber): returns lean pull_requests[] metadata only — content and reviewMode are silently ignored on list calls.\nDETAIL MODE (prNumber required): fetches requested content surfaces. reviewMode:"full" fetches body+changedFiles+patches+comments+reviews+commits in one call.\nmatchString filters patch/body text to matched sections — response may be larger than expected.\nPR diffs and body are returned raw/exact (no minify) — use the patches selector (mode:"selected" with files/ranges) and charLength/charOffset to control size on large PRs.\nValidation: content.patches.mode:"selected" requires non-empty files[] or ranges[].\nSignals: bodyEmpty=requested empty body, absent=surface not requested (not missing data), sanitizationWarnings=content redacted, in_reply_to_id=reply in thread.\nPagination: search page/limit, content filePage/commentPage/commitPage/itemsPerPage, body charOffset/charLength; page only on hasMore.\nNext: prNumber+reviewMode="full" for single-PR deep dive; when you have N known PR numbers, batch them: queries:[{prNumber:N1,...},{prNumber:N2,...}] (max 5 per call — avoids one round trip per PR). ghGetFileContent for current source, ghSearchCode for usages.',schema:{keywordsToSearch:"All keywords are combined across title/body/comments. Multi-word terms auto phrase-quoted. Use match to restrict scope.",query:'Raw GitHub search string appended after keywords. Use for exact phrases ("Partial Prerendering"), qualifiers (label:bug), or anything not exposed as a field.',match:'PR text fields for keyword search: title, body, and/or comments. Default searches all. Use ["title"] for the most precise match — faster.',prNumber:"Direct PR lookup. Required when requesting body, files, patches, comments, reviews, or commits — content fields are silently ignored without it. owner+repo required when using prNumber — bare prNumber without owner+repo is rejected.",owner:"Repo owner or org.",repo:"Repo name.",verbose:"Set true to add url/sourceBranch/sourceSha/updatedAt/bodyPreview to broad results. prNumber lookup already includes full metadata.",state:'PR state filter: "open", "closed", or "merged". If "merged" is sparse, retry "closed" and filter by mergedAt.',assignee:"Assigned user filter.",author:"Author filter.",commenter:"Commenter filter.",involves:"User involvement filter.",mentions:"Mentioned user filter.","review-requested":"Requested reviewer filter.","reviewed-by":"Reviewer filter.",label:"Label filter.","no-label":"Filter to PRs without labels.","no-milestone":"Filter to PRs without milestone.","no-project":"Filter to PRs without project.","no-assignee":"Filter to PRs without assignee.",head:"Source branch filter.",base:"Target branch filter.",created:"Creation date/window. Format: '>2024-01-01', '<2023-06-01', '2023-01-01..2024-01-01'.",updated:"Update date/window. Same format as created. Tracks activity (comments, pushes).",closed:"Closed date/window. Same format as created.","merged-at":"Merged date/window. Same format as created.",comments:"Comment-count filter (e.g. '>5', '0..10').",reactions:"Reaction-count filter.",interactions:"Comment+reaction-count filter.",draft:"Draft-state filter. true: only drafts; false: only non-drafts; omit: both.",sort:"Sort broad results. 'created': newest first. 'updated': recently active first. 'comments': most discussed. 'reactions': most reacted. 'best-match' (default): GitHub relevance.",order:"Sort direction. 'desc' (default): newest/highest first. 'asc': oldest/lowest first.",archived:"Include PRs from archived repositories. Default excludes archived repos.",limit:"Broad-search result count.",page:"Result page (1-based).",filePage:"Pagination page for changedFiles list.",commentPage:"Pagination page for comments.",commitPage:"Pagination page for commits.",itemsPerPage:"Items per page for content selectors (changedFiles, comments, commits).",reviewMode:'"full": fetches all content surfaces in one call (body + changedFiles + patches + comments + reviews + commits). Only valid with prNumber. Use individual content selectors for targeted reads.',content:"Surface selector object. Only applied when prNumber is set — content is silently ignored on list-mode searches. Select only the surfaces you need to reduce response size.","content.metadata":"PR metadata fields.","content.body":"Full PR description (char-paginated; default window 12,000 chars — use charOffset/charLength for continuation).","content.changedFiles":"File list: path/status/additions/deletions (paged via filePage).","content.patches":"Patch/diff selector.","content.patches.mode":'Patch selection: "none", "selected" with files/ranges (targeted — cheaper), or "all" for every diff.',"content.patches.files":'Non-empty file path list for mode:"selected". Required when mode is "selected".',"content.patches.ranges":'Non-empty per-file line ranges for mode:"selected". Each entry: { file, additions?: number[], deletions?: number[] }. Required when mode is "selected".',"content.patches.ranges.file":"Changed file path for a selected patch range.","content.patches.ranges.additions":"Added-line numbers to include for this file.","content.patches.ranges.deletions":"Deleted-line numbers to include for this file.","content.comments":"PR discussion and inline review comment selector.","content.comments.discussion":"PR thread comments.","content.comments.reviewInline":"Inline code annotations (in_reply_to_id = reply thread).","content.comments.includeBots":"Set true to include CI/bot comments such as Vercel or CodeRabbit.","content.comments.file":"Filter inline comments to one file path.","content.reviews":"Review summaries: APPROVED / CHANGES_REQUESTED.","content.commits":"Commit selector.","content.commits.list":"Commit list (sha, message, author, date).","content.commits.includeFiles":"Per-commit changed-file list.",matchString:"Filter patch/body text to matched sections. Response may be larger than expected when matching large diffs.",charOffset:"Char offset for body pagination.",charLength:"Body page size in chars."}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const ghSearchRepos: ToolSpec;
@@ -0,0 +1 @@
1
+ export const ghSearchRepos={name:"ghSearchRepos",description:"Discover GitHub repos by name, keywords, owner, topic, language, or popularity.\nOutput modes: verbose:false (default) returns lean pipe-separated strings — fast, for discovery; verbose:true returns structured objects with stars, forks, language, license, topics, dates — required when filtering or comparing programmatically.\nOwner alone enumerates org repos; keywords combine together. topicsToSearch is sparse — fewer repos tag topics than set a language.\nFilters use GitHub query format: stars/forks/size accept '>100', '50..500'; created/updated accept '>2023-01-01'.\nNote: providing both topicsToSearch and keywordsToSearch issues two parallel searches (merged, deduplicated) — check evidence.confidence for partial failures.\nBulk: pass multiple independent discovery queries as queries:[{...},{...}] (max 5) — e.g. compare several owners/keyword sets in one call instead of one search at a time.\nNext: ghViewRepoStructure, ghSearchCode/ghGetFileContent, npmSearch for npm names.",schema:{keywordsToSearch:"Combined search terms. Use one term per element for broad matching; keep a phrase together for exact wording.",topicsToSearch:"GitHub topic tags to filter by. All listed topics must be present. Sparse — most repos don't tag topics. Best combined with keywords or language, not used alone.",language:"Repository language qualifier (GitHub detection).",owner:"Owner/org scope. Owner without keywords enumerates org repos; owner with keywords scopes repository search.",stars:"Star-count filter. Format: '>100', '<1000', '50..500', '>=500'. Use to narrow to established or niche repos.",size:"Repository total size in KB (source files + history). '<1000' for small repos; '>10000' for large codebases.",created:"Repo creation date. Format: '>2023-01-01', '<2020-01-01', '2022-01-01..2023-01-01'.",updated:"Last commit push date. Maps to GitHub's pushed: qualifier — not a metadata update date. Format: '>2024-01-01'. Use to find actively maintained repos.",match:"Repository text fields to search: name, description, and/or readme. Default searches name and description. Add 'readme' to search README text — broader, slower.",sort:"Sort results. 'stars': most popular first. 'forks': most forked first. 'updated': recently pushed first. 'help-wanted-issues': repos seeking contributors. 'best-match' (default): GitHub relevance.",limit:"Results per page.",page:"Result page (1-based).",archived:"Set true to include archived repos; otherwise search excludes archived repos.",visibility:"'public' or 'private' (private requires repo scope token). Omit to include both.",forks:"Fork-count filter. Format: '>100', '<1000', '50..500', '>=500'.",license:"SPDX license identifier (e.g. 'mit', 'apache-2.0', 'gpl-3.0'). Exact lowercase SPDX key.",goodFirstIssues:"Filter by number of open 'good first issue' labels ('>5'). Use to find repos actively inviting contributors.",verbose:"Output mode. false (default): lean strings. true: structured objects — use when filtering programmatically by stars, language, or date."}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const ghViewRepoStructure: ToolSpec;
@@ -0,0 +1 @@
1
+ export const ghViewRepoStructure={name:"ghViewRepoStructure",description:'Browse a GitHub repository\'s directory tree. Returns files[], folders[], and a summary at each level.\nUse this to map an unknown repo before searching. Use ghSearchCode(match:"path") when you know a partial filename — faster.\nSet path to browse a subtree; omit for repo root. Set depth to control recursion (immediate children only unless raised).\nIgnored paths: node_modules, .git, dist, build, and other artifacts are automatically excluded from results.\nOutput key is structure[] (array of {dir, files[], folders[]}). Paginate with page=N when pagination.hasMore is true.\nBulk: pass multiple {owner,repo,path} objects as queries:[{...},{...}] (max 5) to explore several paths in one call.\nNext: ghGetFileContent(path) to read files; ghSearchCode to search within a known path.',schema:{owner:"GitHub repository owner or organization.",repo:"GitHub repository name without the owner.",branch:"Branch, tag, or commit SHA. Omit to use the repository default branch. If not found, the default branch is used and a warning hint is emitted.",path:'Repo-relative directory to browse. Use "" or "." for the root. Use a subdirectory path (e.g. "src/utils") to scope the tree. No leading slash.',depth:"Recursion depth — immediate children only unless raised. Set 2+ to recurse into subdirectories.",page:"Result page (1-based). Advance only when pagination.hasMore is true.",itemsPerPage:"Entries per page. Raise to reduce round-trips on large repos."}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const localFindFiles: ToolSpec;
@@ -0,0 +1 @@
1
+ export const localFindFiles={name:"localFindFiles",description:'Find local files and directories by metadata — name pattern, path glob, size, modification time, permissions. Returns paths and metadata, not file content. More efficient than localSearchCode when you only need file locations.\nUse cases: "what changed recently?" → modifiedWithin:"24h", sortBy:"modified", showFileLastModified:true; "find test files" → names:["*.test.ts"], pathPattern:"src/**"; "find large files" → sizeGreater:"1m", sortBy:"size"; "find all index files" → regex:"^index\\."; "find directories" → entryType:"d".\nDefault excludeDir: node_modules, dist, .git, build, .next, coverage, and IDE/tool dirs — pass excludeDir:[] to disable. Time units: d=days, h=hours, w=weeks, m=minutes.\nBulk: up to 5 independent query objects in one call.\nValidation: minDepth must be <= maxDepth.\nNext: localGetFileContent(path) to read a found file; localSearchCode(keywords, path) to search content; localViewStructure(path) for directory tree browsing.',schema:{path:"Search root, absolute or workspace-relative.",maxDepth:"Upper directory depth bound. maxDepth:0 = root only; maxDepth:1 = root and immediate children. Pair with minDepth for a depth window.",minDepth:"Lower directory depth bound. Pair with maxDepth for a depth window (e.g. minDepth:2 + maxDepth:2 = exactly two levels deep). Must be <= maxDepth.",names:'Basename glob array. Any listed glob may match (OR logic). Example: ["*.ts", "*.tsx", "package.json"]. Use for extension-based or name-pattern file discovery.',pathPattern:"Full-path glob filter. Matches files whose full path matches this glob. Use for monorepo slice filtering: 'packages/*/src/**' finds src directories across all packages.",regex:"Rust regex against the basename only (not full path). More powerful than names[] for precise matching. Example: '^(index|main)\\.(ts|js)$' matches index.ts, main.js.",empty:"Match empty files (0 bytes) or directories with no children.",modifiedWithin:"Only files modified within the past N. Format: '7d' (days), '2h' (hours), '1w' (weeks), '30m' (minutes). Use for 'what changed recently' queries.",modifiedBefore:"Only files NOT modified in the past N — last touched more than N ago. Format same as modifiedWithin. Use to find stale or abandoned files.",accessedWithin:"Only files accessed within the past N. Format same as modifiedWithin.",sizeGreater:"Only files larger than this size. Format: '100k', '1m', '500b'. Use to find large generated files, bundles, or assets.",sizeLess:"Only files smaller than this size. Same format as sizeGreater.",executable:"Filter to files executable by the current process (-x).",readable:"Filter to files readable by the current process (-r).",writable:"Filter to files writable by the current process (-w).",excludeDir:"Directory names to skip. Default when omitted: [node_modules, dist, .git, build, .next, coverage, and IDE dirs]. Pass [] to search all directories.",limit:"Pre-pagination cap on discovered entries. Distinct from page size.",details:"Set true to add size and permissions per entry. Does NOT include timestamps — use showFileLastModified:true separately.",showFileLastModified:"Set true to include last-modified timestamps per entry. Required to see modification dates when sortBy:'modified'. Independent of details.",sortBy:"'modified' (default): newest-modified first — requires showFileLastModified:true for actual time ordering; without it falls back to path sort. 'size': largest first. 'name': alphabetical basename. 'path': full path alphabetical.",entryType:'"f" for files only, "d" for directories only. Omit to match both.',permissions:"Unix permission filter in find -perm format (e.g. '755', '-u+x'). Omit unless you need to filter by exact permission bits.",page:"Result page (1-based).",itemsPerPage:"Entries per page."}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const localGetFileContent: ToolSpec;
@@ -0,0 +1 @@
1
+ export const localGetFileContent={name:"localGetFileContent",description:'Read a local file or region. Start with minify:"symbols" on any unknown file before reading slices.\nChoose one extraction mode — mutually exclusive: matchString (find all occurrences, returns matchRanges) | startLine/endLine (line range — both required together) | fullContent (entire file, small files only) | default (first charLength chars from line 1).\nPick minify by goal (see the minify field): "symbols" to orient, "standard" to read, "none" to quote/match whitespace.\nOutput signals: isPartial:true → check hints[] for next charOffset value (emitted as \'charOffset=N\'); matchRanges[i]={start,end} (1-based line numbers) → use matchRanges[0].start as lineHint for lspGetSemantics; warnings[] → redacted content, auto-pagination, or symbols-fallback messages.\nevidence.answerReady:true means content returned — stop calling (check isPartial separately for pagination state).\nNext: lspGetSemantics(uri=path, symbolName, lineHint=matchRanges[0].start) for semantics; localSearchCode before reading if the symbol location is unknown. Batch up to 5 files per call: queries:[{path:f1,...},{path:f2,...}].',schema:{path:"File path, absolute or workspace-relative. Use localViewStructure for directories.",fullContent:"Read the entire file. Mutually exclusive with matchString and startLine/endLine. Reserve for files you know are small — use matchString or startLine/endLine for large files.",matchString:'Text or regex anchor. All occurrences returned as merged slices. matchRanges[i]={start,end} (1-based line numbers) — use matchRanges[0].start as lineHint for lspGetSemantics. Mutually exclusive with startLine/endLine and fullContent. Case-insensitive by default; set matchStringCaseSensitive:true for exact case. Set matchStringIsRegex:true for regex. Not applied when minify:"symbols".',matchStringIsRegex:"Treat matchString as a regex pattern. Use for flexible anchoring (e.g. function signatures, import patterns, JSDoc tags).",matchStringCaseSensitive:"Use case-sensitive matchString matching. Default is case-insensitive.",startLine:"1-based first line. Required together with endLine — providing only one is a validation error. Mutually exclusive with fullContent and matchString.",endLine:"1-based last line. Required together with startLine — providing only one is a validation error. Mutually exclusive with fullContent and matchString. Must be >= startLine.",contextLines:"Lines of source context returned around each matchString hit — extends the snippet beyond the match itself. Raise to capture a full function body without a follow-up read.",charOffset:"Char offset for continuation reads. Read from hints[] in the prior response (emitted as 'charOffset=N') — do not compute this value manually.",charLength:"Page size in chars. Auto-paginates when unset. Set explicitly for normal source files.",minify:'"symbols": structural skeleton with line numbers in the gutter — much smaller. Use for orientation on any unknown file before reading details. matchString and charLength are ignored in symbols mode. "standard" (default): strips comments and blank lines. "none": exact raw text — use when quoting or matching whitespace precisely.'}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const localSearchCode: ToolSpec;
@@ -0,0 +1 @@
1
+ export const localSearchCode={name:"localSearchCode",description:'Local ripgrep search for file+line.\nChoose mode first: "paginated" (default) returns snippets; "discovery" returns file paths only — cheapest orientation; "detailed" returns expanded context per match.\nFor count-only output use countLinesPerFile:true or countMatchesPerFile:true — do NOT use mode:"count" (does not exist).\nOutput signal: searchEngine:"grep" means ripgrep was unavailable and grep was used as fallback (perlRegex features dropped, countMatchesPerFile becomes line-count semantics).\nPage only on hasMore; use matchPage for more matches in one file; narrow include/exclude/path before paging noisy results.\nBatch: pass up to 5 {keywords, path} objects in one call — e.g. search same keyword across multiple directories simultaneously.\nevidence.answerReady:true means at least one result exists; check pagination.hasMore separately before deciding to stop.\nPair with lspGetSemantics for semantic navigation — matches[0].line feeds directly as lineHint for definition, references, and call hierarchy.\nNext: localGetFileContent(path, matchString=keyword) to read context; lspGetSemantics(uri=files[0].path, symbolName, lineHint=matches[0].line) for semantics; localViewStructure if root unknown; localFindFiles when searching by filename or metadata.',schema:{keywords:"Required. Primary search term — text or regex pattern. fixedString:true for literal match; perlRegex:true for PCRE2 features (lookaheads, backreferences).",path:"File or directory to search; absolute paths are safest.",mode:'"paginated" (default): match list with snippets. "discovery": file paths only — no snippets, cheapest token cost, use for orientation before reading. "detailed": expanded snippets with surrounding context — for deep reading without a follow-up file read. For count-only output use countLinesPerFile:true or countMatchesPerFile:true.',fixedString:"Literal match — disables regex. Mutually exclusive with perlRegex.",perlRegex:"PCRE2 regex — lookaheads, backreferences. Mutually exclusive with fixedString.",caseInsensitive:"Use case-insensitive matching. Mutually exclusive with caseSensitive.",caseSensitive:"Use case-sensitive matching. Mutually exclusive with caseInsensitive.",wholeWord:"Match whole-word occurrences.",invertMatch:"Return non-matching lines. For files lacking the pattern use filesWithoutMatch.",include:"File path include globs (e.g. '*.ts', 'src/**/*.tsx'). Only files matching any listed glob are searched.",exclude:"File path exclude globs (e.g. '*.min.js', 'dist/**'). Files matching are skipped.",excludeDir:"Directory names to skip entirely (e.g. 'node_modules', 'dist', '.git'). Faster than exclude globs for directory-level skips.",noIgnore:"Bypass .gitignore and .ignore files.",hidden:"Include hidden (dot) files.",filesOnly:"Return matching file paths without line content. Mutually exclusive with filesWithoutMatch.",filesWithoutMatch:"Return file paths that do NOT contain the pattern — useful for finding files missing a required import or header. Mutually exclusive with filesOnly.",contextLines:"Lines of context around each match. Use with mode:'detailed' for self-contained snippets.",matchContentLength:"Chars per match snippet. Raise for minified code or JSON blobs, or when truncation is causing missed matches.",maxMatchesPerFile:"Limit matches per file and set per-file page size. When a file has more matches, file.pagination.hasMore triggers — use matchPage to continue. Not meaningful in filesOnly/count modes.",maxFiles:"Limit matched files returned.",multiline:"Cross-line matching (-U). Add multilineDotall when dot should match newlines.",multilineDotall:". matches newlines. Requires multiline:true.",sort:"Sort by path (default), modified time, access time, or creation time.",sortReverse:"Reverse sort order. Combined with sort:'modified' + sortReverse:true gives oldest-first.",langType:"Ripgrep language type filter (ts, js, py, go, rust, etc.). More precise than include globs.",countLinesPerFile:"Return matching line count per file instead of match content. Mutually exclusive with countMatchesPerFile. Use for orientation: which files have the most matches.",countMatchesPerFile:"Return total match count per file (counts multiple matches per line). Mutually exclusive with countLinesPerFile.",matchPage:"Per-file match page (1-based). Use with maxMatchesPerFile to iterate matches within a noisy file.",itemsPerPage:"Files per page.",page:"Result page (1-based)."}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const localViewStructure: ToolSpec;
@@ -0,0 +1 @@
1
+ export const localViewStructure={name:"localViewStructure",description:'Browse a local directory tree. Returns files[], folders[], and links[] (symlinks) at each level. When details:true or showFileLastModified:true, switches to entries[] objects with size, permissions, and timestamps.\nUse this to map a directory before searching. Use localFindFiles when you need metadata (size, modified date) or filename patterns. Use localSearchCode(mode:"discovery") to find which files contain a pattern.\nMutual exclusion: filesOnly and directoriesOnly cannot both be true.\nBulk: queries:[{path:d1},{path:d2}] to browse multiple directories in one call (max 5).\nPaginate with page=N when pagination.hasMore is true.\nNext: localGetFileContent(path), localSearchCode, lspGetSemantics after localSearchCode gives uri/symbolName/lineHint.',schema:{path:"Directory to browse. Absolute or workspace-relative. Defaults to workspace root if omitted.",details:"Set true for per-entry objects with size, permissions, and dates. Enables structured entries[] output.",hidden:"Include hidden (dot) files and directories. Default false. Enable to see .env, .git, .github, .agents directories.",sortBy:"Sort entries by: 'name' (default, alphabetical), 'size' (bytes), 'time' (last modified — implicitly enables showFileLastModified), 'extension' (file type grouping).",reverse:"Reverse the sort order. Combined with sortBy:'time' + reverse:true → oldest files first.",pattern:"Filename/directory name filter — glob (e.g. '*.ts') or plain substring. Only entries whose name matches are returned. For regex use localFindFiles.",directoriesOnly:"Return directories only. Mutually exclusive with filesOnly.",filesOnly:"Return files only. Mutually exclusive with directoriesOnly.",recursive:"Enable recursive traversal. Default false — top level only. Default depth when recursive:true and no depth given: 5. Use depth to control cost explicitly.",extensions:"File extension whitelist (without dot). Example: ['ts', 'tsx', 'js']. Only files with a matching extension are returned; directories are always included regardless of extension filter.",depth:"Recursion depth when recursive:true (0: immediate children only). Start shallow for large monorepos, then drill into specific subdirectories.",limit:"Pre-pagination cap on discovered entries. Use to prevent large directory scans. Distinct from page size.",showFileLastModified:"Set true to include last-modified timestamps per file entry. Independent of details:true. Enable to identify recently changed files without switching to localFindFiles.",page:"Result page (1-based).",itemsPerPage:"Directory entries per page. Use to control response size."}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const lspGetSemantics: ToolSpec;
@@ -0,0 +1 @@
1
+ export const lspGetSemantics={name:"lspGetSemantics",description:"Typed LSP queries for semantic navigation (default type: definition).\nPrerequisites: all types except documentSymbols require symbolName + lineHint. lineHint must come from a real localSearchCode match (matches[0].line) — never guess. A wrong lineHint causes silent empty results. If lineHint is unknown: run documentSymbols (uri only) or localSearchCode first.\nType routing: documentSymbols=file outline (uri only); hover=signature+JSDoc; definition=jump to decl; typeDefinition=generic types; implementation=abstract member impl (member name, not class); references=same-package usages (bounded by TS server open files, NOT cross-package — zero results does NOT mean unused, try callers); callers=cross-package incoming calls (TS/JS/Go/Rust only — Python/C++ use references instead); callees=outgoing calls; callHierarchy=both.\nToken efficiency: format:\"compact\" on callers/callees/callHierarchy → significantly fewer tokens. groupByFile:true on references → per-file summary with lines[] (each is a valid lineHint for follow-up calls). contextLines=3–10 on callers/callees embeds source context, reducing follow-up localGetFileContent calls.\nLanguage tiers — Tier 1 all types: TS/JS/Go/Rust. Tier 2 no callHierarchy: Python/C++. Tier 3 documentSymbols+hover+definition only: Shell/HTML/CSS/YAML/TOML.\nOutput signal: resolvedSymbol.foundAtLine confirms which line LSP resolved — if far from lineHint, re-run localSearchCode to get an accurate anchor. payload.kind='empty' means LSP returned no results (symbolNotFound → re-anchor with localSearchCode; serverUnavailable → fall back to localSearchCode). In callers/callees results, each ranges[].line is the lineHint for the next lspGetSemantics call on that symbol.\nevidence.answerReady:true — stop calling.\nNext: localGetFileContent(startLine/endLine) to read the definition; lspGetSemantics(callers) for impact analysis. Batch: up to 5 queries per call — combine definition+hover or definition+callers in one request.",schema:{uri:"Target source file as absolute path or file:/// URI.",type:"(default: definition) — see type routing in description.",symbolName:"Exact identifier at lineHint. Required for all types except documentSymbols. Case-sensitive. No parentheses, no type annotations — bare name only (e.g. 'fetchPRDetail' not 'fetchPRDetail()'). Must match the token at lineHint exactly.",lineHint:"1-based line number of the symbol. Required for all types except documentSymbols. Must come from a real localSearchCode match (matches[0].line) — never estimate or guess. A wrong lineHint causes silent empty results.",orderHint:"0-based index to disambiguate when symbolName appears multiple times on lineHint (e.g. overloaded functions, chained calls). If you get the wrong symbol, increment.",depth:"Call-tree recursion depth for callHierarchy/callers/callees — immediate calls only unless raised. Raise for full chain analysis; high depth on widely-used symbols can be large — combine with format:'compact'.",includeDeclaration:"references: include the symbol's own declaration in results. Set false when you only want callers/usages, not the definition site.",groupByFile:"references only: per-file summary (path + count + all line numbers in lines[]) instead of per-location rows. Use for blast radius — each entry's lines[] are valid lineHint values for follow-up calls.",page:"Result page (1-based) for documentSymbols and call-flow results.",itemsPerPage:"Items per page (symbols/locations get a larger page than call-flow results).",contextLines:"Lines of source context around each call site in callers/callees/callHierarchy (location only unless set). Raise to embed calling context and skip follow-up localGetFileContent reads.",format:'"structured" (default): typed objects with full location metadata. "compact": line-oriented strings — significantly fewer tokens. Use "compact" for most navigation; use "structured" only when parsing location objects programmatically.',workspaceRoot:"Override the LSP workspace root (absolute path). Omit to use the workspace root auto-resolved from uri. Only needed when the LSP server spans multiple roots."}};
@@ -0,0 +1,2 @@
1
+ import type { ToolSpec } from "../../types/index.js";
2
+ export declare const npmSearch: ToolSpec;
@@ -0,0 +1 @@
1
+ export const npmSearch={name:"npmSearch",description:'npm package lookup and keyword search. Returns package metadata and source repository handoff.\nExact package name (e.g. "react", "@octokit/rest") returns one rich result with version, description, keywords, and repository owner/repo for GitHub handoff.\nKeyword query (e.g. "http client typescript") returns lean results — paginate with page; pagination.hasMore and totalFound available in output.\nWhen owner+repo is present in the result, pass directly to ghViewRepoStructure or ghSearchCode. If a repositoryDirectory path follows owner/repo in the result, pass it as path= to ghViewRepoStructure to scope the tree to the package subdirectory.\nSkip if owner/repo is already known — go directly to ghViewRepoStructure.\nBatch up to 5 packages in one call: queries:[{packageName:"react"},{packageName:"lodash"}].\nNext: ghViewRepoStructure or ghSearchCode when owner/repo exists; ghSearchRepos when owner/repo is absent or non-GitHub.',schema:{packageName:"Required. Exact npm package name or keyword search query. An exact name (e.g. 'react', '@octokit/rest') returns one canonical rich result — returns empty if the package does not exist (check spelling before assuming private). A keyword query returns a lean list. Scoped packages need the full scope: '@octokit/rest' not 'rest'.",page:"Keyword-result page (1-based). Exact package names always return page 1 regardless. Paginate using pagination.hasMore."}};
@@ -1,14 +1,3 @@
1
- /**
2
- * Auxiliary downstream shapes for provider mappers and finalisers.
3
- * These types are too downstream-shaped to live in `src/types/index.ts`.
4
- *
5
- * Canonical data shapes (`LocalSearchCodeMatch`, `LocalSearchCodeFile`,
6
- * `LocalFindFilesEntry`, etc.) live in `src/types/index.ts`. This file only carries:
7
- * - the `BaseQuery` meta + `BaseQueryLocal`,
8
- * - the *mutable, flat* `*ToolResult` envelopes built by `octocode-mcp`,
9
- * - provider-mapper shapes (`GitHubRepositoryOutput`,
10
- * `GitHubSearchRepositoriesData`).
11
- */
12
1
  import type { CharPagination, LspRange, LspLocation, LspMode, PaginationInfo, LocalSearchCodeFile, LocalFindFilesEntry, GitHubRepositoryItem, GitHubPullRequestItem, GitHubSearchCodeGroup, GitHubFileContentData } from "../types/index.js";
13
2
  export interface BaseQuery {
14
3
  id?: string;
@@ -17,7 +6,6 @@ export interface BaseQuery {
17
6
  reasoning?: string;
18
7
  verbose?: boolean;
19
8
  }
20
- /** Local-tool flavour — adds the conventional `path` field. */
21
9
  export interface BaseQueryLocal extends BaseQuery {
22
10
  path?: string;
23
11
  }
@@ -47,12 +35,6 @@ interface BaseToolResult {
47
35
  error?: string;
48
36
  errorCode?: string;
49
37
  rawResponseChars?: number;
50
- /**
51
- * Index signature — `octocode-mcp`'s bulk runner threads extra
52
- * fields (`data`, provider-specific blobs) through the result
53
- * envelope. Keep it permissive so structural assignment to its
54
- * `ProcessedBulkResult` succeeds without a cast.
55
- */
56
38
  [key: string]: unknown;
57
39
  }
58
40
  export interface LocalSearchCodeToolResult extends BaseToolResult {
@@ -64,7 +46,6 @@ export interface LocalFindFilesToolResult extends BaseToolResult {
64
46
  files?: LocalFindFilesEntry[];
65
47
  pagination?: PaginationInfo;
66
48
  }
67
- /** Char-range pair carried by `LocalGetFileContentToolResult.matchRanges`. */
68
49
  export interface MatchRange {
69
50
  start: number;
70
51
  end: number;
@@ -78,11 +59,6 @@ export interface LocalGetFileContentToolResult extends BaseToolResult {
78
59
  endLine?: number;
79
60
  isPartial?: boolean;
80
61
  matchRanges?: MatchRange[];
81
- /**
82
- * Pagination metadata — either a char-budget paginator
83
- * (`CharPagination`) for fully rendered output, or a row-counter
84
- * paginator when results are paginated by line/match index.
85
- */
86
62
  pagination?: CharPagination | PaginationInfo;
87
63
  modified?: string;
88
64
  lastModified?: string;
@@ -90,7 +66,6 @@ export interface LocalGetFileContentToolResult extends BaseToolResult {
90
66
  filePath?: string;
91
67
  }
92
68
  export interface LocalViewStructureEntryFlat {
93
- /** Entry display name for rich directory listings. */
94
69
  name?: string;
95
70
  type: "file" | "dir" | "link" | "directory" | "symlink";
96
71
  path?: string;
@@ -100,15 +75,10 @@ export interface LocalViewStructureEntryFlat {
100
75
  permissions?: string;
101
76
  }
102
77
  export interface LocalViewStructureToolResult extends BaseToolResult {
103
- /** Rich per-entry objects — emitted with details=true or showFileLastModified=true. */
104
78
  entries?: LocalViewStructureEntryFlat[];
105
- /** Base directory for the flat name lists (lean default output). */
106
79
  path?: string;
107
- /** Flat file name list (lean default; names carry subpaths in recursive mode). */
108
80
  files?: string[];
109
- /** Flat directory name list (lean default). */
110
81
  folders?: string[];
111
- /** Flat symlink name list (lean default, only when present). */
112
82
  links?: string[];
113
83
  summary?: string | Record<string, unknown>;
114
84
  pagination?: PaginationInfo;
@@ -201,12 +171,6 @@ export interface GitHubRepositoryOutput {
201
171
  license?: string;
202
172
  homepage?: string;
203
173
  }
204
- /**
205
- * Provider-facing repos-search result. Mirrors `GitHubSearchReposData`
206
- * but uses `GitHubRepositoryOutput` (the structurally rich shape with
207
- * `owner`/`repo` split, provider metadata) instead of the simpler
208
- * `GitHubRepositoryItem`.
209
- */
210
174
  export interface GitHubSearchRepositoriesData {
211
175
  repositories: GitHubRepositoryOutput[];
212
176
  pagination?: PaginationInfo;
@@ -1,20 +1,8 @@
1
- /**
2
- * Zod input schemas — the canonical schemas every tool exposes to MCP
3
- * clients. The mcp-host overlay extends these with default pagination
4
- * values, detail controls, and meta fields (id/researchGoal/etc.).
5
- *
6
- * These schemas expose the public tool field names. Package overlays can still
7
- * add bounds/defaults, but legacy aliases do not belong here.
8
- *
9
- * The overlay calls `.extend()`, `.shape`, `.element` on these schemas,
10
- * so they must remain `z.ZodObject<...>` shapes (no transforms / unions
11
- * at the top level unless documented).
12
- */
13
1
  import { z } from "zod";
14
2
  export declare const RipgrepQuerySchema: z.ZodObject<{
15
3
  keywords: z.ZodString;
16
4
  path: z.ZodString;
17
- mode: z.ZodOptional<z.ZodEnum<{
5
+ mode: z.ZodDefault<z.ZodEnum<{
18
6
  paginated: "paginated";
19
7
  discovery: "discovery";
20
8
  detailed: "detailed";
@@ -33,16 +21,16 @@ export declare const RipgrepQuerySchema: z.ZodObject<{
33
21
  filesOnly: z.ZodOptional<z.ZodBoolean>;
34
22
  filesWithoutMatch: z.ZodOptional<z.ZodBoolean>;
35
23
  contextLines: z.ZodOptional<z.ZodNumber>;
36
- matchContentLength: z.ZodOptional<z.ZodNumber>;
24
+ matchContentLength: z.ZodDefault<z.ZodNumber>;
37
25
  maxMatchesPerFile: z.ZodOptional<z.ZodNumber>;
38
26
  maxFiles: z.ZodOptional<z.ZodNumber>;
39
27
  multiline: z.ZodOptional<z.ZodBoolean>;
40
28
  multilineDotall: z.ZodOptional<z.ZodBoolean>;
41
- sort: z.ZodOptional<z.ZodEnum<{
29
+ sort: z.ZodDefault<z.ZodEnum<{
42
30
  path: "path";
43
31
  modified: "modified";
44
- accessed: "accessed";
45
32
  created: "created";
33
+ accessed: "accessed";
46
34
  }>>;
47
35
  sortReverse: z.ZodOptional<z.ZodBoolean>;
48
36
  langType: z.ZodOptional<z.ZodString>;
@@ -50,7 +38,7 @@ export declare const RipgrepQuerySchema: z.ZodObject<{
50
38
  countMatchesPerFile: z.ZodOptional<z.ZodBoolean>;
51
39
  matchPage: z.ZodOptional<z.ZodNumber>;
52
40
  itemsPerPage: z.ZodOptional<z.ZodNumber>;
53
- page: z.ZodOptional<z.ZodNumber>;
41
+ page: z.ZodDefault<z.ZodNumber>;
54
42
  id: z.ZodOptional<z.ZodString>;
55
43
  mainResearchGoal: z.ZodOptional<z.ZodString>;
56
44
  researchGoal: z.ZodOptional<z.ZodString>;
@@ -63,7 +51,6 @@ export declare const FindFilesQuerySchema: z.ZodObject<{
63
51
  names: z.ZodOptional<z.ZodArray<z.ZodString>>;
64
52
  pathPattern: z.ZodOptional<z.ZodString>;
65
53
  regex: z.ZodOptional<z.ZodString>;
66
- regexType: z.ZodOptional<z.ZodString>;
67
54
  empty: z.ZodOptional<z.ZodBoolean>;
68
55
  modifiedWithin: z.ZodOptional<z.ZodString>;
69
56
  modifiedBefore: z.ZodOptional<z.ZodString>;
@@ -78,17 +65,17 @@ export declare const FindFilesQuerySchema: z.ZodObject<{
78
65
  limit: z.ZodOptional<z.ZodNumber>;
79
66
  details: z.ZodOptional<z.ZodBoolean>;
80
67
  showFileLastModified: z.ZodOptional<z.ZodBoolean>;
81
- sortBy: z.ZodOptional<z.ZodEnum<{
68
+ sortBy: z.ZodDefault<z.ZodEnum<{
82
69
  path: "path";
83
70
  modified: "modified";
84
- name: "name";
85
71
  size: "size";
72
+ name: "name";
86
73
  }>>;
87
74
  entryType: z.ZodOptional<z.ZodEnum<{
88
75
  f: "f";
89
76
  d: "d";
90
77
  }>>;
91
- page: z.ZodOptional<z.ZodNumber>;
78
+ page: z.ZodDefault<z.ZodNumber>;
92
79
  itemsPerPage: z.ZodOptional<z.ZodNumber>;
93
80
  id: z.ZodOptional<z.ZodString>;
94
81
  mainResearchGoal: z.ZodOptional<z.ZodString>;
@@ -99,12 +86,11 @@ export declare const ViewStructureQuerySchema: z.ZodObject<{
99
86
  path: z.ZodString;
100
87
  details: z.ZodOptional<z.ZodBoolean>;
101
88
  hidden: z.ZodOptional<z.ZodBoolean>;
102
- humanReadable: z.ZodOptional<z.ZodBoolean>;
103
- sortBy: z.ZodOptional<z.ZodEnum<{
104
- name: "name";
89
+ sortBy: z.ZodDefault<z.ZodEnum<{
90
+ extension: "extension";
105
91
  size: "size";
92
+ name: "name";
106
93
  time: "time";
107
- extension: "extension";
108
94
  }>>;
109
95
  reverse: z.ZodOptional<z.ZodBoolean>;
110
96
  pattern: z.ZodOptional<z.ZodString>;
@@ -115,7 +101,7 @@ export declare const ViewStructureQuerySchema: z.ZodObject<{
115
101
  depth: z.ZodOptional<z.ZodNumber>;
116
102
  limit: z.ZodOptional<z.ZodNumber>;
117
103
  showFileLastModified: z.ZodOptional<z.ZodBoolean>;
118
- page: z.ZodOptional<z.ZodNumber>;
104
+ page: z.ZodDefault<z.ZodNumber>;
119
105
  itemsPerPage: z.ZodOptional<z.ZodNumber>;
120
106
  id: z.ZodOptional<z.ZodString>;
121
107
  mainResearchGoal: z.ZodOptional<z.ZodString>;
@@ -130,10 +116,10 @@ export declare const FetchContentQuerySchema: z.ZodObject<{
130
116
  matchStringCaseSensitive: z.ZodOptional<z.ZodBoolean>;
131
117
  startLine: z.ZodOptional<z.ZodNumber>;
132
118
  endLine: z.ZodOptional<z.ZodNumber>;
133
- contextLines: z.ZodOptional<z.ZodNumber>;
119
+ contextLines: z.ZodDefault<z.ZodNumber>;
134
120
  charOffset: z.ZodOptional<z.ZodNumber>;
135
121
  charLength: z.ZodOptional<z.ZodNumber>;
136
- minify: z.ZodOptional<z.ZodEnum<{
122
+ minify: z.ZodDefault<z.ZodEnum<{
137
123
  none: "none";
138
124
  standard: "standard";
139
125
  symbols: "symbols";
@@ -155,14 +141,14 @@ export declare const FileContentQuerySchema: z.ZodObject<{
155
141
  matchStringIsRegex: z.ZodOptional<z.ZodBoolean>;
156
142
  matchStringCaseSensitive: z.ZodOptional<z.ZodBoolean>;
157
143
  forceRefresh: z.ZodOptional<z.ZodBoolean>;
158
- type: z.ZodOptional<z.ZodEnum<{
144
+ type: z.ZodDefault<z.ZodEnum<{
159
145
  file: "file";
160
146
  directory: "directory";
161
147
  }>>;
162
- contextLines: z.ZodOptional<z.ZodNumber>;
148
+ contextLines: z.ZodDefault<z.ZodNumber>;
163
149
  charOffset: z.ZodOptional<z.ZodNumber>;
164
150
  charLength: z.ZodOptional<z.ZodNumber>;
165
- minify: z.ZodOptional<z.ZodEnum<{
151
+ minify: z.ZodDefault<z.ZodEnum<{
166
152
  none: "none";
167
153
  standard: "standard";
168
154
  symbols: "symbols";
@@ -179,12 +165,13 @@ export declare const GitHubCodeSearchQuerySchema: z.ZodObject<{
179
165
  extension: z.ZodOptional<z.ZodString>;
180
166
  filename: z.ZodOptional<z.ZodString>;
181
167
  path: z.ZodOptional<z.ZodString>;
182
- match: z.ZodOptional<z.ZodEnum<{
168
+ language: z.ZodOptional<z.ZodString>;
169
+ match: z.ZodDefault<z.ZodEnum<{
183
170
  file: "file";
184
171
  path: "path";
185
172
  }>>;
186
- limit: z.ZodOptional<z.ZodNumber>;
187
- page: z.ZodOptional<z.ZodNumber>;
173
+ limit: z.ZodDefault<z.ZodNumber>;
174
+ page: z.ZodDefault<z.ZodNumber>;
188
175
  verbose: z.ZodOptional<z.ZodBoolean>;
189
176
  id: z.ZodOptional<z.ZodString>;
190
177
  mainResearchGoal: z.ZodOptional<z.ZodString>;
@@ -201,20 +188,27 @@ export declare const GitHubReposSearchSingleQuerySchema: z.ZodObject<{
201
188
  created: z.ZodOptional<z.ZodString>;
202
189
  updated: z.ZodOptional<z.ZodString>;
203
190
  match: z.ZodOptional<z.ZodArray<z.ZodEnum<{
204
- name: "name";
205
191
  description: "description";
192
+ name: "name";
206
193
  readme: "readme";
207
194
  }>>>;
208
- sort: z.ZodOptional<z.ZodEnum<{
209
- stars: "stars";
195
+ sort: z.ZodDefault<z.ZodEnum<{
210
196
  updated: "updated";
197
+ stars: "stars";
211
198
  forks: "forks";
212
199
  "help-wanted-issues": "help-wanted-issues";
213
200
  "best-match": "best-match";
214
201
  }>>;
215
- limit: z.ZodOptional<z.ZodNumber>;
216
- page: z.ZodOptional<z.ZodNumber>;
202
+ limit: z.ZodDefault<z.ZodNumber>;
203
+ page: z.ZodDefault<z.ZodNumber>;
217
204
  archived: z.ZodOptional<z.ZodBoolean>;
205
+ visibility: z.ZodOptional<z.ZodEnum<{
206
+ public: "public";
207
+ private: "private";
208
+ }>>;
209
+ forks: z.ZodOptional<z.ZodString>;
210
+ license: z.ZodOptional<z.ZodString>;
211
+ goodFirstIssues: z.ZodOptional<z.ZodString>;
218
212
  verbose: z.ZodOptional<z.ZodBoolean>;
219
213
  id: z.ZodOptional<z.ZodString>;
220
214
  mainResearchGoal: z.ZodOptional<z.ZodString>;
@@ -223,6 +217,7 @@ export declare const GitHubReposSearchSingleQuerySchema: z.ZodObject<{
223
217
  }, z.core.$strip>;
224
218
  export declare const GitHubPullRequestSearchQuerySchema: z.ZodObject<{
225
219
  keywordsToSearch: z.ZodOptional<z.ZodArray<z.ZodString>>;
220
+ query: z.ZodOptional<z.ZodString>;
226
221
  prNumber: z.ZodOptional<z.ZodNumber>;
227
222
  owner: z.ZodOptional<z.ZodString>;
228
223
  repo: z.ZodOptional<z.ZodString>;
@@ -254,7 +249,7 @@ export declare const GitHubPullRequestSearchQuerySchema: z.ZodObject<{
254
249
  reactions: z.ZodOptional<z.ZodString>;
255
250
  interactions: z.ZodOptional<z.ZodString>;
256
251
  draft: z.ZodOptional<z.ZodBoolean>;
257
- matchScope: z.ZodOptional<z.ZodArray<z.ZodEnum<{
252
+ match: z.ZodOptional<z.ZodArray<z.ZodEnum<{
258
253
  comments: "comments";
259
254
  title: "title";
260
255
  body: "body";
@@ -262,28 +257,28 @@ export declare const GitHubPullRequestSearchQuerySchema: z.ZodObject<{
262
257
  sort: z.ZodOptional<z.ZodEnum<{
263
258
  created: "created";
264
259
  updated: "updated";
265
- "best-match": "best-match";
266
260
  comments: "comments";
267
261
  reactions: "reactions";
262
+ "best-match": "best-match";
268
263
  }>>;
269
264
  order: z.ZodOptional<z.ZodEnum<{
270
265
  asc: "asc";
271
266
  desc: "desc";
272
267
  }>>;
273
- limit: z.ZodOptional<z.ZodNumber>;
274
- page: z.ZodOptional<z.ZodNumber>;
268
+ limit: z.ZodDefault<z.ZodNumber>;
269
+ page: z.ZodDefault<z.ZodNumber>;
275
270
  archived: z.ZodOptional<z.ZodBoolean>;
276
271
  filePage: z.ZodOptional<z.ZodNumber>;
277
272
  commentPage: z.ZodOptional<z.ZodNumber>;
278
273
  commitPage: z.ZodOptional<z.ZodNumber>;
279
- itemsPerPage: z.ZodOptional<z.ZodNumber>;
274
+ itemsPerPage: z.ZodDefault<z.ZodNumber>;
280
275
  reviewMode: z.ZodOptional<z.ZodLiteral<"full">>;
281
276
  content: z.ZodOptional<z.ZodObject<{
282
277
  metadata: z.ZodOptional<z.ZodBoolean>;
283
278
  body: z.ZodOptional<z.ZodBoolean>;
284
279
  changedFiles: z.ZodOptional<z.ZodBoolean>;
285
280
  patches: z.ZodOptional<z.ZodObject<{
286
- mode: z.ZodOptional<z.ZodEnum<{
281
+ mode: z.ZodDefault<z.ZodEnum<{
287
282
  none: "none";
288
283
  selected: "selected";
289
284
  all: "all";
@@ -298,7 +293,7 @@ export declare const GitHubPullRequestSearchQuerySchema: z.ZodObject<{
298
293
  comments: z.ZodOptional<z.ZodObject<{
299
294
  discussion: z.ZodOptional<z.ZodBoolean>;
300
295
  reviewInline: z.ZodOptional<z.ZodBoolean>;
301
- includeBots: z.ZodOptional<z.ZodBoolean>;
296
+ includeBots: z.ZodDefault<z.ZodBoolean>;
302
297
  file: z.ZodOptional<z.ZodString>;
303
298
  }, z.core.$strip>>;
304
299
  reviews: z.ZodOptional<z.ZodBoolean>;
@@ -310,11 +305,6 @@ export declare const GitHubPullRequestSearchQuerySchema: z.ZodObject<{
310
305
  matchString: z.ZodOptional<z.ZodString>;
311
306
  charOffset: z.ZodOptional<z.ZodNumber>;
312
307
  charLength: z.ZodOptional<z.ZodNumber>;
313
- includeBots: z.ZodOptional<z.ZodBoolean>;
314
- minify: z.ZodOptional<z.ZodEnum<{
315
- none: "none";
316
- standard: "standard";
317
- }>>;
318
308
  id: z.ZodOptional<z.ZodString>;
319
309
  mainResearchGoal: z.ZodOptional<z.ZodString>;
320
310
  researchGoal: z.ZodOptional<z.ZodString>;
@@ -326,22 +316,16 @@ export declare const GitHubViewRepoStructureQuerySchema: z.ZodObject<{
326
316
  branch: z.ZodOptional<z.ZodString>;
327
317
  path: z.ZodOptional<z.ZodString>;
328
318
  depth: z.ZodOptional<z.ZodNumber>;
329
- page: z.ZodOptional<z.ZodNumber>;
330
- itemsPerPage: z.ZodOptional<z.ZodNumber>;
331
- verbose: z.ZodOptional<z.ZodBoolean>;
319
+ page: z.ZodDefault<z.ZodNumber>;
320
+ itemsPerPage: z.ZodDefault<z.ZodNumber>;
332
321
  id: z.ZodOptional<z.ZodString>;
333
322
  mainResearchGoal: z.ZodOptional<z.ZodString>;
334
323
  researchGoal: z.ZodOptional<z.ZodString>;
335
324
  reasoning: z.ZodOptional<z.ZodString>;
336
325
  }, z.core.$strip>;
337
326
  export declare const NpmPackageQuerySchema: z.ZodObject<{
338
- ecosystem: z.ZodOptional<z.ZodLiteral<"npm">>;
339
327
  packageName: z.ZodString;
340
- mode: z.ZodOptional<z.ZodEnum<{
341
- full: "full";
342
- smart: "smart";
343
- lean: "lean";
344
- }>>;
328
+ page: z.ZodDefault<z.ZodNumber>;
345
329
  id: z.ZodOptional<z.ZodString>;
346
330
  mainResearchGoal: z.ZodOptional<z.ZodString>;
347
331
  researchGoal: z.ZodOptional<z.ZodString>;
@@ -376,7 +360,7 @@ export declare const LSPGotoDefinitionQuerySchema: z.ZodObject<{
376
360
  uri: z.ZodString;
377
361
  symbolName: z.ZodString;
378
362
  lineHint: z.ZodNumber;
379
- orderHint: z.ZodOptional<z.ZodNumber>;
363
+ orderHint: z.ZodDefault<z.ZodNumber>;
380
364
  id: z.ZodOptional<z.ZodString>;
381
365
  mainResearchGoal: z.ZodOptional<z.ZodString>;
382
366
  researchGoal: z.ZodOptional<z.ZodString>;
@@ -386,12 +370,12 @@ export declare const LSPFindReferencesQuerySchema: z.ZodObject<{
386
370
  includeDeclaration: z.ZodOptional<z.ZodBoolean>;
387
371
  contextLines: z.ZodOptional<z.ZodNumber>;
388
372
  itemsPerPage: z.ZodOptional<z.ZodNumber>;
389
- page: z.ZodOptional<z.ZodNumber>;
373
+ page: z.ZodDefault<z.ZodNumber>;
390
374
  groupByFile: z.ZodOptional<z.ZodBoolean>;
391
375
  uri: z.ZodString;
392
376
  symbolName: z.ZodString;
393
377
  lineHint: z.ZodNumber;
394
- orderHint: z.ZodOptional<z.ZodNumber>;
378
+ orderHint: z.ZodDefault<z.ZodNumber>;
395
379
  id: z.ZodOptional<z.ZodString>;
396
380
  mainResearchGoal: z.ZodOptional<z.ZodString>;
397
381
  researchGoal: z.ZodOptional<z.ZodString>;
@@ -405,11 +389,43 @@ export declare const LSPCallHierarchyQuerySchema: z.ZodObject<{
405
389
  depth: z.ZodOptional<z.ZodNumber>;
406
390
  contextLines: z.ZodOptional<z.ZodNumber>;
407
391
  itemsPerPage: z.ZodOptional<z.ZodNumber>;
408
- page: z.ZodOptional<z.ZodNumber>;
392
+ page: z.ZodDefault<z.ZodNumber>;
409
393
  uri: z.ZodString;
410
394
  symbolName: z.ZodString;
411
395
  lineHint: z.ZodNumber;
412
- orderHint: z.ZodOptional<z.ZodNumber>;
396
+ orderHint: z.ZodDefault<z.ZodNumber>;
397
+ id: z.ZodOptional<z.ZodString>;
398
+ mainResearchGoal: z.ZodOptional<z.ZodString>;
399
+ researchGoal: z.ZodOptional<z.ZodString>;
400
+ reasoning: z.ZodOptional<z.ZodString>;
401
+ }, z.core.$strip>;
402
+ export declare const LspGetSemanticsQuerySchema: z.ZodObject<{
403
+ uri: z.ZodString;
404
+ type: z.ZodDefault<z.ZodEnum<{
405
+ references: "references";
406
+ definition: "definition";
407
+ callers: "callers";
408
+ callees: "callees";
409
+ callHierarchy: "callHierarchy";
410
+ hover: "hover";
411
+ documentSymbols: "documentSymbols";
412
+ typeDefinition: "typeDefinition";
413
+ implementation: "implementation";
414
+ }>>;
415
+ symbolName: z.ZodOptional<z.ZodString>;
416
+ lineHint: z.ZodOptional<z.ZodNumber>;
417
+ orderHint: z.ZodDefault<z.ZodNumber>;
418
+ depth: z.ZodOptional<z.ZodNumber>;
419
+ includeDeclaration: z.ZodDefault<z.ZodBoolean>;
420
+ groupByFile: z.ZodOptional<z.ZodBoolean>;
421
+ page: z.ZodDefault<z.ZodNumber>;
422
+ itemsPerPage: z.ZodOptional<z.ZodNumber>;
423
+ contextLines: z.ZodOptional<z.ZodNumber>;
424
+ format: z.ZodDefault<z.ZodEnum<{
425
+ structured: "structured";
426
+ compact: "compact";
427
+ }>>;
428
+ workspaceRoot: z.ZodOptional<z.ZodString>;
413
429
  id: z.ZodOptional<z.ZodString>;
414
430
  mainResearchGoal: z.ZodOptional<z.ZodString>;
415
431
  researchGoal: z.ZodOptional<z.ZodString>;