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

  for (let i = 0; i < buffer.length; i++) {
    if (buffer[i] === marker && buffer[i + 1] === marker) {
      // Double marker: fold it into one literal marker
      frameBuffer += marker;
      i++;
    } else if (buffer[i] === marker) {
      // Single marker: end the current frame and start a new one
      if (frameBuffer.length > 0) {
        frames.push(frameBuffer);
        frameBuffer = "";
      }
    } else {
      // Regular character: add to the current frame
      frameBuffer += buffer[i];
    }
  }

  // If there's any leftover frame, add it to the list
  if (frameBuffer.length > 0) {
    frames.push(frameBuffer);
  }

  return { frames, pending };
}
```