nexus-agents 2.168.0 → 2.170.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +1 -1
  2. package/dist/{child-mcp-config-FAWSJFMQ.js → child-mcp-config-3RYBPZNE.js} +2 -2
  3. package/dist/{chunk-HZNOSJOO.js → chunk-57RYP435.js} +3 -3
  4. package/dist/{chunk-IAGLVGHN.js → chunk-5N5XURKV.js} +2 -2
  5. package/dist/{chunk-3KID7AIF.js → chunk-6TN2Z2AQ.js} +3 -3
  6. package/dist/{chunk-GNCUZDQI.js → chunk-75AUSQL4.js} +7 -7
  7. package/dist/{chunk-P7RBQUAG.js → chunk-BGV3IF3G.js} +8 -8
  8. package/dist/{chunk-F5JDQXHJ.js → chunk-C6IAXFNC.js} +2 -2
  9. package/dist/{chunk-2Z4QECP7.js → chunk-DCXCVEZP.js} +2 -2
  10. package/dist/{chunk-G7NDNFIE.js → chunk-DDQXPARJ.js} +3 -3
  11. package/dist/{chunk-UN7PYUJB.js → chunk-DEE2UTYV.js} +2 -2
  12. package/dist/{chunk-OKAHIWG4.js → chunk-GVTXP6F6.js} +25 -4
  13. package/dist/chunk-GVTXP6F6.js.map +1 -0
  14. package/dist/{chunk-6ERIC5NJ.js → chunk-HTM32H2E.js} +2 -2
  15. package/dist/{chunk-VQE3OSUW.js → chunk-JLG5AUZB.js} +2 -2
  16. package/dist/{chunk-MSBYVBPX.js → chunk-JOYOOEPJ.js} +2 -2
  17. package/dist/{chunk-N56C2MWI.js → chunk-JYDXHV4L.js} +2 -2
  18. package/dist/{chunk-CPS2HN4T.js → chunk-LDZEYJP3.js} +2 -2
  19. package/dist/{chunk-ELWMGKVP.js → chunk-LOKT6EW7.js} +8 -8
  20. package/dist/{chunk-LNPKBBPG.js → chunk-LYWNKEGM.js} +4 -4
  21. package/dist/{chunk-2ANAH2UU.js → chunk-MG4JBADQ.js} +4 -4
  22. package/dist/{chunk-TORS5V2C.js → chunk-NXSY4G4Y.js} +2 -2
  23. package/dist/{chunk-EQLJYWLP.js → chunk-OFVUBY6Z.js} +3 -3
  24. package/dist/{chunk-OLCDGMEO.js → chunk-OIT75IRK.js} +4 -4
  25. package/dist/{chunk-RJHLNI37.js → chunk-OYBAKU7N.js} +2 -2
  26. package/dist/{chunk-I3LGUSZ3.js → chunk-P4PLZZCR.js} +5 -5
  27. package/dist/{chunk-MX3XD2ML.js → chunk-PIODB4SW.js} +2 -2
  28. package/dist/{chunk-52T2MJDS.js → chunk-QMOJJ6A2.js} +732 -598
  29. package/dist/chunk-QMOJJ6A2.js.map +1 -0
  30. package/dist/{chunk-ETFCT2CH.js → chunk-RJDJMOX6.js} +4 -4
  31. package/dist/{chunk-5LPPJIZ4.js → chunk-RZJQZ5P3.js} +2 -2
  32. package/dist/{chunk-7IUVW67T.js → chunk-SCHD7NZD.js} +7 -7
  33. package/dist/{chunk-HJA3Z56H.js → chunk-URRNWRI4.js} +234 -20
  34. package/dist/chunk-URRNWRI4.js.map +1 -0
  35. package/dist/{chunk-UGJRDFMN.js → chunk-UXXNNT5D.js} +2 -2
  36. package/dist/{chunk-TZK7VQAW.js → chunk-WKW5SEP7.js} +5 -5
  37. package/dist/{chunk-AO4X3BMP.js → chunk-YF35FKKD.js} +2 -1
  38. package/dist/chunk-YF35FKKD.js.map +1 -0
  39. package/dist/{chunk-RQNBJ7AS.js → chunk-Z4AWOPXA.js} +2 -2
  40. package/dist/{chunk-CJLMB7MO.js → chunk-ZW7544DX.js} +3 -3
  41. package/dist/{cli-circuit-breaker-JDGZ25MD.js → cli-circuit-breaker-4GJA2IXC.js} +4 -4
  42. package/dist/cli.js +43 -41
  43. package/dist/cli.js.map +1 -1
  44. package/dist/codebase-search-LUF5YJLQ.js +14 -0
  45. package/dist/{composite-router-EZPPVCMD.js → composite-router-UBZO4YR7.js} +2 -2
  46. package/dist/{consensus-vote-YKKJHLOD.js → consensus-vote-USZFJO2K.js} +15 -15
  47. package/dist/{context-retriever-EGMARBAC.js → context-retriever-C5C7RFQE.js} +8 -8
  48. package/dist/{doctor-deep-QTBDR3VV.js → doctor-deep-2N3F7EV6.js} +3 -3
  49. package/dist/{expert-bridge-FZYJ3XAL.js → expert-bridge-B3EFTAID.js} +4 -4
  50. package/dist/{factory-SABHBAHC.js → factory-LKQKU3SD.js} +8 -8
  51. package/dist/{factory-NDMPXPYE.js → factory-SURRFPSV.js} +5 -5
  52. package/dist/{improvement-review-WYFGNEVP.js → improvement-review-75OCZ5K7.js} +5 -5
  53. package/dist/index.d.ts +40 -1
  54. package/dist/index.js +35 -31
  55. package/dist/index.js.map +1 -1
  56. package/dist/{init-opencode-CMGJ3TXZ.js → init-opencode-LDI5E5LW.js} +5 -5
  57. package/dist/{issue-triage-NHRZGMKC.js → issue-triage-WWQEY7PL.js} +6 -6
  58. package/dist/{pr-reviewer-helpers-HJRFRUZX.js → pr-reviewer-helpers-HDP24LGZ.js} +4 -4
  59. package/dist/{registry-command-JCOZA7TM.js → registry-command-PZY7HWKO.js} +2 -2
  60. package/dist/{repo-security-plan-OMY33VHA.js → repo-security-plan-IYKDY5PW.js} +3 -3
  61. package/dist/{research-helpers-synthesize-DFINP3KN.js → research-helpers-synthesize-XSOFXRFK.js} +4 -4
  62. package/dist/{routing-memory-KK4GPB64.js → routing-memory-JTNH2BXS.js} +2 -2
  63. package/dist/{session-memory-QTHGU2XM.js → session-memory-RJZ447UX.js} +3 -3
  64. package/dist/{setup-command-CURZCHSQ.js → setup-command-35MCRS33.js} +13 -13
  65. package/dist/{setup-config-FX6SJXGQ.js → setup-config-JV23ZYPO.js} +3 -3
  66. package/dist/{setup-custom-api-MYN4EVT2.js → setup-custom-api-LMA445OB.js} +3 -3
  67. package/dist/{tool-memory-3W5NXR4P.js → tool-memory-K6EYH3FQ.js} +5 -5
  68. package/dist/{unified-registry-PKPNJ3G7.js → unified-registry-MJA6IBDD.js} +9 -9
  69. package/dist/{weather-report-46ZY3X2Z.js → weather-report-ID4ZNUAF.js} +2 -2
  70. package/package.json +2 -1
  71. package/dist/chunk-52T2MJDS.js.map +0 -1
  72. package/dist/chunk-AO4X3BMP.js.map +0 -1
  73. package/dist/chunk-HJA3Z56H.js.map +0 -1
  74. package/dist/chunk-OKAHIWG4.js.map +0 -1
  75. package/dist/codebase-search-DKLEA4PR.js +0 -12
  76. /package/dist/{child-mcp-config-FAWSJFMQ.js.map → child-mcp-config-3RYBPZNE.js.map} +0 -0
  77. /package/dist/{chunk-HZNOSJOO.js.map → chunk-57RYP435.js.map} +0 -0
  78. /package/dist/{chunk-IAGLVGHN.js.map → chunk-5N5XURKV.js.map} +0 -0
  79. /package/dist/{chunk-3KID7AIF.js.map → chunk-6TN2Z2AQ.js.map} +0 -0
  80. /package/dist/{chunk-GNCUZDQI.js.map → chunk-75AUSQL4.js.map} +0 -0
  81. /package/dist/{chunk-P7RBQUAG.js.map → chunk-BGV3IF3G.js.map} +0 -0
  82. /package/dist/{chunk-F5JDQXHJ.js.map → chunk-C6IAXFNC.js.map} +0 -0
  83. /package/dist/{chunk-2Z4QECP7.js.map → chunk-DCXCVEZP.js.map} +0 -0
  84. /package/dist/{chunk-G7NDNFIE.js.map → chunk-DDQXPARJ.js.map} +0 -0
  85. /package/dist/{chunk-UN7PYUJB.js.map → chunk-DEE2UTYV.js.map} +0 -0
  86. /package/dist/{chunk-6ERIC5NJ.js.map → chunk-HTM32H2E.js.map} +0 -0
  87. /package/dist/{chunk-VQE3OSUW.js.map → chunk-JLG5AUZB.js.map} +0 -0
  88. /package/dist/{chunk-MSBYVBPX.js.map → chunk-JOYOOEPJ.js.map} +0 -0
  89. /package/dist/{chunk-N56C2MWI.js.map → chunk-JYDXHV4L.js.map} +0 -0
  90. /package/dist/{chunk-CPS2HN4T.js.map → chunk-LDZEYJP3.js.map} +0 -0
  91. /package/dist/{chunk-ELWMGKVP.js.map → chunk-LOKT6EW7.js.map} +0 -0
  92. /package/dist/{chunk-LNPKBBPG.js.map → chunk-LYWNKEGM.js.map} +0 -0
  93. /package/dist/{chunk-2ANAH2UU.js.map → chunk-MG4JBADQ.js.map} +0 -0
  94. /package/dist/{chunk-TORS5V2C.js.map → chunk-NXSY4G4Y.js.map} +0 -0
  95. /package/dist/{chunk-EQLJYWLP.js.map → chunk-OFVUBY6Z.js.map} +0 -0
  96. /package/dist/{chunk-OLCDGMEO.js.map → chunk-OIT75IRK.js.map} +0 -0
  97. /package/dist/{chunk-RJHLNI37.js.map → chunk-OYBAKU7N.js.map} +0 -0
  98. /package/dist/{chunk-I3LGUSZ3.js.map → chunk-P4PLZZCR.js.map} +0 -0
  99. /package/dist/{chunk-MX3XD2ML.js.map → chunk-PIODB4SW.js.map} +0 -0
  100. /package/dist/{chunk-ETFCT2CH.js.map → chunk-RJDJMOX6.js.map} +0 -0
  101. /package/dist/{chunk-5LPPJIZ4.js.map → chunk-RZJQZ5P3.js.map} +0 -0
  102. /package/dist/{chunk-7IUVW67T.js.map → chunk-SCHD7NZD.js.map} +0 -0
  103. /package/dist/{chunk-UGJRDFMN.js.map → chunk-UXXNNT5D.js.map} +0 -0
  104. /package/dist/{chunk-TZK7VQAW.js.map → chunk-WKW5SEP7.js.map} +0 -0
  105. /package/dist/{chunk-RQNBJ7AS.js.map → chunk-Z4AWOPXA.js.map} +0 -0
  106. /package/dist/{chunk-CJLMB7MO.js.map → chunk-ZW7544DX.js.map} +0 -0
  107. /package/dist/{cli-circuit-breaker-JDGZ25MD.js.map → cli-circuit-breaker-4GJA2IXC.js.map} +0 -0
  108. /package/dist/{codebase-search-DKLEA4PR.js.map → codebase-search-LUF5YJLQ.js.map} +0 -0
  109. /package/dist/{composite-router-EZPPVCMD.js.map → composite-router-UBZO4YR7.js.map} +0 -0
  110. /package/dist/{consensus-vote-YKKJHLOD.js.map → consensus-vote-USZFJO2K.js.map} +0 -0
  111. /package/dist/{context-retriever-EGMARBAC.js.map → context-retriever-C5C7RFQE.js.map} +0 -0
  112. /package/dist/{doctor-deep-QTBDR3VV.js.map → doctor-deep-2N3F7EV6.js.map} +0 -0
  113. /package/dist/{expert-bridge-FZYJ3XAL.js.map → expert-bridge-B3EFTAID.js.map} +0 -0
  114. /package/dist/{factory-NDMPXPYE.js.map → factory-LKQKU3SD.js.map} +0 -0
  115. /package/dist/{factory-SABHBAHC.js.map → factory-SURRFPSV.js.map} +0 -0
  116. /package/dist/{improvement-review-WYFGNEVP.js.map → improvement-review-75OCZ5K7.js.map} +0 -0
  117. /package/dist/{init-opencode-CMGJ3TXZ.js.map → init-opencode-LDI5E5LW.js.map} +0 -0
  118. /package/dist/{issue-triage-NHRZGMKC.js.map → issue-triage-WWQEY7PL.js.map} +0 -0
  119. /package/dist/{pr-reviewer-helpers-HJRFRUZX.js.map → pr-reviewer-helpers-HDP24LGZ.js.map} +0 -0
  120. /package/dist/{registry-command-JCOZA7TM.js.map → registry-command-PZY7HWKO.js.map} +0 -0
  121. /package/dist/{repo-security-plan-OMY33VHA.js.map → repo-security-plan-IYKDY5PW.js.map} +0 -0
  122. /package/dist/{research-helpers-synthesize-DFINP3KN.js.map → research-helpers-synthesize-XSOFXRFK.js.map} +0 -0
  123. /package/dist/{routing-memory-KK4GPB64.js.map → routing-memory-JTNH2BXS.js.map} +0 -0
  124. /package/dist/{session-memory-QTHGU2XM.js.map → session-memory-RJZ447UX.js.map} +0 -0
  125. /package/dist/{setup-command-CURZCHSQ.js.map → setup-command-35MCRS33.js.map} +0 -0
  126. /package/dist/{setup-config-FX6SJXGQ.js.map → setup-config-JV23ZYPO.js.map} +0 -0
  127. /package/dist/{setup-custom-api-MYN4EVT2.js.map → setup-custom-api-LMA445OB.js.map} +0 -0
  128. /package/dist/{tool-memory-3W5NXR4P.js.map → tool-memory-K6EYH3FQ.js.map} +0 -0
  129. /package/dist/{unified-registry-PKPNJ3G7.js.map → unified-registry-MJA6IBDD.js.map} +0 -0
  130. /package/dist/{weather-report-46ZY3X2Z.js.map → weather-report-ID4ZNUAF.js.map} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  MODEL_IDS,
