sigmap 8.32.1 → 8.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -30,19 +30,38 @@ Always run `sigmap ask` (or `sigmap --query`) before searching for files relevan
30
30
 
31
31
  ## todos
32
32
  ```
33
- gen-context.js:22350 # TODO: s');
34
- ```
35
-
36
- ## changes (last 5 commits — 10 days ago)
37
- ```
38
- src/graph/builder.js ~extractFileDeps
39
- src/retrieval/ranker.js ~_buildSigIndexFromCache ~_enrichSigIndexFromStrategy
40
- gen-context.js +whose +extractClassMembers +stripComments +maskCode
41
- src/extractors/javascript.js +whose +extractClassMembers ~whose ~extractClassMembers
42
- src/extractors/scan.js +stripComments +maskCode +readBalanced
43
- src/extractors/typescript.js +extractClassMembers ~extractClassMembers ~extract ~extractBlock
44
- src/verify/arity.js +exist +cleanSig +parseParams +buildArityIndex
45
- src/verify/hallucination-guard.js +whose ~buildSymbolSet ~verify
33
+ gen-context.js:22788 # TODO: s');
34
+ ```
35
+
36
+ ## changes (last 5 commits — 6 hours ago)
37
+ ```
38
+ src/eval/analyzer.js ~isDockerfile ~getExtractorName
39
+ src/extractors/dispatch.js ~extractFile
40
+ gen-context.js +_isJvmLayout +_applyJvmDepth +that +body
41
+ src/config/loader.js +_isJvmLayout +_applyJvmDepth ~_legacyDetectAutoSrcDirs ~loadConfig
42
+ src/extractors/cpp.js +that ~extract ~extractMembers ~extractBlock
43
+ src/extractors/csharp.js +that +body ~extract ~extractMembers
44
+ src/extractors/css.js ~extract
45
+ src/extractors/dart.js +that +body ~extract ~extractMembers
46
+ src/extractors/dockerfile.js ~extract
47
+ src/extractors/gdscript.js ~extract ~extractInnerMembers ~normalizeParams
48
+ src/extractors/go.js ~extract ~extractBlock
49
+ src/extractors/html.js ~extract
50
+ src/extractors/kotlin.js +that +body ~extract ~extractMembers
51
+ src/extractors/markdown.js ~extract
52
+ src/extractors/php.js +that +body ~extract ~extractMembers
53
+ src/extractors/properties.js ~extract
54
+ src/extractors/python.js ~extract ~extractClassMethods
55
+ src/extractors/r.js ~extract
56
+ src/extractors/ruby.js ~extract ~normalizeParams
57
+ src/extractors/rust.js ~extract ~extractBlock
58
+ src/extractors/scala.js +that +body ~extract ~extractMembers
59
+ src/extractors/shell.js ~extract
60
+ src/extractors/svelte.js ~extract ~normalizeParams
61
+ src/extractors/swift.js +that +body ~extract ~extractMembers
62
+ src/extractors/toml.js ~extract
63
+ src/extractors/typescript_react.js ~extract
64
+ src/extractors/yaml.js ~extract
46
65
  ```
47
66
 
48
67
  ## .
@@ -50,30 +69,30 @@ src/verify/hallucination-guard.js +whose ~buildSymbolSet ~verify
50
69
  ### gen-context.js
51
70
  ```
52
71
  function __require(key) :9-20
53
- function __git(args, opts = {}) :21630-21633
54
- function __tryGit(args, opts = {}) :21634-21637
55
- function requireSourceOrBundled(key) :21642-21649
56
- function isDockerfile(filename) :21695-21697
57
- function loadIgnorePatterns(cwd) :21702-21715
58
- function matchesIgnore(relPath, patterns) :21717-21738
59
- function walkDir(dir, exclude, maxDepth, depth = 0) :21743-21766
60
- function buildFileList(cwd, config) :21768-21779
61
- function collectTestEntries(cwd, config, existing) :21790-21816 # Source files a project declares as its own entrypoints in pa
62
- function declaredEntrypoints(cwd, config, existing) :21818-21838
63
- function getExtractor(name) :21844-21854
64
- function detectAndExtract(filePath, content, maxSigsPerFile) :21856-21874
65
- function extractFileDeps(filePath, content, config) → string[] :21876-21886 # Extract absolute dependency paths from a single file
66
- function extractSignatureName(sig) :21888-21892
67
- function annotateCoverage(sigs, testIndex, enabled) :21894-21904
68
- function nextRecentMtime() :21925-21927
69
- function estimateTokens(str) → number :21929-21931 # Estimate token count from character count (chars/4, ±5%)
70
- function isTestFile(filePath) :21933-21935
71
- function isConfigFile(filePath) :21937-21940
72
- function isGeneratedFile(filePath) :21942-21944
73
- function isMockFile(filePath) :21946-21951
74
- function computeEffectiveMaxTokens(fileEntries, config) → number :21968-22006 # Compute the effective token budget based on repo size and co
75
- function applyTokenBudget(fileEntries, maxTokens) :22008-22076
76
- function getRecentlyCommittedFiles(cwd, count) :22107-22115
72
+ function __git(args, opts = {}) :22057-22060
73
+ function __tryGit(args, opts = {}) :22061-22064
74
+ function requireSourceOrBundled(key) :22069-22076
75
+ function isDockerfile(filename) :22122-22124
76
+ function loadIgnorePatterns(cwd) :22129-22142
77
+ function matchesIgnore(relPath, patterns) :22144-22165
78
+ function walkDir(dir, exclude, maxDepth, depth = 0) :22170-22193
79
+ function buildFileList(cwd, config) :22195-22206
80
+ function collectTestEntries(cwd, config, existing) :22217-22243 # Source files a project declares as its own entrypoints in pa
81
+ function declaredEntrypoints(cwd, config, existing) :22245-22265
82
+ function getExtractor(name) :22271-22281
83
+ function detectAndExtract(filePath, content, maxSigsPerFile) :22283-22301
84
+ function extractFileDeps(filePath, content, config) → string[] :22303-22313 # Extract absolute dependency paths from a single file
85
+ function extractSignatureName(sig) :22315-22319
86
+ function annotateCoverage(sigs, testIndex, enabled) :22321-22331
87
+ function nextRecentMtime() :22352-22354
88
+ function estimateTokens(str) → number :22356-22358 # Estimate token count from character count (chars/4, ±5%)
89
+ function isTestFile(filePath) :22360-22362
90
+ function isConfigFile(filePath) :22364-22367
91
+ function isGeneratedFile(filePath) :22369-22371
92
+ function isMockFile(filePath) :22373-22378
93
+ function computeEffectiveMaxTokens(fileEntries, config) → number :22395-22433 # Compute the effective token budget based on repo size and co
94
+ function applyTokenBudget(fileEntries, maxTokens) :22435-22503
95
+ function getRecentlyCommittedFiles(cwd, count) :22545-22553
77
96
  … +45 more signatures
78
97
  ```
