takaebato opened a new pull request, #497:
URL: https://github.com/apache/echarts-doc/pull/497

   ## Summary
   
   Add llms.txt and LLM-friendly markdown documentation generation to the 
ECharts doc build pipeline. Since the current SPA-based docs are difficult for 
AI agents to access via web fetch, this provides static Markdown alternatives.
   
   - Add `build/build-llms.js` that mechanically converts 
`documents/*-parts/*.json` to `llms-documents/*-parts/*.md` by converting HTML 
descriptions to Markdown via turndown, with type/default info extracted from 
full schema JSONs (option.json, api.json, etc.)
   - Integrate into the existing build pipeline via `build/build-doc.js` (runs 
after main doc build)
   - Generate `llms.txt` index file per language (en/zh) listing all available 
documentation
   - Add `turndown` and `turndown-plugin-gfm` as dependencies
   
   ## Output structure
   
   ```
     en/
     ├── llms.txt
     └── llms-documents/
         ├── option-parts/     (55 files)
         ├── option-gl-parts/  (18 files)
         ├── api-parts/        (5 files)
         └── tutorial-parts/   (1 file)
     zh/ (same structure)
   ```
     ## Output examples                                                         
                      
      
     <details>                                                                  
                      
     <summary>en/llms.txt</summary>                   
   
     ```
     # Apache ECharts Documentation
   
   > Apache ECharts is a free, powerful charting and visualization library 
offering easy ways to add intuitive, interactive, and highly customizable 
charts to your commercial products.
   
   ## API
   
   - [api.action](llms-documents/api-parts/api.action.md)
   - [api.echarts](llms-documents/api-parts/api.echarts.md)
   - [api.echartsInstance](llms-documents/api-parts/api.echartsInstance.md)
   - [api.events](llms-documents/api-parts/api.events.md)
   - [api](llms-documents/api-parts/api.md)
   
   ## Option GL
   
   - [option-gl.geo3D](llms-documents/option-gl-parts/option-gl.geo3D.md)
   - [option-gl.globe](llms-documents/option-gl-parts/option-gl.globe.md)
   - [option-gl.grid3D](llms-documents/option-gl-parts/option-gl.grid3D.md)
   - [option-gl.mapbox3D](llms-documents/option-gl-parts/option-gl.mapbox3D.md)
   - [option-gl](llms-documents/option-gl-parts/option-gl.md)
   - 
[option-gl.series-bar3D](llms-documents/option-gl-parts/option-gl.series-bar3D.md)
   - 
[option-gl.series-flowGL](llms-documents/option-gl-parts/option-gl.series-flowGL.md)
   - 
[option-gl.series-graphGL](llms-documents/option-gl-parts/option-gl.series-graphGL.md)
   - 
[option-gl.series-line3D](llms-documents/option-gl-parts/option-gl.series-line3D.md)
   - 
[option-gl.series-lines3D](llms-documents/option-gl-parts/option-gl.series-lines3D.md)
   - 
[option-gl.series-map3D](llms-documents/option-gl-parts/option-gl.series-map3D.md)
   - 
[option-gl.series-polygons3D](llms-documents/option-gl-parts/option-gl.series-polygons3D.md)
   - 
[option-gl.series-scatter3D](llms-documents/option-gl-parts/option-gl.series-scatter3D.md)
   - 
[option-gl.series-scatterGL](llms-documents/option-gl-parts/option-gl.series-scatterGL.md)
   - 
[option-gl.series-surface](llms-documents/option-gl-parts/option-gl.series-surface.md)
   - [option-gl.xAxis3D](llms-documents/option-gl-parts/option-gl.xAxis3D.md)
   - [option-gl.yAxis3D](llms-documents/option-gl-parts/option-gl.yAxis3D.md)
   - [option-gl.zAxis3D](llms-documents/option-gl-parts/option-gl.zAxis3D.md)
   
   ## Option
   
   - [option.angleAxis](llms-documents/option-parts/option.angleAxis.md)
   - [option.aria](llms-documents/option-parts/option.aria.md)
   - [option.axisPointer](llms-documents/option-parts/option.axisPointer.md)
   - [option.brush](llms-documents/option-parts/option.brush.md)
   - [option.calendar](llms-documents/option-parts/option.calendar.md)
   - [option.dataset](llms-documents/option-parts/option.dataset.md)
   - 
[option.dataZoom-inside](llms-documents/option-parts/option.dataZoom-inside.md)
   - 
[option.dataZoom-slider](llms-documents/option-parts/option.dataZoom-slider.md)
   - [option.geo](llms-documents/option-parts/option.geo.md)
   - [option.graphic](llms-documents/option-parts/option.graphic.md)
   - [option.grid](llms-documents/option-parts/option.grid.md)
   - [option.legend](llms-documents/option-parts/option.legend.md)
   - [option.matrix](llms-documents/option-parts/option.matrix.md)
   - [option](llms-documents/option-parts/option.md)
   - [option.media](llms-documents/option-parts/option.media.md)
   - [option.parallel](llms-documents/option-parts/option.parallel.md)
   - [option.parallelAxis](llms-documents/option-parts/option.parallelAxis.md)
   - [option.polar](llms-documents/option-parts/option.polar.md)
   - [option.radar](llms-documents/option-parts/option.radar.md)
   - [option.radiusAxis](llms-documents/option-parts/option.radiusAxis.md)
   - [option.series-bar](llms-documents/option-parts/option.series-bar.md)
   - 
[option.series-boxplot](llms-documents/option-parts/option.series-boxplot.md)
   - 
[option.series-candlestick](llms-documents/option-parts/option.series-candlestick.md)
   - [option.series-chord](llms-documents/option-parts/option.series-chord.md)
   - [option.series-custom](llms-documents/option-parts/option.series-custom.md)
   - 
[option.series-effectScatter](llms-documents/option-parts/option.series-effectScatter.md)
   - [option.series-funnel](llms-documents/option-parts/option.series-funnel.md)
   - [option.series-gauge](llms-documents/option-parts/option.series-gauge.md)
   - [option.series-graph](llms-documents/option-parts/option.series-graph.md)
   - 
[option.series-heatmap](llms-documents/option-parts/option.series-heatmap.md)
   - [option.series-line](llms-documents/option-parts/option.series-line.md)
   - [option.series-lines](llms-documents/option-parts/option.series-lines.md)
   - [option.series-map](llms-documents/option-parts/option.series-map.md)
   - 
[option.series-parallel](llms-documents/option-parts/option.series-parallel.md)
   - 
[option.series-pictorialBar](llms-documents/option-parts/option.series-pictorialBar.md)
   - [option.series-pie](llms-documents/option-parts/option.series-pie.md)
   - [option.series-radar](llms-documents/option-parts/option.series-radar.md)
   - [option.series-sankey](llms-documents/option-parts/option.series-sankey.md)
   - 
[option.series-scatter](llms-documents/option-parts/option.series-scatter.md)
   - 
[option.series-sunburst](llms-documents/option-parts/option.series-sunburst.md)
   - 
[option.series-themeRiver](llms-documents/option-parts/option.series-themeRiver.md)
   - [option.series-tree](llms-documents/option-parts/option.series-tree.md)
   - 
[option.series-treemap](llms-documents/option-parts/option.series-treemap.md)
   - [option.singleAxis](llms-documents/option-parts/option.singleAxis.md)
   - 
[option.stateAnimation](llms-documents/option-parts/option.stateAnimation.md)
   - [option.textStyle](llms-documents/option-parts/option.textStyle.md)
   - [option.thumbnail](llms-documents/option-parts/option.thumbnail.md)
   - [option.timeline](llms-documents/option-parts/option.timeline.md)
   - [option.title](llms-documents/option-parts/option.title.md)
   - [option.toolbox](llms-documents/option-parts/option.toolbox.md)
   - [option.tooltip](llms-documents/option-parts/option.tooltip.md)
   - 
[option.visualMap-continuous](llms-documents/option-parts/option.visualMap-continuous.md)
   - 
[option.visualMap-piecewise](llms-documents/option-parts/option.visualMap-piecewise.md)
   - [option.xAxis](llms-documents/option-parts/option.xAxis.md)
   - [option.yAxis](llms-documents/option-parts/option.yAxis.md)
   
   ## Tutorial
   
   - [tutorial](llms-documents/tutorial-parts/tutorial.md)
   
     ```
   
     </details>
   
    <details>
     <summary>llms-documents/option-parts/option.title.md (excerpt)</summary>
   
   ```
   # option.title
   
   ## id
   - **Type**: `string`
   
   Component ID, not specified by default. If specified, it can be used to 
refer the component in option or API.
   
   ## show
   - **Type**: `boolean`
   - **Default**: `true`
   
   Set this to `false` to prevent the title from showing
   
   ## text
   - **Type**: `string`
   - **Default**: `''`
   
   The main title text, supporting for `\n` for newlines.
   
   \[WARNING\]: When enabling 
[toolbox.feature.saveAsImage](#toolbox.feature.saveAsImage), and 
[toolbox.feature.saveAsImage.name](#toolbox.feature.saveAsImage.name) is not 
provided, it has historically been using `title[0].text` instead. This usage is 
not recommended -- 
[toolbox.feature.saveAsImage.name](#toolbox.feature.saveAsImage.name) should 
always be specified explicitly; otherwise, **correctness** and **security 
risks** for a filename have to be considered in this `title.text` option. See 
document ["Security 
Guidelines"](http://localhost/echarts-website/handbook/en/best-practices/security)
 for recommendations on safe usage.
   
   ## link
   - **Type**: `string`
   - **Default**: `''`
   
   The hyper link of main title text.
   
   \[WARNING\]: This URL string is accepted directly without any internal 
sanitization. **Security risks** must be considered if it comes from untrusted 
sources. See document ["Security 
Guidelines"](http://localhost/echarts-website/handbook/en/best-practices/security)
 for recommendations on safe usage.
   
   ## target
   - **Type**: `string`
   - **Default**: `'blank'`
   
   Open the hyper link of main title in specified tab.
   
   **options:**
   
   *   `'self'` opening it in current tab
       
   *   `'blank'` opening it in a new tab
   
   ### textStyle.color
   - **Type**: `Color`
   - **Default**: `'#333'`
   
   main title text color.
   
   ### textStyle.fontStyle
   - **Type**: `string`
   - **Default**: `'normal'`
   
   main title font style.
   
   Options are:
   
   *   `'normal'`
   *   `'italic'`
   *   `'oblique'`
   
   ### textStyle.fontWeight
   - **Type**: `string|number`
   - **Default**: `'bolder'`
   
   main title font thick weight.
   
   Options are:
   
   *   `'normal'`
   *   `'bold'`
   *   `'bolder'`
   *   `'lighter'`
   *   100 | 200 | 300 | 400...
   
   ### textStyle.fontFamily
   - **Type**: `string`
   - **Default**: `'sans-serif'`
   
   main title font family.
   
   Can also be 'serif' , 'monospace', ...
   
   ### textStyle.fontSize
   - **Type**: `number`
   - **Default**: `18`
   
   main title font size.
   ```
    </details>
   
   
   ## Known limitations
   
   - Internal links in the source HTML like `<a 
href="#series-bar.label.show">label.show</a>` are converted by turndown to    
`[label.show](#series-bar.label.show)` instead of resolved file paths. I think 
LLMs can infer property paths from context, so this works fine in practice 
without adding extra complexity. Let me know if we need file-level link 
resolution too.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to