4
4
  getTimeProvider,
5
5
  resolveModelIdentitySync
6
- } from "./chunk-OKAHIWG4.js";
6
+ } from "./chunk-GVTXP6F6.js";
7
7
 
8
8
  // src/config/model-availability.ts
9
9
  var DEFAULT_TTL_MS = 6e4;
@@ -150,4 +150,4 @@ export {
150
150
  resetAvailabilityCache,
151
151
  filterAvailableModels
152
152
  };
153
- //# sourceMappingURL=chunk-UGJRDFMN.js.map
153
+ //# sourceMappingURL=chunk-UXXNNT5D.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  GitHubProvider,
3
3
  ScmError
4
- } from "./chunk-F5JDQXHJ.js";
4
+ } from "./chunk-C6IAXFNC.js";
5
5
  import {
6
6
  ROLE_DEFAULT_TRUST,
7
7
  ReputationCache,
@@ -11,17 +11,17 @@ import {
11
11
  gateWithReputation,
12
12
  resolveReputationGatingMode,
13
13
  sanitizeInput
14
- } from "./chunk-UN7PYUJB.js";
14
+ } from "./chunk-DEE2UTYV.js";
15
15
  import {
16
16
  emitPolicyEvent
17
- } from "./chunk-RJHLNI37.js";
17
+ } from "./chunk-OYBAKU7N.js";
18
18
  import {
19
19
  CLI_SUBPROCESS_TIMEOUTS,
20
20
  createLogger,
21
21
  err,
22
22
  getTimeProvider,
23
23
  ok
24
- } from "./chunk-OKAHIWG4.js";
24
+ } from "./chunk-GVTXP6F6.js";
25
25
 
