All files / kernel-agents-repl/src/strategies/repl reader.ts

100% Statements 6/6
100% Branches 0/0
100% Functions 3/3
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37                      1x 3x                 3x 3x 3x     3x                    
import type { Logger } from '@metamask/logger';
import {
  ifDefined,
  withAbort,
  gatherStreamingResponse,
} from '@ocap/kernel-agents/utils';
 
import type { StatementMessage } from './messages.ts';
import { makeSampleCollector } from './sample-collector.ts';
 
export const makeReader =
  ({ logger }: { logger?: Logger }) =>
  async ({
    stream,
    abort,
    stop,
  }: {
    stream: AsyncIterable<{ response: string }>;
    abort: () => Promise<void>;
    stop: string;
  }) => {
    const sampleLogger = logger?.subLogger({ tags: ['sample'] });
    const gatherLogger = logger?.subLogger({ tags: ['gather'] });
    return await withAbort(
      abort,
      async (): Promise<StatementMessage> =>
        await gatherStreamingResponse({
          stream,
          parse: makeSampleCollector({
            stop,
            ...ifDefined({ logger: sampleLogger }),
          }),
          ...ifDefined({ logger: gatherLogger }),
        }),
    );
  };