/**
 * typedoc-declarations.ts
 *
 * Semantic declaration renderer for candidate-facing typesReference docs.
 * Turns a typedoc JSON string into a `.d.ts`-with-JSDoc markdown view,
 * relevance-scoped to per-task symbol hints with one-level closure expansion.
 *
 * Per D0069 binding sub-decisions:
 *   1. Semantic representation: kind label + full signature + JSDoc summary + example
 *   2. Relevance scoping: hinted exports rendered fully; one-level type-ref closure;
 *      name-only tail index for everything not rendered
 *   3. Byte budget retained at DEFAULT_MAX_BYTES (30,000) — density beats budget
 *   6. No-hints fallback: declaration-order rendering until budget reached
 *   7. Unparseable attachments: return null so caller keeps raw inline path
 *
 * Budget degeneracy (sub-minimal budgets): when the full name-list tail line
 * itself exceeds the budget, the tail degrades to an explicit count-only line
 * (`*N more exports (signatures not expanded)*` — no names, never a partial
 * list, never a mid-name slice). If even that doesn't fit, markdown is the
 * blocks that fit (in practice empty) and the returned renderedCount /
 * indexedCount carry the information. The cap always wins; omissions are
 * always explicit via the count.
 *
 * Module independence per D0069 §4: does NOT modify symbol-index.ts logic.
 * Uses its own richer TypedocNode interface to capture the fields needed for
 * the full signature printer (types, parameters, signatures, typeParameters,
 * children, extendedTypes).
 */
export interface RenderTypedocOptions {
    /** Byte budget for the returned markdown. Output MUST NOT exceed it. */
    maxBytes: number;
    /** Task-relevance hints: export names to render fully (with one-level closure expansion). */
    relevanceSymbols?: readonly string[];
}
export interface TypedocDeclarationsResult {
    markdown: string;
    /** Count of declarations rendered in full. */
    renderedCount: number;
    /** Count of exports listed name-only in the tail index. */
    indexedCount: number;
}
/**
 * Returns null when `body` is not parseable typedoc JSON (caller falls back
 * to raw inline). Returns a result object otherwise — even if the budget
 * only fits a tail index.
 */
export declare function renderTypedocDeclarations(body: string, options: RenderTypedocOptions): TypedocDeclarationsResult | null;
/**
 * Extract identifier-shaped, symbol-looking tokens from free text (a task's
 * prompt body or title) for use as relevance hints (D0069 sub-decision 2,
 * source (b)).
 *
 * A token contributes only if it is a lexical JS identifier AND looks like a
 * code symbol rather than a prose word — camelCase, an underscore/digit/`$`,
 * or two-or-more leading capitals. This mirrors the `looksLikeSymbolIdentifier`
 * heuristic the grader's symbol index applies to headings; it is duplicated
 * (not imported) here to keep the grader module untouched per D0069 §4. Bare
 * common nouns ("Documents", "Reference") are rejected so they don't pull
 * unrelated exports into the candidate's relevance set.
 *
 * Returns deduped tokens in first-seen order (deterministic).
 */
export declare function extractRelevanceIdentifiers(text: string): string[];