26
26
  // src/security/trust-classifier.ts
27
27
  function mapAuthorAssociation(association) {
@@ -1211,4 +1211,4 @@ export {
1211
1211
  IssueTriage,
1212
1212
  createIssueTriage
1213
1213
  };
1214
- //# sourceMappingURL=chunk-TZK7VQAW.js.map
1214
+ //# sourceMappingURL=chunk-WKW5SEP7.js.map
@@ -261,6 +261,7 @@ export {
261
261
  extractSymbolIndex,
262
262
  DEFAULT_INDEX_MAX_DEPTH,
263
263
  MAX_INDEX_MAX_DEPTH,
264
+ findSourceFiles,
264
265
  CodebaseIndex
265
266
  };
266
- //# sourceMappingURL=chunk-AO4X3BMP.js.map
267
+ //# sourceMappingURL=chunk-YF35FKKD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/indexer/codebase-search.ts","../src/indexer/symbol-extractor.ts"],"sourcesContent":["/**\n * Codebase search — keyword search across symbol indices.\n *\n * Builds an in-memory symbol index for a directory of TS/JS files,\n * then supports keyword search, file summaries, and symbol lookup.\n *\n * Inspired by Augment Code's Context Engine. Uses the existing\n * extractSymbols() function for AST parsing.\n *\n * @module indexer/codebase-search\n */\n\nimport { readdir } from 'node:fs/promises';\nimport { resolve, extname, relative } from 'node:path';\nimport {\n extractSymbols,\n type CodeSymbol,\n type SymbolExtractionResult,\n} from './symbol-extractor.js';\n\n/** A symbol with its source file path. */\nexport interface IndexedSymbol extends CodeSymbol {\n /** Relative file path from the indexed root. */\n filePath: string;\n}\n\n/** Search result with relevance scoring. */\nexport interface SearchResult {\n symbol: IndexedSymbol;\n /** Relevance score (higher = better match). */\n score: number;\n /** How the query matched (exact, prefix, substring, word). */\n matchType: 'exact' | 'prefix' | 'substring' | 'word';\n}\n\n/** File summary — compact overview of a source file. */\nexport interface FileSummary {\n filePath: string;\n totalLines: number;\n exportedSymbols: number;\n privateSymbols: number;\n kinds: Record<string, number>;\n}\n\n/** Index statistics. */\nexport interface IndexStats {\n totalFiles: number;\n totalSymbols: number;\n indexedAt: string;\n /** Directories not descended into because `maxDepth` was exhausted (#4243). */\n skippedDirs: number;\n}\n\n/** Default recursion depth for `CodebaseIndex.index()` (#4243 — was hardcoded 4). */\nexport const DEFAULT_INDEX_MAX_DEPTH = 24;\n/** Upper clamp for caller-supplied `maxDepth` to bound worst-case tree-walk cost. */\nexport const MAX_INDEX_MAX_DEPTH = 64;\n\n// Score weights for different match types\nconst SCORE_EXACT = 20;\nconst SCORE_PREFIX = 10;\nconst SCORE_WORD = 5;\nconst SCORE_SUBSTRING = 2;\nconst SCORE_EXPORTED_BONUS = 3;\n\nfunction isSourceFile(name: string): boolean {\n const ext = extname(name).toLowerCase();\n return (\n ['.ts', '.tsx', '.js', '.jsx'].includes(ext) &&\n !name.endsWith('.test.ts') &&\n !name.endsWith('.test.tsx') &&\n !name.endsWith('.d.ts')\n );\n}\n\n/** Result of a recursive source-file walk: the files found plus a truncation signal. */\nexport interface FindSourceFilesResult {\n files: string[];\n /** Count of directories that were NOT descended into because maxDepth hit 0. */\n skippedDirs: number;\n}\n\n/**\n * Recursively collect TS/JS source files under `dir`, bounded by `maxDepth`,\n * skipping `node_modules`/`dist` and test/declaration files. Exported so the\n * `search_usages` tool (#4265) reuses the exact same source-file set the symbol\n * index walks — keeping the two tools' scopes apples-to-apples (DRY).\n */\nexport async function findSourceFiles(\n dir: string,\n maxDepth: number\n): Promise<FindSourceFilesResult> {\n if (maxDepth <= 0) return { files: [], skippedDirs: 1 };\n const files: string[] = [];\n let skippedDirs = 0;\n const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n const fullPath = resolve(dir, entry.name);\n if (entry.isDirectory() && entry.name !== 'node_modules' && entry.name !== 'dist') {\n const sub = await findSourceFiles(fullPath, maxDepth - 1);\n files.push(...sub.files);\n skippedDirs += sub.skippedDirs;\n }\n if (entry.isFile() && isSourceFile(entry.name)) {\n files.push(fullPath);\n }\n }\n return { files, skippedDirs };\n}\n\nfunction scoreMatch(symbolName: string, query: string): SearchResult['score'] | null {\n const nameLower = symbolName.toLowerCase();\n const queryLower = query.toLowerCase();\n\n if (nameLower === queryLower) return SCORE_EXACT;\n if (nameLower.startsWith(queryLower)) return SCORE_PREFIX;\n\n // Word boundary match (camelCase splitting)\n const words = symbolName\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .toLowerCase()\n .split(/[\\s_-]+/);\n if (words.some((w) => w === queryLower)) return SCORE_WORD;\n\n if (nameLower.includes(queryLower)) return SCORE_SUBSTRING;\n\n return null;\n}\n\nfunction getMatchType(score: number): SearchResult['matchType'] {\n if (score >= SCORE_EXACT) return 'exact';\n if (score >= SCORE_PREFIX) return 'prefix';\n if (score >= SCORE_WORD) return 'word';\n return 'substring';\n}\n\n/** In-memory codebase symbol index. */\nexport class CodebaseIndex {\n private readonly symbols: IndexedSymbol[] = [];\n private readonly fileResults = new Map<string, SymbolExtractionResult>();\n private readonly rootDir: string;\n private skippedDirs = 0;\n\n constructor(rootDir: string) {\n this.rootDir = rootDir;\n }\n\n /**\n * Index all TS/JS source files in the directory.\n *\n * `maxDepth` is clamped to `[1, MAX_INDEX_MAX_DEPTH]` so a caller-supplied\n * value can't force an unbounded tree-walk (#4243).\n */\n async index(maxDepth: number = DEFAULT_INDEX_MAX_DEPTH): Promise<IndexStats> {\n const clampedDepth = Math.min(Math.max(maxDepth, 1), MAX_INDEX_MAX_DEPTH);\n const { files, skippedDirs } = await findSourceFiles(this.rootDir, clampedDepth);\n this.skippedDirs = skippedDirs;\n\n for (const file of files) {\n const result = await extractSymbols(file);\n const relPath = relative(this.rootDir, file);\n this.fileResults.set(relPath, result);\n\n for (const symbol of result.symbols) {\n this.symbols.push({ ...symbol, filePath: relPath });\n }\n }\n\n return {\n totalFiles: files.length,\n totalSymbols: this.symbols.length,\n indexedAt: new Date().toISOString(),\n skippedDirs,\n };\n }\n\n /** Search symbols by keyword. Returns top N results sorted by relevance. */\n search(query: string, limit = 20): SearchResult[] {\n const results: SearchResult[] = [];\n\n for (const symbol of this.symbols) {\n const baseScore = scoreMatch(symbol.name, query);\n if (baseScore === null) continue;\n\n const bonus = symbol.exported ? SCORE_EXPORTED_BONUS : 0;\n results.push({\n symbol,\n score: baseScore + bonus,\n matchType: getMatchType(baseScore),\n });\n }\n\n return results.sort((a, b) => b.score - a.score).slice(0, limit);\n }\n\n /** Get a compact summary of a file's symbols. */\n getFileSummary(filePath: string): FileSummary | undefined {\n const result = this.fileResults.get(filePath);\n if (result === undefined) return undefined;\n\n const kinds: Record<string, number> = {};\n let exported = 0;\n let priv = 0;\n\n for (const s of result.symbols) {\n kinds[s.kind] = (kinds[s.kind] ?? 0) + 1;\n if (s.exported) exported++;\n else priv++;\n }\n\n return {\n filePath,\n totalLines: result.totalLines,\n exportedSymbols: exported,\n privateSymbols: priv,\n kinds,\n };\n }\n\n /** List all indexed files with symbol counts. */\n listFiles(): Array<{ path: string; symbols: number; lines: number }> {\n return [...this.fileResults.entries()].map(([path, result]) => ({\n path,\n symbols: result.symbols.length,\n lines: result.totalLines,\n }));\n }\n\n /** Get index statistics. */\n get stats(): { files: number; symbols: number; skippedDirs: number } {\n return {\n files: this.fileResults.size,\n symbols: this.symbols.length,\n skippedDirs: this.skippedDirs,\n };\n }\n}\n","/**\n * AST symbol extraction for token-efficient code retrieval.\n *\n * Uses TypeScript's compiler API to extract function, class, method,\n * interface, and type definitions from source files.\n *\n * Token savings: ~80-99% vs reading full files.\n * No additional dependencies — uses TypeScript (already a project dep).\n *\n * @module indexer/symbol-extractor\n */\n\nimport { readFile } from 'node:fs/promises';\nimport { extname } from 'node:path';\nimport ts from 'typescript';\n\n/** A symbol extracted from source code. */\nexport interface CodeSymbol {\n /** Symbol name */\n name: string;\n /** Symbol kind */\n kind: 'function' | 'class' | 'method' | 'interface' | 'type' | 'variable' | 'enum';\n /** Start line (1-based) */\n startLine: number;\n /** End line (1-based) */\n endLine: number;\n /** Full source text of the symbol */\n text: string;\n /** Whether the symbol is exported */\n exported: boolean;\n}\n\n/** Result of extracting symbols from a file. */\nexport interface SymbolExtractionResult {\n filePath: string;\n symbols: CodeSymbol[];\n totalLines: number;\n totalChars: number;\n symbolChars: number;\n savingsPercent: number;\n}\n\nfunction getKind(node: ts.Node): CodeSymbol['kind'] | null {\n if (ts.isFunctionDeclaration(node)) return 'function';\n if (ts.isClassDeclaration(node)) return 'class';\n if (ts.isInterfaceDeclaration(node)) return 'interface';\n if (ts.isTypeAliasDeclaration(node)) return 'type';\n if (ts.isEnumDeclaration(node)) return 'enum';\n if (ts.isMethodDeclaration(node)) return 'method';\n if (ts.isVariableStatement(node)) return 'variable';\n return null;\n}\n\nfunction getName(node: ts.Node): string {\n if (\n ts.isFunctionDeclaration(node) ||\n ts.isClassDeclaration(node) ||\n ts.isInterfaceDeclaration(node) ||\n ts.isTypeAliasDeclaration(node) ||\n ts.isEnumDeclaration(node) ||\n ts.isMethodDeclaration(node)\n ) {\n const nameNode = (node as ts.NamedDeclaration).name;\n return nameNode ? nameNode.getText() : '<anonymous>';\n }\n if (ts.isVariableStatement(node)) {\n const decls = node.declarationList.declarations;\n const firstDecl = decls[0];\n if (firstDecl !== undefined) {\n return firstDecl.name.getText();\n }\n }\n return '<anonymous>';\n}\n\nfunction isExported(node: ts.Node): boolean {\n const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined;\n if (modifiers) {\n return modifiers.some((m) => m.kind === ts.SyntaxKind.ExportKeyword);\n }\n return false;\n}\n\nfunction visitNode(node: ts.Node, sourceFile: ts.SourceFile, symbols: CodeSymbol[]): void {\n const kind = getKind(node);\n if (kind !== null) {\n const name = getName(node);\n if (name !== '<anonymous>') {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());\n symbols.push({\n name,\n kind,\n startLine: start.line + 1,\n endLine: end.line + 1,\n text: node.getText(sourceFile),\n exported: isExported(node),\n });\n }\n }\n if (ts.isClassDeclaration(node)) {\n visitClassMembers(node, sourceFile, symbols);\n return;\n }\n ts.forEachChild(node, (child) => {\n visitNode(child, sourceFile, symbols);\n });\n}\n\nfunction visitClassMembers(\n node: ts.ClassDeclaration,\n sourceFile: ts.SourceFile,\n symbols: CodeSymbol[]\n): void {\n for (const member of node.members) {\n if (ts.isMethodDeclaration(member) || ts.isPropertyDeclaration(member)) {\n const memberName = member.name.getText();\n if (memberName !== '<anonymous>') {\n const start = sourceFile.getLineAndCharacterOfPosition(member.getStart());\n const end = sourceFile.getLineAndCharacterOfPosition(member.getEnd());\n symbols.push({\n name: memberName,\n kind: 'method',\n startLine: start.line + 1,\n endLine: end.line + 1,\n text: member.getText(sourceFile),\n exported: false,\n });\n }\n }\n }\n}\n\nfunction computeSavings(totalChars: number, symbolChars: number): number {\n return totalChars > 0 ? Math.round(100 * (1 - symbolChars / totalChars) * 10) / 10 : 0;\n}\n\n/**\n * Extract symbols from a TypeScript/JavaScript file.\n */\nexport async function extractSymbols(filePath: string): Promise<SymbolExtractionResult> {\n const ext = extname(filePath).toLowerCase();\n if (!['.ts', '.tsx', '.js', '.jsx'].includes(ext)) {\n return {\n filePath,\n symbols: [],\n totalLines: 0,\n totalChars: 0,\n symbolChars: 0,\n savingsPercent: 0,\n };\n }\n\n const source = await readFile(filePath, 'utf-8');\n const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);\n const symbols: CodeSymbol[] = [];\n\n ts.forEachChild(sourceFile, (node) => {\n visitNode(node, sourceFile, symbols);\n });\n\n const totalChars = source.length;\n const symbolChars = symbols.reduce((sum, s) => sum + s.text.length, 0);\n\n return {\n filePath,\n symbols,\n totalLines: source.split('\\n').length,\n totalChars,\n symbolChars,\n savingsPercent: computeSavings(totalChars, symbolChars),\n };\n}\n\n/**\n * Extract a compact symbol index (names + locations only, no source text).\n * This is the minimal representation for LLM context — ~95%+ token savings.\n */\nexport async function extractSymbolIndex(filePath: string): Promise<string> {\n const result = await extractSymbols(filePath);\n if (result.symbols.length === 0) return '';\n\n const lines = result.symbols.map((s) => {\n const exp = s.exported ? 'export ' : '';\n return `${exp}${s.kind} ${s.name} (L${String(s.startLine)}-${String(s.endLine)})`;\n });\n\n return `// ${filePath} — ${String(result.symbols.length)} symbols\\n${lines.join('\\n')}`;\n}\n"],"mappings":"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","names":["extname","extname"]}
@@ -5,7 +5,7 @@ import {
5
5
  getErrorMessage,
6
6
  getTimeProvider,
7
7
  ok
8
- } from "./chunk-OKAHIWG4.js";
8
+ } from "./chunk-GVTXP6F6.js";
9
9
 
