// Simple heading-aware chunker (supports #, ##, ###)
export function chunkMarkdown(md){
const lines = md.split(/\r?\n/);
const chunks=[]; let currentHeading=[]; let buffer=[];
function push(){
if(buffer.length){
const text = buffer.join('\n').trim();
if(text) chunks.push({ headingPath: currentHeading.join(' > '), text });
buffer=[];
}
}
for(const line of lines){
const m = /^(#{1,6})\s+(.*)$/.exec(line);
if(m){
push();
const level = m[1].length;
currentHeading = currentHeading.slice(0, level-1);
currentHeading[level-1] = m[2].trim();
continue;
}
buffer.push(line);
}
push();
// Further split any chunk > 800 chars by blank line
const final=[];
for(const c of chunks){
if(c.text.length>800){
const partsBlank = c.text.split(/\n\s*\n/).map(p=>p.trim()).filter(Boolean);
let parts = partsBlank;
if(parts.length===1){
// force deterministic split at ~400 char boundaries
parts = [];
const sliceSize = 400;
for(let i=0;i<c.text.length;i+=sliceSize){
parts.push(c.text.slice(i,i+sliceSize));
}
}
parts.forEach(p=> final.push({headingPath:c.headingPath, text:p.trim()}));
} else final.push(c);
}
return final;
}