mdengine 0.11.0__tar.gz → 0.12.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (792) hide show
  1. {mdengine-0.11.0 → mdengine-0.12.0}/PKG-INFO +79 -8
  2. {mdengine-0.11.0 → mdengine-0.12.0}/README.md +65 -7
  3. {mdengine-0.11.0 → mdengine-0.12.0}/pyproject.toml +14 -1
  4. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/__init__.py +1 -1
  5. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/cli/main.py +3 -1
  6. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/core/extractor.py +28 -0
  7. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/api_detector.py +115 -0
  8. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/entry_detector.py +2 -0
  9. mdengine-0.12.0/src/md_generator/codeflow/detectors/rails_detector.py +89 -0
  10. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/lang_dispatch.py +16 -0
  11. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/models/ir.py +7 -0
  12. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_csharp_adapter.py +70 -0
  13. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_go_adapter.py +58 -0
  14. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_java_adapter.py +120 -0
  15. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_kotlin_adapter.py +76 -0
  16. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_lua_adapter.py +54 -0
  17. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_php_adapter.py +65 -0
  18. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_python_adapter.py +100 -0
  19. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_ruby_adapter.py +70 -0
  20. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_rust_adapter.py +58 -0
  21. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_scala_adapter.py +71 -0
  22. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_swift_adapter.py +70 -0
  23. mdengine-0.12.0/src/md_generator/codeflow/parsers/adapters/treesitter_zig_adapter.py +54 -0
  24. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/base.py +28 -0
  25. mdengine-0.12.0/src/md_generator/codeflow/parsers/capability_registry.py +195 -0
  26. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/go_parser.py +6 -1
  27. mdengine-0.12.0/src/md_generator/codeflow/parsers/ir_enrich.py +117 -0
  28. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/java_parser.py +6 -1
  29. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/php_parser.py +6 -1
  30. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/python_parser.py +6 -1
  31. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_common.py +149 -0
  32. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_csharp_parser.py +173 -0
  33. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_entry_helpers.py +29 -0
  34. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_go_parser.py +71 -0
  35. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_java_parser.py +242 -0
  36. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +6 -1
  37. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_kotlin_parser.py +179 -0
  38. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_lua_parser.py +112 -0
  39. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_php_parser.py +71 -0
  40. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_python_parser.py +94 -0
  41. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_ruby_parser.py +229 -0
  42. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_rust_parser.py +159 -0
  43. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_scala_parser.py +143 -0
  44. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_swift_parser.py +171 -0
  45. mdengine-0.12.0/src/md_generator/codeflow/parsers/treesitter_zig_parser.py +75 -0
  46. mdengine-0.12.0/src/md_generator/codeflow/parsers/unified_parser.py +119 -0
  47. mdengine-0.12.0/src/md_generator/db/adapters/elasticsearch_adapter.py +518 -0
  48. mdengine-0.12.0/src/md_generator/db/adapters/elasticsearch_json_adapter.py +293 -0
  49. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/factory.py +8 -0
  50. mdengine-0.12.0/src/md_generator/db/api/elasticsearch_upload.py +94 -0
  51. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/api/main.py +93 -0
  52. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/api/schemas.py +31 -3
  53. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/api/settings.py +1 -0
  54. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/cli/main.py +18 -2
  55. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/base_adapter.py +42 -0
  56. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_bundle.py +49 -0
  57. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_dependency_graph.py +257 -0
  58. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_export.py +717 -0
  59. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_format.py +230 -0
  60. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_json.py +33 -0
  61. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_markdown.py +694 -0
  62. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_normalize.py +212 -0
  63. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_operational_notes.py +178 -0
  64. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_output.py +51 -0
  65. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_query_classify.py +146 -0
  66. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_redaction.py +203 -0
  67. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_synthesis.py +225 -0
  68. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_warnings.py +81 -0
  69. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/export_manifest.py +14 -1
  70. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/extractor.py +12 -0
  71. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/job_manager.py +51 -0
  72. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/markdown_writer.py +21 -0
  73. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/models.py +111 -1
  74. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/run_config.py +27 -2
  75. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/dependency-graph.json +109 -2
  76. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/registry.json +109 -3
  77. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/global-skill.md +27 -3
  78. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +3 -2
  79. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +1 -1
  80. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +1 -1
  81. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +3 -1
  82. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +1 -1
  83. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +1 -1
  84. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +1 -1
  85. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +1 -1
  86. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-otel/SKILL.md +58 -0
  87. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-otel/references/example.md +23 -0
  88. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +1 -1
  89. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +1 -1
  90. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +1 -1
  91. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/SKILL.md +70 -0
  92. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/references/example.md +42 -0
  93. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +1 -1
  94. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +1 -1
  95. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +1 -1
  96. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +1 -1
  97. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +2 -0
  98. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +7 -0
  99. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +30 -1
  100. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/archive.md +2 -1
  101. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/generate.py +9 -1
  102. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/routing.py +15 -2
  103. {mdengine-0.11.0 → mdengine-0.12.0}/src/mdengine.egg-info/PKG-INFO +79 -8
  104. {mdengine-0.11.0 → mdengine-0.12.0}/src/mdengine.egg-info/SOURCES.txt +48 -0
  105. {mdengine-0.11.0 → mdengine-0.12.0}/src/mdengine.egg-info/requires.txt +13 -0
  106. mdengine-0.11.0/src/md_generator/codeflow/parsers/ir_enrich.py +0 -41
  107. mdengine-0.11.0/src/md_generator/codeflow/parsers/unified_parser.py +0 -31
  108. {mdengine-0.11.0 → mdengine-0.12.0}/LICENSE +0 -0
  109. {mdengine-0.11.0 → mdengine-0.12.0}/setup.cfg +0 -0
  110. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/__init__.py +0 -0
  111. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/api/__init__.py +0 -0
  112. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/api/convert_runner.py +0 -0
  113. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/api/jobs.py +0 -0
  114. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/api/main.py +0 -0
  115. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/api/mcp_server.py +0 -0
  116. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/api/mcp_setup.py +0 -0
  117. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/api/query_options.py +0 -0
  118. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/api/settings.py +0 -0
  119. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/convert_impl.py +0 -0
  120. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/converter.py +0 -0
  121. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/extractors.py +0 -0
  122. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/archive/options.py +0 -0
  123. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/__init__.py +0 -0
  124. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/analyzers/__init__.py +0 -0
  125. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/analyzers/flow_analyzer.py +0 -0
  126. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/api/__init__.py +0 -0
  127. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/api/job_manager.py +0 -0
  128. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/api/main.py +0 -0
  129. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/api/mcp_server.py +0 -0
  130. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/api/run.py +0 -0
  131. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/api/schemas.py +0 -0
  132. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/api/semantic_api.py +0 -0
  133. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/api/settings.py +0 -0
  134. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/api/sse.py +0 -0
  135. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/cli/__init__.py +0 -0
  136. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/config/__init__.py +0 -0
  137. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/config/codeflow_yaml.py +0 -0
  138. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/core/__init__.py +0 -0
  139. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/core/cache_manager.py +0 -0
  140. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/core/run_config.py +0 -0
  141. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/__init__.py +0 -0
  142. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/entry_rank.py +0 -0
  143. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/event_detector.py +0 -0
  144. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/kafka_detector.py +0 -0
  145. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/liferay_portlet_detector.py +0 -0
  146. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/__init__.py +0 -0
  147. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/business_rules_markdown.py +0 -0
  148. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/cfg_paths_markdown.py +0 -0
  149. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/cfg_paths_mermaid.py +0 -0
  150. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/cfg_render.py +0 -0
  151. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/cytoscape_enrich.py +0 -0
  152. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/entry_markdown.py +0 -0
  153. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/flow_summary.py +0 -0
  154. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/flow_tree.py +0 -0
  155. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/html.py +0 -0
  156. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/html_unified.py +0 -0
  157. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/markdown.py +0 -0
  158. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/mermaid.py +0 -0
  159. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/generators/sequence.py +0 -0
  160. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/__init__.py +0 -0
  161. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/analysis.py +0 -0
  162. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/anomaly.py +0 -0
  163. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/builder.py +0 -0
  164. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/call_expander.py +0 -0
  165. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cfg_builder.py +0 -0
  166. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cfg_copy.py +0 -0
  167. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cfg_model.py +0 -0
  168. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cluster_labeling.py +0 -0
  169. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/clustering.py +0 -0
  170. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cross_repo_resolver.py +0 -0
  171. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/dependency_builder.py +0 -0
  172. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/diff_analysis.py +0 -0
  173. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/embeddings.py +0 -0
  174. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/enricher.py +0 -0
  175. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/event_graph.py +0 -0
  176. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/export_schema.py +0 -0
  177. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/hotpath.py +0 -0
  178. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/maven_hints.py +0 -0
  179. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/multi_repo.py +0 -0
  180. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/multigraph_utils.py +0 -0
  181. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/nl_query.py +0 -0
  182. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/path_enumerator.py +0 -0
  183. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/path_probability.py +0 -0
  184. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/query_engine.py +0 -0
  185. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/relations.py +0 -0
  186. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/runtime_integration.py +0 -0
  187. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/semantic_enricher.py +0 -0
  188. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/semantic_index.py +0 -0
  189. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/sqlite_export.py +0 -0
  190. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/graph/tsconfig_cross_repo.py +0 -0
  191. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/ingestion/__init__.py +0 -0
  192. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/ingestion/git_loader.py +0 -0
  193. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/ingestion/loader.py +0 -0
  194. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/mcp/__init__.py +0 -0
  195. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/mcp/server.py +0 -0
  196. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/models/__init__.py +0 -0
  197. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/models/ir_cfg.py +0 -0
  198. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/__init__.py +0 -0
  199. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/__init__.py +0 -0
  200. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/cpp_adapter.py +0 -0
  201. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/go_adapter.py +0 -0
  202. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/ir_from_dump.py +0 -0
  203. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/java_adapter.py +0 -0
  204. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/php_adapter.py +0 -0
  205. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/python_adapter.py +0 -0
  206. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_adapter.py +0 -0
  207. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/cpp_parser.py +0 -0
  208. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/rules/__init__.py +0 -0
  209. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/rules/collector.py +0 -0
  210. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/rules/cpp_rules.py +0 -0
  211. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/rules/java_rules.py +0 -0
  212. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/runtime/__init__.py +0 -0
  213. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/runtime/python_edge_counter.py +0 -0
  214. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/runtime/trace_runner.py +0 -0
  215. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/runtime/tracer.py +0 -0
  216. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/utils/__init__.py +0 -0
  217. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/utils/tools_root.py +0 -0
  218. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/worker/__init__.py +0 -0
  219. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/codeflow/worker/celery_optional.py +0 -0
  220. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/__init__.py +0 -0
  221. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/artifacts/__init__.py +0 -0
  222. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/artifacts/mdaf_validate.py +0 -0
  223. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/artifacts/models.py +0 -0
  224. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/artifacts/serialize.py +0 -0
  225. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/schema/__init__.py +0 -0
  226. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/schema/adapters/__init__.py +0 -0
  227. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/schema/adapters/log_record.py +0 -0
  228. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/schema/adapters/otel.py +0 -0
  229. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/schema/telemetry_event.py +0 -0
  230. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/core/schema/validation.py +0 -0
  231. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/__init__.py +0 -0
  232. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/__init__.py +0 -0
  233. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/access_adapter.py +0 -0
  234. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/access_introspect.py +0 -0
  235. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/access_odbc.py +0 -0
  236. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
  237. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
  238. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
  239. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
  240. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/sql_common.py +0 -0
  241. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
  242. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/adapters/sqlserver_adapter.py +0 -0
  243. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/api/__init__.py +0 -0
  244. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/api/access_upload.py +0 -0
  245. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/api/mcp_server.py +0 -0
  246. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/api/run.py +0 -0
  247. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/api/sqlite_upload.py +0 -0
  248. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/cli/__init__.py +0 -0
  249. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/config/__init__.py +0 -0
  250. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/config/default.yaml +0 -0
  251. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/__init__.py +0 -0
  252. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/cli_ops.py +0 -0
  253. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/erd/__init__.py +0 -0
  254. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
  255. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/erd/filter.py +0 -0
  256. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
  257. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
  258. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/erd/model.py +0 -0
  259. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/erd/pipeline.py +0 -0
  260. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/erd/render.py +0 -0
  261. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/link_graph.py +0 -0
  262. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/util.py +0 -0
  263. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/core/zip_export.py +0 -0
  264. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/mcp/__init__.py +0 -0
  265. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/mcp/server.py +0 -0
  266. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/mcp/sse.py +0 -0
  267. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/db/mcp/stream.py +0 -0
  268. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/distributed/__init__.py +0 -0
  269. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/distributed/merge.py +0 -0
  270. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/distributed/partition.py +0 -0
  271. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/distributed/worker_pool.py +0 -0
  272. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/engine_cli.py +0 -0
  273. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/governance/__init__.py +0 -0
  274. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/governance/audit.py +0 -0
  275. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/governance/classification.py +0 -0
  276. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/governance/lineage.py +0 -0
  277. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/governance/retention.py +0 -0
  278. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/__init__.py +0 -0
  279. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/adapters/__init__.py +0 -0
  280. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/adapters/factory.py +0 -0
  281. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
  282. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
  283. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/api/__init__.py +0 -0
  284. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/api/main.py +0 -0
  285. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/api/mcp_server.py +0 -0
  286. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/api/run.py +0 -0
  287. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/api/schemas.py +0 -0
  288. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/api/settings.py +0 -0
  289. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/cli/__init__.py +0 -0
  290. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/cli/main.py +0 -0
  291. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/config/__init__.py +0 -0
  292. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/config/default.yaml +0 -0
  293. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/__init__.py +0 -0
  294. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/base_adapter.py +0 -0
  295. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/extractor.py +0 -0
  296. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/graph_builder.py +0 -0
  297. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/job_manager.py +0 -0
  298. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/markdown_writer.py +0 -0
  299. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/models.py +0 -0
  300. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/run_config.py +0 -0
  301. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/viz.py +0 -0
  302. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/core/zip_export.py +0 -0
  303. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/mcp/__init__.py +0 -0
  304. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/mcp/server.py +0 -0
  305. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/mcp/sse.py +0 -0
  306. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/graph/mcp/stream.py +0 -0
  307. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/__init__.py +0 -0
  308. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/api/__init__.py +0 -0
  309. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/api/main.py +0 -0
  310. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/api/mcp_server.py +0 -0
  311. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/api/query_options.py +0 -0
  312. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/api/settings.py +0 -0
  313. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/api/staging.py +0 -0
  314. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/api/zip_bundle.py +0 -0
  315. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/backends/__init__.py +0 -0
  316. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/backends/base.py +0 -0
  317. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/backends/easy.py +0 -0
  318. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/backends/paddle.py +0 -0
  319. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/backends/tesseract.py +0 -0
  320. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/convert_impl.py +0 -0
  321. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/converter.py +0 -0
  322. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/emit.py +0 -0
  323. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/io_util.py +0 -0
  324. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/image/utils.py +0 -0
  325. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/__init__.py +0 -0
  326. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/aggregation/__init__.py +0 -0
  327. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/aggregation/aggregators.py +0 -0
  328. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/aggregation/dataframe_builder.py +0 -0
  329. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/aggregation/metrics.py +0 -0
  330. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/aggregation/timeline.py +0 -0
  331. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/api/__init__.py +0 -0
  332. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/api/main.py +0 -0
  333. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/api/mcp_server.py +0 -0
  334. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/api/run.py +0 -0
  335. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/api/schemas.py +0 -0
  336. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/api/settings.py +0 -0
  337. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/chunking/__init__.py +0 -0
  338. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/chunking/artifact_adapter.py +0 -0
  339. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/chunking/chunk_engine.py +0 -0
  340. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/chunking/chunk_models.py +0 -0
  341. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/chunking/chunk_registry.py +0 -0
  342. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/chunking/chunk_strategy.py +0 -0
  343. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/cli/__init__.py +0 -0
  344. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/cli/main.py +0 -0
  345. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/clustering/__init__.py +0 -0
  346. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/clustering/embeddings.py +0 -0
  347. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/clustering/kmeans_cluster.py +0 -0
  348. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/clustering/semantic_grouping.py +0 -0
  349. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/clustering/vectorizer.py +0 -0
  350. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/config/__init__.py +0 -0
  351. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/config/default.yaml +0 -0
  352. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/config/preset_loader.py +0 -0
  353. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/config/presets/__init__.py +0 -0
  354. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/config/presets/generic.yaml +0 -0
  355. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/config/presets/json.yaml +0 -0
  356. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/config/presets/logback.yaml +0 -0
  357. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/config/presets/springboot.yaml +0 -0
  358. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/config/schemas.py +0 -0
  359. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/__init__.py +0 -0
  360. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/errors.py +0 -0
  361. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/execution_context.py +0 -0
  362. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/extractor.py +0 -0
  363. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/job_manager.py +0 -0
  364. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/lifecycle.py +0 -0
  365. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/pipeline.py +0 -0
  366. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/plugins.py +0 -0
  367. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/run_config.py +0 -0
  368. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/core/zip_export.py +0 -0
  369. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/correlation/correlation_engine.py +0 -0
  370. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/correlation/correlation_models.py +0 -0
  371. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/correlation/correlation_scoring.py +0 -0
  372. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/correlation/cross_source.py +0 -0
  373. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/correlation/request_parser.py +0 -0
  374. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/correlation/session_parser.py +0 -0
  375. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/correlation/trace_parser.py +0 -0
  376. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/documentation/__init__.py +0 -0
  377. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/documentation/incident_summary.py +0 -0
  378. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/documentation/service_report.py +0 -0
  379. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/documentation/troubleshooting.py +0 -0
  380. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/embeddings/embedding_exporter.py +0 -0
  381. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/embeddings/exporters/chroma_exporter.py +0 -0
  382. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/embeddings/exporters/faiss_exporter.py +0 -0
  383. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/embeddings/exporters/jsonl_exporter.py +0 -0
  384. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/embeddings/exporters/parquet_exporter.py +0 -0
  385. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/enrichment/__init__.py +0 -0
  386. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/enrichment/correlation.py +0 -0
  387. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/enrichment/fingerprinting.py +0 -0
  388. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/enrichment/hash_generator.py +0 -0
  389. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/enrichment/pattern_matcher.py +0 -0
  390. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/enrichment/severity_ranker.py +0 -0
  391. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incidents/__init__.py +0 -0
  392. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incidents/artifact_adapter.py +0 -0
  393. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incidents/fingerprinting.py +0 -0
  394. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incidents/grouping.py +0 -0
  395. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incidents/incident_engine.py +0 -0
  396. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incidents/models.py +0 -0
  397. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incidents/severity.py +0 -0
  398. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incremental/__init__.py +0 -0
  399. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incremental/checkpoint.py +0 -0
  400. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incremental/engine.py +0 -0
  401. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/incremental/resume_reader.py +0 -0
  402. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/ingestion/__init__.py +0 -0
  403. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/ingestion/archive_bridge.py +0 -0
  404. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/ingestion/archive_loader.py +0 -0
  405. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/ingestion/batch_reader.py +0 -0
  406. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/ingestion/encoding_detector.py +0 -0
  407. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/ingestion/file_loader.py +0 -0
  408. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/ingestion/stream_reader.py +0 -0
  409. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/intelligence/anomaly_detection.py +0 -0
  410. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/intelligence/dependency_analysis.py +0 -0
  411. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/intelligence/heuristics.py +0 -0
  412. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/intelligence/root_cause_engine.py +0 -0
  413. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/knowledge_graph/graph_builder.py +0 -0
  414. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/knowledge_graph/graph_exporter.py +0 -0
  415. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/knowledge_graph/graph_models.py +0 -0
  416. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/knowledge_graph/relation_extractor.py +0 -0
  417. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/linking/__init__.py +0 -0
  418. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/linking/link_graph.py +0 -0
  419. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/markdown_intelligence/__init__.py +0 -0
  420. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/markdown_intelligence/aliases.py +0 -0
  421. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/markdown_intelligence/backlinks.py +0 -0
  422. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/markdown_intelligence/cross_refs.py +0 -0
  423. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/mcp/__init__.py +0 -0
  424. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/mcp/server.py +0 -0
  425. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/mcp/sse.py +0 -0
  426. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/noise_reduction/__init__.py +0 -0
  427. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/noise_reduction/dedupe.py +0 -0
  428. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/noise_reduction/entropy.py +0 -0
  429. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/noise_reduction/filter.py +0 -0
  430. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/normalization/__init__.py +0 -0
  431. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/normalization/number_normalizer.py +0 -0
  432. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/normalization/path_normalizer.py +0 -0
  433. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/normalization/pii_redactor.py +0 -0
  434. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/normalization/token_normalizer.py +0 -0
  435. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/normalization/uuid_normalizer.py +0 -0
  436. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/__init__.py +0 -0
  437. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/json_line_parser.py +0 -0
  438. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/level_detector.py +0 -0
  439. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/logger_detector.py +0 -0
  440. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/models.py +0 -0
  441. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/multiline_parser.py +0 -0
  442. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/parser_registry.py +0 -0
  443. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/regex_parser.py +0 -0
  444. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/stacktrace_parser.py +0 -0
  445. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/parser/timestamp_parser.py +0 -0
  446. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/search/bm25_search.py +0 -0
  447. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/search/cli.py +0 -0
  448. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/search/hybrid_search.py +0 -0
  449. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/search/search_index.py +0 -0
  450. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/search/vector_search.py +0 -0
  451. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/service/__init__.py +0 -0
  452. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/service/service.py +0 -0
  453. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/streaming/__init__.py +0 -0
  454. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/streaming/kafka_reader.py +0 -0
  455. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/streaming/redis_reader.py +0 -0
  456. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/streaming/stdin_reader.py +0 -0
  457. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/streaming/stream_coordinator.py +0 -0
  458. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/streaming/tail_reader.py +0 -0
  459. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/streaming/websocket_reader.py +0 -0
  460. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/timeline/causal_chain.py +0 -0
  461. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/timeline/ordering.py +0 -0
  462. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/timeline/timeline_engine.py +0 -0
  463. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/timeline/timeline_models.py +0 -0
  464. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/topology/__init__.py +0 -0
  465. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/topology/discovery.py +0 -0
  466. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/utils/__init__.py +0 -0
  467. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/utils/concurrency.py +0 -0
  468. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/utils/io.py +0 -0
  469. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/utils/regex.py +0 -0
  470. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/utils/time.py +0 -0
  471. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/visualization/__init__.py +0 -0
  472. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/visualization/mermaid_sequence.py +0 -0
  473. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/visualization/mermaid_timeline.py +0 -0
  474. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/visualization/mermaid_topology.py +0 -0
  475. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/writers/__init__.py +0 -0
  476. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/writers/assets_writer.py +0 -0
  477. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/writers/chunk_writer.py +0 -0
  478. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/writers/cluster_markdown.py +0 -0
  479. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/writers/correlation_writer.py +0 -0
  480. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/writers/frontmatter_writer.py +0 -0
  481. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/writers/incident_writer.py +0 -0
  482. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/writers/markdown_writer.py +0 -0
  483. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/log/writers/summary_writer.py +0 -0
  484. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/__init__.py +0 -0
  485. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/__init__.py +0 -0
  486. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/api/__init__.py +0 -0
  487. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/api/main.py +0 -0
  488. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/api/mcp_server.py +0 -0
  489. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/api/mcp_setup.py +0 -0
  490. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/api/run.py +0 -0
  491. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/api/settings.py +0 -0
  492. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/converter.py +0 -0
  493. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/formatter.py +0 -0
  494. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/audio/service.py +0 -0
  495. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/document_converter.py +0 -0
  496. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/job_store.py +0 -0
  497. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/__init__.py +0 -0
  498. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/api/__init__.py +0 -0
  499. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/api/main.py +0 -0
  500. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/api/mcp_server.py +0 -0
  501. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/api/mcp_setup.py +0 -0
  502. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/api/run.py +0 -0
  503. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/api/settings.py +0 -0
  504. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/converter.py +0 -0
  505. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/formatter.py +0 -0
  506. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/video/service.py +0 -0
  507. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/whisper_language.py +0 -0
  508. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/__init__.py +0 -0
  509. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/api/__init__.py +0 -0
  510. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/api/main.py +0 -0
  511. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
  512. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/api/mcp_setup.py +0 -0
  513. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/api/run.py +0 -0
  514. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/api/settings.py +0 -0
  515. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/converter.py +0 -0
  516. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/formatter.py +0 -0
  517. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/metadata.py +0 -0
  518. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/service.py +0 -0
  519. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/media/youtube/transcript.py +0 -0
  520. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/__init__.py +0 -0
  521. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/api/__init__.py +0 -0
  522. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/api/main.py +0 -0
  523. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/api/mcp_server.py +0 -0
  524. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/api/run.py +0 -0
  525. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/api/schemas.py +0 -0
  526. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/api/settings.py +0 -0
  527. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/cli/__init__.py +0 -0
  528. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/cli/main.py +0 -0
  529. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/config/__init__.py +0 -0
  530. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/config/default.yaml +0 -0
  531. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/converters/__init__.py +0 -0
  532. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
  533. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/core/__init__.py +0 -0
  534. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/core/extractor.py +0 -0
  535. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/core/run_config.py +0 -0
  536. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/core/zip_export.py +0 -0
  537. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/enrichers/__init__.py +0 -0
  538. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/enrichers/rules.py +0 -0
  539. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
  540. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/generators/__init__.py +0 -0
  541. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
  542. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/loaders/__init__.py +0 -0
  543. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
  544. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/mcp/__init__.py +0 -0
  545. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/mcp/server.py +0 -0
  546. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/models/__init__.py +0 -0
  547. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/models/domain.py +0 -0
  548. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/normalizers/__init__.py +0 -0
  549. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/normalizers/operations.py +0 -0
  550. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
  551. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/parsers/__init__.py +0 -0
  552. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
  553. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/resolvers/__init__.py +0 -0
  554. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
  555. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/writers/__init__.py +0 -0
  556. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
  557. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/otel/__init__.py +0 -0
  558. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/otel/cli/__init__.py +0 -0
  559. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/otel/cli/main.py +0 -0
  560. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/otel/otel_logs.py +0 -0
  561. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/otel/otel_metrics.py +0 -0
  562. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/otel/otel_models.py +0 -0
  563. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/otel/otel_parser.py +0 -0
  564. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/otel/otel_spans.py +0 -0
  565. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/__init__.py +0 -0
  566. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/api/__init__.py +0 -0
  567. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/api/main.py +0 -0
  568. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/api/mcp_server.py +0 -0
  569. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/api/settings.py +0 -0
  570. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/api/zip_bundle.py +0 -0
  571. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/converter.py +0 -0
  572. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/md_emit.py +0 -0
  573. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/pdf_extract.py +0 -0
  574. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/pdf/utils.py +0 -0
  575. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/__init__.py +0 -0
  576. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/api/__init__.py +0 -0
  577. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/api/convert_runner.py +0 -0
  578. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/api/jobs.py +0 -0
  579. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/api/main.py +0 -0
  580. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/api/mcp_server.py +0 -0
  581. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/api/mcp_setup.py +0 -0
  582. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/api/run.py +0 -0
  583. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/api/settings.py +0 -0
  584. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/assets.py +0 -0
  585. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/chunker.py +0 -0
  586. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/cli.py +0 -0
  587. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/extractor.py +0 -0
  588. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/html_to_md.py +0 -0
  589. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/options.py +0 -0
  590. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/pipeline.py +0 -0
  591. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/playwright/playwright_fetcher.py +0 -0
  592. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/__init__.py +0 -0
  593. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/api/__init__.py +0 -0
  594. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/api/convert_runner.py +0 -0
  595. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/api/jobs.py +0 -0
  596. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/api/main.py +0 -0
  597. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/api/mcp_server.py +0 -0
  598. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/api/mcp_setup.py +0 -0
  599. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/api/query_options.py +0 -0
  600. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/api/settings.py +0 -0
  601. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/convert_impl.py +0 -0
  602. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/converter.py +0 -0
  603. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/embedded_extract.py +0 -0
  604. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/ooxml_media.py +0 -0
  605. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/options.py +0 -0
  606. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/post_assets.py +0 -0
  607. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/text_formatting.py +0 -0
  608. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
  609. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
  610. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
  611. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
  612. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/ppt/zip_deep.py +0 -0
  613. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/runtime/__init__.py +0 -0
  614. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/runtime/execution_context.py +0 -0
  615. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/runtime/metrics.py +0 -0
  616. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/runtime/stage_engine.py +0 -0
  617. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/__init__.py +0 -0
  618. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/analyzer/authorization/extractor.py +0 -0
  619. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/analyzer/governance/classifier.py +0 -0
  620. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/analyzer/lineage/builder.py +0 -0
  621. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/analyzer/relationships/engine.py +0 -0
  622. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/analyzer/semantics/entity_mapper.py +0 -0
  623. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/analyzer/validation/extractor.py +0 -0
  624. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/api/main.py +0 -0
  625. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/api/mcp_server.py +0 -0
  626. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/api/run.py +0 -0
  627. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/api/schemas.py +0 -0
  628. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/api/settings.py +0 -0
  629. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/api/zip_export.py +0 -0
  630. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/cli/main.py +0 -0
  631. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/config/default.yaml +0 -0
  632. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/__init__.py +0 -0
  633. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/cache.py +0 -0
  634. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/errors.py +0 -0
  635. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/export_manifest.py +0 -0
  636. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/extractor.py +0 -0
  637. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/features.py +0 -0
  638. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/job_manager.py +0 -0
  639. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/link_graph.py +0 -0
  640. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/run_config.py +0 -0
  641. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/core/run_context.py +0 -0
  642. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/graph/__init__.py +0 -0
  643. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/graph/builder.py +0 -0
  644. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/graph/exporters/__init__.py +0 -0
  645. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/graph/exporters/json_export.py +0 -0
  646. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/graph/exporters/mermaid_export.py +0 -0
  647. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/graph/relations.py +0 -0
  648. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/markdown/__init__.py +0 -0
  649. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/markdown/builders/__init__.py +0 -0
  650. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/markdown/builders/entity_builder.py +0 -0
  651. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/markdown/builders/slug.py +0 -0
  652. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/markdown/builders/writer.py +0 -0
  653. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/markdown/chunking/chunk_strategy.py +0 -0
  654. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/markdown/chunking/registry.py +0 -0
  655. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/markdown/chunking/writer.py +0 -0
  656. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/models/entities/__init__.py +0 -0
  657. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/models/entities/kinds.py +0 -0
  658. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/models/entities/sap_object.py +0 -0
  659. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/models/metadata/__init__.py +0 -0
  660. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/models/metadata/abap.py +0 -0
  661. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/models/metadata/cds.py +0 -0
  662. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/models/metadata/ddic.py +0 -0
  663. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/orchestration/__init__.py +0 -0
  664. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/orchestration/pipeline.py +0 -0
  665. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/__init__.py +0 -0
  666. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/abap/__init__.py +0 -0
  667. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/abap/lexer.py +0 -0
  668. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/abap/parser.py +0 -0
  669. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/bapi/parser.py +0 -0
  670. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/base.py +0 -0
  671. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/cds/parser.py +0 -0
  672. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/ddic/parser.py +0 -0
  673. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/discovery.py +0 -0
  674. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/idoc/parser.py +0 -0
  675. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/odata/parser.py +0 -0
  676. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/registry.py +0 -0
  677. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/rfc/__init__.py +0 -0
  678. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sap/parser/transport/parser.py +0 -0
  679. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sdk/__init__.py +0 -0
  680. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sdk/classifier_plugin.py +0 -0
  681. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sdk/discovery.py +0 -0
  682. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sdk/enricher_plugin.py +0 -0
  683. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sdk/parser_plugin.py +0 -0
  684. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sdk/plugin_protocol.py +0 -0
  685. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sdk/stage_protocol.py +0 -0
  686. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/sdk/writer_plugin.py +0 -0
  687. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/__init__.py +0 -0
  688. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/api/__init__.py +0 -0
  689. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/api/convert_runner.py +0 -0
  690. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/api/jobs.py +0 -0
  691. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/api/main.py +0 -0
  692. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/api/mcp_server.py +0 -0
  693. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/api/mcp_setup.py +0 -0
  694. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/api/query_options.py +0 -0
  695. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/api/settings.py +0 -0
  696. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/convert_impl.py +0 -0
  697. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/converter.py +0 -0
  698. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/format_detect.py +0 -0
  699. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/md_emit_json.py +0 -0
  700. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/md_emit_txt.py +0 -0
  701. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/md_emit_xml.py +0 -0
  702. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/md_flatten.py +0 -0
  703. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/options.py +0 -0
  704. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/text/xml_parse.py +0 -0
  705. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/__init__.py +0 -0
  706. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/__init__.py +0 -0
  707. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/adapters/__init__.py +0 -0
  708. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/adapters/claude.py +0 -0
  709. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/adapters/cursor.py +0 -0
  710. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/adapters/openai.py +0 -0
  711. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/agent.py +0 -0
  712. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/bundle.py +0 -0
  713. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/chunks.py +0 -0
  714. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/cli.py +0 -0
  715. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/references/example.md +0 -0
  716. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +0 -0
  717. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/references/example.md +0 -0
  718. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/references/example.md +0 -0
  719. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/references/example.md +0 -0
  720. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/references/example.md +0 -0
  721. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/SKILL.md +0 -0
  722. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/references/example.md +0 -0
  723. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/references/example.md +0 -0
  724. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/references/example.md +0 -0
  725. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/references/example.md +0 -0
  726. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/references/example.md +0 -0
  727. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/references/example.md +0 -0
  728. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/references/example.md +0 -0
  729. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/references/example.md +0 -0
  730. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/references/example.md +0 -0
  731. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/references/example.md +0 -0
  732. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/example.md +0 -0
  733. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/codeflow.md +0 -0
  734. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/db.md +0 -0
  735. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/graph.md +0 -0
  736. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/image.md +0 -0
  737. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/media.md +0 -0
  738. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/openapi.md +0 -0
  739. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/pdf.md +0 -0
  740. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/playwright.md +0 -0
  741. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/ppt.md +0 -0
  742. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/text.md +0 -0
  743. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/url.md +0 -0
  744. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/word.md +0 -0
  745. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +0 -0
  746. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/rag.py +0 -0
  747. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/assistant/registry.py +0 -0
  748. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/__init__.py +0 -0
  749. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/__main__.py +0 -0
  750. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/dependency_graph.py +0 -0
  751. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/pyproject_util.py +0 -0
  752. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/__init__.py +0 -0
  753. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/api/__init__.py +0 -0
  754. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/api/convert_runner.py +0 -0
  755. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/api/jobs.py +0 -0
  756. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/api/main.py +0 -0
  757. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/api/mcp_server.py +0 -0
  758. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/api/mcp_setup.py +0 -0
  759. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/api/query_options.py +0 -0
  760. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/api/settings.py +0 -0
  761. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/assets.py +0 -0
  762. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/convert_impl.py +0 -0
  763. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/converter.py +0 -0
  764. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/crawl.py +0 -0
  765. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/extract.py +0 -0
  766. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/fetch.py +0 -0
  767. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/html_to_md.py +0 -0
  768. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/options.py +0 -0
  769. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/page_convert.py +0 -0
  770. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/post_convert_assets.py +0 -0
  771. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/url/robots_util.py +0 -0
  772. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/word/__init__.py +0 -0
  773. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/word/api/__init__.py +0 -0
  774. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/word/api/convert_util.py +0 -0
  775. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/word/api/jobs.py +0 -0
  776. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/word/api/main.py +0 -0
  777. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/word/api/mcp_server.py +0 -0
  778. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/word/artifact.py +0 -0
  779. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/word/converter.py +0 -0
  780. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/word/settings.py +0 -0
  781. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/xlsx/__init__.py +0 -0
  782. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/xlsx/api/__init__.py +0 -0
  783. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/xlsx/api/app.py +0 -0
  784. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/xlsx/convert_config.py +0 -0
  785. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/xlsx/converter.py +0 -0
  786. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/xlsx/converter_core.py +0 -0
  787. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/xlsx/excel_reader.py +0 -0
  788. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/xlsx/markdown_emitter.py +0 -0
  789. {mdengine-0.11.0 → mdengine-0.12.0}/src/md_generator/xlsx/mcp_server.py +0 -0
  790. {mdengine-0.11.0 → mdengine-0.12.0}/src/mdengine.egg-info/dependency_links.txt +0 -0
  791. {mdengine-0.11.0 → mdengine-0.12.0}/src/mdengine.egg-info/entry_points.txt +0 -0
  792. {mdengine-0.11.0 → mdengine-0.12.0}/src/mdengine.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mdengine
