Fix ChatGPT DOM extractor table handling. Observed defect: Tables in ChatGPT responses are being flattened into line-by-line text instead of Markdown tables. Example bad output: Goal Good Plant Choices Attract deer Hostas, daylilies, many ornamentals Feed pollinators Native flowering perennials, shrubs, trees Expected output: | Goal | Good Plant Choices | |---|---| | Attract deer | Hostas, daylilies, many ornamentals | | Feed pollinators | Native flowering perennials, shrubs, trees | | Prevent deer damage | Deer-resistant species | | Support overall biodiversity | A mix of native plants with different bloom times | Requirements: 1. Update src/chatgptExtractor.js. 2. Add table-to-Markdown support: - Detect
| . - Extract data cells from | .
- Preserve cell order.
- Trim cell text.
- Convert inline formatting inside cells using existing inline extractor.
3. Markdown table rules:
- First row should become the header row.
- If the table has , use that as the header.
- If no exists but the first row uses | , use that row as the header.
- If no header exists, use the first row as the header for MVP.
- Add separator row using `---`.
- Escape pipe characters inside cells as `\|`.
- Replace internal newlines in cells with ` | ` or a single space. 4. Example output format: | Goal | Good Plant Choices | |---|---| | Attract deer | Hostas, daylilies, many ornamentals | 5. Ensure table extraction is treated as a block element: - Tables should be separated from surrounding paragraphs by blank lines. - Do not also extract duplicate flattened table text from child nodes. 6. Preserve other existing behavior: - Paragraphs remain paragraphs. - Lists remain Markdown lists. - Code blocks remain fenced code. - Bold/italic/inline code remain inline. - Message order and role detection unchanged. Suggested helper: function tableToMarkdown(tableNode, context) { // return markdown table string } Acceptance criteria: - ChatGPT tables export as valid Markdown tables. - Headers and rows are preserved. - Pipe characters inside cells are escaped. - Tables are not duplicated as flattened text. - Surrounding prose remains intact. - No LLM calls. - No Project Thoth application dependency. |
|---|