import type { Profile } from '../profiles/types.js'; import type { SkillReference } from './skill-generator.js'; export type DocReference = { title: string; url: string; activation: string; }; /** Removes the YAML frontmatter block from an `.mdc` file's content. */ export declare function stripMdcFrontmatter(content: string): string; /** Prepends the `` version comment to any content string. */ export declare function versionedContent(content: string, version: string): string; /** Wraps MDC content for Agentforce Vibes: strips frontmatter and prepends version comment. */ export declare function toA4dContent(mdcContent: string, version: string): string; export declare function profileMetadataSection(profile: Profile): string; export declare function demandLoadedSkillSection(references: SkillReference[]): string; export declare function profileWorkflowSection(profile: Profile, version: string): string; export declare function demandLoadedDocSection(references: DocReference[]): string; export { managedBlock } from '../services/managed-blocks.js'; export declare function lines(...parts: string[]): string; export type ProfileByteBudgetSplit = { /** Profiles admitted into the always-loaded/inlined set (within the byte budget). */ alwaysLoad: Profile[]; /** Everything else, read on demand by path. */ onDemand: Profile[]; }; /** * Splits selected profiles into an always-loaded set (within `byteBudget`) and everything else, * by rendered byte size rather than the raw `claudeAlwaysImport` flag alone (GH-373 pattern, * generalized so every runtime generator that inlines profile content — not just Claude — can cap * how much gets unconditionally loaded). * * Selection (priority order = `claudeAlwaysImport` profiles first, then the rest in given order): * profiles are admitted in that order until the next one would exceed the budget, then selection * stops (a prefix, never skipping an over-budget profile to admit a later smaller one). At least ONE * profile is always admitted whenever any profile is selected, even if it alone exceeds the budget. */ export declare function splitProfilesByByteBudget(profiles: Profile[], byteBudget: number, renderProfile: (profile: Profile) => string): ProfileByteBudgetSplit; /** Rough byte→token ratio (≈4 chars/token). Used only for budget accounting. */ export declare const BYTES_PER_TOKEN = 4; /** Default token budget for content a generator inlines/always-loads unconditionally. */ export declare const DEFAULT_ALWAYS_LOAD_TOKEN_BUDGET = 16000; export declare const DEFAULT_ALWAYS_LOAD_BYTE_BUDGET: number;