79
98
 
@@ -89,65 +108,6 @@ function main() :156-191
89
108
 
90
109
  ## packages
91
110
 
92
- ### packages/adapters/claude.js
93
- ```
94
- module.exports = { name, format, outputPath, write } :124-124
95
- function format(context, opts = {}) → string :58-69 # Format context suited for CLAUDE
96
- function _confidenceMeta(opts) :71-78
97
- function outputPath(cwd) → string :85-87 # Return the output file path for this adapter
98
- function write(context, cwd, opts = {}) :96-122 # Write signatures into CLAUDE
99
- ```
100
-
101
- ### packages/adapters/codex.js
102
- ```
103
- module.exports = { name, format, outputPath, write } :74-74
104
- function format(context, opts = {}) → string :27-30 # Format context for AGENTS
105
- function outputPath(cwd) → string :37-39 # Return the output file path for this adapter
106
- function write(context, cwd, opts = {}) :49-72 # Write signatures into AGENTS
107
- ```
108
-
109
- ### packages/adapters/copilot.js
110
- ```
111
- module.exports = { name, format, outputPath, write } :93-93
112
- function format(context, opts = {}) → string :25-40 # Format context for GitHub Copilot instructions
113
- function _confidenceMeta(opts) :42-49
114
- function outputPath(cwd) → string :56-58 # Return the output file path for this adapter
115
- function write(context, cwd, opts = {}) :68-91 # Write signatures into copilot-instructions
116
- ```
117
-
118
- ### packages/adapters/cursor.js
119
- ```
120
- module.exports = { name, format, outputPath } :56-56
121
- function format(context, opts = {}) → string :23-36 # Format context for Cursor rules file
122
- function _confidenceMeta(opts) :38-45
123
- function outputPath(cwd) → string :52-54 # Return the output file path for this adapter
124
- ```
125
-
126
- ### packages/adapters/gemini.js
127
- ```
128
- module.exports = { name, format, outputPath, write } :104-104
129
- function format(context, opts = {}) → string :31-51 # Format context as a Gemini system instruction
130
- function outputPath(cwd) → string :58-60 # Return the output file path for this adapter
131
- function write(context, cwd, opts = {}) :70-93 # Write signatures into gemini-context
132
- function _confidenceMeta(opts) :95-102
133
- ```
134
-
135
- ### packages/adapters/openai.js
136
- ```
137
- module.exports = { name, format, outputPath } :70-70
138
- function format(context, opts = {}) → string :29-49 # Format context as an OpenAI system prompt
139
- function outputPath(cwd) → string :57-59 # Return the output file path for this adapter
140
- function _confidenceMeta(opts) :61-68
141
- ```
142
-
143
- ### packages/adapters/windsurf.js
144
- ```
145
- module.exports = { name, format, outputPath } :56-56
146
- function format(context, opts = {}) → string :23-36 # Format context for Windsurf rules file
147
- function _confidenceMeta(opts) :38-45
148
- function outputPath(cwd) → string :52-54 # Return the output file path for this adapter
149
- ```
150
-
151
111
  ### packages/core/README.md
152
112
  ```
153
113
  h1 sigmap-core
@@ -170,20 +130,23 @@ code-fence ---
170
130
 
171
131
  ## src
172
132
 
173
- ### src/graph/builder.js
133
+ ### src/eval/analyzer.js
174
134
  ```