10
10
  // src/cli-adapters/circuit-breaker-types.ts
11
11
  var CircuitErrorCode = {
@@ -375,4 +375,4 @@ export {
375
375
  mapCliErrorToCategory,
376
376
  mapModelErrorToCategory
377
377
  };
378
- //# sourceMappingURL=chunk-RQNBJ7AS.js.map
378
+ //# sourceMappingURL=chunk-Z4AWOPXA.js.map
@@ -7,7 +7,7 @@ import {
7
7
  toolStructuredError,
8
8
  toolSuccessStructured,
9
9
  wrapToolWithTimeout
10
- } from "./chunk-G7NDNFIE.js";
10
+ } from "./chunk-DDQXPARJ.js";
11
11
  import {
12
12
  JsonlStore,
13
13
  SECURITY_KEYWORDS,
@@ -19,7 +19,7 @@ import {
19
19
  getPipelineEventBus,
20
20
  getTimeProvider,
21
21
  isDeclaredNeverDeprecate
22
- } from "./chunk-OKAHIWG4.js";
22
+ } from "./chunk-GVTXP6F6.js";
23
23
  import {
24
24
  getNexusDataDir,
25
25
  nexusDataPath
@@ -2132,4 +2132,4 @@ export {
2132
2132
  runImprovementReview,
2133
2133
  registerImprovementReviewTool
2134
2134
  };
2135
- //# sourceMappingURL=chunk-CJLMB7MO.js.map
2135
+ //# sourceMappingURL=chunk-ZW7544DX.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CliCircuitBreakerIntegration,
3
3
  createCliCircuitBreakerIntegration
4
- } from "./chunk-HZNOSJOO.js";
5
- import "./chunk-RQNBJ7AS.js";
6
- import "./chunk-OKAHIWG4.js";
4
+ } from "./chunk-57RYP435.js";
5
+ import "./chunk-Z4AWOPXA.js";
6
+ import "./chunk-GVTXP6F6.js";
7
7
  import "./chunk-AXTD4TFK.js";
