@ev3lynx/md-analyzer
Advanced tools
| 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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"} |
+10
-46
@@ -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; |
+92
-66
@@ -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[]; |
+11
-49
@@ -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":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,IAAI,MAAM,SAAS,CAAA;AAG/B,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,gBAAgB,GAAG,+BAA+B,CAAA;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAiC,CAAC,CAAC,CAAC,IAAI,CAAA;QAChG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;IAClE,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IACpC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAwC;IAC1E,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1B,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAA;IACtC,MAAM,OAAO,GAAa,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACnI,MAAM,IAAI,GAAa,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC5I,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QACnC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;QACvE,IAAI;QACJ,UAAU,EAAE,OAAO;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QACxD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QACxD,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7D,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;KAC/D,CAAA;AACH,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,QAAQ,GAAc,EAAE,CAAA;IAC9B,MAAM,YAAY,GAAG,qBAAqB,CAAA;IAC1C,IAAI,KAA6B,CAAA;IACjC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;QACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACxE,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAW,EAAE,CAAA;IACxB,MAAM,SAAS,GAAG,0BAA0B,CAAA;IAC5C,IAAI,KAA6B,CAAA;IACjC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5F,IAAI,QAAQ,GAAkB,IAAI,CAAA;QAClC,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAC1C,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG;gBAAE,QAAQ,GAAG,QAAQ,CAAA;QACvD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,SAAS,GAAe,EAAE,CAAA;IAChC,MAAM,SAAS,GAAG,mCAAmC,CAAA;IACrD,IAAI,KAA6B,CAAA;IACjC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,MAAM,GAAY,EAAE,CAAA;IAC1B,MAAM,UAAU,GAAG,2CAA2C,CAAA;IAC9D,IAAI,KAA6B,CAAA;IACjC,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrE,MAAM,IAAI,GAAe,EAAE,CAAA;QAC3B,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IAChC,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"} |
@@ -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":"AAEA,SAAS,OAAO,CAAC,KAAgC,EAAE,KAAyD,EAAE,MAAc,EAAE,MAAc,EAAE,IAAY;IACxJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACjE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACjE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAyB;IAClD,MAAM,KAAK,GAA8B,EAAE,EAAE,KAAK,GAAuD,EAAE,CAAA;IAC3G,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACpB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;QACjE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC5F,CAAC,CAAC,CAAA;QACF,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACxB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACvF,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC;gBAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;QAChH,CAAC,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACrB,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACxC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;gBACxC,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;oBAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;YAC3H,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,sBAAoC;IAC5E,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QAC5C,IAAI,sBAAsB,EAAE,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAA;QACnD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAA;IAC1F,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAyB,EAAE,cAAsB;IAC7E,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACpB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,cAAc,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7F,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC,CAAC,CAAA;QACF,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACxB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACvF,IAAI,IAAI,KAAK,cAAc,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAChG,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,OAAO,SAAS,CAAA;AAClB,CAAC"} |
@@ -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"} |
+25
-25
@@ -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"} |
+60
-50
@@ -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":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,EAAE,MAAM,eAAe,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAG5B,IAAI,YAAY,GAAmB,IAAI,CAAA;AAEvC,SAAS,aAAa;IACpB,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC;YAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAAC,YAAY,GAAG,IAAI,CAAA;QAAC,CAAC;QAC7E,MAAM,CAAC;YAAC,YAAY,GAAG,KAAK,CAAA;QAAC,CAAC;IAChC,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAyB,EAAE,OAAe;IACtE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEjC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC1B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;YAChE,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAA;QAC7H,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACzF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,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,MAAM,UAAU,eAAe,CAAC,OAAyB,EAAE,OAAe;IACxE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEjC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAChC,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;YACvG,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;YACvG,OAAO,MAAM,GAAG,MAAM,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAA;QAC7H,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YACjC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;gBAC5B,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;gBAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC3F,CAAC"} |
+17
-47
@@ -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
-1
@@ -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'; |
+8
-33
@@ -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 |
+9
-43
@@ -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; |
+11
-40
@@ -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"} |
+5
-5
@@ -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] |
+14
-4
| { | ||
| "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 @@ --- |
+34
-11
@@ -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) => ({ |
+86
-17
@@ -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> |
+54
-9
| 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
-1
@@ -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') |
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
176557
13.55%70
2.94%2423
13.97%366
7.33%Yes
NaN6
20%18
28.57%2
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added