3
- Version: 0.11.0
3
+ Version: 0.12.0
4
4
  Summary: Convert PDF, Office, images, audio, video, text/JSON/XML, ZIP archives, web URLs, databases, graphs, and OpenAPI specs to Markdown.
5
5
  Author: mdengine contributors
6
6
  License-Expression: MIT
@@ -101,6 +101,7 @@ Requires-Dist: pymysql>=1.1.0; extra == "db"
101
101
  Requires-Dist: pyodbc>=5.0.0; extra == "db"
102
102
  Requires-Dist: oracledb>=2.0.0; extra == "db"
103
103
  Requires-Dist: pymongo>=4.6.0; extra == "db"
104
+ Requires-Dist: elasticsearch>=8.0.0; extra == "db"
104
105
  Requires-Dist: mermaid-py>=0.8.0; extra == "db"
105
106
  Provides-Extra: graph
106
107
  Requires-Dist: networkx>=3.2.0; extra == "graph"
@@ -126,6 +127,18 @@ Requires-Dist: tree-sitter>=0.21.0; extra == "codeflow-treesitter"
126
127
  Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "codeflow-treesitter"
127
128
  Requires-Dist: tree-sitter-typescript>=0.23.0; extra == "codeflow-treesitter"
128
129
  Requires-Dist: tree-sitter-cpp>=0.23.0; extra == "codeflow-treesitter"
