```ts
export function drainFrames(chunks: string[], marker: string): { frames: string[]; pending: string } {
  if (marker.length !== 1) {
    throw new Error("Marker must be a single character.");
  }

  let joinedText = chunks.join('');
  let frames: string[] = [];
  let pending = '';

  for (let i = 0; i < joinedText.length - marker.length + 1; i++) {
    const currentChunk = joinedText.substring(i, i + marker.length);
    if (currentChunk === marker) {
      if (i > 0 && joinedText[i - marker.length] === marker) {
        // Double marker: fold into one literal marker
        i -= marker.length;
      } else {
        frames.push(joinedText.substring(frames.length > 0 ? frames[frames.length - 1].length : 0, i));
        pending = joinedText.substring(i + marker.length);
      }
    }
  }

  return { frames, pending };
}
```