8
8
  import "./chunk-DHVMSIT5.js";
9
9
  import "./chunk-ZPWHCABL.js";
@@ -11,4 +11,4 @@ export {
11
11
  CliCircuitBreakerIntegration,
12
12
  createCliCircuitBreakerIntegration
13
13
  };
14
- //# sourceMappingURL=cli-circuit-breaker-JDGZ25MD.js.map
14
+ //# sourceMappingURL=cli-circuit-breaker-4GJA2IXC.js.map
package/dist/cli.js CHANGED
@@ -13,13 +13,13 @@ import {
13
13
  generateSummary,
14
14
  parseFindings,
15
15
  sumFindings
16
- } from "./chunk-EQLJYWLP.js";
17
- import "./chunk-CPS2HN4T.js";
16
+ } from "./chunk-OFVUBY6Z.js";
17
+ import "./chunk-LDZEYJP3.js";
18
18
  import {
19
19
  setupCommandAsync,
20
20
  verifyCommand
21
- } from "./chunk-I3LGUSZ3.js";
22
- import "./chunk-6ERIC5NJ.js";
21
+ } from "./chunk-P4PLZZCR.js";
22
+ import "./chunk-HTM32H2E.js";
23
23
  import {
24
24
  AuthHandler,
25
25
  DEFAULT_EXPERTS,
@@ -119,6 +119,7 @@ import {
119
119
  registerRunTool,
120
120
  registerRunWorkflowTool,
121
121
  registerSearchCodebaseTool,
122
+ registerSearchUsagesTool,
122
123
  registerSuggestResearchTasksTool,
123
124
  registerSupplyChainTradeoffPanelTool,
124
125
  registerSurveyOssLandscapeTool,
@@ -138,10 +139,10 @@ import {
138
139
  validateCommand,
139
140
  validateWorkflow,
140
141
  wrapInMarkdownFence
141
- } from "./chunk-52T2MJDS.js";
142
- import "./chunk-N56C2MWI.js";
142
+ } from "./chunk-QMOJJ6A2.js";
143
+ import "./chunk-JYDXHV4L.js";
143
144
  import "./chunk-HFOQKCD2.js";
144
- import "./chunk-AO4X3BMP.js";
145
+ import "./chunk-YF35FKKD.js";
145
146
  import {
146
147
  CATEGORY_DISPLAY_NAMES,
147
148
  DEFAULT_PR_REVIEW_CONFIG
@@ -165,15 +166,15 @@ import {
165
166
  loadConfig,
166
167
  runDoctor,
167
168
  validateNexusEnv
168
- } from "./chunk-P7RBQUAG.js";
169
+ } from "./chunk-BGV3IF3G.js";
169
170
  import {
170
171
  buildOpenAICompatAdapters,
171
172
  readOpenAICompatEnv
172
- } from "./chunk-OLCDGMEO.js";
173
- import "./chunk-HZNOSJOO.js";
173
+ } from "./chunk-OIT75IRK.js";
174
+ import "./chunk-57RYP435.js";
174
175
  import {
175
176
  shutdownExpertBridge
176
- } from "./chunk-GNCUZDQI.js";
177
+ } from "./chunk-75AUSQL4.js";
177
178
  import {
178
179
  ConsensusVoteInputSchema,
179
180
  DEFAULT_VOTE_TIMEOUT_MS,
@@ -183,25 +184,25 @@ import {
183
184
  executeVoting,
184
185
  mapOutcomeToDecision,
185
186
  registerConsensusVoteTool
186
- } from "./chunk-ELWMGKVP.js";
187
+ } from "./chunk-LOKT6EW7.js";
187
188
  import {
188
189
  loadUsageEvents,
189
190
  rollupByModel
190
- } from "./chunk-TORS5V2C.js";
191
+ } from "./chunk-NXSY4G4Y.js";
191
192
  import {
192
193
  synthesizeResearch
193
- } from "./chunk-3KID7AIF.js";
194
+ } from "./chunk-6TN2Z2AQ.js";
194
195
  import {
195
196
  classifyTrust,
196
197
  createFullGitHubProvider,
197
198
  evaluatePolicy,
198
199
  parsePRUrl
199
- } from "./chunk-TZK7VQAW.js";
200
- import "./chunk-F5JDQXHJ.js";
200
+ } from "./chunk-WKW5SEP7.js";
201
+ import "./chunk-C6IAXFNC.js";
201
202
  import {
202
203
  ReputationCache,
203
204
  sanitizeInput
204
- } from "./chunk-UN7PYUJB.js";
205
+ } from "./chunk-DEE2UTYV.js";
205
206
  import {
206
207
  ImprovementReviewInputSchema,
207
208
  calculateFitnessScore,
@@ -215,11 +216,11 @@ import {
215
216
  registerImprovementReviewTool,
216
217
  runImprovementReview,
217
218
  scanForSecrets
218
- } from "./chunk-CJLMB7MO.js";
219
+ } from "./chunk-ZW7544DX.js";
219
220
  import {
220
221
  createDefaultPolicyFirewall
221
- } from "./chunk-G7NDNFIE.js";
222
- import "./chunk-RJHLNI37.js";
222
+ } from "./chunk-DDQXPARJ.js";
223
+ import "./chunk-OYBAKU7N.js";
223
224
  import {
224
225
  CodebaseIndexSchema,
225
226
  PaperStatusSchema,
@@ -245,31 +246,31 @@ import {
245
246
  loadSourcesRegistry,
246
247
  rankDiscoveredItems,
247
248
  saveSourcesRegistry
248
- } from "./chunk-HJA3Z56H.js";
249
+ } from "./chunk-URRNWRI4.js";
249
250
  import {
250
251
  resolveToken
251
- } from "./chunk-IAGLVGHN.js";
252
+ } from "./chunk-5N5XURKV.js";
252
253
  import {
253
254
  loadPapersRegistry,
254
255
  loadTechniquesRegistry,
255
256
  savePapersRegistry
256
- } from "./chunk-5LPPJIZ4.js";
257
+ } from "./chunk-RZJQZ5P3.js";
257
258
  import "./chunk-NUBSJGQZ.js";
