🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@ev3lynx/md-analyzer

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ev3lynx/md-analyzer - npm Package Compare versions

Comparing version
0.2.1
to
0.2.2
+90
src/core/hybrid-merge.ts
import * as path from 'path'
import type { CodeBlockRegion, FormattingCounts, MicromarkLink } from './micromark-walk.js'
import type { Link, Heading, Table } from '../types/index.js'
function isInsideBlock(offset: number, regions: CodeBlockRegion[]): boolean {
if (regions.length === 0) return false
return regions.some(r => offset >= r.start && offset < r.end)
}
export function filterMicromarkLinks(links: MicromarkLink[], regions: CodeBlockRegion[]): Link[] {
if (!links || links.length === 0) return []
return links
.filter(ml => {
if (regions.length === 0) return true
return !isInsideBlock(ml.start, regions)
})
.map(ml => ({
text: ml.text,
url: ml.url,
isInternal: ml.url.startsWith('#') || (!ml.url.startsWith('http') && !ml.url.startsWith('//')),
fileName: (() => {
if (!ml.url.startsWith('#') && !ml.url.startsWith('http') && !ml.url.startsWith('//')) {
const baseName = path.basename(ml.url, '.md')
if (baseName && baseName !== ml.url) return baseName
}
return null
})(),
isImage: ml.isImage || undefined
}))
}
export function filterMicromarkHeadings(headings: Heading[], regions: CodeBlockRegion[], content: string): Heading[] {
if (!headings || headings.length === 0) return []
if (regions.length === 0) return headings
return headings.filter(h => {
const idx = content.indexOf(h.text)
return idx === -1 || !isInsideBlock(idx, regions)
})
}
export function filterMicromarkTables(tables: Table[], regions: CodeBlockRegion[], content: string): Table[] {
if (!tables || tables.length === 0) return []
if (regions.length === 0) return tables
return tables.filter(t => {
const idx = content.indexOf(t.headers.join('|'))
return idx === -1 || !isInsideBlock(idx, regions)
})
}
export function countCodeBlocks(regions: CodeBlockRegion[] | null): number {
return regions ? regions.length : -1
}
function isInsideAnyBlock(offset: number, regions: CodeBlockRegion[]): boolean {
return regions.some(r => offset >= r.start && offset < r.end)
}
export function countFormatting(
counts: FormattingCounts | null,
content: string,
regions: CodeBlockRegion[]
): { boldCount: number; italicCount: number; bulletCount: number } {
if (!counts) return { boldCount: 0, italicCount: 0, bulletCount: 0 }
if (regions.length === 0) {
return {
boldCount: counts.bold + counts.boldItalic,
italicCount: counts.italic,
bulletCount: counts.bullet
}
}
const boldItalicRe = /\*\*\*(.+?)\*\*\*/g
const boldRe = /(?<!\*)\*\*(?!\*)(.+?)\*\*/g
const italicRe = /(?<!\*)\*(?!\*)(.+?)(?<!\*)\*(?!\*)/g
const bulletRe = /^[ \t]*[-*+][ \t]/gm
const isInCode = (offset: number) => isInsideAnyBlock(offset, regions)
const boldItalicCount = [...content.matchAll(boldItalicRe)].filter(m => !isInCode(m.index)).length
const boldCount = [...content.matchAll(boldRe)].filter(m => !isInCode(m.index)).length
const italicCount = [...content.matchAll(italicRe)].filter(m => !isInCode(m.index)).length
const bulletCount = [...content.matchAll(bulletRe)].filter(m => !isInCode(m.index)).length
return {
boldCount: boldCount + boldItalicCount,
italicCount,
bulletCount
}
}
export interface CodeBlockRegion {
start: number
end: number
}
export interface FormattingCounts {
bold: number
italic: number
boldItalic: number
bullet: number
}
export interface MicromarkLink {
text: string
url: string
start: number
end: number
isImage: boolean
isAutolink: boolean
isReference: boolean
}
import { parse, postprocess, preprocess } from 'micromark'
import { gfm } from 'micromark-extension-gfm'
import type { Heading, Table } from '../types/index.js'
interface MicromarkEvent {
0: 'enter' | 'exit'
1: { type: string; start: { offset: number }; end?: { offset: number } }
}
function parseEvents(content: string, extensions?: any[]): MicromarkEvent[] {
if (!content) return []
const opts = extensions && extensions.length > 0 ? { extensions } : {}
return postprocess(
parse(opts).document().write(preprocess()(content, 'utf-8', true))
)
}
export function walkCodeBlocks(content: string): CodeBlockRegion[] | null {
try {
const events = parseEvents(content)
const regions: CodeBlockRegion[] = []
let depth = 0
let currentStart = 0
for (const ev of events) {
const token = ev[1]
if (token.type === 'codeFenced' || token.type === 'codeIndented') {
if (ev[0] === 'enter') {
if (depth === 0) currentStart = token.start.offset
depth++
} else {
depth--
if (depth === 0 && token.end) {
regions.push({ start: currentStart, end: token.end.offset })
}
}
}
}
return regions
} catch (e) {
console.error('walkCodeBlocks_error:', e instanceof Error ? e.message : e)
return null
}
}
export function walkLinks(content: string): MicromarkLink[] | null {
try {
const events = parseEvents(content)
const definitions = new Map<string, string>()
for (const ev of events) {
if (ev[0] === 'enter' && ev[1].type === 'definitionLabelString') {
const name = content.slice(ev[1].start.offset, ev[1].end?.offset ?? ev[1].start.offset).toLowerCase()
definitions.set(name, '')
} else if (ev[0] === 'enter' && ev[1].type === 'definitionDestinationString') {
const url = content.slice(ev[1].start.offset, ev[1].end?.offset ?? ev[1].start.offset)
let lastName = ''
for (const [k, v] of definitions) {
if (!v) { lastName = k; break }
}
if (lastName) definitions.set(lastName, url)
}
}
const links: MicromarkLink[] = []
let current: { type: string; start: number; text: string; url: string; hasRef: boolean } | null = null
for (const ev of events) {
const token = ev[1]
const slice = (t: typeof token): string =>
content.slice(t.start.offset, t.end?.offset ?? t.start.offset)
if (ev[0] === 'enter' && (token.type === 'link' || token.type === 'image' || token.type === 'autolink')) {
current = { type: token.type, start: token.start.offset, text: '', url: '', hasRef: false }
}
if (current && ev[0] === 'enter') {
if (token.type === 'labelText') {
current.text = slice(token)
} else if (token.type === 'resourceDestinationString') {
current.url = slice(token)
} else if (token.type === 'referenceString') {
current.hasRef = true
current.url = definitions.get(slice(token).toLowerCase()) ?? slice(token)
} else if (token.type === 'autolinkEmail' || token.type === 'autolinkProtocol') {
current.url = slice(token)
if (!current.text) current.text = current.url
}
}
if (ev[0] === 'exit' && current && token.type === current.type) {
if (token.end && (current.text || current.url)) {
links.push({
text: current.text || current.url,
url: current.url || current.text,
start: current.start,
end: token.end.offset,
isImage: current.type === 'image',
isAutolink: current.type === 'autolink',
isReference: current.hasRef
})
}
current = null
}
}
return links
} catch (e) {
console.error('walkLinks_error:', e instanceof Error ? e.message : e)
return null
}
}
function offsetToLine(content: string, offset: number): number {
let line = 1
for (let i = 0; i < offset && i < content.length; i++) {
if (content[i] === '\n') line++
}
return line
}
export function walkHeadings(content: string): Heading[] | null {
try {
const events = parseEvents(content)
const headings: Heading[] = []
let current: { level: number; text: string; start: number } | null = null
for (const ev of events) {
const token = ev[1]
const slice = (t: typeof token): string =>
content.slice(t.start.offset, t.end?.offset ?? t.start.offset)
if (ev[0] === 'enter') {
if (token.type === 'setextHeadingText') {
current = { level: 0, text: slice(token), start: token.start.offset }
} else if (token.type === 'setextHeadingLineSequence') {
if (current) current.level = slice(token).startsWith('=') ? 1 : 2
} else if (token.type === 'atxHeadingSequence') {
current = { level: slice(token).length, text: '', start: token.start.offset }
} else if (token.type === 'atxHeadingText') {
if (current) current.text = slice(token)
}
}
if (ev[0] === 'exit' && current && (token.type === 'atxHeading' || token.type === 'setextHeading')) {
headings.push({
level: current.level,
text: current.text.trim(),
line: offsetToLine(content, current.start)
})
current = null
}
}
return headings.length > 0 ? headings : null
} catch (e) {
console.error('walkHeadings_error:', e instanceof Error ? e.message : e)
return null
}
}
export function walkFormatting(content: string): FormattingCounts | null {
try {
const boldItalicRe = /\*\*\*(.+?)\*\*\*/g
const boldRe = /(?<!\*)\*\*(?!\*)(.+?)\*\*/g
const italicRe = /(?<!\*)\*(?!\*)(.+?)(?<!\*)\*(?!\*)/g
const bulletRe = /^[ \t]*[-*+][ \t]/gm
const boldItalicMatches = [...content.matchAll(boldItalicRe)]
const boldMatches = [...content.matchAll(boldRe)]
const italicMatches = [...content.matchAll(italicRe)]
const bulletMatches = [...content.matchAll(bulletRe)]
return {
bold: boldMatches.length,
italic: italicMatches.length,
boldItalic: boldItalicMatches.length,
bullet: bulletMatches.length
}
} catch (e) {
console.error('walkFormatting_error:', e instanceof Error ? e.message : e)
return null
}
}
export function walkTables(content: string): Table[] | null {
try {
const events = parseEvents(content, [gfm()])
const tables: Table[] = []
let currentTable: { headers: string[]; rows: string[][] } | null = null
let inHead = false
let inBody = false
let currentRow: string[] | null = null
let currentCell: string | null = null
for (const ev of events) {
const token = ev[1]
const slice = (t: typeof token): string =>
content.slice(t.start.offset, t.end?.offset ?? t.start.offset)
if (ev[0] === 'enter') {
if (token.type === 'table') {
currentTable = { headers: [], rows: [] }
} else if (token.type === 'tableHead') {
inHead = true
} else if (token.type === 'tableBody') {
inBody = true
} else if (token.type === 'tableRow' && (inHead || inBody)) {
currentRow = []
} else if (token.type === 'tableHeader' && inHead) {
currentCell = ''
} else if (token.type === 'tableData' && inBody) {
currentCell = ''
} else if (token.type === 'tableContent' && currentCell !== null) {
currentCell = slice(token)
}
}
if (ev[0] === 'exit') {
if (token.type === 'tableHeader' && inHead && currentCell !== null) {
if (currentRow) currentRow.push(currentCell)
currentCell = null
} else if (token.type === 'tableData' && inBody && currentCell !== null) {
if (currentRow) currentRow.push(currentCell)
currentCell = null
} else if (token.type === 'tableRow' && currentRow !== null) {
if (inHead) currentTable!.headers = currentRow
else if (inBody) currentTable!.rows.push(currentRow)
currentRow = null
} else if (token.type === 'tableHead') {
inHead = false
} else if (token.type === 'tableBody') {
inBody = false
} else if (token.type === 'table' && currentTable) {
tables.push(currentTable)
currentTable = null
}
}
}
return tables.length > 0 ? tables : null
} catch (e) {
console.error('walkTables_error:', e instanceof Error ? e.message : e)
return null
}
}
+75
-78
#!/usr/bin/env node
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const path = __importStar(require("path"));
const fs = __importStar(require("fs"));
const zod_1 = require("zod");
const schema_js_1 = require("../core/schema.js");
const config_js_1 = require("../utils/config.js");
const analyzer_js_1 = require("../core/analyzer.js");
const graph_js_1 = require("../core/graph.js");
const search_js_1 = require("../core/search.js");
const health_js_1 = require("../core/health.js");
const session_js_1 = require("../core/session.js");
const output_js_1 = require("./output.js");
import { Command } from 'commander';
import * as path from 'path';
import * as fs from 'fs';
import { fileURLToPath } from 'url';
import { z } from 'zod';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
import { CliOptions } from '../core/schema.js';
import { getTomlConfig, resolveConfigPath } from '../utils/config.js';
import { scanMarkdownFiles, analyzeFile, analyzeFileWithMicromark } from '../core/analyzer.js';
import { buildGraph, findOrphans, findBacklinks } from '../core/graph.js';
import { searchContent, filterByMetadata, rankByRelevance } from '../core/search.js';
import { getFragmentHealth } from '../core/health.js';
import { loadSession, saveSession, updateSessionStats, getTokenBudgetReport } from '../core/session.js';
import { extractKeyPoints, writeRunLog } from './output.js';
const pkgVersion = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'package.json'), 'utf-8')).version;
const program = new commander_1.Command();
const program = new Command();
program
.name('md-analyzer')
.description('Markdown document analyzer for AI agents - extract metadata, headings, links, tables, tokens, and key points from .md files')
.description('Markdown document analyzer for AI agents - extract metadata, headings, links, tables, tokens, formatting counts, and key points from .md files')
.version(pkgVersion, '--version, -v', 'Show version number')

