sigmap 8.10.0 → 8.12.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
@@ -33,23 +33,22 @@ Always run `sigmap ask` (or `sigmap --query`) before searching for files relevan
33
33
  src/extractors/python_ast.py ← ast
34
34
  ```
35
35
 
36
- ## changes (last 5 commits — 8 minutes ago)
37
- ```
38
- src/format/usage-guidance.js +usageBlock
39
- src/mcp/handlers.js +readMemory ~getLines
40
- src/mcp/server.js ~dispatch
41
- src/session/notes.js +notesPath +_currentBranch +addNote +readNotes
42
- packages/adapters/claude.js ~format
43
- packages/adapters/codex.js ~write ~format
44
- packages/adapters/copilot.js ~format
45
- packages/adapters/cursor.js ~format
46
- packages/adapters/gemini.js ~format
47
- packages/adapters/openai.js ~format
48
- packages/adapters/windsurf.js ~format
49
- src/format/verify-report.js +escapeHtml +toneFor +labelFor +renderReportHtml
50
- src/verify/closest-match.js +levenshtein +suggestionConfidence +closestMatch +buildSymbolCandidates
51
- src/verify/hallucination-guard.js +is +isTestPath +loadScripts ~is
52
- src/verify/parsers.js +extractNpmScripts ~extractImports
36
+ ## changes (last 5 commits — 0 seconds ago)
37
+ ```
38
+ src/format/terse.js +splitAnchor +encodeTerseSig +encodeTerseSigs +_tokens
39
+ src/wiki/generate.js +_rel +_pct +_identity +_modules
40
+ src/conventions/extract.js ~classifyNaming ~scoreConvention
41
+ src/conventions/fix.js ~buildFixList
42
+ src/extractors/javascript.js ~extract ~extractClassMembers ~extractBlock ~buildReturnHints
43
+ src/extractors/typescript.js ~extract ~extractInterfaceMembers ~extractClassMembers ~extractBlock
44
+ src/graph/builder.js +probeJs +resolveJsPath +stripJsonc +loadAliasMap
45
+ src/graph/impact.js ~formatImpact
46
+ src/health/scorer.js +gradeFor +composeHealth +score ~score
47
+ src/judge/judge-engine.js +extracts +claimGrounding ~groundedness ~judge
48
+ src/plan/planner.js +createPlan ~createPlan
49
+ src/review/pr-evidence.js ~formatPrEvidenceMarkdown
50
+ src/review/review-pr.js ~reviewPr
51
+ src/util/truncate.js +members +capWithNotice +block +capMembersWithNotice
53
52
  ```
54
53
 
55
54
  ## packages
@@ -97,22 +96,6 @@ function write(context, cwd, opts = {}) :70-93
97
96
  function _confidenceMeta(opts) :95-102
98
97
  ```
99
98
 
100
- ### packages/adapters/openai.js
101
- ```
102
- module.exports = { name, format, outputPath } :70-70
103
- function format(context, opts = {}) → string :29-49
104
- function outputPath(cwd) → string :57-59
105
- function _confidenceMeta(opts) :61-68
106
- ```
107
-
108
- ### packages/adapters/windsurf.js
109
- ```
110
- module.exports = { name, format, outputPath } :56-56
111
- function format(context, opts = {}) → string :23-36
112
- function _confidenceMeta(opts) :38-45
113
- function outputPath(cwd) → string :52-54
114
- ```
115
-
116
99
  ### packages/adapters/index.js
117
100
  ```
118
101
  module.exports = { getAdapter, listAdapters, adapt, outputsToAdapters } :81-81
@@ -130,6 +113,14 @@ function format(context, opts) :8-20
130
113
  function write(context, cwd, opts) :22-25
131
114
  ```
132
115
 
116
+ ### packages/adapters/openai.js
117
+ ```
118
+ module.exports = { name, format, outputPath } :70-70
119
+ function format(context, opts = {}) → string :29-49
120
+ function outputPath(cwd) → string :57-59
121
+ function _confidenceMeta(opts) :61-68
122
+ ```
123
+
133
124
  ### packages/adapters/willow.js
134
125
  ```
135
126
  module.exports = { name, format, outputPath, write } :200-200
@@ -141,12 +132,32 @@ async function postAtomWithRetry(atom, mcpUrl, timeoutMs, maxRetries) → Promis
141
132
  async function write(context, cwd, opts = {}) → Promise<void> :155-198
142
133
  ```
143
134
 
135
+ ### packages/adapters/windsurf.js
136
+ ```
137
+ module.exports = { name, format, outputPath } :56-56
138
+ function format(context, opts = {}) → string :23-36
139
+ function _confidenceMeta(opts) :38-45
140
+ function outputPath(cwd) → string :52-54
141
+ ```
142
+
144
143
  ### packages/cli/index.js
145
144
  ```
146
145
  module.exports = { CLI_ENTRY, run } :58-63
147
146
  function run(argv, cwd) → void :36-56