175
- module.exports = { build, buildFromCwd, extractFileDeps, normalizePath, loadAliasMap, resolveAlias } :503-503
176
- function normalizePath(p) :18-20
177
- function probeJs(base, fileSet) → string|null :41-54 # Probe an absolute base path for a JS/TS module file in fileS
178
- function resolveJsPath(dir, importStr, fileSet) → string|null :63-65 # Resolve a JS/TS relative import string to an absolute path i
179
- function stripJsonc(src) :71-85 # Strip comments and trailing commas so a tsconfig/jsconfig (J
180
- function loadAliasMap(cwd) → { baseUrl: string|null, e :97-118 # Load the JS/TS path-alias map from tsconfig
181
- function resolveAlias(spec, aliasMap, fileSet) → string|null :127-151 # Resolve a non-relative JS/TS import specifier through the al
182
- function escapeRegex(s) :158-160 # Resolve an R `source(
183
- function resolveRPath(dir, importStr, fileSet, cwd) :162-177
184
- function extractFileDeps(filePath, content, fileSet, cwd, ctx) → string[] :191-287 # Extract absolute dependency paths from a single file
185
- function build(files, cwd, ctx) → { forward: Map<string,str :396-435 # Build a forward and reverse dependency graph for all given f
186
- function buildFromCwd(cwd, opts) → { forward: Map<string,str :447-501 # Build a dependency graph scoped to a single cwd by walking a
135
+ module.exports = { analyzeFiles, formatAnalysisTable, formatAnalysisJSON } :200-200
136
+ function getExtractorName(filePath) :22-24
137
+ function tokenCount(sigs) :27-29 # Rough token estimate: chars / 4
138
+ function hasCoverage(filePath, cwd) :35-50 # Check whether a test file exists for this source file by loo
139
+ function loadExtractor(name, cwd) :56-65 # Load an extractor module from src/extractors/ relative to cw
140
+ function analyzeFiles(files, cwd, opts) → object[] :78-135 # Analyze a list of absolute file paths
141
+ function formatAnalysisTable(stats, showSlow) → string :144-178 # Format stats as a markdown table
142
+ function formatAnalysisJSON(stats) → object :186-198 # Format stats as a plain-object suitable for JSON
143
+ ```
144
+
145
+ ### src/extractors/dispatch.js
146
+ ```
147
+ module.exports = { extractFile, langFor, EXT_MAP } :126-126
148
+ function langFor(filePathOrName) :100-105 # Resolve a language key from a file path/name
149
+ function extractFile(filePathOrName, src) → string[] :113-124 # Extract signatures from a file's content using the right ext
187
150
  ```
188
151
 
189
152
  ### src/mcp/server.js
@@ -195,29 +158,6 @@ function dispatch(msg, cwd) :41-109
195
158
  function start(cwd) :114-140
196
159
  ```
197
160
 
198
- ### src/retrieval/ranker.js
199
- ```
200
- module.exports = { rank, buildSigIndex, scoreFile, _queryWants, detectIntents, formatRankTable, formatRankJSON, DEFAULT_WEIGHTS, GRAPH_BOOST_AMOUNTS, CENTRALITY_BLEND_WEIGHT, detectIntent } :760-760
201
- function _queryWants(queryTokens) :85-92 # Which penalised categories the query is explicitly asking fo
202
- function _computePenalty(filePath, wants) :94-108
203
- function _computeHubs(graph) :111-122
204
- function _graphKeys(p) :129-133
205
- function _graphGet(map, absPath) :134-140
206
- function _registerKeys(map, absPath, value) :141-143
207
- function _isHub(filePath) :145-149
208
- function scoreFile(filePath, sigs, queryTokens, weights, wants) → { score: number, signals: :160-221 # Score a single file against a query, returning detailed sign
209
- function rank(query, sigIndex, opts) → { file: string, score: nu :241-331 # Rank all files in a signature index against a query
210
- function _parseContextFile(contextPath) → Map<string, string[]> :478-510 # Parse a single context file into a Map<filePath, string[]>
211
- function _mergeSigIndex(target, source) :513-521 # Merge source index into target; prefer non-empty sig lists
212
- function _buildSigIndexFromCache(cwd) → Map<string, string[]> :528-548 # Load signatures from
213
- function _enrichSigIndexFromStrategy(cwd, index) → Map<string, string[]> :556-587 # Hot-cold and per-module strategies store most signatures out
214
- function buildSigIndex(cwd, opts) → Map<string, string[]> :604-637 # Build a signature index from the generated context file
215
- function formatRankTable(results, query) → string :646-682 # Format ranked results as a markdown table string
216
- function formatRankJSON(results, query) → object :691-706 # Format ranked results as a structured JSON-serialisable obje
217
- function detectIntents(query) → string[] :739-753 # Every intent whose pattern matches, strongest first
218
- function detectIntent(query) :756-758 # Primary intent
219
- ```
220
-
221
161
  ### src/cache/freshen.js
222
162
  ```
223
163
  module.exports = { freshen } :123-123
@@ -235,12 +175,14 @@ module.exports = { DEFAULTS } :175-175
235
175
 
236
176
  ### src/config/loader.js
237
177
  ```
238
- module.exports = { loadConfig, loadBaseConfig } :313-313
178
+ module.exports = { loadConfig, loadBaseConfig } :363-363
239
179
  function loadBaseConfig(extendsVal, cwd) :9-64
240
180
  function detectAutoSrcDirs(cwd, excludeList) → string[] :99-114 # Detect source directories for the given project root
241
181
  function _legacyDetectAutoSrcDirs(cwd, excludeList) → string[] :123-218 # Legacy source directory detection (fallback)
242
- function loadConfig(cwd) → object :236-307 # Load and merge configuration for a given working directory
243
- function deepClone(obj) :309-311
182
+ function _isJvmLayout(cwd) → boolean :250-259 # Directory depth needed to reach source under a JVM package l
183
+ function _applyJvmDepth(cfg, cwd, userSetDepth) → object :272-277 # Raise `maxDepth` to the JVM depth when the layout needs it (
184
+ function loadConfig(cwd) → object :285-357 # Load and merge configuration for a given working directory
185
+ function deepClone(obj) :359-361
244
186
  ```
245
187
 
246
188
  ### src/config/tune.js
@@ -413,62 +355,82 @@ function formatJSON(pack) :289-291 # Pretty-printed canonical JSON rendering o
413
355
  function formatMarkdown(pack) :294-315 # Markdown handoff rendering of a pack
414
356
  ```
415
357
 
358
+ ### src/extractors/cpp.js
359
+ ```
360
+ module.exports = { extract } :77-77
361
+ function extract(src) → string[] :16-77 # Extract signatures from C/C++ source code
362
+ function extractBlock(src, startIndex) :44-53
363
+ function extractMembers(block) :55-65
364
+ function normalizeParams(params) :67-70
365
+ function normalizeType(type) :72-75
366
+ ```
367
+
416
368
  ### src/extractors/csharp.js
417
369
  ```
418
- module.exports = { extract } :71-71
419
- function extract(src) → string[] :12-71 # Extract signatures from C# source code
420
- function extractBlock(src, startIndex) :35-44
421
- function extractMembers(block) :46-59
422
- function normalizeParams(params) :61-64
423
- function normalizeType(type) :66-69
370
+ module.exports = { extract } :79-79
371
+ function extract(src) → string[] :19-79 # Extract signatures from C# source code
372
+ function extractBlock(src, startIndex) :43-52
373
+ function extractMembers(block) :54-67
374
+ function normalizeParams(params) :69-72
375
+ function normalizeType(type) :74-77
376
+ ```
377
+
378
+ ### src/extractors/css.js
379
+ ```
380
+ module.exports = { extract } :75-75
381
+ function extract(src) → string[] :14-23 # Extract signatures from CSS/SCSS/SASS/Less source code
424
382
  ```
425
383
 
426
384
  ### src/extractors/dart.js
427
385
  ```
428
- module.exports = { extract } :84-84
429
- function extract(src) → string[] :12-84 # Extract signatures from Dart source code
430
- function extractBlock(src, startIndex) :54-63
431
- function extractMembers(block) :65-77
432
- function normalizeParams(params) :79-81
386
+ module.exports = { extract } :92-92
387
+ function extract(src) → string[] :19-92 # Extract signatures from Dart source code
388
+ function extractBlock(src, startIndex) :62-71
389
+ function extractMembers(block) :73-85
390
+ function normalizeParams(params) :87-89
433
391
  ```
434
392
 
435
- ### src/extractors/deps.js
393
+ ### src/extractors/dockerfile.js
436
394
  ```
437
- module.exports :110-110
438
- function extractPythonDeps :26-41
439
- function extractTSDeps :48-59
440
- function extractRDeps :76-82
441
- function buildReverseDepMap :97-108
395
+ module.exports = { extract } :55-55
396
+ function extract(src) → string[] :14-53 # Extract signatures from Dockerfiles
442
397
  ```
443
398
 
444
- ### src/extractors/dispatch.js
399
+ ### src/extractors/gdscript.js
445
400
  ```
446
- module.exports = { extractFile, langFor } :112-112
447
- function langFor(filePathOrName) :86-91 # Resolve a language key from a file path/name
448
- function extractFile(filePathOrName, src) → string[] :99-110 # Extract signatures from a file's content using the right ext
401
+ module.exports = { extract } :141-141
402
+ function extract(src) → string[] :19-52 # Extract signatures from Godot GDScript source code
403
+ function extractInnerMembers(stripped, startIndex) :108-124
404
+ function normalizeParams(params) :126-139
449
405
  ```
450
406
 
451
407
  ### src/extractors/go.js
452
408
  ```
453
- module.exports = { extract } :109-109
454
- function extract(src) → string[] :12-109 # Extract signatures from Go source code
455
- function extractBlock(src, startIndex) :55-64
456
- function extractInterfaceMethods(block) :66-78
457
- function normalizeParams(params) :80-83
458
- function buildDocHints(src) :89-98
459
- function firstDocSentence(block) :101-107
409
+ module.exports = { extract } :114-114
410
+ function extract(src) → string[] :17-114 # Extract signatures from Go source code
411
+ function extractBlock(src, startIndex) :60-69
412
+ function extractInterfaceMethods(block) :71-83
413
+ function normalizeParams(params) :85-88
414
+ function buildDocHints(src) :94-103
415
+ function firstDocSentence(block) :106-112
416
+ ```
417
+
418
+ ### src/extractors/html.js
419
+ ```
420
+ module.exports = { extract } :45-45
421
+ function extract(src) → string[] :15-35 # Extract signatures from HTML files
460
422
  ```
461
423
 
462
424
  ### src/extractors/java.js
463
425
  ```
464
- module.exports = { extract } :106-106
465
- function extract(src) → string[] :12-106 # Extract signatures from Java source code
466
- function extractBlock(src, startIndex) :38-48
467
- function extractMembers(block) :50-64
468
- function normalizeParams(params) :66-69
469
- function normalizeType(type) :71-74
470
- function buildDocHints(src) :82-95
471
- function firstDocSentence(body) :98-104
426
+ module.exports = { extract } :122-122
427
+ function extract(src) → string[] :25-122 # Extract signatures from Java source code
428
+ function extractBlock(src, startIndex) :54-64
429
+ function extractMembers(block) :66-80
430
+ function normalizeParams(params) :82-85
431
+ function normalizeType(type) :87-90
432
+ function buildDocHints(src) :98-111
433
+ function firstDocSentence(body) :114-120
472
434
  ```
473
435
 
474
436
  ### src/extractors/javascript.js
@@ -487,58 +449,92 @@ function normalizeParams(params) :213-216
487
449
 
488
450
  ### src/extractors/kotlin.js
489
451
  ```
490
- module.exports = { extract } :90-90
491
- function extract(src) → string[] :12-90 # Extract signatures from Kotlin source code
492
- function extractBlock(src, startIndex) :54-63
493
- function extractMembers(block) :65-90
494
- function normalizeParams(params) :81-88
452
+ module.exports = { extract } :98-98
453
+ function extract(src) → string[] :19-98 # Extract signatures from Kotlin source code
454
+ function extractBlock(src, startIndex) :62-71
455
+ function extractMembers(block) :73-98
456
+ function normalizeParams(params) :89-96
495
457
  ```
496
458
 
497
- ### src/extractors/line-anchor.js
459
+ ### src/extractors/markdown.js
498
460
  ```
499
- module.exports :52-52
500
- function lineAt :22-29
501
- function anchor :37-39
502
- function withAnchor :48-50
461
+ module.exports = { extract } :35-35
462
+ function extract(src) → string[] :15-35 # Lightweight markdown technical indexer
503
463
  ```
504
464
 
505
465
  ### src/extractors/php.js
506
466
  ```
507
- module.exports = { extract } :96-96
508
- function extract(src) → string[] :12-96 # Extract signatures from PHP source code
509
- function extractBlock(src, startIndex) :58-67
510
- function extractMembers(block) :69-96
511
- function normalizeParams(params) :86-89
512
- function normalizeType(type) :91-94
467
+ module.exports = { extract } :104-104
468
+ function extract(src) → string[] :19-104 # Extract signatures from PHP source code
469
+ function extractBlock(src, startIndex) :66-75
470
+ function extractMembers(block) :77-104
471
+ function normalizeParams(params) :94-97
472
+ function normalizeType(type) :99-102
473
+ ```
474
+
475
+ ### src/extractors/properties.js
476
+ ```
477
+ module.exports = { extract } :42-42
478
+ function extract(src) → string[] :15-40 # Extract signatures from
479
+ ```
480
+
481
+ ### src/extractors/python.js
482
+ ```
483
+ module.exports = { extract, tryNativeExtract } :267-267
484
+ function pyBlockEnd(srcLines, startLine) → number :19-29 # 1-based line of the last source line belonging to a top-leve
485
+ function tryNativeExtract(filePath) → string[]|null :37-49 # Try to extract signatures using the native Python AST extrac
486
+ function extract(src, filePath) → string[] :60-145 # Extract signatures from Python source code
487
+ function extractClassMethods(stripped, startIndex) :147-166
488
+ function tryExtractDataclassFields(stripped, classIndex) :168-182
489
+ function tryExtractBaseModelFields(stripped, bodyStart) :184-199
490
+ function extractClassConstants(stripped, startIndex) :201-215
491
+ function extractReturnType(sigLine) :217-223
492
+ function normalizeParams(params) :225-243
493
+ function extractDocHint(src, fnName, fnSigLine) :245-265
513
494
  ```
514
495
 
515
- ### src/extractors/prdiff.js
496
+ ### src/extractors/r.js
516
497
  ```
517
- module.exports = { diffSignatures, extractName } :70-70
518
- function diffSignatures(baseSigs, currentSigs) → {added:string[], removed: :9-36 # Compare signature arrays and produce compact diff markers
519
- function extractName(sig) :47-70 # Extract the declared symbol name from a signature line
498
+ module.exports = { extract } :275-275
499
+ function extract(src) → string[] :26-110 # Extract signatures from R source code
500
+ function collectRoxygenHints(src) :127-153 # Collect roxygen2 docstring hints from the original (uncommen
501
+ function pickRoxygenLine(block, tag) :157-171
502
+ function applyHint(hints, name) :173-176
503
+ function extractListMethods(body, cap) :182-195 # Extract method-like entries from the body of an R6/S7 list(
504
+ function inAnyRange(pos, ranges) :197-202
505
+ function readFirstStringArg(body) :205-208 # Extract the first quoted string from a comma-separated argum
506
+ function readBalancedParens(src, openIdx, cap = 16384) :216-239 # Read a parenthesis-balanced substring starting at the positi
507
+ function normalizeParams(raw) :246-273 # Compress whitespace inside a parameter list, collapse multi-
508
+ ```
509
+
510
+ ### src/extractors/ruby.js
511
+ ```
512
+ module.exports = { extract } :60-60
513
+ function extract(src) → string[] :14-44 # Extract signatures from Ruby source code
514
+ function normalizeParams(params) :46-49
515
+ function extractReturnHint(stripped, index) :51-58
520
516
  ```
521
517
 
522
518
  ### src/extractors/rust.js
523
519
  ```
524
- module.exports = { extract } :138-138
525
- function extract(src) → string[] :12-116 # Extract signatures from Rust source code
526
- function extractBlock(src, startIndex) :76-85
527
- function extractMethods(block) :87-138
528
- function normalizeParams(params) :102-105
529
- function extractReturnType(afterParen) :107-138
530
- function buildDocHints(src) :119-127
531
- function firstDocSentence(block) :130-136
520
+ module.exports = { extract } :143-143
521
+ function extract(src) → string[] :17-121 # Extract signatures from Rust source code
522
+ function extractBlock(src, startIndex) :81-90
523
+ function extractMethods(block) :92-143
524
+ function normalizeParams(params) :107-110
525
+ function extractReturnType(afterParen) :112-143
526
+ function buildDocHints(src) :124-132
527
+ function firstDocSentence(block) :135-141
532
528
  ```
533
529
 
534
530
  ### src/extractors/scala.js
535
531
  ```
536
- module.exports = { extract } :88-88
537
- function extract(src) → string[] :12-88 # Extract signatures from Scala source code
538
- function extractBlock(src, startIndex) :47-56
539
- function extractMembers(block) :58-88
540
- function normalizeParams(params) :74-81
541
- function normalizeType(type) :83-86
532
+ module.exports = { extract } :96-96
533
+ function extract(src) → string[] :19-96 # Extract signatures from Scala source code
534
+ function extractBlock(src, startIndex) :55-64
535
+ function extractMembers(block) :66-96
536
+ function normalizeParams(params) :82-89
537
+ function normalizeType(type) :91-94
542
538
  ```
543
539
 
544
540
  ### src/extractors/scan.js
@@ -549,14 +545,40 @@ function maskCode(src) → string :47-63 # Blank comments AND string/template
549
545
  function readBalanced(masked, openIdx, open = '(', close = ')', cap = 4000) → number :76-89 # Index of the delimiter that closes the one open at `openIdx`
550
546
  ```
551
547
 
548
+ ### src/extractors/shell.js
549
+ ```
550
+ module.exports = { extract } :49-49
551
+ function extract(src) → string[] :14-47 # Extract signatures from shell scripts (bash, zsh, fish)
552
+ ```
553
+
554
+ ### src/extractors/svelte.js
555
+ ```
556
+ module.exports = { extract } :64-64
557
+ function extract(src) → string[] :14-64 # Extract signatures from Svelte components
558
+ function normalizeParams(params) :54-57
559
+ function normalizeType(type) :59-62
560
+ ```
561
+
552
562
  ### src/extractors/swift.js
553
563
  ```
554
- module.exports = { extract } :97-97
555
- function extract(src) → string[] :12-97 # Extract signatures from Swift source code
556
- function extractBlock(src, startIndex) :54-63
557
- function extractMembers(block) :65-97
558
- function normalizeParams(params) :80-87
559
- function extractArrowType(str) :89-97
564
+ module.exports = { extract } :105-105
565
+ function extract(src) → string[] :19-105 # Extract signatures from Swift source code
566
+ function extractBlock(src, startIndex) :62-71
567
+ function extractMembers(block) :73-105
568
+ function normalizeParams(params) :88-95
569
+ function extractArrowType(str) :97-105
570
+ ```
571
+
572
+ ### src/extractors/toml.js
573
+ ```
574
+ module.exports = { extract } :47-47
575
+ function extract(src) → string[] :15-42 # Extract signatures from TOML configuration files
576
+ ```
577
+
578
+ ### src/extractors/typescript_react.js
579
+ ```
580
+ module.exports = { extract } :65-65
581
+ function extract(src) → string[] :15-25 # Extract React component signatures from
560
582
  ```
561
583
 
562
584
  ### src/extractors/typescript.js
@@ -571,27 +593,10 @@ function buildDocHints(src) :299-315
571
593
  function firstDocSentence(body) :318-324
572
594
  ```
573
595
 
574
- ### src/format/dashboard.js
575
- ```
576
- module.exports = { generateDashboardHtml, renderHistoryCharts, computeExtractorCoverage, percentile, overBudgetStreak } :525-525
577
- function toNumber(v) :13-16
578
- function percentile(values, p) :18-30
579
- function overBudgetStreak(entries) :32-40
580
- function loadConfig(cwd) :42-50
581
- function shouldExclude(rel, excludeSet) :52-59
582
- function detectLanguage(filePath) :61-86
583
- function walkFiles(dir, maxDepth, depth, out, excludeSet) :88-106
584
- function computeExtractorCoverage(cwd) :108-140
585
- function readBenchmarkTrend(cwd) :142-204
586
- function lineChartSvg(values, title, ySuffix) :206-255
587
- function barChartSvg(perLanguage) :257-292
588
- function sparkline(values) :294-305
589
- function escapeAttr(s) :307-311
590
- function readTokenReduction(cwd) :316-350
591
- function tokenReductionPanelHtml(tr) :352-405
592
- function buildDashboardData(cwd, health) :407-444
593
- function generateDashboardHtml(cwd, health) :446-496
594
- function renderHistoryCharts(cwd, health) :498-523
596
+ ### src/extractors/yaml.js
597
+ ```
598
+ module.exports = { extract } :65-65
599
+ function extract(src) → string[] :14-63 # Extract signatures from YAML configuration files
595
600
  ```
596
601
 
597
602
  ### src/format/gain-terminal.js
@@ -629,22 +634,6 @@ function _tokens(sigs) :62-64 # Estimated tokens of joined signature lines (sa
629
634
  function measureTerse(sigsList) → { beforeTokens: number, a :72-84 # Measure the real reduction terse encoding buys over a set of
630
635
  ```
631
636
 
632
- ### src/format/usage-guidance.js
633
- ```
634
- module.exports = { usageBlock } :28-28
635
- function usageBlock() :12-26 # Canonical "how to use SigMap" guidance block (v6
636
- ```
637
-
638
- ### src/format/verify-report.js
639
- ```
640
- module.exports = { renderReportHtml, renderReportMarkdown, escapeHtml } :164-164
641
- function escapeHtml(value) :23-29
642
- function toneFor(issue) :31-35
643
- function labelFor(issue) :37-39
644
- function renderReportHtml(result, opts = {}) → string :48-115 # Render the verify result to a full HTML document
645
- function renderReportMarkdown(result) :144-162 # Compact Markdown rendering of the same result (CI / PR comme
646
- ```
647
-
648
637
  ### src/graph/blast-radius.js
649
638
  ```
650
639
  module.exports = { methodBlastRadius, tierFor, DIRECT_WEIGHT, TRANSITIVE_WEIGHT } :132-132
@@ -654,9 +643,26 @@ function _bfs(seedIds, reverse, maxDepth) :38-60
654
643
  function methodBlastRadius(changedFiles, cwd, opts = {}) → { * available: boolean, * :78-130 # Score the method-level blast radius of a changed-file list
655
644
  ```
656
645
 
646
+ ### src/graph/builder.js
647
+ ```
648
+ module.exports = { build, buildFromCwd, extractFileDeps, normalizePath, loadAliasMap, resolveAlias, _configuredSrcDirs, DEFAULT_SRC_DIRS, DEFAULT_WALK_DEPTH } :539-539
649
+ function normalizePath(p) :18-20
650
+ function probeJs(base, fileSet) → string|null :41-54 # Probe an absolute base path for a JS/TS module file in fileS
651
+ function resolveJsPath(dir, importStr, fileSet) → string|null :63-65 # Resolve a JS/TS relative import string to an absolute path i
652
+ function stripJsonc(src) :71-85 # Strip comments and trailing commas so a tsconfig/jsconfig (J
653
+ function loadAliasMap(cwd) → { baseUrl: string|null, e :97-118 # Load the JS/TS path-alias map from tsconfig
654
+ function resolveAlias(spec, aliasMap, fileSet) → string|null :127-151 # Resolve a non-relative JS/TS import specifier through the al
655
+ function escapeRegex(s) :158-160 # Resolve an R `source(
656
+ function resolveRPath(dir, importStr, fileSet, cwd) :162-177
657
+ function extractFileDeps(filePath, content, fileSet, cwd, ctx) → string[] :191-287 # Extract absolute dependency paths from a single file
658
+ function build(files, cwd, ctx) → { forward: Map<string,str :396-435 # Build a forward and reverse dependency graph for all given f
659
+ function _configuredSrcDirs(cwd) :455-462 # Source directories declared in the project's own config, or
660
+ function buildFromCwd(cwd, opts) → { forward: Map<string,str :479-537 # Build a dependency graph scoped to a single cwd by walking a
661
+ ```
662
+
657
663
  ### src/graph/call-graph.js
658
664
  ```
659
- module.exports = { buildCallGraph, buildCallFileGraph, methodImpact, methodCallees, formatCallGraph, formatCallGraphJSON, extractDefs, maskJs, maskPy, maskRust } :567-571
665
+ module.exports = { buildCallGraph, buildTypeMap, receiverCallsInRange, javaTypeDecl, DEFAULT_WALK_DEPTH, buildCallFileGraph, methodImpact, methodCallees, formatCallGraph, formatCallGraphJSON, extractDefs, maskJs, maskPy, maskRust } :770-774
660
666
  function normalizePath(p) :42-42
661
667
  function toRel(cwd, f) :43-43
662
668
  function symId(cwd, absFile, name) :44-44
@@ -668,20 +674,20 @@ function lineAt(src, idx) :123-128
668
674
  function jsDefs(masked) :133-199
669
675
  function pyDefs(masked) :201-221
670
676
  function goDefs(masked) :225-246
671
- function javaDefs(masked) :251-274
672
- function rustDefs(masked) :279-297
673
- function maskFor(filePath, src) :301-306
674
- function extractDefs(filePath, src) :308-316
675
- function callsInRange(masked, start, end) :319-331
676
- function _walk(dir, excludeSet, out, depth) :335-348
677
- function buildCallGraph(cwd, opts = {}) → { * forward: Map<string,s :364-447 # Build the method-level call-graph for a project
678
- function buildCallFileGraph(cwd, opts = {}) → { forward: Map<string,str :460-486 # Collapse the symbol-level call-graph to FILE-level bidirecti
679
- function _resolveSymbol(symbol, defs) :489-494
680
- function _bfs(seedIds, graph, maxDepth) :497-510
681
- function methodImpact(symbol, cwd, opts = {}) → { symbol:string, resolved :520-526 # Method-level blast radius: everything that (transitively) ca
682
- function methodCallees(symbol, cwd, opts = {}) → { symbol:string, resolved :532-538 # What `symbol` (transitively) calls
683
- function formatCallGraph(result, kind) :541-553
684
- … +1 more signatures
677
+ function javaTypeDecl(masked) :262-344
678
+ function javaDefs(masked) :289-325
679
+ function rustDefs(masked) :330-348
680
+ function maskFor(filePath, src) :352-357
681
+ function extractDefs(filePath, src) :359-367
682
+ function callsInRange(masked, start, end) :370-382
683
+ function receiverCallsInRange(masked, start, end) :387-399
684
+ function buildTypeMap(masked) :406-416
685
+ function _configuredSrcDirs(cwd) :437-443 # Source directories declared in the project's own config, or
686
+ function _walk(dir, excludeSet, out, depth, maxDepth) :445-458
687
+ function buildCallGraph(cwd, opts = {}) → { * forward: Map<string,s :474-567 # Build the method-level call-graph for a project
688
+ function buildCallFileGraph(cwd, opts = {}) → { forward: Map<string,str :663-689 # Collapse the symbol-level call-graph to FILE-level bidirecti
689
+ function _resolveSymbol(symbol, defs) :692-697
690
+ … +5 more signatures
685
691
  ```
686
692
 
687
693
  ### src/graph/centrality.js
@@ -809,14 +815,15 @@ function squeezeOutput(args, cwd) :982-1015 # squeeze_output({ content }) →
809
815
 
810
816
  ### src/mcp/install.js
811
817
  ```
812
- module.exports = { CLIENTS, listClients, installClient, resolveTarget } :142-142
813
- function resolveTarget(spec, cwd, home, useGlobal) :39-45 # Resolve the absolute config path for a client, honoring `glo
814
- function listClients(opts = {}) :48-62 # List supported clients with their resolved target paths
815
- function serverArgs(scriptPath) :64-66
816
- function _installJson(filePath, scriptPath) :69-81 # Install into a JSON `mcpServers` config (create file/dir if
817
- function _installZed(filePath, scriptPath) :84-96 # Install into Zed's `context_servers` config (create file/dir
818
- function _installYaml(filePath, scriptPath) :99-117 # Install into Codex CLI YAML (append block; create file if ab
819
- function installClient(client, opts = {}) → client, label, path, stat :124-140 # Install the sigmap MCP server for a single client
818
+ module.exports = { CLIENTS, listClients, installClient, resolveTarget } :169-169
819
+ function resolveTarget(spec, cwd, home, useGlobal) :40-46 # Resolve the absolute config path for a client, honoring `glo
820
+ function listClients(opts = {}) :49-63 # List supported clients with their resolved target paths
821
+ function serverArgs(scriptPath) :65-67
822
+ function _installJson(filePath, scriptPath) :70-82 # Install into a JSON `mcpServers` config (create file/dir if
823
+ function _installVscode(filePath, scriptPath) :90-107 # Install into VS Code's `
824
+ function _installZed(filePath, scriptPath) :110-122 # Install into Zed's `context_servers` config (create file/dir
825
+ function _installYaml(filePath, scriptPath) :125-143 # Install into Codex CLI YAML (append block; create file if ab
826
+ function installClient(client, opts = {}) → client, label, path, stat :150-167 # Install the sigmap MCP server for a single client
820
827
  ```
821
828
 
822
829
  ### src/mcp/tools.js
@@ -873,6 +880,30 @@ function extractModuleDoc(src, filePath) → string :55-117 # Extract a module
873
880
  function moduleDocSig(src, filePath) :115-117 # Render as an index-only pseudo-signature, or '' when there i
874
881
  ```
875
882
 
883
+ ### src/retrieval/ranker.js
884
+ ```
885
+ module.exports = { rank, buildSigIndex, scoreFile, _queryWants, _isDataHolder, detectIntents, formatRankTable, formatRankJSON, DEFAULT_WEIGHTS, GRAPH_BOOST_AMOUNTS, CENTRALITY_BLEND_WEIGHT, detectIntent } :791-791
886
+ function _queryWants(queryTokens) :97-105 # Which penalised categories the query is explicitly asking fo
887
+ function _isDataHolder(sigs) :112-118 # True when a file's members are overwhelmingly trivial access
888
+ function _computePenalty(filePath, wants, sigs) :120-139
889
+ function _computeHubs(graph) :142-153
890
+ function _graphKeys(p) :160-164
891
+ function _graphGet(map, absPath) :165-171
892
+ function _registerKeys(map, absPath, value) :172-174
893
+ function _isHub(filePath) :176-180
894
+ function scoreFile(filePath, sigs, queryTokens, weights, wants) → { score: number, signals: :191-252 # Score a single file against a query, returning detailed sign
895
+ function rank(query, sigIndex, opts) → { file: string, score: nu :272-362 # Rank all files in a signature index against a query
896
+ function _parseContextFile(contextPath) → Map<string, string[]> :509-541 # Parse a single context file into a Map<filePath, string[]>
897
+ function _mergeSigIndex(target, source) :544-552 # Merge source index into target; prefer non-empty sig lists
898
+ function _buildSigIndexFromCache(cwd) → Map<string, string[]> :559-579 # Load signatures from
899
+ function _enrichSigIndexFromStrategy(cwd, index) → Map<string, string[]> :587-618 # Hot-cold and per-module strategies store most signatures out
900
+ function buildSigIndex(cwd, opts) → Map<string, string[]> :635-668 # Build a signature index from the generated context file
901
+ function formatRankTable(results, query) → string :677-713 # Format ranked results as a markdown table string
902
+ function formatRankJSON(results, query) → object :722-737 # Format ranked results as a structured JSON-serialisable obje
903
+ function detectIntents(query) → string[] :770-784 # Every intent whose pattern matches, strongest first
904
+ function detectIntent(query) :787-789 # Primary intent
905
+ ```
906
+
876
907
  ### src/retrieval/sig-index-store.js
877
908
  ```
878
909
  module.exports = { writeFullIndex, readFullIndex, indexPath, SCHEMA, INDEX_FILE } :95-95
@@ -940,22 +971,22 @@ function clearNotes(cwd) :88-91 # Delete the notes log
940
971
 
941
972
  ### src/skills/skills.js
942
973
  ```
943
- module.exports = { SKILLS, SKILL_CLIENTS, renderSkill, renderAgentsBlock, injectSkillsBlock, installSkills, listSkillClients, clientPresent, START, END } :182-182
944
- function _footer(version) :66-69
945
- function renderSkill(client, skillName, version) :72-85 # Render one skill's client-specific file content
946
- function renderAgentsBlock(version) :88-95 # Render the combined AGENTS
947
- function injectSkillsBlock(existing, block) :103-118 # Inject (or replace) the skills block in AGENTS
948
- function _writeIfChanged(filePath, content) :120-130
949
- function installSkills(client, opts = {}) → { client, label, results: :137-159 # Install both skills for one client
950
- function clientPresent(client, cwd) :162-165 # True when the client's parent artifact exists (plain-install
951
- function listSkillClients(opts = {}) :168-180 # List clients with target paths, presence, and installed stat
974
+ module.exports = { SKILLS, SKILL_CLIENTS, renderSkill, renderAgentsBlock, injectSkillsBlock, installSkills, listSkillClients, clientPresent, START, END } :206-206
975
+ function _footer(version) :86-89
976
+ function renderSkill(client, skillName, version) :92-109 # Render one skill's client-specific file content
977
+ function renderAgentsBlock(version) :112-119 # Render the combined AGENTS
978
+ function injectSkillsBlock(existing, block) :127-142 # Inject (or replace) the skills block in AGENTS
979
+ function _writeIfChanged(filePath, content) :144-154
980
+ function installSkills(client, opts = {}) → { client, label, results: :161-183 # Install both skills for one client
981
+ function clientPresent(client, cwd) :186-189 # True when the client's parent artifact exists (plain-install
982
+ function listSkillClients(opts = {}) :192-204 # List clients with target paths, presence, and installed stat
952
983
  ```
953
984
 
954
985
  ### src/squeeze/cilog.js
955
986
  ```
956
- module.exports = { squeezeCiLog, stripTimestamp, ERROR_RE } :71-71
957
- function stripTimestamp(line) :17-19 # Remove a leading timestamp prefix from a single line
958
- function squeezeCiLog(input, opts = {}) → { squeezed: string, kept: :27-69
987
+ module.exports :71-71
988
+ function stripTimestamp :17-19
989
+ function squeezeCiLog :27-69
959
990
  ```
960
991
 
961
992
  ### src/squeeze/classify.js
@@ -1057,16 +1088,6 @@ function extractCallArgCounts(code) → { name: string, args: num :132-166 # E
1057
1088
  function checkArity(name, argCount, arityIndex) → null | { min, max, variad :172-178 # Check one call against the arity index
1058
1089
  ```
1059
1090
 
1060
- ### src/verify/closest-match.js
1061
- ```
1062
- module.exports = { levenshtein, closestMatch, buildSymbolCandidates, suggestionConfidence, formatSuggestion } :139-145
1063
- function levenshtein(a, b, max = Infinity) :20-47 # Levenshtein edit distance with an early-exit ceiling
1064
- function suggestionConfidence(distance, targetLen) :50-55 # Bucket a normalized edit distance into a confidence label (p
1065
- function closestMatch(target, candidates, opts = {}) → { name, file, line, dista :67-98 # Find the nearest candidate name to `target`
1066
- function buildSymbolCandidates(sigIndex) :104-126 # Build `[{ name, file, line }]` symbol candidates from a SigM
1067
- function formatSuggestion(match, asCall) :129-137 # Format a suggestion object into a human one-liner for report
1068
- ```
1069
-
1070
1091
  ### src/verify/hallucination-guard.js
1071
1092
  ```
1072
1093
  module.exports = { verify, buildSymbolSet, loadDeps, loadScripts, isTestPath } :378-378
@@ -1119,3 +1140,6 @@ function _health(cwd) :119-127
1119
1140
  function buildWiki(cwd, opts = {}) → { data: object, markdown: :137-162 # Build the wiki
1120
1141
  function renderWikiMarkdown(data, sigmapVersion) → string :171-248 # Render the narrative markdown
1121
1142
  ```
1143
+
1144
+
1145
+ > **Not everything is here.** 54 file(s) omitted, 1 collapsed to anchors to stay under the 16000-token budget (tests and configs go first). The retrieval index still has them all — run `sigmap ask "<question>"` to pull in anything missing.