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