/** * Responsibilities Section * * Renders every module's full `responsibilities.md` as a collapsible card below * the dependency graph in architecture/dependencies.html. Cards are ordered by * dependency level HIGH → LOW (top-level apps first, deepest libs last) so a * reader scrolls from the runnable servers/clients down into the libraries. * * Each card carries `data-node=""` matching the graph box's title, so * the page script can filter the list to just the locked box's chain (see * graph-visualizer.client.ts). The summary paragraph is the `shortDescription` * already on each graph entry; the expanded body is the rendered markdown file. */ import type { EnhancedGraph } from './graph-sorter'; export declare class ResponsibilitiesRenderer { private readonly names; /** * Build the responsibilities section HTML: one collapsible card per module, * sorted by level descending (tie-break by name ascending). Returned as a *
that GraphVisualizer injects below the graph. */ generateSection(graph: EnhancedGraph, workspaceRoot: string): string; private renderCard; /** * Read a module's responsibilities.md body. Generation already guarantees the * file exists (metadata validation throws otherwise); a fallback line guards * the edge case where the graph JSON is stale relative to disk. */ private readBody; /** * Minimal markdown → HTML for a responsibilities.md body. Handles ATX headings * (`#`..`######`), `-`/`*` bullet lists, and blank-line-separated paragraphs. * Everything is HTML-escaped first; only a small inline set is re-marked. This * is deliberately tiny — responsibilities.md files are short and structured, * and the repo has no markdown dependency. */ private renderMarkdown; private renderLine; /** * Render inline markdown spans within an already HTML-escaped line: `code` → * , **bold** → , *italic* → . */ private renderInline; /** * Escape a string for safe embedding in HTML text/attributes. */ private escapeHtml; }