130
+ Requires-Dist: tree-sitter-java>=0.23.0; extra == "codeflow-treesitter"
131
+ Requires-Dist: tree-sitter-python>=0.23.0; extra == "codeflow-treesitter"
132
+ Requires-Dist: tree-sitter-go>=0.23.0; extra == "codeflow-treesitter"
133
+ Requires-Dist: tree-sitter-php>=0.23.0; extra == "codeflow-treesitter"
134
+ Requires-Dist: tree-sitter-rust>=0.23.0; extra == "codeflow-treesitter"
135
+ Requires-Dist: tree-sitter-kotlin>=0.23.0; extra == "codeflow-treesitter"
136
+ Requires-Dist: tree-sitter-c-sharp>=0.23.0; extra == "codeflow-treesitter"
137
+ Requires-Dist: tree-sitter-swift>=0.7.2; extra == "codeflow-treesitter"
138
+ Requires-Dist: tree-sitter-ruby>=0.23.0; extra == "codeflow-treesitter"
139
+ Requires-Dist: tree-sitter-lua>=0.2.0; extra == "codeflow-treesitter"
140
+ Requires-Dist: tree-sitter-scala>=0.6.0; extra == "codeflow-treesitter"
141
+ Requires-Dist: tree-sitter-zig>=0.2.0; extra == "codeflow-treesitter"
129
142
  Provides-Extra: codeflow-clang
130
143
  Requires-Dist: clang>=16.0.0; extra == "codeflow-clang"
131
144
  Provides-Extra: codeflow-semantic
@@ -223,7 +236,7 @@ Dynamic: license-file
223
236
 
224
237
  # mdengine
225
238
 