258
259
  import {
259
260
  MemoryError,
260
261
  shutdownToolMemory
261
- } from "./chunk-2ANAH2UU.js";
262
+ } from "./chunk-MG4JBADQ.js";
262
263
  import {
263
264
  capitalize,
264
265
  capitalizeKebab
265
266
  } from "./chunk-6T3EPABN.js";
266
- import "./chunk-MX3XD2ML.js";
267
+ import "./chunk-PIODB4SW.js";
267
268
  import "./chunk-ZM4O442V.js";
268
269
  import "./chunk-PINS44XA.js";
269
270
  import "./chunk-KSQSWEFH.js";
270
271
  import {
271
272
  createUnifiedRegistry
272
- } from "./chunk-ETFCT2CH.js";
273
+ } from "./chunk-RJDJMOX6.js";
273
274
  import {
274
275
  NEXUS_SUBPROCESS_DEPTH_ENV,
275
276
  createAllAdapters,
@@ -277,15 +278,15 @@ import {
277
278
  isRecord,
278
279
  probeAllClis,
279
280
  readSubprocessDepth
280
- } from "./chunk-7IUVW67T.js";
281
- import "./chunk-MSBYVBPX.js";
281
+ } from "./chunk-SCHD7NZD.js";
282
+ import "./chunk-JOYOOEPJ.js";
282
283
  import {
283
284
  DEFAULTS
284
- } from "./chunk-VQE3OSUW.js";
285
- import "./chunk-RQNBJ7AS.js";
286
- import "./chunk-UGJRDFMN.js";
285
+ } from "./chunk-JLG5AUZB.js";
286
+ import "./chunk-Z4AWOPXA.js";
287
+ import "./chunk-UXXNNT5D.js";
287
288
  import "./chunk-QZUG667L.js";