@@ -78,10 +46,10 @@ .arguments('[directory]')

md-analyzer . --deps --json`);
program.action((directory, options) => {
program.action(async (directory, options) => {
const startTime = Date.now();
let parsed;
try {
parsed = schema_js_1.CliOptions.parse({ directory, ...options });
parsed = CliOptions.parse({ directory, ...options });
}
catch (e) {
if (e instanceof zod_1.z.ZodError) {
if (e instanceof z.ZodError) {
console.error('Invalid arguments:');

@@ -97,14 +65,43 @@ for (const issue of e.issues) {

}
const configPath = (0, config_js_1.resolveConfigPath)();
const config = (0, config_js_1.getTomlConfig)(configPath);
const targetDir = parsed.directory || process.env['MD_ANALYZER_DEFAULT_DIR'] || config.default_directory || process.cwd();
if (!parsed.json)
console.log('Scanning: ' + targetDir + '\n');
const { files: mdFiles, errors: scanErrors } = (0, analyzer_js_1.scanMarkdownFiles)(targetDir);
if (!parsed.json) {
console.log('Found ' + mdFiles.length + ' .md files\n');
if (scanErrors.length > 0)
console.log('Warnings: ' + scanErrors.length + ' directories skipped\n');
const configPath = resolveConfigPath();
const config = getTomlConfig(configPath);
const targetArg = parsed.directory || process.env['MD_ANALYZER_DEFAULT_DIR'] || config.default_directory || process.cwd();
let mdFiles = [];
let scanErrors = [];
try {
const stat = fs.statSync(targetArg);
if (stat.isFile()) {
if (targetArg.endsWith('.md'))
mdFiles = [targetArg];
else {
scanErrors.push('not_a_markdown_file: ' + targetArg);
if (!parsed.json)
console.log('Not a .md file: ' + targetArg + '\n');
}
}
else if (stat.isDirectory()) {
if (!parsed.json)
console.log('Scanning: ' + targetArg + '\n');
const scanned = scanMarkdownFiles(targetArg);
mdFiles = scanned.files;
scanErrors = scanned.errors;
if (!parsed.json) {
console.log('Found ' + mdFiles.length + ' .md files\n');
if (scanErrors.length > 0)
console.log('Warnings: ' + scanErrors.length + ' directories skipped\n');
}
}
else {
scanErrors.push('unsupported_path_type: ' + targetArg);
}
}
let results = mdFiles.map(file => (0, analyzer_js_1.analyzeFile)(file));
catch {
scanErrors.push('path_not_found: ' + targetArg);
}
let results = mdFiles.map(file => { try {
return analyzeFileWithMicromark(file);
}
catch {
return analyzeFile(file);
} });
if (scanErrors.length > 0 && results.length > 0) {

@@ -117,3 +114,3 @@ if (!results[0].stats.errors)

const [key, value] = parsed.filter.split('=');
results = (0, search_js_1.filterByMetadata)(results, key, value);
results = filterByMetadata(results, key, value);
if (!parsed.json)

@@ -123,3 +120,3 @@ console.log('Filtered by ' + key + '=' + value + ': ' + results.length + ' results\n');

if (parsed.search) {
results = (0, search_js_1.searchContent)(results, parsed.search);
results = searchContent(results, parsed.search);
if (!parsed.json)

@@ -129,3 +126,3 @@ console.log('Search "' + parsed.search + '": ' + results.length + ' results\n');

if (parsed.rank && parsed.search) {
results = (0, search_js_1.rankByRelevance)(results, parsed.search);
results = rankByRelevance(results, parsed.search);
if (!parsed.json)

@@ -140,26 +137,26 @@ console.log('Ranked by relevance to "' + parsed.search + '"\n');

}
const session = (0, session_js_1.loadSession)();
const updatedSession = (0, session_js_1.updateSessionStats)(results, session);
(0, session_js_1.saveSession)(updatedSession);
const session = loadSession();
const updatedSession = updateSessionStats(results, session);
saveSession(updatedSession);
const tokensThisCall = results.reduce((sum, r) => sum + r.stats.tokens, 0);
if (parsed.session)
console.log(JSON.stringify((0, session_js_1.getTokenBudgetReport)(updatedSession, parsed.budget), null, 2));
console.log(JSON.stringify(getTokenBudgetReport(updatedSession, parsed.budget), null, 2));
else if (parsed.keypoints)
console.log(JSON.stringify(limitedResults.map(doc => (0, output_js_1.extractKeyPoints)(doc)), null, 2));
console.log(JSON.stringify(limitedResults.map(doc => extractKeyPoints(doc)), null, 2));
else if (parsed.lintFragments)
console.log(JSON.stringify((0, health_js_1.getFragmentHealth)(limitedResults), null, 2));
console.log(JSON.stringify(getFragmentHealth(limitedResults), null, 2));
else if (parsed.deps) {
const graph = (0, graph_js_1.buildGraph)(limitedResults);
const graph = buildGraph(limitedResults);
console.log(JSON.stringify({ nodes: Object.keys(graph.nodes), edges: graph.edges, tokensThisCall }, null, 2));
}
else if (parsed.orphans) {
const orphans = (0, graph_js_1.findOrphans)((0, graph_js_1.buildGraph)(limitedResults));
const orphans = findOrphans(buildGraph(limitedResults));
console.log(JSON.stringify({ orphans, count: orphans.length, tokensThisCall }, null, 2));
}
else if (parsed.backlinks) {
const backlinks = (0, graph_js_1.findBacklinks)(limitedResults, parsed.backlinks);
const backlinks = findBacklinks(limitedResults, parsed.backlinks);
console.log(JSON.stringify({ target: parsed.backlinks, backlinks, count: backlinks.length, tokensThisCall }, null, 2));
}
else if (parsed.graph)
console.log(JSON.stringify((0, graph_js_1.buildGraph)(limitedResults), null, 2));
console.log(JSON.stringify(buildGraph(limitedResults), null, 2));
else {

@@ -174,6 +171,6 @@ if (!parsed.json) {

const mode = parsed.deps ? 'deps' : parsed.lintFragments ? 'lint-fragments' : parsed.session ? 'session' : parsed.keypoints ? 'keypoints' : parsed.orphans ? 'orphans' : parsed.backlinks ? 'backlinks' : parsed.graph ? 'graph' : parsed.search ? 'search' : 'default';
(0, output_js_1.writeRunLog)({
writeRunLog({
timestamp: new Date().toISOString(),
sessionId: updatedSession.sessionId,
directory: targetDir,
directory: targetArg,
flags: usedFlags,

@@ -180,0 +177,0 @@ filesFound: mdFiles.length,

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}

@@ -1,42 +0,5 @@

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractKeyPoints = extractKeyPoints;
exports.writeRunLog = writeRunLog;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const constants_js_1 = require("../utils/constants.js");
function extractKeyPoints(doc) {
import * as fs from 'fs';
import * as path from 'path';
import { LOG_DIR } from '../utils/constants.js';
export function extractKeyPoints(doc) {
return {

@@ -46,3 +9,4 @@ fileName: doc.fileName, title: doc.headings[0]?.text || doc.fileName, level: doc.headings[0]?.level || 1,

totalHeadings: doc.stats.totalHeadings, totalLinks: doc.stats.totalLinks, totalWikilinks: doc.stats.totalWikilinks,
totalTokens: doc.stats.tokens, wordCount: doc.stats.wordCount
totalTokens: doc.stats.tokens, wordCount: doc.stats.wordCount,
boldCount: doc.stats.boldCount ?? 0, italicCount: doc.stats.italicCount ?? 0, bulletCount: doc.stats.bulletCount ?? 0
},

@@ -58,7 +22,7 @@ keyHeadings: doc.headings.slice(0, 10).map((h, i) => ({

}
function writeRunLog(log) {
export function writeRunLog(log) {
try {
if (!fs.existsSync(constants_js_1.LOG_DIR))
fs.mkdirSync(constants_js_1.LOG_DIR, { recursive: true });
const logFile = path.join(constants_js_1.LOG_DIR, `${log.sessionId}.json`);
if (!fs.existsSync(LOG_DIR))
fs.mkdirSync(LOG_DIR, { recursive: true });
const logFile = path.join(LOG_DIR, `${log.sessionId}.json`);
const existing = fs.existsSync(logFile) ? JSON.parse(fs.readFileSync(logFile, 'utf-8')) : [];

@@ -65,0 +29,0 @@ existing.push(log);

@@ -1,1 +0,1 @@

{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"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"}

@@ -7,1 +7,2 @@ import type { AnalysisResult } from '../types/index.js';

export declare function analyzeFile(filePath: string): AnalysisResult;
export declare function analyzeFileWithMicromark(filePath: string): AnalysisResult;

@@ -1,45 +0,10 @@

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.scanMarkdownFiles = scanMarkdownFiles;
exports.analyzeFile = analyzeFile;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const js_tiktoken_1 = require("js-tiktoken");
const constants_js_1 = require("../utils/constants.js");
const extractors_js_1 = require("./extractors.js");
const counters_js_1 = require("./counters.js");
function scanMarkdownFiles(dir) {
import * as fs from 'fs';
import * as path from 'path';
import { encodingForModel } from 'js-tiktoken';
import { SKIP_DIRS } from '../utils/constants.js';
import { extractFrontmatter, extractFragmentMeta, extractHeadings, extractLinks, extractTables, extractWikilinks } from './extractors.js';
import { countStats } from './counters.js';
import { walkCodeBlocks, walkLinks, walkHeadings, walkTables, walkFormatting } from './micromark-walk.js';
import { filterMicromarkLinks, filterMicromarkHeadings, filterMicromarkTables, countCodeBlocks, countFormatting } from './hybrid-merge.js';
export function scanMarkdownFiles(dir) {
const files = [], errors = [];

@@ -57,3 +22,3 @@ function walk(dir) {

for (const entry of entries) {
if (entry.name.startsWith('.') || constants_js_1.SKIP_DIRS.has(entry.name))
if (entry.name.startsWith('.') || SKIP_DIRS.has(entry.name))
continue;

@@ -90,3 +55,3 @@ const fullPath = path.join(dir, entry.name);

try {
tokens = (0, js_tiktoken_1.encodingForModel)('gpt-4').encode(sectionText).length;
tokens = encodingForModel('gpt-4').encode(sectionText).length;
}

@@ -100,3 +65,29 @@ catch (e) {

}
function analyzeFile(filePath) {
function buildBaseResult(filePath, content, errors) {
const { metadata, content: markdownContent } = extractFrontmatter(content);
const fragmentMeta = extractFragmentMeta(metadata);
const headings = extractHeadings(markdownContent);
const links = extractLinks(markdownContent);
const wikilinks = extractWikilinks(markdownContent);
const tables = extractTables(markdownContent);
const counts = countStats(markdownContent);
if (counts.tokens === 0 && !errors.includes('token_count_fallback')) {
errors.push('token_count_fallback: tiktoken unavailable');
}
const sections = computeSections(markdownContent, headings);
const fileName = path.basename(filePath, '.md');
return {
file: filePath, fileName, metadata, fragmentMeta, headings, sections, links, wikilinks, tables,
stats: {
totalHeadings: headings.length, totalLinks: links.length,
internalLinks: links.filter(l => l.isInternal).length,
externalLinks: links.filter(l => !l.isInternal).length,
totalWikilinks: wikilinks.length, wordCount: counts.wordCount,
charCount: counts.charCount, lineCount: counts.lineCount,
codeBlocks: counts.codeBlocks, tables: tables.length,
tokens: counts.tokens, errors: errors.length > 0 ? errors : undefined
}
};
}
export function analyzeFile(filePath) {
const errors = [];

@@ -115,22 +106,57 @@ let content = '';

}
const { metadata, content: markdownContent } = (0, extractors_js_1.extractFrontmatter)(content);
const fragmentMeta = (0, extractors_js_1.extractFragmentMeta)(metadata);
const headings = (0, extractors_js_1.extractHeadings)(markdownContent);
const links = (0, extractors_js_1.extractLinks)(markdownContent);
const wikilinks = (0, extractors_js_1.extractWikilinks)(markdownContent);
const tables = (0, extractors_js_1.extractTables)(markdownContent);
const counts = (0, counters_js_1.countStats)(markdownContent);
if (counts.tokens === 0)
errors.push('token_count_fallback: tiktoken unavailable');
const sections = computeSections(markdownContent, headings);
return {
file: filePath, fileName: path.basename(filePath, '.md'), metadata, fragmentMeta, headings, sections, links, wikilinks, tables,
stats: {
totalHeadings: headings.length, totalLinks: links.length, internalLinks: links.filter(l => l.isInternal).length,
externalLinks: links.filter(l => !l.isInternal).length, totalWikilinks: wikilinks.length, wordCount: counts.wordCount,
charCount: counts.charCount, lineCount: counts.lineCount, codeBlocks: counts.codeBlocks, tables: tables.length,
tokens: counts.tokens, errors: errors.length > 0 ? errors : undefined
}
};
return buildBaseResult(filePath, content, errors);
}
export function analyzeFileWithMicromark(filePath) {
const errors = [];
let content = '';
try {
content = fs.readFileSync(filePath, 'utf-8');
}
catch (e) {
errors.push(`file_read_error: ${e instanceof Error ? e.message : 'unknown'}`);
return {
file: filePath, fileName: path.basename(filePath, '.md'), metadata: null, fragmentMeta: null,
headings: [], sections: [], links: [], wikilinks: [], tables: [],
stats: { totalHeadings: 0, totalLinks: 0, internalLinks: 0, externalLinks: 0, totalWikilinks: 0, wordCount: 0, charCount: 0, lineCount: 0, codeBlocks: 0, tables: 0, tokens: 0, errors }
};
}
const { content: markdownContent } = extractFrontmatter(content);
try {
const regions = walkCodeBlocks(markdownContent);
const mmLinks = walkLinks(markdownContent);
const mmHeadings = walkHeadings(markdownContent);
const mmTables = walkTables(markdownContent);
const mmFormatting = walkFormatting(markdownContent);
if (mmLinks === null)
errors.push('walkLinks_failed');
if (mmHeadings === null)
errors.push('walkHeadings_failed');
if (mmTables === null)
errors.push('walkTables_failed');
if (mmFormatting === null)
errors.push('walkFormatting_failed');
const safeRegions = regions ?? [];
const result = buildBaseResult(filePath, content, errors);
result.links = filterMicromarkLinks(mmLinks ?? [], safeRegions);
result.stats.totalLinks = result.links.length;
result.stats.internalLinks = result.links.filter(l => l.isInternal).length;
result.stats.externalLinks = result.links.filter(l => !l.isInternal).length;
result.headings = filterMicromarkHeadings(mmHeadings ?? [], safeRegions, markdownContent);
result.sections = computeSections(markdownContent, result.headings);
result.stats.totalHeadings = result.headings.length;
result.tables = filterMicromarkTables(mmTables ?? [], safeRegions, markdownContent);
result.stats.tables = result.tables.length;
result.stats.codeBlocks = countCodeBlocks(regions);
const fmt = countFormatting(mmFormatting, markdownContent, safeRegions);
result.stats.boldCount = fmt.boldCount;
result.stats.italicCount = fmt.italicCount;
result.stats.bulletCount = fmt.bulletCount;
result.stats.errors = errors.length > 0 ? errors : undefined;
return result;
}
catch (e) {
errors.push(`micromark_pipeline_failed: ${e instanceof Error ? e.message : 'unknown'}`);
return buildBaseResult(filePath, content, errors);
}
}
//# sourceMappingURL=analyzer.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/core/analyzer.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/core/analyzer.ts"],"names":[],"mappings":"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"}

@@ -1,6 +0,3 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.countStats = countStats;
const js_tiktoken_1 = require("js-tiktoken");
function countStats(content) {
import { encodingForModel } from 'js-tiktoken';
export function countStats(content) {
const wordCount = content.split(/\s+/).filter(w => w.length > 0).length;

@@ -12,3 +9,3 @@ const charCount = content.length;

try {
tokens = (0, js_tiktoken_1.encodingForModel)('gpt-4').encode(content).length;
tokens = encodingForModel('gpt-4').encode(content).length;
}

@@ -15,0 +12,0 @@ catch (e) {

@@ -1,1 +0,1 @@

{"version":3,"file":"counters.js","sourceRoot":"","sources":["../../src/core/counters.ts"],"names":[],"mappings":";;AAEA,gCAaC;AAfD,6CAA8C;AAE9C,SAAgB,UAAU,CAAC,OAAe;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IACvE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAA;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;IAC5C,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;IAClE,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,8BAAgB,EAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAA;IAC3D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChH,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACnC,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;AAChE,CAAC"}
{"version":3,"file":"counters.js","sourceRoot":"","sources":["../../src/core/counters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IACvE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAA;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;IAC5C,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;IAClE,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,CAAC;QACH,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAA;IAC3D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChH,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IACnC,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;AAChE,CAAC"}

@@ -7,5 +7,8 @@ import type { Link, Wikilink, Heading, Table, FragmentMeta } from '../types/index.js';

export declare function extractFragmentMeta(metadata: Record<string, unknown> | null): FragmentMeta | null;
/** @deprecated Use walkHeadings from micromark-walk.js instead (token-accurate) */
export declare function extractHeadings(content: string): Heading[];
/** @deprecated Use walkLinks from micromark-walk.js instead (token-accurate) */
export declare function extractLinks(content: string): Link[];
export declare function extractWikilinks(content: string): Wikilink[];
/** @deprecated Use walkTables from micromark-walk.js instead (uses GFM spec) */
export declare function extractTables(content: string): Table[];

@@ -1,45 +0,4 @@

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractFrontmatter = extractFrontmatter;
exports.extractFragmentMeta = extractFragmentMeta;
exports.extractHeadings = extractHeadings;
exports.extractLinks = extractLinks;
exports.extractWikilinks = extractWikilinks;
exports.extractTables = extractTables;
const path = __importStar(require("path"));
const yaml = __importStar(require("js-yaml"));
function extractFrontmatter(content) {
import * as path from 'path';
import * as yaml from 'js-yaml';
export function extractFrontmatter(content) {
const frontmatterRegex = /^---\s*\n([\s\S]*?)\n---\s*\n/;

@@ -59,3 +18,3 @@ const match = content.match(frontmatterRegex);

}
function extractFragmentMeta(metadata) {
export function extractFragmentMeta(metadata) {
if (!metadata)

@@ -77,3 +36,4 @@ return null;

}
function extractHeadings(content) {
/** @deprecated Use walkHeadings from micromark-walk.js instead (token-accurate) */
export function extractHeadings(content) {
const headings = [];

@@ -88,3 +48,4 @@ const headingRegex = /^(#{1,6})\s+(.+)$/gm;

}
function extractLinks(content) {
/** @deprecated Use walkLinks from micromark-walk.js instead (token-accurate) */
export function extractLinks(content) {
const links = [];

@@ -106,3 +67,3 @@ const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;

}
function extractWikilinks(content) {
export function extractWikilinks(content) {
const wikilinks = [];

@@ -116,3 +77,4 @@ const wikiRegex = /\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g;

}
function extractTables(content) {
/** @deprecated Use walkTables from micromark-walk.js instead (uses GFM spec) */
export function extractTables(content) {
const tables = [];

@@ -119,0 +81,0 @@ const tableRegex = /\|(.+)\|\n\|[-:\s|]+\|\n((?:\|.+\|\n?)+)/g;

@@ -1,1 +0,1 @@

{"version":3,"file":"extractors.js","sourceRoot":"","sources":["../../src/core/extractors.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"extractors.js","sourceRoot":"","sources":["../../src/core/extractors.ts"],"names":[],"mappings":"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"}

@@ -1,6 +0,1 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildGraph = buildGraph;
exports.findOrphans = findOrphans;
exports.findBacklinks = findBacklinks;
function addEdge(graph, edges, source, target, type) {

@@ -17,3 +12,3 @@ if (!graph[source])

}
function buildGraph(results) {
export function buildGraph(results) {
const graph = {}, edges = [];

@@ -43,3 +38,3 @@ results.forEach(doc => {

}
function findOrphans(graph, excludeOrphansWithDeps) {
export function findOrphans(graph, excludeOrphansWithDeps) {
return Object.keys(graph.nodes).filter(node => {

@@ -51,3 +46,3 @@ if (excludeOrphansWithDeps?.has(node))

}
function findBacklinks(results, targetFileName) {
export function findBacklinks(results, targetFileName) {
const backlinks = [];

@@ -54,0 +49,0 @@ results.forEach(doc => {

@@ -1,1 +0,1 @@

{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/core/graph.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/core/graph.ts"],"names":[],"mappings":"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"}

@@ -1,5 +0,2 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getFragmentHealth = getFragmentHealth;
function getFragmentHealth(results) {
export function getFragmentHealth(results) {
const total = results.length;

@@ -6,0 +3,0 @@ const withFrontmatter = results.filter(r => r.fragmentMeta).length;

@@ -1,1 +0,1 @@

{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":";;AAEA,8CAqBC;AArBD,SAAgB,iBAAiB,CAAC,OAAyB;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAA;IAC5B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAA;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IACnG,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;IACtF,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,CAAA;IAChG,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;IACtF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAA;IACnF,MAAM,MAAM,GAAyC,EAAE,CAAA;IACvD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,IAAI,CAAC,CAAC,CAAC,YAAY;YAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;aACjD,CAAC;YACJ,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK;gBAAE,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACzD,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;gBAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACxD,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;QACtH,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;AACtJ,CAAC"}
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,OAAyB;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAA;IAC5B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAA;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IACnG,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;IACtF,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,CAAA;IAChG,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;IACtF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAA;IACnF,MAAM,MAAM,GAAyC,EAAE,CAAA;IACvD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,IAAI,CAAC,CAAC,CAAC,YAAY;YAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;aACjD,CAAC;YACJ,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK;gBAAE,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACzD,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM;gBAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACxD,IAAI,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;QACtH,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;AACtJ,CAAC"}

@@ -1,28 +0,28 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AnalyzerConfigSchema = exports.CliOptions = void 0;
const zod_1 = require("zod");
exports.CliOptions = zod_1.z.object({
directory: zod_1.z.string().optional(),
json: zod_1.z.boolean().default(false),
search: zod_1.z.string().min(1, 'Search keyword cannot be empty').optional(),
filter: zod_1.z.string().regex(/^[^=]+=.+$/, 'Filter must be in format key=value').optional(),
rank: zod_1.z.boolean().default(false),
graph: zod_1.z.boolean().default(false),
deps: zod_1.z.boolean().default(false),
orphans: zod_1.z.boolean().default(false),
backlinks: zod_1.z.string().min(1, 'Backlinks target cannot be empty').optional(),
keypoints: zod_1.z.boolean().default(false),
lintFragments: zod_1.z.boolean().default(false),
session: zod_1.z.boolean().default(false),
budget: zod_1.z.number().int().positive('Budget must be a positive integer').default(100000),
maxResults: zod_1.z.number().int().nonnegative('max-results must be non-negative').default(0),
import { z } from 'zod';
import * as path from 'path';
import * as os from 'os';
const defaultSessionFile = path.join(os.homedir(), '.local', 'share', 'md-analyzer', 'tokens', 'md-analyzer-session.json');
export const CliOptions = z.object({
directory: z.string().optional(),
json: z.boolean().default(false),
search: z.string().min(1, 'Search keyword cannot be empty').optional(),
filter: z.string().regex(/^[^=]+=.+$/, 'Filter must be in format key=value').optional(),
rank: z.boolean().default(false),
graph: z.boolean().default(false),
deps: z.boolean().default(false),
orphans: z.boolean().default(false),
backlinks: z.string().min(1, 'Backlinks target cannot be empty').optional(),
keypoints: z.boolean().default(false),
lintFragments: z.boolean().default(false),
session: z.boolean().default(false),
budget: z.number().int().positive('Budget must be a positive integer').default(100000),
maxResults: z.number().int().nonnegative('max-results must be non-negative').default(0),
});
exports.AnalyzerConfigSchema = zod_1.z.object({
default_directory: zod_1.z.string().default(''),
default_budget: zod_1.z.number().int().positive().default(100000),
max_tokens: zod_1.z.number().int().positive().default(200000),
max_results_default: zod_1.z.number().int().nonnegative().default(20),
session_file: zod_1.z.string().default('/tmp/md-analyzer-session.json'),
export const AnalyzerConfigSchema = z.object({
default_directory: z.string().default(''),
default_budget: z.number().int().positive().default(100000),
max_tokens: z.number().int().positive().default(200000),
max_results_default: z.number().int().nonnegative().default(20),
session_file: z.string().default(defaultSessionFile),
});
//# sourceMappingURL=schema.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,UAAU,GAAG,OAAC,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC,CAAC,QAAQ,EAAE;IACtE,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,oCAAoC,CAAC,CAAC,QAAQ,EAAE;IACvF,IAAI,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,KAAK,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACjC,IAAI,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC,QAAQ,EAAE;IAC3E,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,aAAa,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACtF,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CACxF,CAAC,CAAA;AAIW,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,iBAAiB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACzC,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3D,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACvD,mBAAmB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/D,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC;CAClE,CAAC,CAAA"}
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/core/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAExB,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAA;AAE1H,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,gCAAgC,CAAC,CAAC,QAAQ,EAAE;IACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,oCAAoC,CAAC,CAAC,QAAQ,EAAE;IACvF,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC,QAAQ,EAAE;IAC3E,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACtF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CACxF,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACzC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACvD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC;CACrD,CAAC,CAAA"}

@@ -1,58 +0,68 @@

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
import * as fs from 'fs';
import * as cp from 'child_process';
import * as path from 'path';
let _rgAvailable = null;
function isRgAvailable() {
if (_rgAvailable === null) {
try {
cp.execSync('rg --version', { stdio: 'ignore' });
_rgAvailable = true;
}
catch {
_rgAvailable = false;
}
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.searchContent = searchContent;
exports.filterByMetadata = filterByMetadata;
exports.rankByRelevance = rankByRelevance;
const fs = __importStar(require("fs"));
function searchContent(results, keyword) {
return _rgAvailable;
}
export function searchContent(results, keyword) {
const kw = keyword.toLowerCase();
return results.filter(doc => {
const content = fs.readFileSync(doc.file, 'utf-8').toLowerCase();
return content.includes(kw);
});
const files = results.map(r => r.file);
if (files.length === 0)
return [];
if (!isRgAvailable()) {
return results.filter(doc => {
const content = fs.readFileSync(doc.file, 'utf-8').toLowerCase();
return content.includes(kw);
});
}
try {
const out = cp.execFileSync('rg', ['-ilF', kw, ...files], { encoding: 'utf-8', timeout: 30000, maxBuffer: 10 * 1024 * 1024 });
const matched = new Set(out.trim().split('\n').filter(Boolean).map(f => path.resolve(f)));
return results.filter(r => matched.has(r.file));
}
catch {
return [];
}
}
function filterByMetadata(results, key, value) {
export function filterByMetadata(results, key, value) {
return results.filter(doc => doc.metadata && String(doc.metadata[key] || '') === value);
}
function rankByRelevance(results, keyword) {
export function rankByRelevance(results, keyword) {
const kw = keyword.toLowerCase();
return [...results].sort((a, b) => {
const countA = (fs.readFileSync(a.file, 'utf-8').toLowerCase().match(new RegExp(kw, 'g')) || []).length;
const countB = (fs.readFileSync(b.file, 'utf-8').toLowerCase().match(new RegExp(kw, 'g')) || []).length;
return countB - countA;
});
const files = results.map(r => r.file);
if (files.length === 0)
return [];
if (!isRgAvailable()) {
return [...results].sort((a, b) => {
const countA = (fs.readFileSync(a.file, 'utf-8').toLowerCase().match(new RegExp(kw, 'g')) || []).length;
const countB = (fs.readFileSync(b.file, 'utf-8').toLowerCase().match(new RegExp(kw, 'g')) || []).length;
return countB - countA;
});
}
const counts = new Map();
try {
const out = cp.execFileSync('rg', ['-icF', kw, ...files], { encoding: 'utf-8', timeout: 30000, maxBuffer: 10 * 1024 * 1024 });
for (const line of out.trim().split('\n').filter(Boolean)) {
const idx = line.lastIndexOf(':');
if (idx > 0) {
const f = line.slice(0, idx);
const c = parseInt(line.slice(idx + 1), 10);
if (!isNaN(c))
counts.set(f, c);
}
}
}
catch { }
return [...results].sort((a, b) => (counts.get(b.file) ?? 0) - (counts.get(a.file) ?? 0));
}
//# sourceMappingURL=search.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,sCAMC;AAED,4CAEC;AAED,0CAOC;AAtBD,uCAAwB;AAGxB,SAAgB,aAAa,CAAC,OAAyB,EAAE,OAAe;IACtE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAChC,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC1B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QAChE,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAyB,EAAE,GAAW,EAAE,KAAa;IACpF,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,CAAA;AACzF,CAAC;AAED,SAAgB,eAAe,CAAC,OAAyB,EAAE,OAAe;IACxE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAChC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;QACvG,MAAM,MAAM,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;QACvG,OAAO,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC"}
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"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"}

@@ -1,45 +0,7 @@

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadSession = loadSession;
exports.saveSession = saveSession;
exports.updateSessionStats = updateSessionStats;
exports.getTokenBudgetReport = getTokenBudgetReport;
const fs = __importStar(require("fs"));
const constants_js_1 = require("../utils/constants.js");
function loadSession() {
import * as fs from 'fs';
import * as path from 'path';
import { SESSION_FILE } from '../utils/constants.js';
export function loadSession() {
try {
return JSON.parse(fs.readFileSync(constants_js_1.SESSION_FILE, 'utf-8'));
return JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
}

@@ -51,10 +13,18 @@ catch (e) {

}
function saveSession(session) {
fs.writeFileSync(constants_js_1.SESSION_FILE, JSON.stringify(session, null, 2));
export function saveSession(session) {
try {
const dir = path.dirname(SESSION_FILE);
if (!fs.existsSync(dir))
fs.mkdirSync(dir, { recursive: true });
fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
}
catch (e) {
console.error('session_save_error:', e instanceof Error ? e.message : e);
}
}
function updateSessionStats(results, session) {
export function updateSessionStats(results, session) {
const tokensThisCall = results.reduce((sum, r) => sum + r.stats.tokens, 0);
return { ...session, calls: session.calls + 1, totalTokens: session.totalTokens + tokensThisCall, filesProcessed: session.filesProcessed + results.length };
}
function getTokenBudgetReport(session, budget) {
export function getTokenBudgetReport(session, budget) {
const remaining = budget - session.totalTokens;

@@ -61,0 +31,0 @@ const percentUsed = Math.round((session.totalTokens / budget) * 100);

@@ -1,1 +0,1 @@

{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,kCAOC;AAED,kCAEC;AAED,gDAGC;AAED,oDAOC;AA7BD,uCAAwB;AACxB,wDAAoD;AAGpD,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,2BAAY,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;QAClD,OAAO,EAAE,SAAS,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAA;IACjI,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,OAAqB;IAC/C,EAAE,CAAC,aAAa,CAAC,2BAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAClE,CAAC;AAED,SAAgB,kBAAkB,CAAC,OAAyB,EAAE,OAAqB;IACjF,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC1E,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,GAAG,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;AAC7J,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAqB,EAAE,MAAc;IACxE,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAA;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA;IACpE,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS;QAC5G,WAAW,EAAE,WAAW,GAAG,GAAG,EAAE,MAAM,EAAE,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;KAC/G,CAAA;AACH,CAAC"}
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAGpD,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;QAClD,OAAO,EAAE,SAAS,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAA;IACjI,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAqB;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAClE,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAyB,EAAE,OAAqB;IACjF,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC1E,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,GAAG,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;AAC7J,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAqB,EAAE,MAAc;IACxE,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAA;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA;IACpE,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS;QAC5G,WAAW,EAAE,WAAW,GAAG,GAAG,EAAE,MAAM,EAAE,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;KAC/G,CAAA;AACH,CAAC"}

@@ -1,2 +0,2 @@

export { analyzeFile, scanMarkdownFiles } from './core/analyzer.js';
export { analyzeFile, analyzeFileWithMicromark, scanMarkdownFiles } from './core/analyzer.js';
export { buildGraph, findOrphans, findBacklinks } from './core/graph.js';

@@ -3,0 +3,0 @@ export { searchContent, filterByMetadata, rankByRelevance } from './core/search.js';

@@ -1,34 +0,9 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AnalyzerConfigSchema = exports.CliOptions = exports.extractTables = exports.extractWikilinks = exports.extractLinks = exports.extractHeadings = exports.extractFragmentMeta = exports.extractFrontmatter = exports.countStats = exports.getTokenBudgetReport = exports.updateSessionStats = exports.saveSession = exports.loadSession = exports.getFragmentHealth = exports.rankByRelevance = exports.filterByMetadata = exports.searchContent = exports.findBacklinks = exports.findOrphans = exports.buildGraph = exports.scanMarkdownFiles = exports.analyzeFile = void 0;
var analyzer_js_1 = require("./core/analyzer.js");
Object.defineProperty(exports, "analyzeFile", { enumerable: true, get: function () { return analyzer_js_1.analyzeFile; } });
Object.defineProperty(exports, "scanMarkdownFiles", { enumerable: true, get: function () { return analyzer_js_1.scanMarkdownFiles; } });
var graph_js_1 = require("./core/graph.js");
Object.defineProperty(exports, "buildGraph", { enumerable: true, get: function () { return graph_js_1.buildGraph; } });
Object.defineProperty(exports, "findOrphans", { enumerable: true, get: function () { return graph_js_1.findOrphans; } });
Object.defineProperty(exports, "findBacklinks", { enumerable: true, get: function () { return graph_js_1.findBacklinks; } });
var search_js_1 = require("./core/search.js");
Object.defineProperty(exports, "searchContent", { enumerable: true, get: function () { return search_js_1.searchContent; } });
Object.defineProperty(exports, "filterByMetadata", { enumerable: true, get: function () { return search_js_1.filterByMetadata; } });
Object.defineProperty(exports, "rankByRelevance", { enumerable: true, get: function () { return search_js_1.rankByRelevance; } });
var health_js_1 = require("./core/health.js");
Object.defineProperty(exports, "getFragmentHealth", { enumerable: true, get: function () { return health_js_1.getFragmentHealth; } });
var session_js_1 = require("./core/session.js");
Object.defineProperty(exports, "loadSession", { enumerable: true, get: function () { return session_js_1.loadSession; } });
Object.defineProperty(exports, "saveSession", { enumerable: true, get: function () { return session_js_1.saveSession; } });
Object.defineProperty(exports, "updateSessionStats", { enumerable: true, get: function () { return session_js_1.updateSessionStats; } });
Object.defineProperty(exports, "getTokenBudgetReport", { enumerable: true, get: function () { return session_js_1.getTokenBudgetReport; } });
var counters_js_1 = require("./core/counters.js");
Object.defineProperty(exports, "countStats", { enumerable: true, get: function () { return counters_js_1.countStats; } });
var extractors_js_1 = require("./core/extractors.js");
Object.defineProperty(exports, "extractFrontmatter", { enumerable: true, get: function () { return extractors_js_1.extractFrontmatter; } });
Object.defineProperty(exports, "extractFragmentMeta", { enumerable: true, get: function () { return extractors_js_1.extractFragmentMeta; } });
Object.defineProperty(exports, "extractHeadings", { enumerable: true, get: function () { return extractors_js_1.extractHeadings; } });
Object.defineProperty(exports, "extractLinks", { enumerable: true, get: function () { return extractors_js_1.extractLinks; } });
Object.defineProperty(exports, "extractWikilinks", { enumerable: true, get: function () { return extractors_js_1.extractWikilinks; } });
Object.defineProperty(exports, "extractTables", { enumerable: true, get: function () { return extractors_js_1.extractTables; } });
var schema_js_1 = require("./core/schema.js");
Object.defineProperty(exports, "CliOptions", { enumerable: true, get: function () { return schema_js_1.CliOptions; } });
Object.defineProperty(exports, "AnalyzerConfigSchema", { enumerable: true, get: function () { return schema_js_1.AnalyzerConfigSchema; } });
export { analyzeFile, analyzeFileWithMicromark, scanMarkdownFiles } from './core/analyzer.js';
export { buildGraph, findOrphans, findBacklinks } from './core/graph.js';
export { searchContent, filterByMetadata, rankByRelevance } from './core/search.js';
export { getFragmentHealth } from './core/health.js';
export { loadSession, saveSession, updateSessionStats, getTokenBudgetReport } from './core/session.js';
export { countStats } from './core/counters.js';
export { extractFrontmatter, extractFragmentMeta, extractHeadings, extractLinks, extractWikilinks, extractTables } from './core/extractors.js';
export { CliOptions, AnalyzerConfigSchema } from './core/schema.js';
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,kDAAmE;AAA1D,0GAAA,WAAW,OAAA;AAAE,gHAAA,iBAAiB,OAAA;AACvC,4CAAwE;AAA/D,sGAAA,UAAU,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,yGAAA,aAAa,OAAA;AAC/C,8CAAmF;AAA1E,0GAAA,aAAa,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,4GAAA,eAAe,OAAA;AACzD,8CAAoD;AAA3C,8GAAA,iBAAiB,OAAA;AAC1B,gDAAsG;AAA7F,yGAAA,WAAW,OAAA;AAAE,yGAAA,WAAW,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAC3E,kDAA+C;AAAtC,yGAAA,UAAU,OAAA;AACnB,sDAA8I;AAArI,mHAAA,kBAAkB,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAAE,gHAAA,eAAe,OAAA;AAAE,6GAAA,YAAY,OAAA;AAAE,iHAAA,gBAAgB,OAAA;AAAE,8GAAA,aAAa,OAAA;AAEhH,8CAAmE;AAA1D,uGAAA,UAAU,OAAA;AAAE,iHAAA,oBAAoB,OAAA"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC7F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACtG,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAE9I,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA"}

@@ -6,2 +6,3 @@ export interface Link {

fileName: string | null;
isImage?: boolean;
}

@@ -43,2 +44,5 @@ export interface Wikilink {

tokens: number;
boldCount?: number;
italicCount?: number;
bulletCount?: number;
errors?: string[];

@@ -45,0 +49,0 @@ }

@@ -1,3 +0,2 @@

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
export {};
//# sourceMappingURL=index.js.map

@@ -1,43 +0,9 @@

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTomlConfig = getTomlConfig;
exports.resolveConfigPath = resolveConfigPath;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const schema_js_1 = require("../core/schema.js");
const DEFAULT_CONFIG = schema_js_1.AnalyzerConfigSchema.parse({});
function getTomlConfig(tomlPath) {
import * as fs from 'fs';
import * as path from 'path';
import { fileURLToPath } from 'url';
import { AnalyzerConfigSchema } from '../core/schema.js';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const DEFAULT_CONFIG = AnalyzerConfigSchema.parse({});
export function getTomlConfig(tomlPath) {
try {

@@ -79,3 +45,3 @@ const content = fs.readFileSync(tomlPath, 'utf-8');

}
function resolveConfigPath() {
export function resolveConfigPath() {
const candidates = [

@@ -82,0 +48,0 @@ path.join(__dirname, '..', '..', 'hooks.toml'),

@@ -1,1 +0,1 @@

{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
export declare const SKIP_DIRS: Set<string>;
export declare const SESSION_FILE = "/tmp/md-analyzer-session.json";
export declare const SESSION_FILE: string;
export declare const LOG_DIR: string;

@@ -1,39 +0,7 @@

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.LOG_DIR = exports.SESSION_FILE = exports.SKIP_DIRS = void 0;
const path = __importStar(require("path"));
exports.SKIP_DIRS = new Set([
import * as path from 'path';
import * as os from 'os';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
export const SKIP_DIRS = new Set([
'node_modules', '.git', '.svn', '.hg',

@@ -43,4 +11,7 @@ 'services', 'data', 'appendonlydir',

]);
exports.SESSION_FILE = '/tmp/md-analyzer-session.json';
exports.LOG_DIR = path.join(__dirname, '..', '..', 'log');
// Get STATE_DIR from env, default to XDG data dir (~/.local/share/md-analyzer)
const STATE_DIR = process.env.STATE_DIR || path.join(os.homedir(), '.local', 'share', 'md-analyzer');
export const SESSION_FILE = path.join(STATE_DIR, 'tokens', 'md-analyzer-session.json');
// Get LOG_DIR from env, default to XDG state dir (~/.local/state/md-analyzer)
export const LOG_DIR = process.env.LOG_DIR || path.join(os.homedir(), '.local', 'state', 'md-analyzer', 'log');
//# sourceMappingURL=constants.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4B;AAEf,QAAA,SAAS,GAAG,IAAI,GAAG,CAAC;IAC/B,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;IACrC,UAAU,EAAE,MAAM,EAAE,eAAe;IACnC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU;CACpD,CAAC,CAAA;AAEW,QAAA,YAAY,GAAG,+BAA+B,CAAA;AAE9C,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA"}
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAE1C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IAC/B,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;IACrC,UAAU,EAAE,MAAM,EAAE,eAAe;IACnC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU;CACpD,CAAC,CAAA;AAEF,+EAA+E;AAC/E,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAA;AACpG,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAA;AAEtF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,CAAA"}

@@ -45,7 +45,7 @@ [tool.md-analyzer]

[tool.md-analyzer.examples]
quick_overview = "node md-analyzer.js <dir> --keypoints --json"
search_and_rank = "node md-analyzer.js <dir> --search 'task' --rank --json"
find_related = "node md-analyzer.js <dir> --backlinks adr-2026-04-01-task-lifecycle --json"
token_budget = "node md-analyzer.js <dir> --session --budget 50000 --json"
filter_by_category = "node md-analyzer.js <dir> --filter category=guides --json"
quick_overview = "md-analyzer <file|dir> --keypoints --json"
search_and_rank = "md-analyzer <dir> --search 'task' --rank --json"
find_related = "md-analyzer <dir> --backlinks adr-2026-04-01-task-lifecycle --json"
token_budget = "md-analyzer <dir> --session --budget 50000 --json"
filter_by_category = "md-analyzer <dir> --filter category=guides --json"

@@ -52,0 +52,0 @@ [tool.md-analyzer.agent_use_case]

{
"name": "@ev3lynx/md-analyzer",
"version": "0.2.1",
"version": "0.2.2",
"description": "Markdown document analyzer for AI agents - extract metadata, headings, links, tables, tokens, and key points",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"type": "module",
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
},
"./package.json": "./package.json"
},
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"bin": {

@@ -16,3 +24,4 @@ "md-analyzer": "dist/cli/index.js"

"prepublish": "npm run build",
"test": "node dist/cli/index.js . --json"
"test": "node dist/cli/index.js . --json",
"ci": "npm run build && npm run typecheck && npm run lint && npm test"
},

@@ -46,2 +55,3 @@ "keywords": [

"micromark": "^4.0.0",
"micromark-extension-gfm": "^3.0.0",
"zod": "^4.4.3"

@@ -48,0 +58,0 @@ },

+73
-48

@@ -14,6 +14,6 @@ # md-analyzer

| **Keypoints** | Single-shot document overview (ideal for agents) |
| **Token Tracking** | Session-based token budget with `/tmp/md-analyzer-session.json` |
| **Token Tracking** | Session-based token budget with persistent storage (`~/.local/share/md-analyzer/tokens/md-analyzer-session.json`) |
| **Graph** | Document relationship topology (backlinks, orphans) |
| **Search** | Keyword search with relevance ranking |
| **Logs** | Structured JSON logs in `log/{sessionId}.json` |
| **Logs** | Structured JSON logs in `~/.local/state/md-analyzer/log/{sessionId}.json` |

@@ -49,4 +49,6 @@ ### Why md-analyzer?

|---------|---------|---------|
| `micromark` | ^4.0.0 | Markdown parsing |
| `micromark` | ^4.0.0 | Token-stream Markdown parsing |
| `micromark-extension-gfm` | ^3.0.0 | GFM tables via micromark |
| `js-tiktoken` | ^1.0.0 | GPT token counting |
| `js-yaml` | ^4.1.0 | Frontmatter YAML parsing |

@@ -76,3 +78,3 @@ ---

```bash
node md-analyzer.js . --keypoints --json
node dist/cli/index.js . --keypoints --json
```

@@ -86,12 +88,14 @@

Accepts a `.md` file or a directory of `.md` files.
```bash
# With npx (no install required)
npx @ev3lynx/md-analyzer <directory> [options]
npx @ev3lynx/md-analyzer <file|directory> [options]
# After global install
npm install -g @ev3lynx/md-analyzer
md-analyzer <directory> [options]
md-analyzer <file|directory> [options]
# From source (development)
node md-analyzer.js <directory> [options]
node dist/cli/index.js <file|directory> [options]
```

@@ -120,5 +124,8 @@

```bash
# Quick overview (single-shot for agents)
npx @ev3lynx/md-analyzer /path/to/docs --keypoints --json
# Quick overview — single file
md-analyzer path/to/doc.md --keypoints --json
# Quick overview — entire directory
md-analyzer /path/to/docs --keypoints --json
# Search with ranking