226
- Single Python distribution for converting **PDF**, **Word (.docx)**, **PowerPoint (.pptx)**, **Excel (.xlsx/.xlsm)**, **images** (OCR), **plain text / JSON / XML**, **ZIP archives**, **audio / video** (Whisper transcription → Markdown), **database metadata** (SQL + Mongo), **graphs** (Neo4j / NetworkX → Markdown), **OpenAPI** specs, **Playwright**-captured web pages (including SPAs), and **source code** (codeflow → architecture Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
239
+ Single Python distribution for converting **PDF**, **Word (.docx)**, **PowerPoint (.pptx)**, **Excel (.xlsx/.xlsm)**, **images** (OCR), **plain text / JSON / XML**, **ZIP archives**, **audio / video** (Whisper transcription → Markdown), **database metadata** (SQL + Mongo), **graphs** (Neo4j / NetworkX → Markdown), **OpenAPI** specs, **Playwright**-captured web pages (including SPAs), **application logs** (plain, JSON, CSV, ZIP bundles → Markdown with optional clustering and semantic grouping), **OpenTelemetry** traces (**OTLP** JSON or protobuf → Markdown trace summaries; optional correlation with log exports via `otel_path`), **SAP artifacts** (ABAP, CDS, DDIC, OData, BAPI, IDoc, transport → AI-ready Markdown knowledge packs), and **source code** (codeflow → architecture Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
227
240
 
228
241
  - **PyPI name:** `mdengine` (import package: `md_generator`)
229
242
  - **Source:** [github.com/vishal7090/md-generator](https://github.com/vishal7090/md-generator)
@@ -305,13 +318,15 @@ pip install "mdengine[all]"
305
318
  | `openapi` | **OpenAPI / Swagger → Markdown** (`prance`, `openapi-spec-validator`, PyYAML) |
306
319
  | `codeflow` | **Static codeflow / call graphs → Markdown** (`networkx`, `javalang`; core scanners) |
307
320
  | `codeflow-worker` | Optional **Celery + Redis** workers for the codeflow API async path |
308
- | `codeflow-treesitter` | **Tree-sitter** parsers (JS/TS/TSX, C++) for richer codeflow slices |
321
+ | `codeflow-treesitter` | **Tree-sitter** parsers (JS/TS/TSX, C++, Java, Python, Go, PHP); use `--parser-mode treesitter` — see [codeflow-to-md/docs/parser-backends.md](codeflow-to-md/docs/parser-backends.md) |
309
322
  | `codeflow-clang` | **libclang** bindings for C/C++ parsing when used by the codeflow pipeline |
310
323
  | `codeflow-semantic` | **Semantic clustering** (SentenceTransformers, scikit-learn, numpy; large install) |
311
324
  | `log` | **Log files → Markdown** (`pandas`, PyYAML, date parsing) |
312
325
  | `log-cluster` | Log pipeline **clustering** (scikit-learn) |
313
326
  | `log-semantic` | Log pipeline **semantic** helpers (SentenceTransformers + scikit-learn; large) |
314
327
  | `log-pretty` | Optional **loguru** for pretty console diagnostics during log conversion |
328
+ | `log-otel-proto` | **OTLP protobuf** ingest for **`md-otel`** and log/OTEL tooling (`opentelemetry-proto`, `protobuf`) |
329
+ | `sap` | **SAP artifacts → Markdown** (ABAP, CDS, DDIC, OData, BAPI, IDoc, transport): PyYAML, NetworkX, Pydantic |
315
330
  | `api` | FastAPI, uvicorn, httpx, pydantic-settings |
316
331
  | `mcp` | MCP servers (`mcp`, `fastmcp` where used) |
317
332
  | `graph` | **Graph → Markdown** (Neo4j Bolt + NetworkX GraphML/GML): `networkx`, `neo4j`, `pyyaml` |
@@ -386,7 +401,11 @@ If the shell reports “command not found”, ensure the Python **Scripts** dire
386
401
  | `md-log` | `md_generator.log.cli.main:main` | `pip install "mdengine[log]"` then `md-log --config log.yaml` (or `mdengine log-to-md …`) |
387
402
  | `md-log-api` | `md_generator.log.api.run:main` | FastAPI on port **8012** (`LOG_TO_MD_PORT`); set a different port if **`md-graph-api`** or **`md-video-api`** already uses **8012** |
388
403
  | `md-log-mcp` | `md_generator.log.api.mcp_server:main` | Standalone MCP (`stdio` \| `sse` \| `streamable-http`) |
389
- | `mdengine` | `md_generator.engine_cli:main` | `mdengine ai assist …`, `mdengine ai export …`, `mdengine skill build …`, `mdengine db-to-md …`, `mdengine log-to-md …`, `mdengine graph-to-md …`, `mdengine openapi-to-md generate …`, `mdengine codeflow-to-md scan …` |
404
+ | `md-otel` | `md_generator.otel.cli.main:main` | `pip install "mdengine[log-otel-proto]"` then `md-otel --input traces.json --output ./otel-docs` (or `mdengine otel-to-md …`; add **`--protobuf`** for OTLP binary) |
405
+ | `md-sap` | `md_generator.sap.cli.main:main` | `pip install "mdengine[sap]"` then `md-sap ./sap-source --output ./sap-out --graph --chunk` (or `mdengine sap-to-md …`) |
406
+ | `md-sap-api` | `md_generator.sap.api.run:main` | FastAPI on port **8020** (`SAP_TO_MD_PORT`): `POST /sap-to-md/run`, `POST /sap-to-md/job`, `GET /sap-to-md/job/{id}/download` |
407
+ | `md-sap-mcp` | `md_generator.sap.api.mcp_server:main` | Runs the same FastAPI app as **`md-sap-api`** (MCP mount when enabled in app) |
408
+ | `mdengine` | `md_generator.engine_cli:main` | `mdengine ai assist …`, `mdengine ai export …`, `mdengine skill build …`, `mdengine db-to-md …`, `mdengine log-to-md …`, `mdengine otel-to-md …`, `mdengine sap-to-md …`, `mdengine graph-to-md …`, `mdengine openapi-to-md generate …`, `mdengine codeflow-to-md scan …` |
390
409
 
391
410
  **openapi-to-md (`md-openapi`):** OpenAPI **3.x** is parsed directly; **Swagger 2.0** (`swagger: "2.0"`) documents are **converted in-process** to OpenAPI 3.0.3 (deterministic, in-repo converter) before `$ref` resolution. Edge-heavy specs (unusual OAuth2 flows, vendor extensions) may still need fixes after conversion.
392
411
 
@@ -406,6 +425,14 @@ If the shell reports “command not found”, ensure the Python **Scripts** dire
406
425
 
407
426
  **db-to-md API SQLite upload:** **`POST /db-to-md/run/sqlite`** — `multipart/form-data` with field **`file`** (the `.sqlite` / `.db` bytes; must start with the standard `SQLite format 3` header) and optional **`config`** (JSON string with the same shape as a normal run body minus `database`: `schema`, `output`, `features`, `execution`, `limits`, `erd`). Returns the metadata ZIP immediately. **`POST /db-to-md/job/sqlite`** — same form fields; saves the file under the job workspace and runs the existing job pipeline (`GET /db-to-md/job/{id}/download` when complete). Upload size cap: env **`DB_TO_MD_MAX_SQLITE_UPLOAD_MB`** (default **256**). Large ZIPs may still require the async job path if they exceed **`DB_TO_MD_MAX_SYNC_ZIP_MB`** on the sync upload route.
408
427
 
428
+ **db-to-md Elasticsearch / OpenSearch:** set **`database.type: elasticsearch`** and **`database.uri`** to the cluster URL (for example `https://localhost:9200`). Install **`mdengine[db]`** (includes the **`elasticsearch`** Python client). Feature flags: **`elasticsearch_indices`**, **`elasticsearch_data_streams`**, **`elasticsearch_component_templates`**, **`elasticsearch_index_templates`**, **`elasticsearch_ingest_pipelines`**, **`elasticsearch_ilm_policies`**, **`elasticsearch_slm_policies`**, **`elasticsearch_field_caps`**, **`elasticsearch_snapshot_repositories`**, **`elasticsearch_search_templates`**, **`elasticsearch_search_architecture`**, **`elasticsearch_search_dependency_graph`**. Output under **`elasticsearch/`** (indices, data streams, templates, pipelines, ILM, SLM, snapshots, search templates, **`alias_graph.md`**, **`search_architecture.md`**, **`search_dependency_graph.md`**). Index docs add **`## Mapping Summary`** (field counts, nested/vector/semantic totals) and **`## Operational Notes`** (health, replicas, vector-field signals). Search templates add **`## Query type`** using a vector-aware taxonomy (full text, aggregation, suggest, vector, semantic, hybrid). **`search_architecture.md`** narrates the cluster lifecycle (ingestion → indexing → retention → search → backup → alias routing) with aggregate mapping metrics, query-type counts, vector/AI readiness, and an **OpenSearch Compatibility** matrix when **`limits.opensearch: true`** or export probes detect API gaps. **`search_dependency_graph.md`** links templates to indices, aliases, and pipelines (heuristic); enable with **`elasticsearch_search_dependency_graph`** or **`limits.emit_dependency_graph: true`** (requires **`elasticsearch_search_architecture`**). Snapshot limits: **`limits.snapshot_repository_types`** (optional type filter), **`limits.max_snapshot_repositories`**. Search-template limits: **`limits.search_templates_langs`** (default **`mustache`**), **`limits.max_template_source_chars`** (markdown truncation). Presentation: **`output.elasticsearch_mapping_mode`** (`flattened` \| `summarized` \| `raw`), **`output.elasticsearch_include_raw_json`**, **`output.elasticsearch_analyzer_format`** (`chain` \| `json` \| `both`), **`output.max_json_block_chars`** (default **32000**; **`0`** = unlimited JSON blocks). Truncation and other export issues appear in per-doc **`## Export Warnings`** and **`export_manifest.json`** **`warnings`** when present. OpenSearch: set **`limits.opensearch: true`** to use ISM instead of ILM. Example config: [`example/db/elasticsearch.example.yaml`](example/db/elasticsearch.example.yaml). CLI: **`--type elasticsearch`**, **`--index-pattern`**, **`--list-indices`**. Security flags **`elasticsearch_security_roles`**, **`elasticsearch_security_users`**, **`elasticsearch_security_api_keys`** are **reserved**: when included they write deterministic placeholder docs under **`elasticsearch/security/`** only (no live `_security` API calls, no secrets). Optional **`security.redact_sensitive_values: true`** redacts matching keys in pipelines, templates, snapshots, and settings (pattern names only in manifest **`redaction`** audit block).
429
+
430
+ **db-to-md API Elasticsearch upload:** **`POST /db-to-md/run/elasticsearch`** — `multipart/form-data` with **`file`** (ZIP of JSON metadata: **`mappings/`**, **`settings/`**, optional **`pipelines/`**, **`templates/`**, **`ilm/`**, etc.) and optional **`config`** JSON (`output`, `features`, `limits`). **`POST /db-to-md/job/elasticsearch`** for async jobs. Cap: **`DB_TO_MD_MAX_ELASTICSEARCH_UPLOAD_MB`** (default **64**).
431
+
432
+ **sap-to-md (`md-sap`):** parses **ABAP**, **CDS**, **DDIC** exports, **OData** metadata, **BAPI**, **IDoc**, and transport artifacts into chunked Markdown knowledge packs. Optional **`--include-lineage`**, **`--include-governance`**, **`--graph`**, **`--chunk`**. Library: [`md_generator/sap/`](src/md_generator/sap/). Deeper design: [`sap-to-md/README.md`](sap-to-md/README.md).
433
+
434
+ **otel-to-md (`md-otel`):** reads **OTLP** trace exports (**JSON** or **protobuf** with **`log-otel-proto`**) and writes **`trace.md`** (span list). No separate HTTP API entry point; use **`md-otel`** or correlate traces with log exports via **`input.otel_path`** in log YAML. Library: [`md_generator/otel/`](src/md_generator/otel/).
435
+
409
436
  **graph-to-md (Neo4j + NetworkX):** library lives under [`md_generator/graph/`](src/md_generator/graph/). **Sources:** **`networkx`** (GraphML/GML via `graph.graph_file` or `--graph-file`) or **`neo4j`** (`graph.uri`, `graph.user`, `graph.password`, optional `graph.database` for `session(database=…)`). **Output layout:** by default **`output.combine_markdown: true`** writes **`nodes.md`**, **`relationship.md`**, and **`graph_summary.md`** (summary plus embedded nodes and relationships). Set **`combine_markdown: false`** or CLI **`--individual` / `--markdown-layout individual`** for per-entity files under **`nodes/`** and **`relationships/`**. **Diagrams:** **`viz.mermaid: true`** (default) writes **`graph/graph.mmd`** and embeds a fenced Mermaid block in the export **`README.md`** (no Graphviz required). **`viz.enabled: true`** or CLI **`--viz`** also writes **`graph/graph.dot`** and runs **`dot`** for PNG/SVG/PDF when Graphviz is on `PATH` (or **`GRAPHVIZ_DOT`**). CLI **`--no-mermaid`** disables Mermaid; **`--depth`**, **`--start-node`**, **`--max-nodes`**, **`--max-edges`** bound traversal. Packaged defaults: [`src/md_generator/graph/config/default.yaml`](src/md_generator/graph/config/default.yaml). Tests: **`graph-to-md/tests/`**; API image: [`graph-to-md/Dockerfile.api`](graph-to-md/Dockerfile.api).
410
437
 
411
438
  Every command accepts **`-h` / `--help`** for full flags (artifact layout, OCR, ZIP options, etc.).
@@ -430,6 +457,8 @@ pip install "mdengine[graph]" && md-graph --source neo4j --uri neo4j://localhost
430
457
  pip install "mdengine[playwright]" && playwright install chromium && md-playwright https://example.com/app ./spa-out
431
458
  pip install "mdengine[openapi]" && md-openapi generate --file openapi.yaml --output ./openapi-md
432
459
  pip install "mdengine[log]" && md-log --config log.yaml
460
+ pip install "mdengine[log-otel-proto]" && md-otel --input otlp-traces.json --output ./otel-docs
461
+ pip install "mdengine[sap]" && md-sap ./sap-source --output ./sap-out --graph --chunk
433
462
  md-codeflow scan ./src --output ./cf-out --lang python
434
463
  ```
435
464
 
@@ -706,6 +735,44 @@ cfg = load_log_run_config(Path("log-export.yaml"))
706
735
  extract_to_markdown(cfg)
707
736
  ```
708
737
 
738
+ Set **`input.otel_path`** in the YAML (or API body) to a directory of OTLP JSON exports so the log pipeline can **correlate** log lines with spans. Install **`mdengine[log-otel-proto]`** when ingesting protobuf OTLP via **`md-otel`**.
739
+
740
+ ### OpenTelemetry (otel-to-md)
741
+
742
+ ```python
743
+ from pathlib import Path
744
+
745
+ from md_generator.otel.otel_parser import load_otlp_json
746
+ from md_generator.otel.otel_spans import parse_otlp_spans
747
+
748
+ doc = load_otlp_json(Path("otlp-traces.json"))
749
+ spans = parse_otlp_spans(doc)
750
+ ```
751
+
752
+ CLI (writes **`trace.md`** under **`--output`**):
753
+
754
+ ```bash
755
+ pip install "mdengine[log-otel-proto]"
756
+ md-otel --input otlp-traces.json --output ./otel-docs
757
+ md-otel --input export.pb --output ./otel-docs --protobuf
758
+ ```
759
+
760
+ Shim: [`otel-to-md/converter.py`](otel-to-md/converter.py) delegates to **`md-otel`**.
761
+
762
+ ### SAP artifacts (sap-to-md)
763
+
764
+ ```python
765
+ from pathlib import Path
766
+
767
+ from md_generator.sap.core.extractor import extract_to_markdown
768
+ from md_generator.sap.core.run_config import load_run_config
769
+
770
+ cfg = load_run_config(Path("sap-export.yaml"))
771
+ extract_to_markdown(cfg)
772
+ ```
773
+
774
+ Or pass paths on the CLI: **`md-sap ./abap ./cds --output ./sap-out --include-lineage --include-governance`**. See [`sap-to-md/README.md`](sap-to-md/README.md) for API routes and architecture notes.
775
+
709
776
  ### Codeflow (static call graphs)
710
777
 
711
778
  ```python
@@ -836,7 +903,7 @@ Equivalent modules: `python -m md_generator.media.audio.api.mcp_server`, `python
836
903
 
837
904
  ### Thin shims (repo clone)
838
905
 
839
- [`audio-to-md/converter.py`](audio-to-md/converter.py), [`video-to-md/converter.py`](video-to-md/converter.py), and [`youtube-to-md/converter.py`](youtube-to-md/converter.py) delegate to the same `main` as `md-audio` / `md-video` / `md-youtube`. Tests and `pytest.ini` live under `audio-to-md/tests/`, `video-to-md/tests/`, and `youtube-to-md/tests/`. [`db-to-md/converter.py`](db-to-md/converter.py) delegates to `md-db`; tests live under `db-to-md/tests/`. **graph-to-md** uses `md-graph` / `mdengine graph-to-md` directly (no thin `converter.py` shim); tests live under [`graph-to-md/tests/`](graph-to-md/tests/). [`openapi-to-md/converter.py`](openapi-to-md/converter.py) delegates to `md-openapi`; tests live under [`openapi-to-md/tests/`](openapi-to-md/tests/); example OpenAPI and output notes: [`openapi-to-md/examples/`](openapi-to-md/examples/). [`log-to-md/converter.py`](log-to-md/converter.py) delegates to `md-log`; tests under [`log-to-md/tests/`](log-to-md/tests/). [`codeflow-to-md/converter.py`](codeflow-to-md/converter.py) invokes the same CLI entrypoint as `md-codeflow` / `codeflow`; tests under [`codeflow-to-md/tests/`](codeflow-to-md/tests/). [`url-to-md/converter.py`](url-to-md/converter.py) matches `md-url`; tests under [`url-to-md/tests/`](url-to-md/tests/). [`playwright-to-md/tests/`](playwright-to-md/tests/) cover the Playwright pipeline (no root `converter.py` shim required).
906
+ [`audio-to-md/converter.py`](audio-to-md/converter.py), [`video-to-md/converter.py`](video-to-md/converter.py), and [`youtube-to-md/converter.py`](youtube-to-md/converter.py) delegate to the same `main` as `md-audio` / `md-video` / `md-youtube`. Tests and `pytest.ini` live under `audio-to-md/tests/`, `video-to-md/tests/`, and `youtube-to-md/tests/`. [`db-to-md/converter.py`](db-to-md/converter.py) delegates to `md-db`; tests live under `db-to-md/tests/`. **graph-to-md** uses `md-graph` / `mdengine graph-to-md` directly (no thin `converter.py` shim); tests live under [`graph-to-md/tests/`](graph-to-md/tests/). [`openapi-to-md/converter.py`](openapi-to-md/converter.py) delegates to `md-openapi`; tests live under [`openapi-to-md/tests/`](openapi-to-md/tests/); example OpenAPI and output notes: [`openapi-to-md/examples/`](openapi-to-md/examples/). [`log-to-md/converter.py`](log-to-md/converter.py) delegates to `md-log`; tests under [`log-to-md/tests/`](log-to-md/tests/) (including OTLP fixtures under `log-to-md/tests/fixtures/otel/`). [`otel-to-md/converter.py`](otel-to-md/converter.py) delegates to `md-otel`. [`sap-to-md/converter.py`](sap-to-md/converter.py) delegates to `md-sap`; tests under [`sap-to-md/tests/`](sap-to-md/tests/); module README: [`sap-to-md/README.md`](sap-to-md/README.md). [`codeflow-to-md/converter.py`](codeflow-to-md/converter.py) invokes the same CLI entrypoint as `md-codeflow` / `codeflow`; tests under [`codeflow-to-md/tests/`](codeflow-to-md/tests/). [`url-to-md/converter.py`](url-to-md/converter.py) matches `md-url`; tests under [`url-to-md/tests/`](url-to-md/tests/). [`playwright-to-md/tests/`](playwright-to-md/tests/) cover the Playwright pipeline (no root `converter.py` shim required).
840
907
 
841
908
  ---
842
909
 
@@ -874,6 +941,7 @@ Install `mdengine[api]` plus the format extra(s), then run the **`app`** object
874
941
  | YouTube | `md_generator.media.youtube.api.main:create_app` (use **`--factory`**) or `…main:app` | `youtube`, `api`, `mcp` |
875
942
  | Codeflow (workspace scans) | `md_generator.codeflow.api.main:app` | `codeflow`, `api`, `mcp` |
876
943
  | Log files → Markdown | `md_generator.log.api.main:app` | `log`, `api`, `mcp` |
944
+ | SAP artifacts | `md_generator.sap.api.main:app` | `sap`, `api` |
877
945
 
878
946
  Examples (ports are **illustrative** so several services can run together; each `md-*-api` / `run` module has its own **default** — set `*_PORT` / `*_API_PORT` env vars to match your layout):
879
947
 
@@ -885,6 +953,7 @@ uvicorn md_generator.url.api.main:app --host 127.0.0.1 --port 8017
885
953
  uvicorn md_generator.db.api.main:app --host 127.0.0.1 --port 8010
886
954
  uvicorn md_generator.playwright.api.main:app --host 127.0.0.1 --port 8014
887
955
  uvicorn md_generator.graph.api.main:app --host 127.0.0.1 --port 8020
956
+ uvicorn md_generator.sap.api.main:app --host 127.0.0.1 --port 8021
888
957
  uvicorn md_generator.openapi.api.main:app --host 127.0.0.1 --port 8015
889
958
  uvicorn md_generator.codeflow.api.main:app --host 127.0.0.1 --port 8016
890
959
  uvicorn md_generator.log.api.main:app --host 127.0.0.1 --port 8018
@@ -893,7 +962,7 @@ uvicorn md_generator.media.video.api.main:create_app --factory --host 127.0.0.1
893
962
  uvicorn md_generator.media.youtube.api.main:create_app --factory --host 127.0.0.1 --port 8013
894
963
  ```
895
964
 
896
- **Port note:** **`md-graph-api`**, **`md-video-api`**, and **`md-log-api`** all default to **8012** in their respective `run.py` modules. Run only one on that port, or set **`GRAPH_TO_MD_PORT`**, **`MD_VIDEO_API_PORT`**, and **`LOG_TO_MD_PORT`** so each process listens on a unique port. **`md-db-api`** defaults to **8010** (not shown colliding with the archive example above, which uses **8008** on purpose). **`md-openapi-api`** defaults to **8015** (`OPENAPI_TO_MD_PORT`). **`md-youtube-api`** defaults to **8013**; **`md-playwright-api`** / **`PLAYWRIGHT_TO_MD_API_PORT`** default to **8014**. **`md-codeflow-api`** defaults to **8016** (`CODEFLOW_TO_MD_PORT`).
965
+ **Port note:** **`md-graph-api`**, **`md-video-api`**, and **`md-log-api`** all default to **8012** in their respective `run.py` modules. Run only one on that port, or set **`GRAPH_TO_MD_PORT`**, **`MD_VIDEO_API_PORT`**, and **`LOG_TO_MD_PORT`** so each process listens on a unique port. **`md-db-api`** defaults to **8010**. **`md-sap-api`** defaults to **8020** (`SAP_TO_MD_PORT`) — the graph Uvicorn example above uses **8020** on purpose as an illustration; use **8021** (or another port) when running **both** graph and SAP APIs locally. **`md-openapi-api`** defaults to **8015** (`OPENAPI_TO_MD_PORT`). **`md-youtube-api`** defaults to **8013**; **`md-playwright-api`** / **`PLAYWRIGHT_TO_MD_API_PORT`** default to **8014**. **`md-codeflow-api`** defaults to **8016** (`CODEFLOW_TO_MD_PORT`). **`md-otel`** has **no** bundled HTTP server (CLI only).
897
966
 
898
967
  ### MCP over HTTP on the same server
899
968
 
@@ -918,6 +987,7 @@ Prefixes differ per service (often read from a `.env` file next to the process):
918
987
  | OpenAPI → Markdown | `OPENAPI_TO_MD_` | `OPENAPI_TO_MD_CORS_ORIGINS`, `OPENAPI_TO_MD_MAX_SYNC_ZIP_MB`, `OPENAPI_TO_MD_HOST`, `OPENAPI_TO_MD_PORT` (default **8015**) |
919
988
  | Codeflow API | `CODEFLOW_TO_MD_` / `CODEFLOW_` | `CODEFLOW_TO_MD_HOST`, `CODEFLOW_TO_MD_PORT` (default **8016**); in-app limits: `CODEFLOW_MAX_UPLOAD_ZIP_MB`, `CODEFLOW_MAX_SYNC_ZIP_MB`, `CODEFLOW_JOB_WORKSPACE_ROOT`, `CODEFLOW_SQLITE_PATH`, CORS via `CODEFLOW_CORS` |
920
989
  | Log API | `LOG_TO_MD_` | `LOG_TO_MD_HOST`, `LOG_TO_MD_PORT` (default **8012** — change if **graph** or **video** API uses that port), `LOG_TO_MD_CORS_ORIGINS`, `LOG_TO_MD_MAX_SYNC_ZIP_MB`, `LOG_TO_MD_MAX_LOG_UPLOAD_MB`, workspace / SQLite paths |
990
+ | SAP API | `SAP_TO_MD_` | `SAP_TO_MD_HOST`, `SAP_TO_MD_PORT` (default **8020**), `SAP_TO_MD_CORS_ORIGINS`, `SAP_TO_MD_MAX_SYNC_ZIP_MB`, `SAP_TO_MD_JOB_SQLITE_PATH`, `SAP_TO_MD_JOB_WORKSPACE_ROOT` |
921
991
  | Audio API | `MD_AUDIO_` | `MD_AUDIO_MAX_UPLOAD_MB`, `MD_AUDIO_MAX_SYNC_UPLOAD_MB`, `MD_AUDIO_JOB_TTL_SECONDS`, `MD_AUDIO_TEMP_DIR`, `MD_AUDIO_CORS_ORIGINS`, `MD_AUDIO_API_HOST`, `MD_AUDIO_API_PORT` |
922
992
  | Video API | `MD_VIDEO_` | Same pattern as audio with `MD_VIDEO_*` (defaults: larger upload/sync caps, port **8012**) |
923
993
  | YouTube API | `MD_YOUTUBE_` | `MD_YOUTUBE_JOB_TTL_SECONDS`, `MD_YOUTUBE_TEMP_DIR`, `MD_YOUTUBE_CORS_ORIGINS`, `MD_YOUTUBE_API_HOST`, `MD_YOUTUBE_API_PORT` (default **8013**); optional `MD_YOUTUBE_YTDLP` path for audio fallback |
@@ -953,6 +1023,7 @@ Two usage patterns:
953
1023
  | OpenAPI → Markdown | `md-openapi-mcp` or `python -m md_generator.openapi.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
954
1024
  | Codeflow | `md-codeflow-mcp` or `python -m md_generator.codeflow.api.mcp_server` — **stdio** MCP (see module for details) |
955
1025
  | Log files | `md-log-mcp` or `python -m md_generator.log.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
1026
+ | SAP | `md-sap-mcp` or `md-sap-api` — FastAPI app (same as HTTP API; dedicated MCP tools when mounted in app) |
956
1027
 
957
1028
  **Word** and **XLSX** also ship a small runner script in the repo:
958
1029
 
@@ -1081,7 +1152,7 @@ pip install -e ".[dev,all]" # or a smaller subset of extras
1081
1152
  python -m pytest
1082
1153
  ```
1083
1154
 
1084
- Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/tests/`), plus **`url-to-md/tests/`**, **`playwright-to-md/tests/`**, **`youtube-to-md/tests/`**, **`graph-to-md/tests/`**, **`openapi-to-md/tests/`**, **`codeflow-to-md/tests/`**, **`log-to-md/tests/`**, and **[`tool-assistant/tests/`](tool-assistant/tests/)** for the skill SDK; `pyproject.toml` sets `pythonpath = ["src"]` so **`md_generator`** (including **`md_generator.tools.assistant`**) resolves without a manual `PYTHONPATH` when you use `pytest` from the config.
1155
+ Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/tests/`), plus **`url-to-md/tests/`**, **`playwright-to-md/tests/`**, **`youtube-to-md/tests/`**, **`graph-to-md/tests/`**, **`openapi-to-md/tests/`**, **`codeflow-to-md/tests/`**, **`log-to-md/tests/`**, **`sap-to-md/tests/`**, and **[`tool-assistant/tests/`](tool-assistant/tests/)** for the skill SDK; `pyproject.toml` sets `pythonpath = ["src"]` so **`md_generator`** (including **`md_generator.tools.assistant`**) resolves without a manual `PYTHONPATH` when you use `pytest` from the config.
1085
1156
 
1086
1157
  **Docs site (maintainers):** install **`mdengine[docs]`**, then build or serve the MkDocs project from the repo root (`mkdocs.yml`). The published site URL is listed under **Documentation** in `[project.urls]` on PyPI ([GitHub Pages build](https://vishal7090.github.io/md-generator/)).
1087
1158
 
@@ -1118,7 +1189,7 @@ python -m md_generator.codeflow.cli.main scan path/to/src --output ./codeflow-ou
1118
1189
  | `docs/` | **MkDocs** source (module guides, `index.md`); build with **`mdengine[docs]`** |
1119
1190
  | `mkdocs.yml` | MkDocs configuration |
1120
1191
  | `CODE_OF_CONDUCT.md` | [Contributor Covenant](https://www.contributor-covenant.org/) 2.1 |
1121
- | `src/md_generator/` | **Library source** (all formats + `api` subpackages); **audio/video** under [`media/audio/`](src/md_generator/media/audio/) and [`media/video/`](src/md_generator/media/video/); **graph-to-md** under [`graph/`](src/md_generator/graph/) |
1192
+ | `src/md_generator/` | **Library source** (all formats + `api` subpackages); **audio/video** under [`media/`](src/md_generator/media/); **logs** [`log/`](src/md_generator/log/), **OTEL** [`otel/`](src/md_generator/otel/), **SAP** [`sap/`](src/md_generator/sap/), **graphs** [`graph/`](src/md_generator/graph/) |
1122
1193
  | `pyproject.toml` | Packaging, extras, CLI entry points, pytest |
1123
1194
  | `ai/` | **Distributable AI skills** (`SKILL.md` trees, `registry.json`, `dependency-graph.json`); regenerate with `PYTHONPATH=src python -m md_generator.tools.skill_builder` or **`mdengine skill build`** (after `pip install -e .`) |
1124
1195
  | `src/md_generator/tools/skill_builder/` | **Skill generator** — scans `src/md_generator` and `pyproject.toml` |
@@ -1,6 +1,6 @@
1
1
  # mdengine
2
2
 
3
- Single Python distribution for converting **PDF**, **Word (.docx)**, **PowerPoint (.pptx)**, **Excel (.xlsx/.xlsm)**, **images** (OCR), **plain text / JSON / XML**, **ZIP archives**, **audio / video** (Whisper transcription → Markdown), **database metadata** (SQL + Mongo), **graphs** (Neo4j / NetworkX → Markdown), **OpenAPI** specs, **Playwright**-captured web pages (including SPAs), and **source code** (codeflow → architecture Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
3
+ Single Python distribution for converting **PDF**, **Word (.docx)**, **PowerPoint (.pptx)**, **Excel (.xlsx/.xlsm)**, **images** (OCR), **plain text / JSON / XML**, **ZIP archives**, **audio / video** (Whisper transcription → Markdown), **database metadata** (SQL + Mongo), **graphs** (Neo4j / NetworkX → Markdown), **OpenAPI** specs, **Playwright**-captured web pages (including SPAs), **application logs** (plain, JSON, CSV, ZIP bundles → Markdown with optional clustering and semantic grouping), **OpenTelemetry** traces (**OTLP** JSON or protobuf → Markdown trace summaries; optional correlation with log exports via `otel_path`), **SAP artifacts** (ABAP, CDS, DDIC, OData, BAPI, IDoc, transport → AI-ready Markdown knowledge packs), and **source code** (codeflow → architecture Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
4
4
 
5
5
  - **PyPI name:** `mdengine` (import package: `md_generator`)
6
6
  - **Source:** [github.com/vishal7090/md-generator](https://github.com/vishal7090/md-generator)
@@ -82,13 +82,15 @@ pip install "mdengine[all]"
82
82
  | `openapi` | **OpenAPI / Swagger → Markdown** (`prance`, `openapi-spec-validator`, PyYAML) |
83
83
  | `codeflow` | **Static codeflow / call graphs → Markdown** (`networkx`, `javalang`; core scanners) |
84
84
  | `codeflow-worker` | Optional **Celery + Redis** workers for the codeflow API async path |
85
- | `codeflow-treesitter` | **Tree-sitter** parsers (JS/TS/TSX, C++) for richer codeflow slices |
85
+ | `codeflow-treesitter` | **Tree-sitter** parsers (JS/TS/TSX, C++, Java, Python, Go, PHP); use `--parser-mode treesitter` — see [codeflow-to-md/docs/parser-backends.md](codeflow-to-md/docs/parser-backends.md) |
86
86
  | `codeflow-clang` | **libclang** bindings for C/C++ parsing when used by the codeflow pipeline |
87
87
  | `codeflow-semantic` | **Semantic clustering** (SentenceTransformers, scikit-learn, numpy; large install) |
88
88
  | `log` | **Log files → Markdown** (`pandas`, PyYAML, date parsing) |
89
89
  | `log-cluster` | Log pipeline **clustering** (scikit-learn) |
90
90
  | `log-semantic` | Log pipeline **semantic** helpers (SentenceTransformers + scikit-learn; large) |
91
91
  | `log-pretty` | Optional **loguru** for pretty console diagnostics during log conversion |
92
+ | `log-otel-proto` | **OTLP protobuf** ingest for **`md-otel`** and log/OTEL tooling (`opentelemetry-proto`, `protobuf`) |
93
+ | `sap` | **SAP artifacts → Markdown** (ABAP, CDS, DDIC, OData, BAPI, IDoc, transport): PyYAML, NetworkX, Pydantic |
92
94
  | `api` | FastAPI, uvicorn, httpx, pydantic-settings |
93
95
  | `mcp` | MCP servers (`mcp`, `fastmcp` where used) |
94
96
  | `graph` | **Graph → Markdown** (Neo4j Bolt + NetworkX GraphML/GML): `networkx`, `neo4j`, `pyyaml` |
@@ -163,7 +165,11 @@ If the shell reports “command not found”, ensure the Python **Scripts** dire
163
165
  | `md-log` | `md_generator.log.cli.main:main` | `pip install "mdengine[log]"` then `md-log --config log.yaml` (or `mdengine log-to-md …`) |
164
166
  | `md-log-api` | `md_generator.log.api.run:main` | FastAPI on port **8012** (`LOG_TO_MD_PORT`); set a different port if **`md-graph-api`** or **`md-video-api`** already uses **8012** |
165
167
  | `md-log-mcp` | `md_generator.log.api.mcp_server:main` | Standalone MCP (`stdio` \| `sse` \| `streamable-http`) |
166
- | `mdengine` | `md_generator.engine_cli:main` | `mdengine ai assist …`, `mdengine ai export …`, `mdengine skill build …`, `mdengine db-to-md …`, `mdengine log-to-md …`, `mdengine graph-to-md …`, `mdengine openapi-to-md generate …`, `mdengine codeflow-to-md scan …` |
168
+ | `md-otel` | `md_generator.otel.cli.main:main` | `pip install "mdengine[log-otel-proto]"` then `md-otel --input traces.json --output ./otel-docs` (or `mdengine otel-to-md …`; add **`--protobuf`** for OTLP binary) |
169
+ | `md-sap` | `md_generator.sap.cli.main:main` | `pip install "mdengine[sap]"` then `md-sap ./sap-source --output ./sap-out --graph --chunk` (or `mdengine sap-to-md …`) |
170
+ | `md-sap-api` | `md_generator.sap.api.run:main` | FastAPI on port **8020** (`SAP_TO_MD_PORT`): `POST /sap-to-md/run`, `POST /sap-to-md/job`, `GET /sap-to-md/job/{id}/download` |
171
+ | `md-sap-mcp` | `md_generator.sap.api.mcp_server:main` | Runs the same FastAPI app as **`md-sap-api`** (MCP mount when enabled in app) |
172
+ | `mdengine` | `md_generator.engine_cli:main` | `mdengine ai assist …`, `mdengine ai export …`, `mdengine skill build …`, `mdengine db-to-md …`, `mdengine log-to-md …`, `mdengine otel-to-md …`, `mdengine sap-to-md …`, `mdengine graph-to-md …`, `mdengine openapi-to-md generate …`, `mdengine codeflow-to-md scan …` |
167
173
 
168
174
  **openapi-to-md (`md-openapi`):** OpenAPI **3.x** is parsed directly; **Swagger 2.0** (`swagger: "2.0"`) documents are **converted in-process** to OpenAPI 3.0.3 (deterministic, in-repo converter) before `$ref` resolution. Edge-heavy specs (unusual OAuth2 flows, vendor extensions) may still need fixes after conversion.
169
175
 
@@ -183,6 +189,14 @@ If the shell reports “command not found”, ensure the Python **Scripts** dire
183
189
 
184
190
  **db-to-md API SQLite upload:** **`POST /db-to-md/run/sqlite`** — `multipart/form-data` with field **`file`** (the `.sqlite` / `.db` bytes; must start with the standard `SQLite format 3` header) and optional **`config`** (JSON string with the same shape as a normal run body minus `database`: `schema`, `output`, `features`, `execution`, `limits`, `erd`). Returns the metadata ZIP immediately. **`POST /db-to-md/job/sqlite`** — same form fields; saves the file under the job workspace and runs the existing job pipeline (`GET /db-to-md/job/{id}/download` when complete). Upload size cap: env **`DB_TO_MD_MAX_SQLITE_UPLOAD_MB`** (default **256**). Large ZIPs may still require the async job path if they exceed **`DB_TO_MD_MAX_SYNC_ZIP_MB`** on the sync upload route.
185
191
 
192
+ **db-to-md Elasticsearch / OpenSearch:** set **`database.type: elasticsearch`** and **`database.uri`** to the cluster URL (for example `https://localhost:9200`). Install **`mdengine[db]`** (includes the **`elasticsearch`** Python client). Feature flags: **`elasticsearch_indices`**, **`elasticsearch_data_streams`**, **`elasticsearch_component_templates`**, **`elasticsearch_index_templates`**, **`elasticsearch_ingest_pipelines`**, **`elasticsearch_ilm_policies`**, **`elasticsearch_slm_policies`**, **`elasticsearch_field_caps`**, **`elasticsearch_snapshot_repositories`**, **`elasticsearch_search_templates`**, **`elasticsearch_search_architecture`**, **`elasticsearch_search_dependency_graph`**. Output under **`elasticsearch/`** (indices, data streams, templates, pipelines, ILM, SLM, snapshots, search templates, **`alias_graph.md`**, **`search_architecture.md`**, **`search_dependency_graph.md`**). Index docs add **`## Mapping Summary`** (field counts, nested/vector/semantic totals) and **`## Operational Notes`** (health, replicas, vector-field signals). Search templates add **`## Query type`** using a vector-aware taxonomy (full text, aggregation, suggest, vector, semantic, hybrid). **`search_architecture.md`** narrates the cluster lifecycle (ingestion → indexing → retention → search → backup → alias routing) with aggregate mapping metrics, query-type counts, vector/AI readiness, and an **OpenSearch Compatibility** matrix when **`limits.opensearch: true`** or export probes detect API gaps. **`search_dependency_graph.md`** links templates to indices, aliases, and pipelines (heuristic); enable with **`elasticsearch_search_dependency_graph`** or **`limits.emit_dependency_graph: true`** (requires **`elasticsearch_search_architecture`**). Snapshot limits: **`limits.snapshot_repository_types`** (optional type filter), **`limits.max_snapshot_repositories`**. Search-template limits: **`limits.search_templates_langs`** (default **`mustache`**), **`limits.max_template_source_chars`** (markdown truncation). Presentation: **`output.elasticsearch_mapping_mode`** (`flattened` \| `summarized` \| `raw`), **`output.elasticsearch_include_raw_json`**, **`output.elasticsearch_analyzer_format`** (`chain` \| `json` \| `both`), **`output.max_json_block_chars`** (default **32000**; **`0`** = unlimited JSON blocks). Truncation and other export issues appear in per-doc **`## Export Warnings`** and **`export_manifest.json`** **`warnings`** when present. OpenSearch: set **`limits.opensearch: true`** to use ISM instead of ILM. Example config: [`example/db/elasticsearch.example.yaml`](example/db/elasticsearch.example.yaml). CLI: **`--type elasticsearch`**, **`--index-pattern`**, **`--list-indices`**. Security flags **`elasticsearch_security_roles`**, **`elasticsearch_security_users`**, **`elasticsearch_security_api_keys`** are **reserved**: when included they write deterministic placeholder docs under **`elasticsearch/security/`** only (no live `_security` API calls, no secrets). Optional **`security.redact_sensitive_values: true`** redacts matching keys in pipelines, templates, snapshots, and settings (pattern names only in manifest **`redaction`** audit block).
193
+
194
+ **db-to-md API Elasticsearch upload:** **`POST /db-to-md/run/elasticsearch`** — `multipart/form-data` with **`file`** (ZIP of JSON metadata: **`mappings/`**, **`settings/`**, optional **`pipelines/`**, **`templates/`**, **`ilm/`**, etc.) and optional **`config`** JSON (`output`, `features`, `limits`). **`POST /db-to-md/job/elasticsearch`** for async jobs. Cap: **`DB_TO_MD_MAX_ELASTICSEARCH_UPLOAD_MB`** (default **64**).
195
+
196
+ **sap-to-md (`md-sap`):** parses **ABAP**, **CDS**, **DDIC** exports, **OData** metadata, **BAPI**, **IDoc**, and transport artifacts into chunked Markdown knowledge packs. Optional **`--include-lineage`**, **`--include-governance`**, **`--graph`**, **`--chunk`**. Library: [`md_generator/sap/`](src/md_generator/sap/). Deeper design: [`sap-to-md/README.md`](sap-to-md/README.md).
197
+
198
+ **otel-to-md (`md-otel`):** reads **OTLP** trace exports (**JSON** or **protobuf** with **`log-otel-proto`**) and writes **`trace.md`** (span list). No separate HTTP API entry point; use **`md-otel`** or correlate traces with log exports via **`input.otel_path`** in log YAML. Library: [`md_generator/otel/`](src/md_generator/otel/).
199
+
186
200
  **graph-to-md (Neo4j + NetworkX):** library lives under [`md_generator/graph/`](src/md_generator/graph/). **Sources:** **`networkx`** (GraphML/GML via `graph.graph_file` or `--graph-file`) or **`neo4j`** (`graph.uri`, `graph.user`, `graph.password`, optional `graph.database` for `session(database=…)`). **Output layout:** by default **`output.combine_markdown: true`** writes **`nodes.md`**, **`relationship.md`**, and **`graph_summary.md`** (summary plus embedded nodes and relationships). Set **`combine_markdown: false`** or CLI **`--individual` / `--markdown-layout individual`** for per-entity files under **`nodes/`** and **`relationships/`**. **Diagrams:** **`viz.mermaid: true`** (default) writes **`graph/graph.mmd`** and embeds a fenced Mermaid block in the export **`README.md`** (no Graphviz required). **`viz.enabled: true`** or CLI **`--viz`** also writes **`graph/graph.dot`** and runs **`dot`** for PNG/SVG/PDF when Graphviz is on `PATH` (or **`GRAPHVIZ_DOT`**). CLI **`--no-mermaid`** disables Mermaid; **`--depth`**, **`--start-node`**, **`--max-nodes`**, **`--max-edges`** bound traversal. Packaged defaults: [`src/md_generator/graph/config/default.yaml`](src/md_generator/graph/config/default.yaml). Tests: **`graph-to-md/tests/`**; API image: [`graph-to-md/Dockerfile.api`](graph-to-md/Dockerfile.api).
187
201
 
188
202
  Every command accepts **`-h` / `--help`** for full flags (artifact layout, OCR, ZIP options, etc.).
@@ -207,6 +221,8 @@ pip install "mdengine[graph]" && md-graph --source neo4j --uri neo4j://localhost
207
221
  pip install "mdengine[playwright]" && playwright install chromium && md-playwright https://example.com/app ./spa-out
208
222
  pip install "mdengine[openapi]" && md-openapi generate --file openapi.yaml --output ./openapi-md
209
223
  pip install "mdengine[log]" && md-log --config log.yaml
224
+ pip install "mdengine[log-otel-proto]" && md-otel --input otlp-traces.json --output ./otel-docs
225
+ pip install "mdengine[sap]" && md-sap ./sap-source --output ./sap-out --graph --chunk
210
226
  md-codeflow scan ./src --output ./cf-out --lang python
211
227
  ```
212
228
 
@@ -483,6 +499,44 @@ cfg = load_log_run_config(Path("log-export.yaml"))
483
499
  extract_to_markdown(cfg)
484
500
  ```
485
501
 
502
+ Set **`input.otel_path`** in the YAML (or API body) to a directory of OTLP JSON exports so the log pipeline can **correlate** log lines with spans. Install **`mdengine[log-otel-proto]`** when ingesting protobuf OTLP via **`md-otel`**.
503
+
504
+ ### OpenTelemetry (otel-to-md)
505
+
506
+ ```python
507
+ from pathlib import Path
508
+
509
+ from md_generator.otel.otel_parser import load_otlp_json
510
+ from md_generator.otel.otel_spans import parse_otlp_spans
511
+
512
+ doc = load_otlp_json(Path("otlp-traces.json"))
513
+ spans = parse_otlp_spans(doc)
514
+ ```
515
+
516
+ CLI (writes **`trace.md`** under **`--output`**):
517
+
518
+ ```bash
519
+ pip install "mdengine[log-otel-proto]"
520
+ md-otel --input otlp-traces.json --output ./otel-docs
521
+ md-otel --input export.pb --output ./otel-docs --protobuf
522
+ ```
523
+
524
+ Shim: [`otel-to-md/converter.py`](otel-to-md/converter.py) delegates to **`md-otel`**.
525
+
526
+ ### SAP artifacts (sap-to-md)
527
+
528
+ ```python
529
+ from pathlib import Path
530
+
531
+ from md_generator.sap.core.extractor import extract_to_markdown
532
+ from md_generator.sap.core.run_config import load_run_config
533
+
534
+ cfg = load_run_config(Path("sap-export.yaml"))
535
+ extract_to_markdown(cfg)
536
+ ```
537
+
538
+ Or pass paths on the CLI: **`md-sap ./abap ./cds --output ./sap-out --include-lineage --include-governance`**. See [`sap-to-md/README.md`](sap-to-md/README.md) for API routes and architecture notes.
539
+
486
540
  ### Codeflow (static call graphs)
487
541
 
488
542
  ```python
@@ -613,7 +667,7 @@ Equivalent modules: `python -m md_generator.media.audio.api.mcp_server`, `python
613
667
 
614
668
  ### Thin shims (repo clone)
615
669
 
616
- [`audio-to-md/converter.py`](audio-to-md/converter.py), [`video-to-md/converter.py`](video-to-md/converter.py), and [`youtube-to-md/converter.py`](youtube-to-md/converter.py) delegate to the same `main` as `md-audio` / `md-video` / `md-youtube`. Tests and `pytest.ini` live under `audio-to-md/tests/`, `video-to-md/tests/`, and `youtube-to-md/tests/`. [`db-to-md/converter.py`](db-to-md/converter.py) delegates to `md-db`; tests live under `db-to-md/tests/`. **graph-to-md** uses `md-graph` / `mdengine graph-to-md` directly (no thin `converter.py` shim); tests live under [`graph-to-md/tests/`](graph-to-md/tests/). [`openapi-to-md/converter.py`](openapi-to-md/converter.py) delegates to `md-openapi`; tests live under [`openapi-to-md/tests/`](openapi-to-md/tests/); example OpenAPI and output notes: [`openapi-to-md/examples/`](openapi-to-md/examples/). [`log-to-md/converter.py`](log-to-md/converter.py) delegates to `md-log`; tests under [`log-to-md/tests/`](log-to-md/tests/). [`codeflow-to-md/converter.py`](codeflow-to-md/converter.py) invokes the same CLI entrypoint as `md-codeflow` / `codeflow`; tests under [`codeflow-to-md/tests/`](codeflow-to-md/tests/). [`url-to-md/converter.py`](url-to-md/converter.py) matches `md-url`; tests under [`url-to-md/tests/`](url-to-md/tests/). [`playwright-to-md/tests/`](playwright-to-md/tests/) cover the Playwright pipeline (no root `converter.py` shim required).
670
+ [`audio-to-md/converter.py`](audio-to-md/converter.py), [`video-to-md/converter.py`](video-to-md/converter.py), and [`youtube-to-md/converter.py`](youtube-to-md/converter.py) delegate to the same `main` as `md-audio` / `md-video` / `md-youtube`. Tests and `pytest.ini` live under `audio-to-md/tests/`, `video-to-md/tests/`, and `youtube-to-md/tests/`. [`db-to-md/converter.py`](db-to-md/converter.py) delegates to `md-db`; tests live under `db-to-md/tests/`. **graph-to-md** uses `md-graph` / `mdengine graph-to-md` directly (no thin `converter.py` shim); tests live under [`graph-to-md/tests/`](graph-to-md/tests/). [`openapi-to-md/converter.py`](openapi-to-md/converter.py) delegates to `md-openapi`; tests live under [`openapi-to-md/tests/`](openapi-to-md/tests/); example OpenAPI and output notes: [`openapi-to-md/examples/`](openapi-to-md/examples/). [`log-to-md/converter.py`](log-to-md/converter.py) delegates to `md-log`; tests under [`log-to-md/tests/`](log-to-md/tests/) (including OTLP fixtures under `log-to-md/tests/fixtures/otel/`). [`otel-to-md/converter.py`](otel-to-md/converter.py) delegates to `md-otel`. [`sap-to-md/converter.py`](sap-to-md/converter.py) delegates to `md-sap`; tests under [`sap-to-md/tests/`](sap-to-md/tests/); module README: [`sap-to-md/README.md`](sap-to-md/README.md). [`codeflow-to-md/converter.py`](codeflow-to-md/converter.py) invokes the same CLI entrypoint as `md-codeflow` / `codeflow`; tests under [`codeflow-to-md/tests/`](codeflow-to-md/tests/). [`url-to-md/converter.py`](url-to-md/converter.py) matches `md-url`; tests under [`url-to-md/tests/`](url-to-md/tests/). [`playwright-to-md/tests/`](playwright-to-md/tests/) cover the Playwright pipeline (no root `converter.py` shim required).
617
671
 
618
672
  ---
619
673
 
@@ -651,6 +705,7 @@ Install `mdengine[api]` plus the format extra(s), then run the **`app`** object
651
705
  | YouTube | `md_generator.media.youtube.api.main:create_app` (use **`--factory`**) or `…main:app` | `youtube`, `api`, `mcp` |
652
706
  | Codeflow (workspace scans) | `md_generator.codeflow.api.main:app` | `codeflow`, `api`, `mcp` |
653
707
  | Log files → Markdown | `md_generator.log.api.main:app` | `log`, `api`, `mcp` |
708
+ | SAP artifacts | `md_generator.sap.api.main:app` | `sap`, `api` |
654
709
 
655
710
  Examples (ports are **illustrative** so several services can run together; each `md-*-api` / `run` module has its own **default** — set `*_PORT` / `*_API_PORT` env vars to match your layout):
656
711
 
@@ -662,6 +717,7 @@ uvicorn md_generator.url.api.main:app --host 127.0.0.1 --port 8017
662
717
  uvicorn md_generator.db.api.main:app --host 127.0.0.1 --port 8010
663
718
  uvicorn md_generator.playwright.api.main:app --host 127.0.0.1 --port 8014
664
719
  uvicorn md_generator.graph.api.main:app --host 127.0.0.1 --port 8020
720
+ uvicorn md_generator.sap.api.main:app --host 127.0.0.1 --port 8021
665
721
  uvicorn md_generator.openapi.api.main:app --host 127.0.0.1 --port 8015
666
722
  uvicorn md_generator.codeflow.api.main:app --host 127.0.0.1 --port 8016
667
723
  uvicorn md_generator.log.api.main:app --host 127.0.0.1 --port 8018
@@ -670,7 +726,7 @@ uvicorn md_generator.media.video.api.main:create_app --factory --host 127.0.0.1
670
726
  uvicorn md_generator.media.youtube.api.main:create_app --factory --host 127.0.0.1 --port 8013
671
727
  ```
672
728
 
673
- **Port note:** **`md-graph-api`**, **`md-video-api`**, and **`md-log-api`** all default to **8012** in their respective `run.py` modules. Run only one on that port, or set **`GRAPH_TO_MD_PORT`**, **`MD_VIDEO_API_PORT`**, and **`LOG_TO_MD_PORT`** so each process listens on a unique port. **`md-db-api`** defaults to **8010** (not shown colliding with the archive example above, which uses **8008** on purpose). **`md-openapi-api`** defaults to **8015** (`OPENAPI_TO_MD_PORT`). **`md-youtube-api`** defaults to **8013**; **`md-playwright-api`** / **`PLAYWRIGHT_TO_MD_API_PORT`** default to **8014**. **`md-codeflow-api`** defaults to **8016** (`CODEFLOW_TO_MD_PORT`).
729
+ **Port note:** **`md-graph-api`**, **`md-video-api`**, and **`md-log-api`** all default to **8012** in their respective `run.py` modules. Run only one on that port, or set **`GRAPH_TO_MD_PORT`**, **`MD_VIDEO_API_PORT`**, and **`LOG_TO_MD_PORT`** so each process listens on a unique port. **`md-db-api`** defaults to **8010**. **`md-sap-api`** defaults to **8020** (`SAP_TO_MD_PORT`) — the graph Uvicorn example above uses **8020** on purpose as an illustration; use **8021** (or another port) when running **both** graph and SAP APIs locally. **`md-openapi-api`** defaults to **8015** (`OPENAPI_TO_MD_PORT`). **`md-youtube-api`** defaults to **8013**; **`md-playwright-api`** / **`PLAYWRIGHT_TO_MD_API_PORT`** default to **8014**. **`md-codeflow-api`** defaults to **8016** (`CODEFLOW_TO_MD_PORT`). **`md-otel`** has **no** bundled HTTP server (CLI only).
674
730
 
675
731
  ### MCP over HTTP on the same server
676
732
 
@@ -695,6 +751,7 @@ Prefixes differ per service (often read from a `.env` file next to the process):
695
751
  | OpenAPI → Markdown | `OPENAPI_TO_MD_` | `OPENAPI_TO_MD_CORS_ORIGINS`, `OPENAPI_TO_MD_MAX_SYNC_ZIP_MB`, `OPENAPI_TO_MD_HOST`, `OPENAPI_TO_MD_PORT` (default **8015**) |
696
752
  | Codeflow API | `CODEFLOW_TO_MD_` / `CODEFLOW_` | `CODEFLOW_TO_MD_HOST`, `CODEFLOW_TO_MD_PORT` (default **8016**); in-app limits: `CODEFLOW_MAX_UPLOAD_ZIP_MB`, `CODEFLOW_MAX_SYNC_ZIP_MB`, `CODEFLOW_JOB_WORKSPACE_ROOT`, `CODEFLOW_SQLITE_PATH`, CORS via `CODEFLOW_CORS` |
697
753
  | Log API | `LOG_TO_MD_` | `LOG_TO_MD_HOST`, `LOG_TO_MD_PORT` (default **8012** — change if **graph** or **video** API uses that port), `LOG_TO_MD_CORS_ORIGINS`, `LOG_TO_MD_MAX_SYNC_ZIP_MB`, `LOG_TO_MD_MAX_LOG_UPLOAD_MB`, workspace / SQLite paths |
754
+ | SAP API | `SAP_TO_MD_` | `SAP_TO_MD_HOST`, `SAP_TO_MD_PORT` (default **8020**), `SAP_TO_MD_CORS_ORIGINS`, `SAP_TO_MD_MAX_SYNC_ZIP_MB`, `SAP_TO_MD_JOB_SQLITE_PATH`, `SAP_TO_MD_JOB_WORKSPACE_ROOT` |
698
755
  | Audio API | `MD_AUDIO_` | `MD_AUDIO_MAX_UPLOAD_MB`, `MD_AUDIO_MAX_SYNC_UPLOAD_MB`, `MD_AUDIO_JOB_TTL_SECONDS`, `MD_AUDIO_TEMP_DIR`, `MD_AUDIO_CORS_ORIGINS`, `MD_AUDIO_API_HOST`, `MD_AUDIO_API_PORT` |
699
756
  | Video API | `MD_VIDEO_` | Same pattern as audio with `MD_VIDEO_*` (defaults: larger upload/sync caps, port **8012**) |
700
757
  | YouTube API | `MD_YOUTUBE_` | `MD_YOUTUBE_JOB_TTL_SECONDS`, `MD_YOUTUBE_TEMP_DIR`, `MD_YOUTUBE_CORS_ORIGINS`, `MD_YOUTUBE_API_HOST`, `MD_YOUTUBE_API_PORT` (default **8013**); optional `MD_YOUTUBE_YTDLP` path for audio fallback |
@@ -730,6 +787,7 @@ Two usage patterns:
730
787
  | OpenAPI → Markdown | `md-openapi-mcp` or `python -m md_generator.openapi.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
731
788
  | Codeflow | `md-codeflow-mcp` or `python -m md_generator.codeflow.api.mcp_server` — **stdio** MCP (see module for details) |
732
789
  | Log files | `md-log-mcp` or `python -m md_generator.log.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
790
+ | SAP | `md-sap-mcp` or `md-sap-api` — FastAPI app (same as HTTP API; dedicated MCP tools when mounted in app) |
733
791
 
734
792
  **Word** and **XLSX** also ship a small runner script in the repo:
735
793
 
@@ -858,7 +916,7 @@ pip install -e ".[dev,all]" # or a smaller subset of extras
858
916
  python -m pytest
859
917
  ```
860
918
 
861
- Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/tests/`), plus **`url-to-md/tests/`**, **`playwright-to-md/tests/`**, **`youtube-to-md/tests/`**, **`graph-to-md/tests/`**, **`openapi-to-md/tests/`**, **`codeflow-to-md/tests/`**, **`log-to-md/tests/`**, and **[`tool-assistant/tests/`](tool-assistant/tests/)** for the skill SDK; `pyproject.toml` sets `pythonpath = ["src"]` so **`md_generator`** (including **`md_generator.tools.assistant`**) resolves without a manual `PYTHONPATH` when you use `pytest` from the config.
919
+ Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/tests/`), plus **`url-to-md/tests/`**, **`playwright-to-md/tests/`**, **`youtube-to-md/tests/`**, **`graph-to-md/tests/`**, **`openapi-to-md/tests/`**, **`codeflow-to-md/tests/`**, **`log-to-md/tests/`**, **`sap-to-md/tests/`**, and **[`tool-assistant/tests/`](tool-assistant/tests/)** for the skill SDK; `pyproject.toml` sets `pythonpath = ["src"]` so **`md_generator`** (including **`md_generator.tools.assistant`**) resolves without a manual `PYTHONPATH` when you use `pytest` from the config.
862
920
 
863
921
  **Docs site (maintainers):** install **`mdengine[docs]`**, then build or serve the MkDocs project from the repo root (`mkdocs.yml`). The published site URL is listed under **Documentation** in `[project.urls]` on PyPI ([GitHub Pages build](https://vishal7090.github.io/md-generator/)).
864
922
 
@@ -895,7 +953,7 @@ python -m md_generator.codeflow.cli.main scan path/to/src --output ./codeflow-ou
895
953
  | `docs/` | **MkDocs** source (module guides, `index.md`); build with **`mdengine[docs]`** |
896
954
  | `mkdocs.yml` | MkDocs configuration |
897
955
  | `CODE_OF_CONDUCT.md` | [Contributor Covenant](https://www.contributor-covenant.org/) 2.1 |
898
- | `src/md_generator/` | **Library source** (all formats + `api` subpackages); **audio/video** under [`media/audio/`](src/md_generator/media/audio/) and [`media/video/`](src/md_generator/media/video/); **graph-to-md** under [`graph/`](src/md_generator/graph/) |
956
+ | `src/md_generator/` | **Library source** (all formats + `api` subpackages); **audio/video** under [`media/`](src/md_generator/media/); **logs** [`log/`](src/md_generator/log/), **OTEL** [`otel/`](src/md_generator/otel/), **SAP** [`sap/`](src/md_generator/sap/), **graphs** [`graph/`](src/md_generator/graph/) |
899
957
  | `pyproject.toml` | Packaging, extras, CLI entry points, pytest |
900
958
  | `ai/` | **Distributable AI skills** (`SKILL.md` trees, `registry.json`, `dependency-graph.json`); regenerate with `PYTHONPATH=src python -m md_generator.tools.skill_builder` or **`mdengine skill build`** (after `pip install -e .`) |
901
959
  | `src/md_generator/tools/skill_builder/` | **Skill generator** — scans `src/md_generator` and `pyproject.toml` |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mdengine"
7
- version = "0.11.0"
7
+ version = "0.12.0"
8
8
  description = "Convert PDF, Office, images, audio, video, text/JSON/XML, ZIP archives, web URLs, databases, graphs, and OpenAPI specs to Markdown."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -101,6 +101,7 @@ db = [
101
101
  "pyodbc>=5.0.0",
102
102
  "oracledb>=2.0.0",
103
103
  "pymongo>=4.6.0",
104
+ "elasticsearch>=8.0.0",
104
105
  "mermaid-py>=0.8.0",
105
106
  ]
106
107
  graph = [
@@ -133,6 +134,18 @@ codeflow-treesitter = [
133
134
  "tree-sitter-javascript>=0.21.0",
134
135
  "tree-sitter-typescript>=0.23.0",
135
136
  "tree-sitter-cpp>=0.23.0",
137
+ "tree-sitter-java>=0.23.0",
138
+ "tree-sitter-python>=0.23.0",
139
+ "tree-sitter-go>=0.23.0",
140
+ "tree-sitter-php>=0.23.0",
141
+ "tree-sitter-rust>=0.23.0",
142
+ "tree-sitter-kotlin>=0.23.0",
143
+ "tree-sitter-c-sharp>=0.23.0",
144
+ "tree-sitter-swift>=0.7.2",
145
+ "tree-sitter-ruby>=0.23.0",
146
+ "tree-sitter-lua>=0.2.0",
147
+ "tree-sitter-scala>=0.6.0",
148
+ "tree-sitter-zig>=0.2.0",
136
149
  ]
137
150
  codeflow-clang = [
138
151
  "clang>=16.0.0",
@@ -1,5 +1,5 @@
1
1
  """md_generator: PDF, Office, image, text, and ZIP to Markdown conversion."""
2
2
 
3
- __version__ = "0.11.0"
3
+ __version__ = "0.12.0"
4
4
 
5
5
  __all__ = ["__version__"]
@@ -76,6 +76,7 @@ def build_parser() -> argparse.ArgumentParser:
76
76
  default="mixed",
77
77
  help=(
78
78
  "mixed | python | java | javascript | typescript | tsx | cpp | go | php | "
79
+ "rust | kotlin | csharp | swift | ruby | lua | scala | zig | "
79
80
  "comma-separated (e.g. python,javascript). Aliases: js→javascript, ts→typescript."
80
81
  ),
81
82
  )
@@ -377,7 +378,8 @@ def build_parser() -> argparse.ArgumentParser:
377
378
  "--parser-mode",
378
379
  choices=("auto", "treesitter", "external"),
379
380
  default="auto",
380
- help="C++: treesitter=Tree-sitter only; external=clang only; auto=current fallback",
381
+ help="auto=native parsers; treesitter=Tree-sitter for java/python/go/php/cpp (+ JS/TS when installed); "
382
+ "external=clang only for C++",
381
383
  )
382
384
  scan.add_argument(
383
385
  "--ui-cfg-max-methods",
@@ -172,6 +172,22 @@ def _resolve_scan_entry_ids(cfg: ScanConfig, g: CodeflowGraph, all_entries: list
172
172
  return entry_ids, warnings
173
173
 
174
174
 
175
+ def _parse_backend_summary_lines(parse_results: list[FileParseResult]) -> list[str]:
176
+ from collections import Counter
177
+
178
+ counts: Counter[tuple[str, str, str | None]] = Counter()
179
+ for fr in parse_results:
180
+ counts[(fr.language, fr.parse_backend, fr.grammar_package)] += 1
181
+ if not counts:
182
+ return []
183
+ lines = ["## Parse backends", ""]
184
+ for (lang, backend, gram), n in sorted(counts.items()):
185
+ gpart = f" (`{gram}`)" if gram else ""
186
+ lines.append(f"- **{lang}** / {backend}{gpart}: {n} file(s)")
187
+ lines.append("")
188
+ return lines
189
+
190
+
175
191
  def _write_scan_summary(
176
192
  path: Path,
177
193
  *,
@@ -183,6 +199,7 @@ def _write_scan_summary(
183
199
  warnings: list[str],
184
200
  cfg: ScanConfig,
185
201
  pr_impact: dict[str, Any] | None = None,
202
+ parse_results: list[FileParseResult] | None = None,
186
203
  ) -> None:
187
204
  lines = [
188
205
  "# Scan summary",
@@ -218,6 +235,10 @@ def _write_scan_summary(
218
235
  f"- **enable_dependency_graph:** {cfg.enable_dependency_graph}",
219
236
  f"- **structural_graph_enabled:** {cfg.structural_graph_enabled()}",
220
237
  f"- **parser_mode:** `{cfg.parser_mode}`",
238
+ ]
239
+ if parse_results:
240
+ lines.extend(_parse_backend_summary_lines(parse_results))
241
+ lines += [
221
242
  f"- **ui_cfg_max_methods:** {cfg.ui_cfg_max_methods}",
222
243
  f"- **intelligence_transitive_callers:** {cfg.intelligence_transitive_callers}",
223
244
  f"- **emit_system_graph_stats:** {cfg.emit_system_graph_stats}",
@@ -448,6 +469,12 @@ def run_scan(cfg: ScanConfig, *, workspace: LoadedWorkspace | None = None) -> Pa
448
469
  all_entries = [e for pr in parse_results for e in pr.entries]
449
470
  entry_ids, scan_warnings = _resolve_scan_entry_ids(cfg, g, all_entries)
450
471
  scan_warnings = scan_warnings_pre + scan_warnings
472
+ from md_generator.codeflow.parsers.capability_registry import capability_warnings
473
+
474
+ for lang in sorted({fr.language for fr in parse_results}):
475
+ scan_warnings.extend(
476
+ capability_warnings(lang, parser_mode=cfg.parser_mode, emit_cfg=cfg.emit_cfg),
477
+ )
451
478
  scan_warnings.extend(scan_semantic_warnings)
452
479
 
453
480
  fmts = {x.strip().lower() for x in cfg.formats}
@@ -920,6 +947,7 @@ def run_scan(cfg: ScanConfig, *, workspace: LoadedWorkspace | None = None) -> Pa
920
947
  warnings=scan_warnings,
921
948
  cfg=cfg,
922
949
  pr_impact=pr_impact_payload,
950
+ parse_results=parse_results,
923
951
  )
924
952
 
925
953
  return out