288
- import "./chunk-2Z4QECP7.js";
289
+ import "./chunk-DCXCVEZP.js";
289
290
  import {
290
291
  API_TIMEOUTS,
291
292
  AgentCapability,
@@ -359,7 +360,7 @@ import {
359
360
  validateTimeout,
360
361
  writeEmptyLine,
361
362
  writeLine
362
- } from "./chunk-OKAHIWG4.js";
363
+ } from "./chunk-GVTXP6F6.js";
363
364
  import "./chunk-AXTD4TFK.js";
364
365
  import {
365
366
  applyPortableMode,
@@ -4037,7 +4038,7 @@ ${file.patch}
4037
4038
  violations: policyResult.violations
4038
4039
  });
4039
4040
  }
4040
- const { formatReviewComment: formatReviewComment2 } = await import("./pr-reviewer-helpers-HJRFRUZX.js");
4041
+ const { formatReviewComment: formatReviewComment2 } = await import("./pr-reviewer-helpers-HDP24LGZ.js");
4041
4042
  const body = formatReviewComment2(result);
4042
4043
  const postResult = await provider.createReview(pr.prNumber, body, result.decision);
4043
4044
  if (!postResult.ok) {
@@ -17385,7 +17386,7 @@ function startImprovementReviewScheduler(options) {
17385
17386
  let running = false;
17386
17387
  const runOnce = async () => {
17387
17388
  try {
17388
- const { runImprovementReview: runImprovementReview2, ImprovementReviewInputSchema: ImprovementReviewInputSchema2 } = await import("./improvement-review-WYFGNEVP.js");
17389
+ const { runImprovementReview: runImprovementReview2, ImprovementReviewInputSchema: ImprovementReviewInputSchema2 } = await import("./improvement-review-75OCZ5K7.js");
17389
17390
  const input = ImprovementReviewInputSchema2.parse({ fileIssues });
17390
17391
  const result = await runImprovementReview2(input, { logger: logger19 });
17391
17392
  logger19.info("Scheduled improvement_review complete", {
@@ -17962,6 +17963,7 @@ var HANDLER_TABLE = {
17962
17963
  verify_audit_chain: standardHandler("verify_audit_chain", registerVerifyAuditChainTool),
17963
17964
  extract_symbols: standardHandler("extract_symbols", registerExtractSymbolsTool),
17964
17965
  search_codebase: standardHandler("search_codebase", registerSearchCodebaseTool),
17966
+ search_usages: standardHandler("search_usages", registerSearchUsagesTool),
17965
17967
  run_dev_pipeline: standardHandler("run_dev_pipeline", registerDevPipelineTool),
17966
17968
  run_pipeline: standardHandler("run_pipeline", registerPipelineTool),
17967
17969
  pr_review: (ctx) => {
@@ -19438,7 +19440,7 @@ function adaptConfigToLibrary(config) {
19438
19440
  }
19439
19441
  function createBeliefPromoter() {
19440
19442
  return async (event) => {
19441
- const { getToolMemory } = await import("./tool-memory-3W5NXR4P.js");
19443
+ const { getToolMemory } = await import("./tool-memory-K6EYH3FQ.js");
19442
19444
  const tm = getToolMemory();
19443
19445
  await tm.recordBelief(
19444
19446
  `skill:${event.name}`,
@@ -20614,7 +20616,7 @@ async function handleResearchCommand(args) {
20614
20616
  }
20615
20617
  }
20616
20618
  async function handleRegistryCommand(args) {
20617
- const { registryCommand, isValidRegistrySubcommand, formatRegistryUsage } = await import("./registry-command-JCOZA7TM.js");
20619
+ const { registryCommand, isValidRegistrySubcommand, formatRegistryUsage } = await import("./registry-command-PZY7HWKO.js");
20618
20620
  const subcommand = args.subcommand;
20619
20621
  if (!isValidRegistrySubcommand(subcommand)) {
20620
20622
  process.stdout.write(`${formatRegistryUsage()}
@@ -20662,7 +20664,7 @@ async function handleVerifyCommand(args) {
20662
20664
  async function handleDoctorCommand(args) {
20663
20665
  const exitCode = await doctorCommand({ fix: args.options.fix });
20664
20666
  if (args.options.deep) {
20665
- const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-QTBDR3VV.js");
20667
+ const { runDeepDiagnostics: runDeepDiagnostics2, formatDeepDiagnostics: formatDeepDiagnostics2 } = await import("./doctor-deep-2N3F7EV6.js");
20666
20668
  const diag = runDeepDiagnostics2();
20667
20669
  process.stdout.write(formatDeepDiagnostics2(diag) + "\n");
20668
20670
  }
@@ -20712,7 +20714,7 @@ async function runInitPortableFlow(args) {
20712
20714
  return cliExit(result.success ? EXIT_CODES.SUCCESS : EXIT_CODES.SERVER_START_FAILED);
20713
20715
  }
20714
20716
  async function runInitOpencodeFlow(args) {
20715
- const { runInitOpencode } = await import("./init-opencode-CMGJ3TXZ.js");
20717
+ const { runInitOpencode } = await import("./init-opencode-LDI5E5LW.js");
20716
20718
  const opencodePath = args.options.opencode;
20717
20719
  if (opencodePath === void 0 || opencodePath === "") {
20718
20720
  process.stderr.write("Error: --opencode requires a path argument.\n");
@@ -20738,7 +20740,7 @@ async function runInitOpencodeFlow(args) {
20738
20740
  return cliExit(EXIT_CODES.SUCCESS);
20739
20741
  }
20740
20742
  async function renderOpencodeValidate(opencodePath) {
20741
- const { runOpencodeValidate } = await import("./init-opencode-CMGJ3TXZ.js");
20743
+ const { runOpencodeValidate } = await import("./init-opencode-LDI5E5LW.js");
20742
20744
  const result = await runOpencodeValidate(opencodePath);
20743
20745
  if (!result.ok) {
20744
20746
  process.stderr.write(`init --opencode --validate: ${result.reason ?? "failed"}
@@ -20777,7 +20779,7 @@ async function handleSetupCommandAsync(args) {
20777
20779
  return cliExitFromStatus(exitCode);
20778
20780
  }
20779
20781
  async function runCustomApiSetup(args) {
20780
- const { configureCustomApi } = await import("./setup-custom-api-MYN4EVT2.js");
20782
+ const { configureCustomApi } = await import("./setup-custom-api-LMA445OB.js");
20781
20783
  const baseUrl = args.options.customApi;
20782
20784
  if (baseUrl === void 0) return EXIT_CODES.SERVER_START_FAILED;
20783
20785
  const input = {