@@ -172,18 +179,6 @@ md-analyzer . --search "task lifecycle" --rank --json

The `--keypoints` output powers a pre-read hook for OpenAI-compatible agents (opencode, kiro-cli). Before reading a file, the hook injects the structured overview so the LLM can decide what to read.
The `--keypoints` output powers a pre-read hook for AI agent frameworks (opencode, kiro-cli). Before reading a file, the hook injects a structured overview so the LLM can decide what to read.
```json
// opencode.json / kiro-cli hook config
{
"preToolUse": [
{
"matcher": { "tool_name": "read" },
"command": "uv run --project ~/.kiro/hooks python ~/.kiro/hooks/pre_read_md.py"
}
]
}
```
See [`docs/INTEGRATION.md`](./docs/INTEGRATION.md) for setup guides, `md-analyzer install --hook`, and MCP integration.
See [`python/pre_read.py`](./python/README.md) for the full hook implementation.
---

@@ -235,3 +230,3 @@

|----------|-------------|---------|
| `MD_ANALYZER_PATH` | Path to md-analyzer.js | `md-analyzer.js` |
| `MD_ANALYZER_PATH` | Path to compiled CLI entry | `dist/cli/index.js` |
| `MD_ANALYZER_DEFAULT_DIR` | Default directory | `.` |