148
147
  ```
149
148
 
149
+ ### packages/core/index.js
150
+ ```
151
+ module.exports = { extract, rank, buildSigIndex, scan, score, adapt } :254-267
152
+ function _resolveExtractor(language) :64-71
153
+ function extract(src, language) → string[] :91-120
154
+ function rank(query, sigIndex, opts) → { file: string, score: nu :143-150
155
+ function buildSigIndex(cwd) → Map<string, string[]> :162-169
156
+ function scan(sigs, filePath) → { safe: string[], redacte :185-192
157
+ function score(cwd) → { * score: number, * grad :215-222
158
+ function adapt(context, adapterName, opts = {}) → string :241-249
159
+ ```
160
+
150
161
  ### packages/core/README.md
151
162
  ```
152
163
  h1 sigmap-core
@@ -167,66 +178,44 @@ code-fence js
167
178
  code-fence ---
168
179
  ```
169
180
 
170
- ### packages/core/index.js
171
- ```
172
- module.exports = { extract, rank, buildSigIndex, scan, score, adapt } :254-267
173
- function _resolveExtractor(language) :64-71
174
- function extract(src, language) → string[] :91-120
175
- function rank(query, sigIndex, opts) → { file: string, score: nu :143-150
176
- function buildSigIndex(cwd) → Map<string, string[]> :162-169
177
- function scan(sigs, filePath) → { safe: string[], redacte :185-192
178
- function score(cwd) → { * score: number, * grad :215-222
179
- function adapt(context, adapterName, opts = {}) → string :241-249
180
- ```
181
-
182
181
  ## src
183
182
 
184
- ### src/format/usage-guidance.js
183
+ ### src/config/defaults.js
185
184
  ```
186
- module.exports = { usageBlock } :28-28
187
- function usageBlock() :12-26
185
+ module.exports = { DEFAULTS } :161-161
188
186
  ```
189
187
 
190
- ### src/mcp/handlers.js
188
+ ### src/format/terse.js
191
189
  ```
192
- module.exports = { readContext, searchSignatures, getMap, createCheckpoint, getRouting, explainFile, listModules, queryContext, getImpact, getLines, readMemory } :551-551
193
- function _readContextFiles(cwd) :10-17
194
- function readContext(args, cwd) :32-62
195
- function searchSignatures(args, cwd) :70-95
196
- function getMap(args, cwd) :103-126
197
- function createCheckpoint(args, cwd) :138-215
198
- function getRouting(args, cwd) :224-261
199
- function explainFile(args, cwd) :269-356
200
- function listModules(args, cwd) :364-403
201
- function queryContext(args, cwd) :411-429
202
- function getImpact(args, cwd) :437-449
203
- function getLines(args, cwd) :458-506
204
- function readMemory(args, cwd) :514-549
190
+ module.exports = { encodeTerseSig, encodeTerseSigs, measureTerse, splitAnchor } :86-86
191
+ function splitAnchor(sig) → { text: string, suffix: s :25-30
192
+ function encodeTerseSig(sig) → string :37-50
193
+ function encodeTerseSigs(sigs) → string[] :57-59
194
+ function _tokens(sigs) :62-64
195
+ function measureTerse(sigsList) → { beforeTokens: number, a :72-84
205
196
  ```
206
197
 
207
198
  ### src/mcp/server.js
208
199
  ```
209
- module.exports = { start } :132-132
200
+ module.exports = { start } :140-140
210
201
  function respond(id, result) :28-30
211
202
  function respondError(id, code, message) :32-36
212
- function dispatch(msg, cwd) :41-99
213
- function start(cwd) :104-130
203
+ function dispatch(msg, cwd) :41-107
204
+ function start(cwd) :112-138
214
205
  ```
215
206
 
216
- ### src/mcp/tools.js
217
- ```
218
- module.exports = { TOOLS } :220-220
207
+ ### src/wiki/generate.js
219
208
  ```
220
-
221
- ### src/session/notes.js
222
- ```
223
- module.exports = { notesPath, addNote, readNotes, formatNotes, clearNotes } :99-99
224
- function notesPath(cwd) :23-25
225
- function _currentBranch(cwd) :27-35
226
- function addNote(cwd, text, opts = {}) :45-58
227
- function readNotes(cwd, limit = 0) → object[] :66-78
228
- function formatNotes(notes) :81-91
229
- function clearNotes(cwd) :94-97
209
+ module.exports = { buildWiki, renderWikiMarkdown } :250-250
210
+ function _rel(cwd, f) :22-24
211
+ function _pct(fraction) :26-28
212
+ function _identity(cwd) :31-37
213
+ function _modules(index) :40-67
214
+ function _flow(cwd) :70-97
215
+ function _conventions(cwd, index) :100-117
216
+ function _health(cwd) :119-127
217
+ function buildWiki(cwd, opts = {}) → { data: object, markdown: :137-162
218
+ function renderWikiMarkdown(data, sigmapVersion) → string :171-248
230
219
  ```
231
220
 
232
221
  ### src/analysis/coverage-score.js
@@ -246,6 +235,16 @@ function explainInclusion(fileEntries, budgetLimit) :43-74
246
235
  function explainExclusion(dropped, reason) :76-78
247
236
  ```
248
237
 
238
+ ### src/cache/freshen.js
239
+ ```
240
+ module.exports = { freshen } :123-123
241
+ function _readConfig(cwd) :35-40
242
+ function _pkgVersion(cwd) :42-45
243
+ function _contextMtime(cwd) :48-54
244
+ function _walk(dir, exclude, out, depth, maxDepth) :56-66
245
+ function freshen(cwd, opts = {}) → number :74-121
246
+ ```
247
+
249
248
  ### src/cache/sig-cache.js
250
249
  ```
251
250
  module.exports = { loadCache, saveCache, getChangedFiles, updateCacheEntries } :105-105
@@ -256,11 +255,6 @@ function getChangedFiles(files, cache) → { changed: string[], unch :71-88
256
255
  function updateCacheEntries(cache, extracted) :96-103
257
256
  ```
258
257
 
259
- ### src/config/defaults.js
260
- ```
261
- module.exports = { DEFAULTS } :155-155
262
- ```
263
-
264
258
  ### src/config/loader.js
265
259
  ```
266
260
  module.exports = { loadConfig, loadBaseConfig } :313-313
@@ -271,6 +265,82 @@ function loadConfig(cwd) → object :236-307
271
265
  function deepClone(obj) :309-311
272
266
  ```
273
267
 
268
+ ### src/conventions/ci.js
269
+ ```
270
+ module.exports = { ciGate, DEFAULT_MIN } :48-48
271
+ function ciGate(result, opts = {}, prior = null) → { score:number, min:numbe :25-46
272
+ ```
273
+
274
+ ### src/conventions/conflicts.js
275
+ ```
276
+ module.exports = { analyzeConflicts, toNamingStyle, renameSuggestion } :111-111
277
+ function _splitName(filename) :13-18
278
+ function _words(stem) :21-29
279
+ function toNamingStyle(stem, style) → string :39-49
280
+ function renameSuggestion(filename, dominantStyle) :52-56
281
+ function analyzeConflicts(result) → { hasConflicts: boolean, :72-109
282
+ ```
283
+
284
+ ### src/conventions/extract.js
285
+ ```
286
+ module.exports = { classifyNaming, scoreConvention, extractConventions } :188-188
287
+ function classifyNaming(basename) → 'PascalCase'|'camelCase'| :40-51
288
+ function scoreConvention(labels, refs) → { dominant: string|null, :65-103
289
+ function _jsExportStyle(src) :106-188
290
+ function _detectTestFramework(cwd, files) :122-150
291
+ function extractConventions(cwd, files) → { fileNaming: object, exp :159-186
292
+ ```
293
+
294
+ ### src/conventions/fix.js
295
+ ```
296
+ module.exports = { buildFixList } :61-61
297
+ function _renamePath(relPath, style) :24-31
298
+ function buildFixList(cwd, files, conventions) → { dominant: string|null, :40-59
299
+ ```
300
+
301
+ ### src/conventions/inject.js
302
+ ```
303
+ module.exports = { renderConventionsBlock, injectConventions, START, END } :98-98
304
+ function _conventionLine(label, conv) :29-38
305
+ function renderConventionsBlock(result, version) → string :46-72
306
+ function injectConventions(existing, block) → string :82-96
307
+ ```
308
+
309
+ ### src/conventions/report.js
310
+ ```
311
+ module.exports = { scoreReport, snapshot, overallScore } :75-75
312
+ function overallScore(result) :14-22
313
+ function scoreReport(result, prior) → { conventions: object[], :31-55
314
+ function snapshot(result, ts) :62-73
315
+ ```
316
+
317
+ ### src/conventions/update.js
318
+ ```
319
+ module.exports = { changedSince, planUpdate } :46-46
320
+ function changedSince(files, sinceMs) → string[] :20-26
321
+ function planUpdate(cwd, files, snapshotPath) → { snapshotExists: boolean :35-44
322
+ ```
323
+
324
+ ### src/create/orchestrate.js
325
+ ```
326
+ module.exports = { orchestrate, TOTAL } :86-86
327
+ function orchestrate(ctx = {}, cwd) → { task: string|null, step :34-84
328
+ ```
329
+
330
+ ### src/daemon/daemon.js
331
+ ```
332
+ module.exports = { start, stop, status, pidFile, logFile, isAlive, readPid } :20-20
333
+ function daemonDir(cwd) :22-24
334
+ function pidFile(cwd) :26-28
335
+ function logFile(cwd) :30-32
336
+ function isAlive(pid) :35-44
337
+ function readPid(cwd) :47-55
338
+ function removePidFile(cwd) :57-61
339
+ function status(cwd) → { running: boolean, pid: :66-72
340
+ function start(cwd, opts = {}) → { status: 'started'|'alre :82-105
341
+ function stop(cwd) → { status: 'stopped'|'not- :112-124
342
+ ```
343
+
274
344
  ### src/discovery/framework-detector.js
275
345
  ```
276
346
  module.exports = { detectFrameworks } :7-7
@@ -314,12 +384,12 @@ module.exports = { REGISTRY } :175-175
314
384
  ### src/discovery/source-root-resolver.js
315
385
  ```
316
386
  module.exports = { resolveSourceRoots } :11-11
317
- function resolveSourceRoots(cwd, opts = {}) :16-72
318
- function _detectMonorepo(cwd) :74-83
319
- function _enumerateCandidates(cwd, isMonorepo, ignorePatterns, excludeList) :85-142
320
- function _applySpecialRules(scored, cwd, primaryFw, fwEntry, frameworks) :144-179
321
- function _dedupeNested(scored) :181-192
322
- function _computeConfidence(frameworks, languages, scoredCount) :194-198
387
+ function resolveSourceRoots(cwd, opts = {}) :16-76
388
+ function _detectMonorepo(cwd) :78-87
389
+ function _enumerateCandidates(cwd, isMonorepo, ignorePatterns, excludeList) :89-149
390
+ function _applySpecialRules(scored, cwd, primaryFw, fwEntry, frameworks) :151-186
391
+ function _dedupeNested(scored) :188-199
392
+ function _computeConfidence(frameworks, languages, scoredCount) :201-205
323
393
  ```
324
394
 
325
395
  ### src/discovery/source-root-scorer.js
@@ -330,6 +400,18 @@ function scoreCandidate(dirName, fullPath, context) :43-89
330
400
  function _countSourceFiles(dir, depth) :91-101
331
401
  ```
332
402
 
403
+ ### src/doctor/diagnose.js
404
+ ```
405
+ module.exports = { diagnose, formatDoctor, formatDoctorJSON } :236-236
406
+ function _short(p, cwd) :37-40
407
+ function _contextFiles(cwd) :42-49
408
+ function _mcpTargets(cwd) :51-65
409
+ function _countChangedSince(cwd, srcDirs, config, ctxMtime) :68-94
410
+ function diagnose(cwd, opts = {}) → { checks: Array<{id,label :101-180
411
+ function formatDoctor(result) :216-229
412
+ function formatDoctorJSON(result) :232-234
413
+ ```
414
+
333
415
  ### src/eval/analyzer.js
334
416
  ```
335
417
  module.exports = { analyzeFiles, formatAnalysisTable, formatAnalysisJSON } :235-235
@@ -343,18 +425,28 @@ function formatAnalysisTable(stats, showSlow) → string :179-213
343
425
  function formatAnalysisJSON(stats) → object :221-233
344
426
  ```
345
427
 
428
+ ### src/eval/llm-ablation.js
429
+ ```
430
+ module.exports = { buildGrounding, scoreAnswer, scoreAnswerDetail, runAblation, aggregateRuns } :168-168
431
+ function _cleanSig(sig) :19-21
432
+ function buildGrounding(cwd, opts = {}) → string :34-70
433
+ function scoreAnswerDetail(answerText, cwd) → { total: number, issues: :78-85
434
+ function scoreAnswer(answerText, cwd) :88-90
435
+ function runAblation(tasks, cwd, complete, opts = {}) → { tasks: object[], aggreg :102-137
436
+ function _stats(nums) :140-144
437
+ function aggregateRuns(aggregates) → { runs:number, n:number, :154-166
438
+ ```
439
+
346
440
  ### src/eval/runner.js
347
441
  ```
348
- module.exports = { run, rank, loadTasks, buildSigIndex, formatTable, formatMetrics, tokenize } :308-308
349
- function buildSigIndex(cwd) → Map<string, string[]> :39-81
350
- function tokenize(text) → string[] :93-105
351
- function scoreFile(sigs, queryTokens) → number :119-136
352
- function rank(query, index, topK = 10) → { file: string, score: nu :146-157
353
- function estimateTokens(sigs) → number :168-171
354
- function loadTasks(tasksFile) → Array<{id:string, query:s :184-206
355
- function run(tasksFile, cwd, opts = {}) → { * tasks: Array<{id, que :224-271
356
- function formatTable(taskResults) → string :282-290
357
- function formatMetrics(metrics) → string :297-306
442
+ module.exports = { run, rank, loadTasks, buildSigIndex, formatTable, formatMetrics, tokenize } :256-256
443
+ function buildSigIndex(cwd) → Map<string, string[]> :40-82
444
+ function rank(query, index, topK = 10) → { file: string, score: nu :99-105
445
+ function estimateTokens(sigs) → number :116-119
446
+ function loadTasks(tasksFile) → Array<{id:string, query:s :132-154
447
+ function run(tasksFile, cwd, opts = {}) → { * tasks: Array<{id, que :172-219
448
+ function formatTable(taskResults) → string :230-238
449
+ function formatMetrics(metrics) → string :245-254
358
450
  ```
359
451
 
360
452
  ### src/eval/scorer.js
@@ -376,6 +468,24 @@ function scoreUsefulness(taskResult, rankingScore) :11-38
376
468
  function computeUsefulnessStats(taskResults) :40-66
377
469
  ```
378
470
 
471
+ ### src/evidence/pack.js
472
+ ```
473
+ module.exports = { buildEvidencePack, formatJSON, formatMarkdown, parseAnchor, riskLabelFor, findRelatedTests, SCHEMA_VERSION } :293-301
474
+ function parseAnchor(sig) → { symbol: string, start: :50-58
475
+ function riskLabelFor(relPath) → 'generated'|'test'|'migra :70-81
476
+ function stemOf(relPath) :84-87
477
+ function testTargetStem(relPath) → string :99-105
478
+ function findRelatedTests(relPath, allFiles) → string[] :116-127
479
+ function reasonFor(signals) :130-141
480
+ function sigTokens(sigs) :144-146
481
+ function canonicalize(value) → string :153-155
482
+ function sortKeys(value) :157-165
483
+ function buildEvidencePack(query, cwd, opts = {}) → object :178-249
484
+ function ranked0Empty(query) :252-254
485
+ function formatJSON(pack) :257-259
486
+ function formatMarkdown(pack) :262-291
487
+ ```
488
+
379
489
  ### src/extractors/coverage.js
380
490
  ```
381
491
  module.exports = { buildTestIndex, isTested } :79-79
@@ -428,6 +538,13 @@ function extractRDeps(src) → string[] :76-90
428
538
  function buildReverseDepMap(forwardMap) → Map<string, string[]> :97-108
429
539
  ```
430
540
 
541
+ ### src/extractors/dispatch.js
542
+ ```
543
+ module.exports = { extractFile, langFor } :112-112
544
+ function langFor(filePathOrName) :86-91
545
+ function extractFile(filePathOrName, src) → string[] :99-110
546
+ ```
547
+
431
548
  ### src/extractors/dockerfile.js
432
549
  ```
433
550
  module.exports = { extract } :49-49
@@ -482,7 +599,7 @@ function normalizeType(type) :55-58
482
599
  ### src/extractors/javascript.js
483
600
  ```
484
601
  module.exports = { extract } :147-147
485
- function extract(src) → string[] :12-113
602
+ function extract(src) → string[] :13-112
486
603
  function extractBlock(src, startIndex) :88-98
487
604
  function extractClassMembers(block, returnHints) :103-124
488
605
  function buildReturnHints(src) :119-121
@@ -532,9 +649,9 @@ function normalizeType(type) :66-69
532
649
 
533
650
  ### src/extractors/prdiff.js
534
651
  ```
535
- module.exports = { diffSignatures, extractName } :45-45
652
+ module.exports = { diffSignatures, extractName } :70-70
536
653
  function diffSignatures(baseSigs, currentSigs) → {added:string[], removed: :9-36
537
- function extractName(sig) :38-43
654
+ function extractName(sig) :47-70
538
655
  ```
539
656
 
540
657
  ### src/extractors/properties.js
@@ -549,21 +666,6 @@ module.exports = { extract } :63-63
549
666
  function extract(src) → string[] :10-63
550
667
  ```
551
668
 
552
- ### src/extractors/python.js
553
- ```
554
- module.exports = { extract, tryNativeExtract } :262-262
555
- function pyBlockEnd(srcLines, startLine) → number :14-24
556
- function tryNativeExtract(filePath) → string[]|null :32-44
557
- function extract(src, filePath) → string[] :55-140
558
- function extractClassMethods(stripped, startIndex) :142-161
559
- function tryExtractDataclassFields(stripped, classIndex) :163-177
560
- function tryExtractBaseModelFields(stripped, bodyStart) :179-194
561
- function extractClassConstants(stripped, startIndex) :196-210
562
- function extractReturnType(sigLine) :212-218
563
- function normalizeParams(params) :220-238
564
- function extractDocHint(src, fnName, fnSigLine) :240-260
565
- ```
566
-
567
669
  ### src/extractors/python_ast.py
568
670
  ```
569
671
  def annotation_to_str(node) :25-48 # Convert an AST annotation node to a string representation
@@ -589,6 +691,21 @@ module.exports = { extract } :77-77
589
691
  function extract(src) → string[] :10-75
590
692
  ```
591
693
 
694
+ ### src/extractors/python.js
695
+ ```
696
+ module.exports = { extract, tryNativeExtract } :262-262
697
+ function pyBlockEnd(srcLines, startLine) → number :14-24
698
+ function tryNativeExtract(filePath) → string[]|null :32-44
699
+ function extract(src, filePath) → string[] :55-140
700
+ function extractClassMethods(stripped, startIndex) :142-161
701
+ function tryExtractDataclassFields(stripped, classIndex) :163-177
702
+ function tryExtractBaseModelFields(stripped, bodyStart) :179-194
703
+ function extractClassConstants(stripped, startIndex) :196-210
704
+ function extractReturnType(sigLine) :212-218
705
+ function normalizeParams(params) :220-238
706
+ function extractDocHint(src, fnName, fnSigLine) :240-260
707
+ ```
708
+
592
709
  ### src/extractors/r.js
593
710
  ```
594
711
  module.exports = { extract } :273-273
@@ -681,20 +798,26 @@ module.exports = { extract } :42-42
681
798
  function extract(src) → string[] :10-40
682
799
  ```
683
800
 
801
+ ### src/extractors/typescript_react.js
802
+ ```
803
+ module.exports = { extract } :60-60
804
+ function extract(src) → string[] :10-20
805
+ ```
806
+
684
807
  ### src/extractors/typescript.js
685
808
  ```
686
809
  module.exports = { extract } :221-221
687
- function extract(src) → string[] :12-117
810
+ function extract(src) → string[] :13-118
688
811
  function extractBlock(src, startIndex) :160-170
689
812
  function extractInterfaceMembers(block) :174-188
690
813
  function extractClassMembers(block) :195-221
691
814
  function normalizeParams(params) :216-219
692
815
  ```
693
816
 
694
- ### src/extractors/typescript_react.js
817
+ ### src/extractors/vue_sfc.js
695
818
  ```
696
- module.exports = { extract } :60-60
697
- function extract(src) → string[] :10-20
819
+ module.exports = { extract } :99-99
820
+ function extract(src) → string[] :10-68
698
821
  ```
699
822
 
700
823
  ### src/extractors/vue.js
@@ -705,12 +828,6 @@ function normalizeParams(params) :70-73
705
828
  function normalizeType(type) :75-78
706
829
  ```
707
830
 
708
- ### src/extractors/vue_sfc.js
709
- ```
710
- module.exports = { extract } :99-99
711
- function extract(src) → string[] :10-68
712
- ```
713
-
714
831
  ### src/extractors/xml.js
715
832
  ```
716
833
  module.exports = { extract } :46-46
@@ -780,6 +897,22 @@ function generateDashboardHtml(cwd, health) :446-496
780
897
  function renderHistoryCharts(cwd, health) :498-523
781
898
  ```
782
899
 
900
+ ### src/format/gain-terminal.js
901
+ ```
902
+ module.exports = { renderSummary, renderBreakdown, humanTokens, fmtUSD, fmtDuration, fmtPct } :201-206
903
+ function humanTokens(n) :27-33
904
+ function fmtInt(n) :35-37
905
+ function fmtUSD(n) :39-43
906
+ function fmtDuration(ms) :45-51
907
+ function fmtPct(p) :53-55
908
+ function colorPct(p, text) :57-61
909
+ function pad(s, w, align) :63-68
910
+ function bar(pct, width) :71-76
911
+ function impactBar(sharePct, width) :79-82
912
+ function renderSummary(agg, opts = {}) → string :94-153
913
+ function renderBreakdown(agg) → string :160-199
914
+ ```
915
+
783
916
  ### src/format/llm-txt.js
784
917
  ```
785
918
  module.exports = { format, outputPath } :3-3
@@ -791,9 +924,15 @@ function format(context, cwd, version) :7-28
791
924
  ```
792
925
  module.exports = { format, outputPath } :5-5
793
926
  function outputPath(cwd) :7-7
794
- function getShortCommit(cwd) :9-12
795
- function detectVersion(cwd) :14-20
796
- function format(context, cwd, writtenFiles, sigmapVersion) :22-70
927
+ function getShortCommit(cwd) :9-11
928
+ function detectVersion(cwd) :13-19
929
+ function format(context, cwd, writtenFiles, sigmapVersion) :21-69
930
+ ```
931
+
932
+ ### src/format/usage-guidance.js
933
+ ```
934
+ module.exports = { usageBlock } :28-28
935
+ function usageBlock() :12-26
797
936
  ```
798
937
 
799
938
  ### src/format/verify-report.js
@@ -808,14 +947,42 @@ function renderReportMarkdown(result) :144-162
808
947
 
809
948
  ### src/graph/builder.js
810
949
  ```
811
- module.exports = { build, buildFromCwd, extractFileDeps, normalizePath } :386-386
950
+ module.exports = { build, buildFromCwd, extractFileDeps, normalizePath, loadAliasMap, resolveAlias } :494-494
812
951
  function normalizePath(p) :17-19
813
- function resolveJsPath(dir, importStr, fileSet) → string|null :40-54
814
- function escapeRegex(s) :61-63
815
- function resolveRPath(dir, importStr, fileSet, cwd) :65-80
816
- function extractFileDeps(filePath, content, fileSet, cwd, ctx) → string[] :94-239
817
- function build(files, cwd, ctx) → { forward: Map<string,str :283-318
818
- function buildFromCwd(cwd, opts) → { forward: Map<string,str :330-384
952
+ function probeJs(base, fileSet) → string|null :40-53
953
+ function resolveJsPath(dir, importStr, fileSet) → string|null :62-64
954
+ function stripJsonc(src) :70-84
955
+ function loadAliasMap(cwd) → { baseUrl: string|null, e :96-117
956
+ function resolveAlias(spec, aliasMap, fileSet) → string|null :126-150
957
+ function escapeRegex(s) :157-159
958
+ function resolveRPath(dir, importStr, fileSet, cwd) :161-176
959
+ function extractFileDeps(filePath, content, fileSet, cwd, ctx) → string[] :190-330
960
+ function build(files, cwd, ctx) → { forward: Map<string,str :387-426
961
+ function buildFromCwd(cwd, opts) → { forward: Map<string,str :438-492
962
+ ```
963
+
964
+ ### src/graph/call-graph.js
965
+ ```
966
+ module.exports = { buildCallGraph, methodImpact, methodCallees, formatCallGraph, formatCallGraphJSON, extractDefs, maskJs, maskPy } :397-401
967
+ function normalizePath(p) :35-35
968
+ function toRel(cwd, f) :36-36
969
+ function symId(cwd, absFile, name) :37-37
970
+ function maskJs(src) :43-59
971
+ function maskPy(src) :61-78
972
+ function matchDelim(masked, openIdx, open, close) :81-88
973
+ function lineAt(src, idx) :90-95
974
+ function jsDefs(masked) :100-206
975
+ function pyDefs(masked) :168-188
976
+ function extractDefs(filePath, src) :190-195
977
+ function callsInRange(masked, start, end) :198-210
978
+ function _walk(dir, excludeSet, out, depth) :214-227
979
+ function buildCallGraph(cwd, opts = {}) → { * forward: Map<string,s :243-316
980
+ function _resolveSymbol(symbol, defs) :319-324
981
+ function _bfs(seedIds, graph, maxDepth) :327-340
982
+ function methodImpact(symbol, cwd, opts = {}) → { symbol:string, resolved :350-356
983
+ function methodCallees(symbol, cwd, opts = {}) → { symbol:string, resolved :362-368
984
+ function formatCallGraph(result, kind) :371-383
985
+ function formatCallGraphJSON(result, kind) :385-395
819
986
  ```
820
987
 
821
988
  ### src/graph/impact.js
@@ -833,17 +1000,27 @@ function formatImpactJSON(result) → object :229-238
833
1000
 
834
1001
  ### src/health/scorer.js
835
1002
  ```
836
- module.exports = { score } :152-152
837
- function score(cwd) → { * score: number, * grad :30-150
1003
+ module.exports = { score, composeHealth } :227-227
1004
+ function gradeFor(points) :52-57
1005
+ function composeHealth(s) → object :66-117
1006
+ function score(cwd) :123-225
1007
+ ```
1008
+
1009
+ ### src/init/creation-workflow.js
1010
+ ```
1011
+ module.exports = { renderCreationWorkflowBlock, injectCreationWorkflow, START, END } :59-59
1012
+ function renderCreationWorkflowBlock() :18-35
1013
+ function injectCreationWorkflow(existing, block) → string :45-57
838
1014
  ```
839
1015
 
840
1016
  ### src/judge/judge-engine.js
841
1017
  ```
842
- module.exports = { groundedness, judge } :122-122
843
- function tokenize(text) :14-16
844
- function groundedness(response, context) :18-26
845
- function extractContextFiles(context, cwd) :37-59
846
- function judge(response, context, opts = {}) :61-120
1018
+ module.exports = { groundedness, claimGrounding, judge } :182-182
1019
+ function tokenize(text) :15-17
1020
+ function groundedness(response, context) :19-27
1021
+ function claimGrounding(response, context) → { total: number, grounded :48-78
1022
+ function extractContextFiles(context, cwd) :89-111
1023
+ function judge(response, context, opts = {}) :113-180
847
1024
  ```
848
1025
 
849
1026
  ### src/learning/weights.js
@@ -863,12 +1040,41 @@ function exportWeights(cwd, outputPath) :124-134
863
1040
  function importWeights(cwd, importPath, replace) :136-152
864
1041
  ```
865
1042
 
1043
+ ### src/map/build-ci.js
1044
+ ```
1045
+ module.exports = { analyze } :91-91
1046
+ function readJson(p) :20-22
1047
+ function npmScripts(cwd, rows) :24-30
1048
+ function ciWorkflows(cwd, rows) :32-56
1049
+ function makeTargets(cwd, rows) :58-69
1050
+ function analyze(files, cwd) :71-89
1051
+ ```
1052
+
866
1053
  ### src/map/class-hierarchy.js
867
1054
  ```
868
1055
  module.exports = { analyze } :117-117
869
1056
  function analyze(files, cwd) :16-117
870
1057
  ```
871
1058
 
1059
+ ### src/map/config-manifest.js
1060
+ ```
1061
+ module.exports = { analyze } :101-101
1062
+ function readText(p) :25-25
1063
+ function readJson(p) :26-26
1064
+ function count(obj) :27-27
1065
+ function manifests(cwd, rows) :29-73
1066
+ function configFiles(cwd) :75-81
1067
+ function analyze(files, cwd) :83-99
1068
+ ```
1069
+
1070
+ ### src/map/env-schema.js
1071
+ ```
1072
+ module.exports = { analyze } :90-90
1073
+ function collectMatches(re, content, into) :30-37
1074
+ function readExampleKeys(cwd) :39-52
1075
+ function analyze(files, cwd) :54-88
1076
+ ```
1077
+
872
1078
  ### src/map/import-graph.js
873
1079
  ```
874
1080
  module.exports = { analyze, extractImports, buildReverseGraph, resolveJsPath, detectCycles } :185-185
@@ -879,6 +1085,13 @@ function buildReverseGraph(graph) :131-140
879
1085
  function analyze(files, cwd) :145-183
880
1086
  ```
881
1087
 
1088
+ ### src/map/migrations.js
1089
+ ```
1090
+ module.exports = { analyze } :84-84
1091
+ function walk(dir, cwd, depth, out) :31-62
1092
+ function analyze(files, cwd) :64-82
1093
+ ```
1094
+
882
1095
  ### src/map/route-table.js
883
1096
  ```
884
1097
  module.exports = { analyze } :127-127
@@ -886,28 +1099,99 @@ function shouldSkipFile(rel) :18-21
886
1099
  function analyze(files, cwd) :23-125
887
1100
  ```
888
1101
 
1102
+ ### src/mcp/handlers.js
1103
+ ```
1104
+ module.exports = { readContext, searchSignatures, getMap, createCheckpoint, getRouting, explainFile, listModules, queryContext, getImpact, getLines, readMemory, getCalleeSignatures, notifyFileCreated, notifySymbolAdded, notifyFileDeleted, getDiffContext, getArchitectureOverview, verifySuggestion, squeezeOutput } :944-944
1105
+ function _readContextFiles(cwd) :10-17
1106
+ function readContext(args, cwd) :36-66
1107
+ function searchSignatures(args, cwd) :74-100
1108
+ function getMap(args, cwd) :108-131
1109
+ function createCheckpoint(args, cwd) :143-215
1110
+ function getRouting(args, cwd) :224-261
1111
+ function explainFile(args, cwd) :269-356
1112
+ function listModules(args, cwd) :364-403
1113
+ function queryContext(args, cwd) :411-429
1114
+ function getImpact(args, cwd) :437-449
1115
+ function getLines(args, cwd) :458-506
1116
+ function readMemory(args, cwd) :514-549
1117
+ function getCalleeSignatures(args, cwd) :558-603
1118
+ function _pkgVersion(cwd) :610-613
1119
+ function notifyFileCreated(args, cwd) :617-639
1120
+ function notifySymbolAdded(args, cwd) :642-662
1121
+ function notifyFileDeleted(args, cwd) :665-679
1122
+ function _changedFiles(cwd, args) :685-697
1123
+ function getDiffContext(args, cwd) :706-777
1124
+ function getArchitectureOverview(args, cwd) :786-854
1125
+ function verifySuggestion(args, cwd) :864-899
1126
+ function squeezeOutput(args, cwd) :909-942
1127
+ ```
1128
+
1129
+ ### src/mcp/install.js
1130
+ ```
1131
+ module.exports = { CLIENTS, listClients, installClient, resolveTarget } :142-142
1132
+ function resolveTarget(spec, cwd, home, useGlobal) :39-45
1133
+ function listClients(opts = {}) :48-62
1134
+ function serverArgs(scriptPath) :64-66
1135
+ function _installJson(filePath, scriptPath) :69-81
1136
+ function _installZed(filePath, scriptPath) :84-96
1137
+ function _installYaml(filePath, scriptPath) :99-117
1138
+ function installClient(client, opts = {}) → client, label, path, stat :124-140
1139
+ ```
1140
+
1141
+ ### src/mcp/tools.js
1142
+ ```
1143
+ module.exports = { TOOLS } :363-363
1144
+ ```
1145
+
1146
+ ### src/nudge.js
1147
+ ```
1148
+ module.exports = { checkStarNudge, readUsage, usagePath, showStarNudge, RUN_THRESHOLD, SUCCESS_THRESHOLD } :92-92
1149
+ function usagePath(cwd) :18-18
1150
+ function defaultUsage() :20-25
1151
+ function readUsage(cwd) :27-30
1152
+ function writeUsageAtomic(cwd, usage) :32-38
1153
+ function showStarNudge(write) :52-54
1154
+ function checkStarNudge(cwd, runSuccess, opts = {}) → { usage, nudged :67-90
1155
+ ```
1156
+
889
1157
  ### src/plan/planner.js
890
1158
  ```
891
1159
  module.exports = { createPlan } :10-10
892
- function createPlan(goal, cwd, config) :12-65
1160
+ function createPlan(goal, cwd, config = {}) :12-94
1161
+ ```
1162
+
1163
+ ### src/plan/verify-plan.js
1164
+ ```
1165
+ module.exports = { verifyPlan, DEFAULT_BLAST_THRESHOLD, DEFAULT_SCOPE_THRESHOLD } :108-108
1166
+ function _fileExists(cwd, ref) :24-30
1167
+ function verifyPlan(planText, cwd, opts = {}) → { issues: object[], blast :42-106
1168
+ ```
1169
+
1170
+ ### src/retrieval/bm25.js
1171
+ ```
1172
+ module.exports = { tokenize, stem, bm25rank, PATH_BOOST, STOP, expandQuery, EXPANSIONS, EXPANSION_WEIGHT } :195-195
1173
+ function stem(w) → string :36-45
1174
+ function tokenize(text) → string[] :54-65
1175
+ function expandQuery(qToks) → Map<string, number> :132-141
1176
+ function bm25rank(query, candidates) → Array<object & { score: n :154-193
893
1177
  ```
894
1178
 
895
1179
  ### src/retrieval/ranker.js
896
1180
  ```
897
- module.exports = { rank, buildSigIndex, scoreFile, formatRankTable, formatRankJSON, DEFAULT_WEIGHTS, GRAPH_BOOST_AMOUNTS, detectIntent } :556-556
898
- function _computePenalty(filePath) :61-68
899
- function _computeHubs(graph) :71-82
900
- function _isHub(filePath) :85-89
901
- function scoreFile(filePath, sigs, queryTokens, weights) → { score: number, signals: :100-157
902
- function rank(query, sigIndex, opts) → { file: string, score: nu :173-294
903
- function _parseContextFile(contextPath) → Map<string, string[]> :330-362
904
- function _mergeSigIndex(target, source) :365-373
905
- function _buildSigIndexFromCache(cwd) → Map<string, string[]> :380-400
906
- function _enrichSigIndexFromStrategy(cwd, index) → Map<string, string[]> :408-414
907
- function buildSigIndex(cwd, opts) → Map<string, string[]> :431-464
908
- function formatRankTable(results, query) → string :473-509
909
- function formatRankJSON(results, query) → object :518-533
910
- function detectIntent(query) :548-554
1181
+ module.exports = { rank, buildSigIndex, scoreFile, formatRankTable, formatRankJSON, DEFAULT_WEIGHTS, GRAPH_BOOST_AMOUNTS, detectIntent } :570-570
1182
+ function _computePenalty(filePath) :62-69
1183
+ function _computeHubs(graph) :72-83
1184
+ function _isHub(filePath) :86-90
1185
+ function scoreFile(filePath, sigs, queryTokens, weights) → { score: number, signals: :101-158
1186
+ function rank(query, sigIndex, opts) → { file: string, score: nu :174-298
1187
+ function _parseContextFile(contextPath) → Map<string, string[]> :344-376
1188
+ function _mergeSigIndex(target, source) :379-387
1189
+ function _buildSigIndexFromCache(cwd) → Map<string, string[]> :394-414
1190
+ function _enrichSigIndexFromStrategy(cwd, index) → Map<string, string[]> :422-428
1191
+ function buildSigIndex(cwd, opts) → Map<string, string[]> :445-478
1192
+ function formatRankTable(results, query) → string :487-523
1193
+ function formatRankJSON(results, query) → object :532-547
1194
+ function detectIntent(query) :562-568
911
1195
  ```
912
1196
 
913
1197
  ### src/retrieval/tokenizer.js
@@ -916,6 +1200,21 @@ module.exports = { tokenize, STOP_WORDS } :54-54
916
1200
  function tokenize(text, opts) → string[] :31-52
917
1201
  ```
918
1202
 
1203
+ ### src/review/pr-evidence.js
1204
+ ```
1205
+ module.exports = { buildPrEvidence, formatPrEvidenceMarkdown } :140-140
1206
+ function buildPrEvidence(changedFiles, cwd, opts = {}) → { scope:string, files:obj :31-77
1207
+ function formatPrEvidenceMarkdown(evidence, opts = {}) :82-138
1208
+ ```
1209
+
1210
+ ### src/review/review-pr.js
1211
+ ```
1212
+ module.exports = { reviewPr, SECURITY_PATTERNS, GOD_NODE_THRESHOLD, SCOPE_DIR_THRESHOLD } :128-128
1213
+ function isTestFile(p) :32-34
1214
+ function isSource(p) :35-37
1215
+ function reviewPr(changedFiles, cwd, opts = {}) → { findings: object[], bla :48-126
1216
+ ```
1217
+
919
1218
  ### src/routing/classifier.js
920
1219
  ```
921
1220
  module.exports = { classify, classifyAll } :102-102
@@ -929,6 +1228,22 @@ module.exports = { TIERS, formatRoutingSection } :103-103
929
1228
  function formatRoutingSection(groups) → string :66-101
930
1229
  ```
931
1230
 
1231
+ ### src/scaffold/persist.js
1232
+ ```
1233
+ module.exports = { scaffoldPath, renderScaffoldMarkdown } :45-45
1234
+ function scaffoldPath(cwd) :15-17
1235
+ function renderScaffoldMarkdown(decision, opts = {}) → string :26-43
1236
+ ```
1237
+
1238
+ ### src/scaffold/propose.js
1239
+ ```
1240
+ module.exports = { proposeScaffold, DEFAULT_THRESHOLD, HARD_FLOOR } :112-112
1241
+ function _tier(pct) :21-25
1242
+ function _stem(name) :28-34
1243
+ function _testFile(styledStem, framework, ext) :37-42
1244
+ function proposeScaffold(name, conventions, opts = {}) → { ok:boolean, refused:boo :57-110
1245
+ ```
1246
+
932
1247
  ### src/security/patterns.js
933
1248
  ```
934
1249
  module.exports = { PATTERNS } :51-51
@@ -950,12 +1265,102 @@ function mergeSessionContext(scores, session, currentIntent) :40-51
950
1265
  function clearSession(cwd) :53-56
951
1266
  ```
952
1267
 
1268
+ ### src/session/notes.js
1269
+ ```
1270
+ module.exports = { notesPath, addNote, readNotes, formatNotes, clearNotes } :93-93
1271
+ function notesPath(cwd) :23-25
1272
+ function _currentBranch(cwd) :27-29
1273
+ function addNote(cwd, text, opts = {}) :39-52
1274
+ function readNotes(cwd, limit = 0) → object[] :60-72
1275
+ function formatNotes(notes) :75-85
1276
+ function clearNotes(cwd) :88-91
1277
+ ```
1278
+
1279
+ ### src/squeeze/cilog.js
1280
+ ```
1281
+ module.exports = { squeezeCiLog, stripTimestamp, ERROR_RE } :71-71
1282
+ function stripTimestamp(line) :17-19
1283
+ function squeezeCiLog(input, opts = {}) → { squeezed: string, kept: :27-69
1284
+ ```
1285
+
1286
+ ### src/squeeze/classify.js
1287
+ ```
1288
+ module.exports = { classify, countFrames } :115-115
1289
+ function countFrames(lines) :32-38
1290
+ function matchesStackTrace(input, lines) :40-50
1291
+ function matchesCiLog(input, lines) :55-74
1292
+ function matchesJsonPayload(input) :76-93
1293
+ function classify(input) → { category: 'stacktrace'| :99-113
1294
+ ```
1295
+
1296
+ ### src/squeeze/index.js
1297
+ ```
1298
+ module.exports = { squeeze, shouldPrompt, formatSummary, estimateTokens } :69-69
1299
+ function estimateTokens(s) :17-17
1300
+ function squeeze(input, opts = {}) → { category, confidence, o :24-49
1301
+ function shouldPrompt(reduction, threshold) :52-55
1302
+ function formatSummary(result) :58-67
1303
+ ```
1304
+
1305
+ ### src/squeeze/jsonpayload.js
1306
+ ```
1307
+ module.exports = { squeezeJsonPayload, squeezeValue } :54-54
1308
+ function squeezeValue(v, opts) :14-32
1309
+ function squeezeJsonPayload(input, opts = {}) → { squeezed, kept, strippe :41-52
1310
+ ```
1311
+
1312
+ ### src/squeeze/stacktrace.js
1313
+ ```
1314
+ module.exports = { squeezeStackTrace, parseFrame, isVendor, inSrcDirs, enrichFrame } :135-135
1315
+ function parseFrame(line) :20-28
1316
+ function isVendor(file) :30-30
1317
+ function inSrcDirs(file, srcDirs) :32-38
1318
+ function enrichFrame(frame, symbolIndex) :41-66
1319
+ function squeezeStackTrace(input, opts = {}) → { squeezed, kept, strippe :76-133
1320
+ ```
1321
+
1322
+ ### src/tracking/aggregate.js
1323
+ ```
1324
+ module.exports = { aggregate, bucketBy, parseSince, normalize } :195-195
1325
+ function normalize(rec) :25-44
1326
+ function normalizeOp(op) :46-49
1327
+ function num(v) :51-54
1328
+ function parseSince(since, nowMs) → Date|null :63-75
1329
+ function bucketBy(records, granularity) → Array<{key,count,baseline :83-100
1330
+ function bucketKey(ts, granularity) :102-117
1331
+ function aggregate(rawRecords, opts = {}) → object :129-193
1332
+ ```
1333
+
953
1334
  ### src/tracking/logger.js
954
1335
  ```
955
- module.exports = { logRun, readLog, summarize } :115-115
956
- function logRun(entry, cwd) :27-52
957
- function readLog(cwd) → object[] :59-74
958
- function summarize(entries) → object :81-113
1336
+ module.exports = { logRun, recordUsage, readLog, readGainLog, summarize, isTrackingEnabled, GAIN_FILE } :197-197
1337
+ function logRun(entry, cwd) :30-55
1338
+ function readLog(cwd) → object[] :62-77
1339
+ function readGainLog(cwd) → object[] :84-96
1340
+ function summarize(entries) → object :103-135
1341
+ function isTrackingEnabled(config, argv) → boolean :147-153
1342
+ function recordUsage(entry, cwd) :169-195
1343
+ ```
1344
+
1345
+ ### src/tracking/pricing.js
1346
+ ```
1347
+ module.exports = { PRICES, DEFAULT_MODEL, resolvePrice, listModels } :44-44
1348
+ function resolvePrice(model) → { model: string, perMtok: :32-37
1349
+ function listModels() → string[] :40-42
1350
+ ```
1351
+
1352
+ ### src/util/git.js
1353
+ ```
1354
+ module.exports = { git, tryGit } :31-31
1355
+ function git(args, opts = {}) :17-23
1356
+ function tryGit(args, opts = {}) :26-29
1357
+ ```
1358
+
1359
+ ### src/util/truncate.js
1360
+ ```
1361
+ module.exports = { capWithNotice, capMembersWithNotice } :42-42
1362
+ function capWithNotice(items, limit, label) → string[] :22-26
1363
+ function capMembersWithNotice(members, limit, label = 'methods') → Array<{text:string :36-40
959
1364
  ```
960
1365
 
961
1366
  ### src/verify/closest-match.js
@@ -970,24 +1375,41 @@ function formatSuggestion(match, asCall) :129-137
970
1375
 
971
1376
  ### src/verify/hallucination-guard.js
972
1377
  ```
973
- module.exports = { verify, buildSymbolSet, loadDeps, loadScripts, isTestPath } :310-310
974
- function isTestPath(p) :28-28
975
- function buildSymbolSet(cwd) :66-84
976
- function loadDeps(cwd) :87-100
977
- function loadScripts(cwd) :103-112
978
- function defaultFileExists(cwd, ref) :115-123
979
- function defaultRelativeResolvable(cwd, mod, fileBasenames) :126-143
980
- function verify(answerText, cwd, opts = {}) → { issues: object[], summa :167-286
1378
+ module.exports = { verify, buildSymbolSet, loadDeps, loadScripts, isTestPath } :345-345
1379
+ function isTestPath(p) :29-29
1380
+ function buildSymbolSet(cwd) :76-94
1381
+ function loadDeps(cwd) :97-110
1382
+ function loadScripts(cwd) :113-122
1383
+ function defaultFileExists(cwd, ref) :125-133
1384
+ function defaultRelativeResolvable(cwd, mod, fileBasenames) :136-153
1385
+ function verify(answerText, cwd, opts = {}) → { issues: object[], summa :177-301
1386
+ ```
1387
+
1388
+ ### src/verify/lib-index.js
1389
+ ```
1390
+ module.exports = { buildLibraryIndex, extractDtsExports, directDeps, resolveEntry, formatVersionPins, collectVersionPins, extractPyExports, pythonDirectDeps, findSitePackages, resolvePyEntry } :329-333
1391
+ function extractDtsExports(src) → string[] :40-50
1392
+ function directDeps(cwd) :68-79
1393
+ function resolveEntry(cwd, dep) → { version: string|null, d :85-105
1394
+ function extractPyExports(src) → string[] :118-146
1395
+ function pythonDirectDeps(cwd) :149-172
1396
+ function findSitePackages(cwd) :175-190
1397
+ function normalizePy(name) :193-195
1398
+ function findPyVersion(sitePkgsDir, dep) :198-207
1399
+ function resolvePyEntry(sitePkgsDirs, dep) → { version: string|null, s :213-229
1400
+ function buildLibraryIndex(cwd, opts = {}) → { symbols: Set<string>, l :240-292
1401
+ function formatVersionPins(libraries) :295-299
1402
+ function collectVersionPins(cwd, opts = {}) → { pins: string[], total: :311-327
981
1403
  ```
982
1404
 
983
1405
  ### src/verify/parsers.js
984
1406
  ```
985
- module.exports = { extractCodeBlocks, extractFilePaths, extractImports, extractSymbols, extractNpmScripts } :194-200
986
- function extractCodeBlocks(text) → { lang: string, content: :29-53
987
- function extractFilePaths(text) → { path: string, line: num :62-80
988
- function extractImports(text) → { module: string, kind: ' :87-142
989
- function extractNpmScripts(text) → { name: string, line: num :151-167
990
- function extractSymbols(text) → { name: string, line: num :175-192
1407
+ module.exports = { extractCodeBlocks, extractFilePaths, extractImports, extractSymbols, extractNpmScripts } :211-217
1408
+ function extractCodeBlocks(text) → { lang: string, content: :43-67
1409
+ function extractFilePaths(text) → { path: string, line: num :76-97
1410
+ function extractImports(text) → { module: string, kind: ' :104-159
1411
+ function extractNpmScripts(text) → { name: string, line: num :168-184
1412
+ function extractSymbols(text) → { name: string, line: num :192-209
991
1413
  ```
992
1414
 
993
1415
  ### src/workspace/detector.js