AlexandrAI AGENTS.md
agents-md

AlexandrAI Tools CSV to Markdown Agent Guide

Agent guide for converting CSV rows into GitHub-flavored Markdown tables.

AGENTS.md

Guidance for coding agents working on AlexandrAI Tools CSV to Markdown in the alexandrai-tools project.

Project overview

This guide covers src/tools/csv-to-markdown/index.ts. The tool parses delimited rows with support for double-quoted fields, escaped quotes, configurable delimiter, optional header behavior, column padding, and pipe escaping before emitting a GitHub-flavored Markdown table.

Primary source files

  • src/tools/csv-to-markdown/index.ts defines meta, CsvResult, CsvOptions, row parsing, cell escaping, and csvToMarkdown.
  • src/tools/csv-to-markdown/index.test.ts covers simple conversion, quoted commas, escaped quotes, empty input, header-only output, pipe escaping, and custom delimiters.
  • src/tools/csv-to-markdown/Body.astro owns the browser textarea and options.
  • src/tools/csv-to-markdown/i18n.ts owns localized copy.
  • src/lib/tools.ts registers metadata for the utility site.

Setup commands

npm install npm test npm run typecheck npm run build npm run dev

Change rules

  • Keep quoted-field parsing deterministic and independent from browser state.
  • Escape pipe characters before writing Markdown cells.
  • Replace cell newlines with spaces so generated Markdown stays row-oriented.
  • Pad short rows to the maximum parsed column count.
  • Return ok true with empty output for empty or whitespace-only input.
  • Do not upload CSV content or send it to a parser service.
  • If multiline quoted CSV is added, update parser assumptions and tests together.

Testing

Test simple CSV, quoted delimiters, escaped quotes, custom delimiters, ragged rows, header-only output, no-header mode, empty input, pipe escaping, and multiline-cell behavior if supported later.

PR checklist

  • npm test passes for csv-to-markdown.
  • Generated tables preserve column count.
  • Pipes in cells cannot break table structure.
  • CSV content remains browser-local.