@@ -241,2 +236,4 @@ | `MD_ANALYZER_MAX_TOKENS` | Max token limit | `200000` |

| `MD_ANALYZER_MAX_RESULTS` | Max results | `20` |
| `STATE_DIR` | Token tracking storage directory | `~/.local/share/md-analyzer` |
| `LOG_DIR` | Run logs storage directory | `~/.local/state/md-analyzer/log` |

@@ -261,4 +258,6 @@ ### Priority Chain

Location: `/tmp/md-analyzer-session.json`
Location: `~/.local/share/md-analyzer/tokens/md-analyzer-session.json` (XDG Data Home)
Persistent storage survives system reboots. Override with `STATE_DIR` environment variable.
```json

@@ -276,4 +275,6 @@ {

Location: `{project}/log/{sessionId}.json`
Location: `~/.local/state/md-analyzer/log/{sessionId}.json` (XDG State Home)
Persistent storage survives system reboots. Override with `LOG_DIR` environment variable.
```json

@@ -304,25 +305,43 @@ [

├── src/
│ └── md-analyzer.ts # TypeScript source
├── md-analyzer.js # Compiled output
├── md-analyzer.d.ts # Type declarations
├── hooks.toml # Configuration
├── log/ # Run logs
├── python/ # Agent hook integration
│ ├── cli/index.ts # CLI entry (file or directory)
│ ├── core/
│ │ ├── analyzer.ts # Orchestrator — sync+async paths
│ │ ├── micromark-walk.ts # Token-stream walkers (primary)
│ │ ├── hybrid-merge.ts # Code-block region filtering
│ │ ├── extractors.ts # Regex fallbacks (frontmatter, wikilinks)
│ │ ├── counters.ts # Token/word/char counting
│ │ ├── graph.ts # Document relationship graph
│ │ ├── search.ts # Keyword search + relevance
│ │ ├── health.ts # Fragment health checks
│ │ └── session.ts # Token budget tracking → XDG persistent storage
│ ├── types/index.ts # Shared TypeScript types
│ ├── utils/constants.ts # SKIP_DIRS, SESSION_FILE, LOG_DIR (XDG paths)
│ └── utils/config.ts # TOML config parser
├── dist/ # Compiled output
├── hooks.toml # Configuration
├── python/ # Agent hook integration
│ ├── pre_read.py
│ └── README.md
└── embedded-docs/ # Sample documents for testing
└── embedded-docs/ # Sample documents for testing
```
**Storage:**
- **Session tokens:** `~/.local/share/md-analyzer/tokens/` (XDG_DATA_HOME)
- **Run logs:** `~/.local/state/md-analyzer/log/` (XDG_STATE_HOME)
### Key Functions
| Function | Description |
|----------|-------------|
| `extractFrontmatter()` | YAML metadata extraction |
| `extractHeadings()` | Parse H1-H6 structure |
| `extractLinks()` | Internal/external link analysis |
| `extractTables()` | Markdown table parsing |
| `scanMarkdownFiles()` | Recursive directory scanner |
| `buildGraph()` | Document relationship topology |
| `extractKeyPoints()` | Single-shot overview |
| `loadSession()` / `saveSession()` | Token budget tracking |
| Function | Micromark (primary) | Regex (fallback) |
|----------|-------------------|-------------------|
| `extractFrontmatter()` | — | ✅ stays on regex |
| `walkHeadings()` | ✅ ATX + setext in one pass | `extractHeadings()` *(deprecated)* |
| `walkLinks()` | ✅ inline, autolink, reference, image | `extractLinks()` *(deprecated)* |
| `walkTables()` | ✅ via GFM spec | `extractTables()` *(deprecated)* |
| `walkCodeBlocks()` | ✅ codeFenced + codeIndented regions | — |
| `extractWikilinks()` | — | ✅ stays on regex |
| `analyzeFileWithMicromark()` | ✅ Hybrid orchestrator | `analyzeFile()` sync fallback |
| `scanMarkdownFiles()` | — | ✅ Recursive directory scanner |
| `buildGraph()` | — | ✅ Document relationship topology |
| `extractKeyPoints()` | — | ✅ Single-shot overview |
| `loadSession()` / `saveSession()` | — | ✅ Token budget tracking |

@@ -333,7 +352,13 @@ ---

| Error | Description |
|-------|-------------|
| `permission_denied` | Skip inaccessible directories |
| `file_read_error` | Return partial results |
| `token_count_fallback` | Use `charCount/4` estimation |
| Error | Description | Recovery |
|-------|-------------|----------|
| `permission_denied` | Cannot read directory | Skip, continue scan |
| `file_read_error` | Cannot read file | Empty result with error |
| `path_not_found` | CLI argument file/dir doesn't exist | Empty results `[]` |
| `micromark_unavailable` | ESM import failure | Automatic regex fallback |
| `micromark_pipeline_failed` | Micromark parse crash | Automatic regex fallback |
| `walkLinks_failed` | Link token walker error | Empty link list (regex fallback for that field) |
| `walkHeadings_failed` | Heading token walker error | Empty heading list (regex fallback) |
| `walkTables_failed` | Table parse error | Empty table list (regex fallback) |
| `token_count_fallback` | tiktoken unavailable | Estimate via `charCount / 4` |

@@ -340,0 +365,0 @@ ---

@@ -5,6 +5,10 @@ #!/usr/bin/env node

import * as fs from 'fs'
import { fileURLToPath } from 'url'
import { z } from 'zod'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
import { CliOptions } from '../core/schema.js'
import { getTomlConfig, resolveConfigPath } from '../utils/config.js'
import { scanMarkdownFiles, analyzeFile } from '../core/analyzer.js'
import { scanMarkdownFiles, analyzeFile, analyzeFileWithMicromark } from '../core/analyzer.js'
import { buildGraph, findOrphans, findBacklinks } from '../core/graph.js'

@@ -24,3 +28,3 @@ import { searchContent, filterByMetadata, rankByRelevance } from '../core/search.js'

.name('md-analyzer')
.description('Markdown document analyzer for AI agents - extract metadata, headings, links, tables, tokens, and key points from .md files')
.description('Markdown document analyzer for AI agents - extract metadata, headings, links, tables, tokens, formatting counts, and key points from .md files')
.version(pkgVersion, '--version, -v', 'Show version number')

@@ -51,3 +55,3 @@ .arguments('[directory]')

program.action((directory: string | undefined, options: Record<string, unknown>) => {
program.action(async (directory: string | undefined, options: Record<string, unknown>) => {
const startTime = Date.now()

@@ -72,13 +76,32 @@

const config = getTomlConfig(configPath)
const targetDir = parsed.directory || process.env['MD_ANALYZER_DEFAULT_DIR'] || config.default_directory || process.cwd()
const targetArg = parsed.directory || process.env['MD_ANALYZER_DEFAULT_DIR'] || config.default_directory || process.cwd()
if (!parsed.json) console.log('Scanning: ' + targetDir + '\n')
let mdFiles: string[] = []
let scanErrors: string[] = []
const { files: mdFiles, errors: scanErrors } = scanMarkdownFiles(targetDir)
if (!parsed.json) {
console.log('Found ' + mdFiles.length + ' .md files\n')
if (scanErrors.length > 0) console.log('Warnings: ' + scanErrors.length + ' directories skipped\n')
try {
const stat = fs.statSync(targetArg)
if (stat.isFile()) {
if (targetArg.endsWith('.md')) mdFiles = [targetArg]
else {
scanErrors.push('not_a_markdown_file: ' + targetArg)
if (!parsed.json) console.log('Not a .md file: ' + targetArg + '\n')
}
} else if (stat.isDirectory()) {
if (!parsed.json) console.log('Scanning: ' + targetArg + '\n')
const scanned = scanMarkdownFiles(targetArg)
mdFiles = scanned.files
scanErrors = scanned.errors
if (!parsed.json) {
console.log('Found ' + mdFiles.length + ' .md files\n')
if (scanErrors.length > 0) console.log('Warnings: ' + scanErrors.length + ' directories skipped\n')
}
} else {
scanErrors.push('unsupported_path_type: ' + targetArg)
}
} catch {
scanErrors.push('path_not_found: ' + targetArg)
}
let results = mdFiles.map(file => analyzeFile(file))
let results = mdFiles.map(file => { try { return analyzeFileWithMicromark(file) } catch { return analyzeFile(file) } })
if (scanErrors.length > 0 && results.length > 0) {

@@ -142,3 +165,3 @@ if (!results[0].stats.errors) results[0].stats.errors = []

sessionId: updatedSession.sessionId,
directory: targetDir,
directory: targetArg,
flags: usedFlags,

@@ -145,0 +168,0 @@ filesFound: mdFiles.length,

@@ -11,3 +11,4 @@ import * as fs from 'fs'

totalHeadings: doc.stats.totalHeadings, totalLinks: doc.stats.totalLinks, totalWikilinks: doc.stats.totalWikilinks,
totalTokens: doc.stats.tokens, wordCount: doc.stats.wordCount
totalTokens: doc.stats.tokens, wordCount: doc.stats.wordCount,
boldCount: doc.stats.boldCount ?? 0, italicCount: doc.stats.italicCount ?? 0, bulletCount: doc.stats.bulletCount ?? 0
},

@@ -14,0 +15,0 @@ keyHeadings: doc.headings.slice(0, 10).map((h, i) => ({

@@ -5,4 +5,6 @@ import * as fs from 'fs'

import { SKIP_DIRS } from '../utils/constants.js'
import { extractFrontmatter, extractFragmentMeta, extractHeadings, extractLinks, extractWikilinks, extractTables } from './extractors.js'
import { extractFrontmatter, extractFragmentMeta, extractHeadings, extractLinks, extractTables, extractWikilinks } from './extractors.js'
import { countStats } from './counters.js'
import { walkCodeBlocks, walkLinks, walkHeadings, walkTables, walkFormatting } from './micromark-walk.js'
import { filterMicromarkLinks, filterMicromarkHeadings, filterMicromarkTables, countCodeBlocks, countFormatting } from './hybrid-merge.js'
import type { AnalysisResult, SectionInfo } from '../types/index.js'

@@ -45,2 +47,29 @@

function buildBaseResult(filePath: string, content: string, errors: string[]): AnalysisResult {
const { metadata, content: markdownContent } = extractFrontmatter(content)
const fragmentMeta = extractFragmentMeta(metadata)
const headings = extractHeadings(markdownContent)
const links = extractLinks(markdownContent)
const wikilinks = extractWikilinks(markdownContent)
const tables = extractTables(markdownContent)
const counts = countStats(markdownContent)
if (counts.tokens === 0 && !errors.includes('token_count_fallback')) {
errors.push('token_count_fallback: tiktoken unavailable')
}
const sections = computeSections(markdownContent, headings)
const fileName = path.basename(filePath, '.md')
return {
file: filePath, fileName, metadata, fragmentMeta, headings, sections, links, wikilinks, tables,
stats: {
totalHeadings: headings.length, totalLinks: links.length,
internalLinks: links.filter(l => l.isInternal).length,
externalLinks: links.filter(l => !l.isInternal).length,
totalWikilinks: wikilinks.length, wordCount: counts.wordCount,
charCount: counts.charCount, lineCount: counts.lineCount,
codeBlocks: counts.codeBlocks, tables: tables.length,
tokens: counts.tokens, errors: errors.length > 0 ? errors : undefined
}
}
}
export function analyzeFile(filePath: string): AnalysisResult {

@@ -58,22 +87,62 @@ const errors: string[] = []

}
const { metadata, content: markdownContent } = extractFrontmatter(content)
const fragmentMeta = extractFragmentMeta(metadata)
const headings = extractHeadings(markdownContent)
const links = extractLinks(markdownContent)
const wikilinks = extractWikilinks(markdownContent)
const tables = extractTables(markdownContent)
const counts = countStats(markdownContent)
if (counts.tokens === 0) errors.push('token_count_fallback: tiktoken unavailable')
return buildBaseResult(filePath, content, errors)
}
const sections = computeSections(markdownContent, headings)
export function analyzeFileWithMicromark(filePath: string): AnalysisResult {
const errors: string[] = []
return {
file: filePath, fileName: path.basename(filePath, '.md'), metadata, fragmentMeta, headings, sections, links, wikilinks, tables,
stats: {
totalHeadings: headings.length, totalLinks: links.length, internalLinks: links.filter(l => l.isInternal).length,
externalLinks: links.filter(l => !l.isInternal).length, totalWikilinks: wikilinks.length, wordCount: counts.wordCount,
charCount: counts.charCount, lineCount: counts.lineCount, codeBlocks: counts.codeBlocks, tables: tables.length,
tokens: counts.tokens, errors: errors.length > 0 ? errors : undefined
let content = ''
try { content = fs.readFileSync(filePath, 'utf-8') }
catch (e: unknown) {
errors.push(`file_read_error: ${e instanceof Error ? e.message : 'unknown'}`)
return {
file: filePath, fileName: path.basename(filePath, '.md'), metadata: null, fragmentMeta: null,
headings: [], sections: [], links: [], wikilinks: [], tables: [],
stats: { totalHeadings: 0, totalLinks: 0, internalLinks: 0, externalLinks: 0, totalWikilinks: 0, wordCount: 0, charCount: 0, lineCount: 0, codeBlocks: 0, tables: 0, tokens: 0, errors }
}
}
const { content: markdownContent } = extractFrontmatter(content)
try {
const regions = walkCodeBlocks(markdownContent)
const mmLinks = walkLinks(markdownContent)
const mmHeadings = walkHeadings(markdownContent)
const mmTables = walkTables(markdownContent)
const mmFormatting = walkFormatting(markdownContent)
if (mmLinks === null) errors.push('walkLinks_failed')
if (mmHeadings === null) errors.push('walkHeadings_failed')
if (mmTables === null) errors.push('walkTables_failed')
if (mmFormatting === null) errors.push('walkFormatting_failed')
const safeRegions = regions ?? []
const result = buildBaseResult(filePath, content, errors)
result.links = filterMicromarkLinks(mmLinks ?? [], safeRegions)
result.stats.totalLinks = result.links.length
result.stats.internalLinks = result.links.filter(l => l.isInternal).length
result.stats.externalLinks = result.links.filter(l => !l.isInternal).length
result.headings = filterMicromarkHeadings(mmHeadings ?? [], safeRegions, markdownContent)
result.sections = computeSections(markdownContent, result.headings)
result.stats.totalHeadings = result.headings.length
result.tables = filterMicromarkTables(mmTables ?? [], safeRegions, markdownContent)
result.stats.tables = result.tables.length
result.stats.codeBlocks = countCodeBlocks(regions)
const fmt = countFormatting(mmFormatting, markdownContent, safeRegions)
result.stats.boldCount = fmt.boldCount
result.stats.italicCount = fmt.italicCount
result.stats.bulletCount = fmt.bulletCount
result.stats.errors = errors.length > 0 ? errors : undefined
return result
} catch (e) {
errors.push(`micromark_pipeline_failed: ${e instanceof Error ? e.message : 'unknown'}`)
return buildBaseResult(filePath, content, errors)
}
}

@@ -36,2 +36,3 @@ import * as path from 'path'

/** @deprecated Use walkHeadings from micromark-walk.js instead (token-accurate) */
export function extractHeadings(content: string): Heading[] {

@@ -48,2 +49,3 @@ const headings: Heading[] = []

/** @deprecated Use walkLinks from micromark-walk.js instead (token-accurate) */
export function extractLinks(content: string): Link[] {

@@ -76,2 +78,3 @@ const links: Link[] = []

/** @deprecated Use walkTables from micromark-walk.js instead (uses GFM spec) */
export function extractTables(content: string): Table[] {

@@ -78,0 +81,0 @@ const tables: Table[] = []

import { z } from 'zod'
import * as path from 'path'
import * as os from 'os'
const defaultSessionFile = path.join(os.homedir(), '.local', 'share', 'md-analyzer', 'tokens', 'md-analyzer-session.json')
export const CliOptions = z.object({

@@ -27,5 +31,5 @@ directory: z.string().optional(),

max_results_default: z.number().int().nonnegative().default(20),
session_file: z.string().default('/tmp/md-analyzer-session.json'),
session_file: z.string().default(defaultSessionFile),
})
export type AnalyzerConfig = z.infer<typeof AnalyzerConfigSchema>
import * as fs from 'fs'
import * as cp from 'child_process'
import * as path from 'path'
import type { AnalysisResult } from '../types/index.js'
let _rgAvailable: boolean | null = null
function isRgAvailable(): boolean {
if (_rgAvailable === null) {
try { cp.execSync('rg --version', { stdio: 'ignore' }); _rgAvailable = true }
catch { _rgAvailable = false }
}
return _rgAvailable
}
export function searchContent(results: AnalysisResult[], keyword: string): AnalysisResult[] {
const kw = keyword.toLowerCase()
return results.filter(doc => {
const content = fs.readFileSync(doc.file, 'utf-8').toLowerCase()
return content.includes(kw)
})
const files = results.map(r => r.file)
if (files.length === 0) return []
if (!isRgAvailable()) {
return results.filter(doc => {
const content = fs.readFileSync(doc.file, 'utf-8').toLowerCase()
return content.includes(kw)
})
}
try {
const out = cp.execFileSync('rg', ['-ilF', kw, ...files], { encoding: 'utf-8', timeout: 30000, maxBuffer: 10 * 1024 * 1024 })
const matched = new Set(out.trim().split('\n').filter(Boolean).map(f => path.resolve(f)))
return results.filter(r => matched.has(r.file))
} catch {
return []
}
}

@@ -18,7 +43,27 @@

const kw = keyword.toLowerCase()
return [...results].sort((a, b) => {
const countA = (fs.readFileSync(a.file, 'utf-8').toLowerCase().match(new RegExp(kw, 'g')) || []).length
const countB = (fs.readFileSync(b.file, 'utf-8').toLowerCase().match(new RegExp(kw, 'g')) || []).length
return countB - countA
})
const files = results.map(r => r.file)
if (files.length === 0) return []
if (!isRgAvailable()) {
return [...results].sort((a, b) => {
const countA = (fs.readFileSync(a.file, 'utf-8').toLowerCase().match(new RegExp(kw, 'g')) || []).length
const countB = (fs.readFileSync(b.file, 'utf-8').toLowerCase().match(new RegExp(kw, 'g')) || []).length
return countB - countA
})
}
const counts = new Map<string, number>()
try {
const out = cp.execFileSync('rg', ['-icF', kw, ...files], { encoding: 'utf-8', timeout: 30000, maxBuffer: 10 * 1024 * 1024 })
for (const line of out.trim().split('\n').filter(Boolean)) {
const idx = line.lastIndexOf(':')
if (idx > 0) {
const f = line.slice(0, idx)
const c = parseInt(line.slice(idx + 1), 10)
if (!isNaN(c)) counts.set(f, c)
}
}
} catch {}
return [...results].sort((a, b) => (counts.get(b.file) ?? 0) - (counts.get(a.file) ?? 0))
}
import * as fs from 'fs'
import * as path from 'path'
import { SESSION_FILE } from '../utils/constants.js'

@@ -15,3 +16,9 @@ import type { AnalysisResult, SessionStats } from '../types/index.js'

export function saveSession(session: SessionStats): void {
fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2))
try {
const dir = path.dirname(SESSION_FILE)
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true })
fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2))
} catch (e: unknown) {
console.error('session_save_error:', e instanceof Error ? e.message : e)
}
}

@@ -18,0 +25,0 @@

@@ -1,2 +0,2 @@

export { analyzeFile, scanMarkdownFiles } from './core/analyzer.js'
export { analyzeFile, analyzeFileWithMicromark, scanMarkdownFiles } from './core/analyzer.js'
export { buildGraph, findOrphans, findBacklinks } from './core/graph.js'

@@ -3,0 +3,0 @@ export { searchContent, filterByMetadata, rankByRelevance } from './core/search.js'

@@ -6,2 +6,3 @@ export interface Link {

fileName: string | null
isImage?: boolean
}

@@ -48,2 +49,5 @@

tokens: number
boldCount?: number
italicCount?: number
bulletCount?: number
errors?: string[]

@@ -50,0 +54,0 @@ }

import * as fs from 'fs'
import * as path from 'path'
import { fileURLToPath } from 'url'
import { AnalyzerConfigSchema } from '../core/schema.js'
import type { AnalyzerConfig } from '../core/schema.js'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const DEFAULT_CONFIG: AnalyzerConfig = AnalyzerConfigSchema.parse({})

@@ -7,0 +11,0 @@

import * as path from 'path'
import * as os from 'os'
import { fileURLToPath } from 'url'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
export const SKIP_DIRS = new Set([

@@ -9,4 +14,7 @@ 'node_modules', '.git', '.svn', '.hg',

export const SESSION_FILE = '/tmp/md-analyzer-session.json'
// Get STATE_DIR from env, default to XDG data dir (~/.local/share/md-analyzer)
const STATE_DIR = process.env.STATE_DIR || path.join(os.homedir(), '.local', 'share', 'md-analyzer')
export const SESSION_FILE = path.join(STATE_DIR, 'tokens', 'md-analyzer-session.json')
export const LOG_DIR = path.join(__dirname, '..', '..', 'log')
// Get LOG_DIR from env, default to XDG state dir (~/.local/state/md-analyzer)
export const LOG_DIR = process.env.LOG_DIR || path.join(os.homedir(), '.local', 'state', 'md-analyzer', 'log')