mdengine 0.11.1__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 (790) hide show
  1. {mdengine-0.11.1 → mdengine-0.12.0}/PKG-INFO +66 -7
  2. {mdengine-0.11.1 → mdengine-0.12.0}/README.md +64 -6
  3. {mdengine-0.11.1 → mdengine-0.12.0}/pyproject.toml +2 -1
  4. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/__init__.py +1 -1
  5. mdengine-0.12.0/src/md_generator/db/adapters/elasticsearch_adapter.py +518 -0
  6. mdengine-0.12.0/src/md_generator/db/adapters/elasticsearch_json_adapter.py +293 -0
  7. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/factory.py +8 -0
  8. mdengine-0.12.0/src/md_generator/db/api/elasticsearch_upload.py +94 -0
  9. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/api/main.py +93 -0
  10. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/api/schemas.py +31 -3
  11. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/api/settings.py +1 -0
  12. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/cli/main.py +18 -2
  13. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/base_adapter.py +42 -0
  14. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_bundle.py +49 -0
  15. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_dependency_graph.py +257 -0
  16. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_export.py +717 -0
  17. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_format.py +230 -0
  18. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_json.py +33 -0
  19. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_markdown.py +694 -0
  20. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_normalize.py +212 -0
  21. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_operational_notes.py +178 -0
  22. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_output.py +51 -0
  23. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_query_classify.py +146 -0
  24. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_redaction.py +203 -0
  25. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_synthesis.py +225 -0
  26. mdengine-0.12.0/src/md_generator/db/core/elasticsearch_warnings.py +81 -0
  27. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/export_manifest.py +14 -1
  28. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/extractor.py +12 -0
  29. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/job_manager.py +51 -0
  30. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/markdown_writer.py +21 -0
  31. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/models.py +111 -1
  32. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/run_config.py +27 -2
  33. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/dependency-graph.json +109 -2
  34. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/registry.json +109 -3
  35. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/global-skill.md +27 -3
  36. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +3 -2
  37. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +1 -1
  38. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +1 -1
  39. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +3 -1
  40. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +1 -1
  41. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +1 -1
  42. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +1 -1
  43. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +1 -1
  44. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-otel/SKILL.md +58 -0
  45. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-otel/references/example.md +23 -0
  46. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +1 -1
  47. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +1 -1
  48. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +1 -1
  49. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/SKILL.md +70 -0
  50. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/references/example.md +42 -0
  51. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +1 -1
  52. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +1 -1
  53. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +1 -1
  54. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +1 -1
  55. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +2 -0
  56. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +7 -0
  57. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +30 -1
  58. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/archive.md +2 -1
  59. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/generate.py +9 -1
  60. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/routing.py +15 -2
  61. {mdengine-0.11.1 → mdengine-0.12.0}/src/mdengine.egg-info/PKG-INFO +66 -7
  62. {mdengine-0.11.1 → mdengine-0.12.0}/src/mdengine.egg-info/SOURCES.txt +20 -0
  63. {mdengine-0.11.1 → mdengine-0.12.0}/src/mdengine.egg-info/requires.txt +1 -0
  64. {mdengine-0.11.1 → mdengine-0.12.0}/LICENSE +0 -0
  65. {mdengine-0.11.1 → mdengine-0.12.0}/setup.cfg +0 -0
  66. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/__init__.py +0 -0
  67. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/api/__init__.py +0 -0
  68. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/api/convert_runner.py +0 -0
  69. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/api/jobs.py +0 -0
  70. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/api/main.py +0 -0
  71. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/api/mcp_server.py +0 -0
  72. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/api/mcp_setup.py +0 -0
  73. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/api/query_options.py +0 -0
  74. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/api/settings.py +0 -0
  75. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/convert_impl.py +0 -0
  76. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/converter.py +0 -0
  77. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/extractors.py +0 -0
  78. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/archive/options.py +0 -0
  79. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/__init__.py +0 -0
  80. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/analyzers/__init__.py +0 -0
  81. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/analyzers/flow_analyzer.py +0 -0
  82. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/api/__init__.py +0 -0
  83. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/api/job_manager.py +0 -0
  84. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/api/main.py +0 -0
  85. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/api/mcp_server.py +0 -0
  86. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/api/run.py +0 -0
  87. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/api/schemas.py +0 -0
  88. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/api/semantic_api.py +0 -0
  89. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/api/settings.py +0 -0
  90. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/api/sse.py +0 -0
  91. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/cli/__init__.py +0 -0
  92. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/cli/main.py +0 -0
  93. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/config/__init__.py +0 -0
  94. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/config/codeflow_yaml.py +0 -0
  95. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/core/__init__.py +0 -0
  96. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/core/cache_manager.py +0 -0
  97. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/core/extractor.py +0 -0
  98. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/core/run_config.py +0 -0
  99. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/__init__.py +0 -0
  100. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/api_detector.py +0 -0
  101. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/entry_detector.py +0 -0
  102. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/entry_rank.py +0 -0
  103. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/event_detector.py +0 -0
  104. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/kafka_detector.py +0 -0
  105. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/liferay_portlet_detector.py +0 -0
  106. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/detectors/rails_detector.py +0 -0
  107. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/__init__.py +0 -0
  108. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/business_rules_markdown.py +0 -0
  109. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/cfg_paths_markdown.py +0 -0
  110. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/cfg_paths_mermaid.py +0 -0
  111. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/cfg_render.py +0 -0
  112. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/cytoscape_enrich.py +0 -0
  113. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/entry_markdown.py +0 -0
  114. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/flow_summary.py +0 -0
  115. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/flow_tree.py +0 -0
  116. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/html.py +0 -0
  117. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/html_unified.py +0 -0
  118. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/markdown.py +0 -0
  119. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/mermaid.py +0 -0
  120. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/generators/sequence.py +0 -0
  121. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/__init__.py +0 -0
  122. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/analysis.py +0 -0
  123. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/anomaly.py +0 -0
  124. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/builder.py +0 -0
  125. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/call_expander.py +0 -0
  126. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cfg_builder.py +0 -0
  127. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cfg_copy.py +0 -0
  128. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cfg_model.py +0 -0
  129. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cluster_labeling.py +0 -0
  130. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/clustering.py +0 -0
  131. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/cross_repo_resolver.py +0 -0
  132. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/dependency_builder.py +0 -0
  133. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/diff_analysis.py +0 -0
  134. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/embeddings.py +0 -0
  135. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/enricher.py +0 -0
  136. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/event_graph.py +0 -0
  137. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/export_schema.py +0 -0
  138. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/hotpath.py +0 -0
  139. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/maven_hints.py +0 -0
  140. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/multi_repo.py +0 -0
  141. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/multigraph_utils.py +0 -0
  142. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/nl_query.py +0 -0
  143. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/path_enumerator.py +0 -0
  144. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/path_probability.py +0 -0
  145. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/query_engine.py +0 -0
  146. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/relations.py +0 -0
  147. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/runtime_integration.py +0 -0
  148. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/semantic_enricher.py +0 -0
  149. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/semantic_index.py +0 -0
  150. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/sqlite_export.py +0 -0
  151. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/graph/tsconfig_cross_repo.py +0 -0
  152. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/ingestion/__init__.py +0 -0
  153. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/ingestion/git_loader.py +0 -0
  154. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/ingestion/loader.py +0 -0
  155. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/lang_dispatch.py +0 -0
  156. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/mcp/__init__.py +0 -0
  157. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/mcp/server.py +0 -0
  158. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/models/__init__.py +0 -0
  159. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/models/ir.py +0 -0
  160. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/models/ir_cfg.py +0 -0
  161. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/__init__.py +0 -0
  162. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/__init__.py +0 -0
  163. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/cpp_adapter.py +0 -0
  164. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/go_adapter.py +0 -0
  165. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/ir_from_dump.py +0 -0
  166. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/java_adapter.py +0 -0
  167. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/php_adapter.py +0 -0
  168. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/python_adapter.py +0 -0
  169. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_adapter.py +0 -0
  170. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_csharp_adapter.py +0 -0
  171. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_go_adapter.py +0 -0
  172. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_java_adapter.py +0 -0
  173. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_kotlin_adapter.py +0 -0
  174. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_lua_adapter.py +0 -0
  175. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_php_adapter.py +0 -0
  176. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_python_adapter.py +0 -0
  177. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_ruby_adapter.py +0 -0
  178. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_rust_adapter.py +0 -0
  179. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_scala_adapter.py +0 -0
  180. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_swift_adapter.py +0 -0
  181. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/adapters/treesitter_zig_adapter.py +0 -0
  182. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/base.py +0 -0
  183. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/capability_registry.py +0 -0
  184. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/cpp_parser.py +0 -0
  185. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/go_parser.py +0 -0
  186. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/ir_enrich.py +0 -0
  187. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/java_parser.py +0 -0
  188. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/php_parser.py +0 -0
  189. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/python_parser.py +0 -0
  190. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_common.py +0 -0
  191. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_csharp_parser.py +0 -0
  192. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_entry_helpers.py +0 -0
  193. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_go_parser.py +0 -0
  194. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_java_parser.py +0 -0
  195. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +0 -0
  196. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_kotlin_parser.py +0 -0
  197. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_lua_parser.py +0 -0
  198. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_php_parser.py +0 -0
  199. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_python_parser.py +0 -0
  200. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_ruby_parser.py +0 -0
  201. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_rust_parser.py +0 -0
  202. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_scala_parser.py +0 -0
  203. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_swift_parser.py +0 -0
  204. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/treesitter_zig_parser.py +0 -0
  205. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/parsers/unified_parser.py +0 -0
  206. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/rules/__init__.py +0 -0
  207. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/rules/collector.py +0 -0
  208. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/rules/cpp_rules.py +0 -0
  209. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/rules/java_rules.py +0 -0
  210. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/runtime/__init__.py +0 -0
  211. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/runtime/python_edge_counter.py +0 -0
  212. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/runtime/trace_runner.py +0 -0
  213. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/runtime/tracer.py +0 -0
  214. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/utils/__init__.py +0 -0
  215. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/utils/tools_root.py +0 -0
  216. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/worker/__init__.py +0 -0
  217. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/codeflow/worker/celery_optional.py +0 -0
  218. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/__init__.py +0 -0
  219. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/artifacts/__init__.py +0 -0
  220. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/artifacts/mdaf_validate.py +0 -0
  221. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/artifacts/models.py +0 -0
  222. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/artifacts/serialize.py +0 -0
  223. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/schema/__init__.py +0 -0
  224. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/schema/adapters/__init__.py +0 -0
  225. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/schema/adapters/log_record.py +0 -0
  226. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/schema/adapters/otel.py +0 -0
  227. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/schema/telemetry_event.py +0 -0
  228. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/core/schema/validation.py +0 -0
  229. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/__init__.py +0 -0
  230. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/__init__.py +0 -0
  231. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/access_adapter.py +0 -0
  232. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/access_introspect.py +0 -0
  233. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/access_odbc.py +0 -0
  234. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
  235. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
  236. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
  237. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
  238. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/sql_common.py +0 -0
  239. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
  240. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/adapters/sqlserver_adapter.py +0 -0
  241. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/api/__init__.py +0 -0
  242. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/api/access_upload.py +0 -0
  243. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/api/mcp_server.py +0 -0
  244. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/api/run.py +0 -0
  245. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/api/sqlite_upload.py +0 -0
  246. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/cli/__init__.py +0 -0
  247. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/config/__init__.py +0 -0
  248. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/config/default.yaml +0 -0
  249. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/__init__.py +0 -0
  250. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/cli_ops.py +0 -0
  251. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/erd/__init__.py +0 -0
  252. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
  253. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/erd/filter.py +0 -0
  254. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
  255. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
  256. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/erd/model.py +0 -0
  257. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/erd/pipeline.py +0 -0
  258. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/erd/render.py +0 -0
  259. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/link_graph.py +0 -0
  260. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/util.py +0 -0
  261. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/core/zip_export.py +0 -0
  262. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/mcp/__init__.py +0 -0
  263. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/mcp/server.py +0 -0
  264. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/mcp/sse.py +0 -0
  265. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/db/mcp/stream.py +0 -0
  266. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/distributed/__init__.py +0 -0
  267. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/distributed/merge.py +0 -0
  268. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/distributed/partition.py +0 -0
  269. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/distributed/worker_pool.py +0 -0
  270. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/engine_cli.py +0 -0
  271. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/governance/__init__.py +0 -0
  272. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/governance/audit.py +0 -0
  273. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/governance/classification.py +0 -0
  274. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/governance/lineage.py +0 -0
  275. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/governance/retention.py +0 -0
  276. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/__init__.py +0 -0
  277. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/adapters/__init__.py +0 -0
  278. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/adapters/factory.py +0 -0
  279. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
  280. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
  281. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/api/__init__.py +0 -0
  282. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/api/main.py +0 -0
  283. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/api/mcp_server.py +0 -0
  284. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/api/run.py +0 -0
  285. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/api/schemas.py +0 -0
  286. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/api/settings.py +0 -0
  287. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/cli/__init__.py +0 -0
  288. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/cli/main.py +0 -0
  289. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/config/__init__.py +0 -0
  290. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/config/default.yaml +0 -0
  291. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/__init__.py +0 -0
  292. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/base_adapter.py +0 -0
  293. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/extractor.py +0 -0
  294. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/graph_builder.py +0 -0
  295. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/job_manager.py +0 -0
  296. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/markdown_writer.py +0 -0
  297. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/models.py +0 -0
  298. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/run_config.py +0 -0
  299. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/viz.py +0 -0
  300. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/core/zip_export.py +0 -0
  301. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/mcp/__init__.py +0 -0
  302. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/mcp/server.py +0 -0
  303. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/mcp/sse.py +0 -0
  304. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/graph/mcp/stream.py +0 -0
  305. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/__init__.py +0 -0
  306. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/api/__init__.py +0 -0
  307. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/api/main.py +0 -0
  308. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/api/mcp_server.py +0 -0
  309. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/api/query_options.py +0 -0
  310. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/api/settings.py +0 -0
  311. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/api/staging.py +0 -0
  312. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/api/zip_bundle.py +0 -0
  313. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/backends/__init__.py +0 -0
  314. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/backends/base.py +0 -0
  315. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/backends/easy.py +0 -0
  316. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/backends/paddle.py +0 -0
  317. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/backends/tesseract.py +0 -0
  318. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/convert_impl.py +0 -0
  319. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/converter.py +0 -0
  320. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/emit.py +0 -0
  321. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/io_util.py +0 -0
  322. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/image/utils.py +0 -0
  323. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/__init__.py +0 -0
  324. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/aggregation/__init__.py +0 -0
  325. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/aggregation/aggregators.py +0 -0
  326. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/aggregation/dataframe_builder.py +0 -0
  327. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/aggregation/metrics.py +0 -0
  328. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/aggregation/timeline.py +0 -0
  329. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/api/__init__.py +0 -0
  330. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/api/main.py +0 -0
  331. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/api/mcp_server.py +0 -0
  332. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/api/run.py +0 -0
  333. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/api/schemas.py +0 -0
  334. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/api/settings.py +0 -0
  335. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/chunking/__init__.py +0 -0
  336. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/chunking/artifact_adapter.py +0 -0
  337. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/chunking/chunk_engine.py +0 -0
  338. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/chunking/chunk_models.py +0 -0
  339. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/chunking/chunk_registry.py +0 -0
  340. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/chunking/chunk_strategy.py +0 -0
  341. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/cli/__init__.py +0 -0
  342. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/cli/main.py +0 -0
  343. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/clustering/__init__.py +0 -0
  344. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/clustering/embeddings.py +0 -0
  345. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/clustering/kmeans_cluster.py +0 -0
  346. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/clustering/semantic_grouping.py +0 -0
  347. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/clustering/vectorizer.py +0 -0
  348. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/config/__init__.py +0 -0
  349. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/config/default.yaml +0 -0
  350. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/config/preset_loader.py +0 -0
  351. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/config/presets/__init__.py +0 -0
  352. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/config/presets/generic.yaml +0 -0
  353. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/config/presets/json.yaml +0 -0
  354. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/config/presets/logback.yaml +0 -0
  355. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/config/presets/springboot.yaml +0 -0
  356. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/config/schemas.py +0 -0
  357. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/__init__.py +0 -0
  358. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/errors.py +0 -0
  359. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/execution_context.py +0 -0
  360. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/extractor.py +0 -0
  361. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/job_manager.py +0 -0
  362. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/lifecycle.py +0 -0
  363. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/pipeline.py +0 -0
  364. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/plugins.py +0 -0
  365. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/run_config.py +0 -0
  366. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/core/zip_export.py +0 -0
  367. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/correlation/correlation_engine.py +0 -0
  368. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/correlation/correlation_models.py +0 -0
  369. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/correlation/correlation_scoring.py +0 -0
  370. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/correlation/cross_source.py +0 -0
  371. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/correlation/request_parser.py +0 -0
  372. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/correlation/session_parser.py +0 -0
  373. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/correlation/trace_parser.py +0 -0
  374. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/documentation/__init__.py +0 -0
  375. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/documentation/incident_summary.py +0 -0
  376. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/documentation/service_report.py +0 -0
  377. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/documentation/troubleshooting.py +0 -0
  378. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/embeddings/embedding_exporter.py +0 -0
  379. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/embeddings/exporters/chroma_exporter.py +0 -0
  380. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/embeddings/exporters/faiss_exporter.py +0 -0
  381. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/embeddings/exporters/jsonl_exporter.py +0 -0
  382. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/embeddings/exporters/parquet_exporter.py +0 -0
  383. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/enrichment/__init__.py +0 -0
  384. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/enrichment/correlation.py +0 -0
  385. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/enrichment/fingerprinting.py +0 -0
  386. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/enrichment/hash_generator.py +0 -0
  387. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/enrichment/pattern_matcher.py +0 -0
  388. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/enrichment/severity_ranker.py +0 -0
  389. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incidents/__init__.py +0 -0
  390. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incidents/artifact_adapter.py +0 -0
  391. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incidents/fingerprinting.py +0 -0
  392. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incidents/grouping.py +0 -0
  393. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incidents/incident_engine.py +0 -0
  394. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incidents/models.py +0 -0
  395. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incidents/severity.py +0 -0
  396. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incremental/__init__.py +0 -0
  397. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incremental/checkpoint.py +0 -0
  398. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incremental/engine.py +0 -0
  399. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/incremental/resume_reader.py +0 -0
  400. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/ingestion/__init__.py +0 -0
  401. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/ingestion/archive_bridge.py +0 -0
  402. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/ingestion/archive_loader.py +0 -0
  403. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/ingestion/batch_reader.py +0 -0
  404. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/ingestion/encoding_detector.py +0 -0
  405. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/ingestion/file_loader.py +0 -0
  406. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/ingestion/stream_reader.py +0 -0
  407. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/intelligence/anomaly_detection.py +0 -0
  408. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/intelligence/dependency_analysis.py +0 -0
  409. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/intelligence/heuristics.py +0 -0
  410. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/intelligence/root_cause_engine.py +0 -0
  411. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/knowledge_graph/graph_builder.py +0 -0
  412. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/knowledge_graph/graph_exporter.py +0 -0
  413. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/knowledge_graph/graph_models.py +0 -0
  414. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/knowledge_graph/relation_extractor.py +0 -0
  415. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/linking/__init__.py +0 -0
  416. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/linking/link_graph.py +0 -0
  417. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/markdown_intelligence/__init__.py +0 -0
  418. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/markdown_intelligence/aliases.py +0 -0
  419. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/markdown_intelligence/backlinks.py +0 -0
  420. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/markdown_intelligence/cross_refs.py +0 -0
  421. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/mcp/__init__.py +0 -0
  422. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/mcp/server.py +0 -0
  423. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/mcp/sse.py +0 -0
  424. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/noise_reduction/__init__.py +0 -0
  425. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/noise_reduction/dedupe.py +0 -0
  426. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/noise_reduction/entropy.py +0 -0
  427. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/noise_reduction/filter.py +0 -0
  428. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/normalization/__init__.py +0 -0
  429. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/normalization/number_normalizer.py +0 -0
  430. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/normalization/path_normalizer.py +0 -0
  431. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/normalization/pii_redactor.py +0 -0
  432. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/normalization/token_normalizer.py +0 -0
  433. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/normalization/uuid_normalizer.py +0 -0
  434. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/__init__.py +0 -0
  435. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/json_line_parser.py +0 -0
  436. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/level_detector.py +0 -0
  437. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/logger_detector.py +0 -0
  438. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/models.py +0 -0
  439. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/multiline_parser.py +0 -0
  440. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/parser_registry.py +0 -0
  441. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/regex_parser.py +0 -0
  442. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/stacktrace_parser.py +0 -0
  443. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/parser/timestamp_parser.py +0 -0
  444. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/search/bm25_search.py +0 -0
  445. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/search/cli.py +0 -0
  446. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/search/hybrid_search.py +0 -0
  447. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/search/search_index.py +0 -0
  448. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/search/vector_search.py +0 -0
  449. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/service/__init__.py +0 -0
  450. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/service/service.py +0 -0
  451. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/streaming/__init__.py +0 -0
  452. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/streaming/kafka_reader.py +0 -0
  453. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/streaming/redis_reader.py +0 -0
  454. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/streaming/stdin_reader.py +0 -0
  455. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/streaming/stream_coordinator.py +0 -0
  456. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/streaming/tail_reader.py +0 -0
  457. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/streaming/websocket_reader.py +0 -0
  458. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/timeline/causal_chain.py +0 -0
  459. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/timeline/ordering.py +0 -0
  460. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/timeline/timeline_engine.py +0 -0
  461. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/timeline/timeline_models.py +0 -0
  462. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/topology/__init__.py +0 -0
  463. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/topology/discovery.py +0 -0
  464. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/utils/__init__.py +0 -0
  465. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/utils/concurrency.py +0 -0
  466. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/utils/io.py +0 -0
  467. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/utils/regex.py +0 -0
  468. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/utils/time.py +0 -0
  469. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/visualization/__init__.py +0 -0
  470. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/visualization/mermaid_sequence.py +0 -0
  471. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/visualization/mermaid_timeline.py +0 -0
  472. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/visualization/mermaid_topology.py +0 -0
  473. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/writers/__init__.py +0 -0
  474. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/writers/assets_writer.py +0 -0
  475. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/writers/chunk_writer.py +0 -0
  476. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/writers/cluster_markdown.py +0 -0
  477. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/writers/correlation_writer.py +0 -0
  478. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/writers/frontmatter_writer.py +0 -0
  479. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/writers/incident_writer.py +0 -0
  480. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/writers/markdown_writer.py +0 -0
  481. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/log/writers/summary_writer.py +0 -0
  482. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/__init__.py +0 -0
  483. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/__init__.py +0 -0
  484. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/api/__init__.py +0 -0
  485. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/api/main.py +0 -0
  486. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/api/mcp_server.py +0 -0
  487. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/api/mcp_setup.py +0 -0
  488. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/api/run.py +0 -0
  489. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/api/settings.py +0 -0
  490. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/converter.py +0 -0
  491. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/formatter.py +0 -0
  492. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/audio/service.py +0 -0
  493. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/document_converter.py +0 -0
  494. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/job_store.py +0 -0
  495. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/__init__.py +0 -0
  496. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/api/__init__.py +0 -0
  497. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/api/main.py +0 -0
  498. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/api/mcp_server.py +0 -0
  499. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/api/mcp_setup.py +0 -0
  500. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/api/run.py +0 -0
  501. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/api/settings.py +0 -0
  502. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/converter.py +0 -0
  503. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/formatter.py +0 -0
  504. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/video/service.py +0 -0
  505. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/whisper_language.py +0 -0
  506. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/__init__.py +0 -0
  507. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/api/__init__.py +0 -0
  508. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/api/main.py +0 -0
  509. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
  510. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/api/mcp_setup.py +0 -0
  511. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/api/run.py +0 -0
  512. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/api/settings.py +0 -0
  513. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/converter.py +0 -0
  514. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/formatter.py +0 -0
  515. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/metadata.py +0 -0
  516. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/service.py +0 -0
  517. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/media/youtube/transcript.py +0 -0
  518. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/__init__.py +0 -0
  519. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/api/__init__.py +0 -0
  520. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/api/main.py +0 -0
  521. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/api/mcp_server.py +0 -0
  522. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/api/run.py +0 -0
  523. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/api/schemas.py +0 -0
  524. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/api/settings.py +0 -0
  525. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/cli/__init__.py +0 -0
  526. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/cli/main.py +0 -0
  527. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/config/__init__.py +0 -0
  528. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/config/default.yaml +0 -0
  529. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/converters/__init__.py +0 -0
  530. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
  531. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/core/__init__.py +0 -0
  532. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/core/extractor.py +0 -0
  533. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/core/run_config.py +0 -0
  534. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/core/zip_export.py +0 -0
  535. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/enrichers/__init__.py +0 -0
  536. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/enrichers/rules.py +0 -0
  537. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
  538. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/generators/__init__.py +0 -0
  539. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
  540. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/loaders/__init__.py +0 -0
  541. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
  542. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/mcp/__init__.py +0 -0
  543. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/mcp/server.py +0 -0
  544. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/models/__init__.py +0 -0
  545. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/models/domain.py +0 -0
  546. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/normalizers/__init__.py +0 -0
  547. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/normalizers/operations.py +0 -0
  548. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
  549. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/parsers/__init__.py +0 -0
  550. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
  551. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/resolvers/__init__.py +0 -0
  552. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
  553. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/writers/__init__.py +0 -0
  554. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
  555. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/otel/__init__.py +0 -0
  556. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/otel/cli/__init__.py +0 -0
  557. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/otel/cli/main.py +0 -0
  558. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/otel/otel_logs.py +0 -0
  559. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/otel/otel_metrics.py +0 -0
  560. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/otel/otel_models.py +0 -0
  561. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/otel/otel_parser.py +0 -0
  562. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/otel/otel_spans.py +0 -0
  563. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/__init__.py +0 -0
  564. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/api/__init__.py +0 -0
  565. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/api/main.py +0 -0
  566. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/api/mcp_server.py +0 -0
  567. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/api/settings.py +0 -0
  568. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/api/zip_bundle.py +0 -0
  569. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/converter.py +0 -0
  570. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/md_emit.py +0 -0
  571. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/pdf_extract.py +0 -0
  572. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/pdf/utils.py +0 -0
  573. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/__init__.py +0 -0
  574. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/api/__init__.py +0 -0
  575. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/api/convert_runner.py +0 -0
  576. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/api/jobs.py +0 -0
  577. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/api/main.py +0 -0
  578. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/api/mcp_server.py +0 -0
  579. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/api/mcp_setup.py +0 -0
  580. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/api/run.py +0 -0
  581. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/api/settings.py +0 -0
  582. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/assets.py +0 -0
  583. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/chunker.py +0 -0
  584. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/cli.py +0 -0
  585. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/extractor.py +0 -0
  586. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/html_to_md.py +0 -0
  587. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/options.py +0 -0
  588. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/pipeline.py +0 -0
  589. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/playwright/playwright_fetcher.py +0 -0
  590. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/__init__.py +0 -0
  591. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/api/__init__.py +0 -0
  592. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/api/convert_runner.py +0 -0
  593. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/api/jobs.py +0 -0
  594. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/api/main.py +0 -0
  595. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/api/mcp_server.py +0 -0
  596. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/api/mcp_setup.py +0 -0
  597. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/api/query_options.py +0 -0
  598. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/api/settings.py +0 -0
  599. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/convert_impl.py +0 -0
  600. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/converter.py +0 -0
  601. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/embedded_extract.py +0 -0
  602. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/ooxml_media.py +0 -0
  603. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/options.py +0 -0
  604. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/post_assets.py +0 -0
  605. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/text_formatting.py +0 -0
  606. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
  607. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
  608. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
  609. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
  610. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/ppt/zip_deep.py +0 -0
  611. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/runtime/__init__.py +0 -0
  612. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/runtime/execution_context.py +0 -0
  613. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/runtime/metrics.py +0 -0
  614. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/runtime/stage_engine.py +0 -0
  615. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/__init__.py +0 -0
  616. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/analyzer/authorization/extractor.py +0 -0
  617. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/analyzer/governance/classifier.py +0 -0
  618. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/analyzer/lineage/builder.py +0 -0
  619. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/analyzer/relationships/engine.py +0 -0
  620. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/analyzer/semantics/entity_mapper.py +0 -0
  621. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/analyzer/validation/extractor.py +0 -0
  622. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/api/main.py +0 -0
  623. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/api/mcp_server.py +0 -0
  624. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/api/run.py +0 -0
  625. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/api/schemas.py +0 -0
  626. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/api/settings.py +0 -0
  627. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/api/zip_export.py +0 -0
  628. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/cli/main.py +0 -0
  629. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/config/default.yaml +0 -0
  630. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/__init__.py +0 -0
  631. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/cache.py +0 -0
  632. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/errors.py +0 -0
  633. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/export_manifest.py +0 -0
  634. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/extractor.py +0 -0
  635. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/features.py +0 -0
  636. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/job_manager.py +0 -0
  637. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/link_graph.py +0 -0
  638. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/run_config.py +0 -0
  639. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/core/run_context.py +0 -0
  640. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/graph/__init__.py +0 -0
  641. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/graph/builder.py +0 -0
  642. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/graph/exporters/__init__.py +0 -0
  643. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/graph/exporters/json_export.py +0 -0
  644. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/graph/exporters/mermaid_export.py +0 -0
  645. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/graph/relations.py +0 -0
  646. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/markdown/__init__.py +0 -0
  647. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/markdown/builders/__init__.py +0 -0
  648. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/markdown/builders/entity_builder.py +0 -0
  649. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/markdown/builders/slug.py +0 -0
  650. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/markdown/builders/writer.py +0 -0
  651. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/markdown/chunking/chunk_strategy.py +0 -0
  652. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/markdown/chunking/registry.py +0 -0
  653. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/markdown/chunking/writer.py +0 -0
  654. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/models/entities/__init__.py +0 -0
  655. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/models/entities/kinds.py +0 -0
  656. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/models/entities/sap_object.py +0 -0
  657. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/models/metadata/__init__.py +0 -0
  658. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/models/metadata/abap.py +0 -0
  659. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/models/metadata/cds.py +0 -0
  660. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/models/metadata/ddic.py +0 -0
  661. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/orchestration/__init__.py +0 -0
  662. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/orchestration/pipeline.py +0 -0
  663. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/__init__.py +0 -0
  664. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/abap/__init__.py +0 -0
  665. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/abap/lexer.py +0 -0
  666. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/abap/parser.py +0 -0
  667. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/bapi/parser.py +0 -0
  668. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/base.py +0 -0
  669. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/cds/parser.py +0 -0
  670. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/ddic/parser.py +0 -0
  671. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/discovery.py +0 -0
  672. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/idoc/parser.py +0 -0
  673. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/odata/parser.py +0 -0
  674. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/registry.py +0 -0
  675. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/rfc/__init__.py +0 -0
  676. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sap/parser/transport/parser.py +0 -0
  677. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sdk/__init__.py +0 -0
  678. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sdk/classifier_plugin.py +0 -0
  679. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sdk/discovery.py +0 -0
  680. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sdk/enricher_plugin.py +0 -0
  681. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sdk/parser_plugin.py +0 -0
  682. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sdk/plugin_protocol.py +0 -0
  683. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sdk/stage_protocol.py +0 -0
  684. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/sdk/writer_plugin.py +0 -0
  685. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/__init__.py +0 -0
  686. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/api/__init__.py +0 -0
  687. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/api/convert_runner.py +0 -0
  688. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/api/jobs.py +0 -0
  689. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/api/main.py +0 -0
  690. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/api/mcp_server.py +0 -0
  691. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/api/mcp_setup.py +0 -0
  692. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/api/query_options.py +0 -0
  693. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/api/settings.py +0 -0
  694. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/convert_impl.py +0 -0
  695. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/converter.py +0 -0
  696. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/format_detect.py +0 -0
  697. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/md_emit_json.py +0 -0
  698. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/md_emit_txt.py +0 -0
  699. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/md_emit_xml.py +0 -0
  700. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/md_flatten.py +0 -0
  701. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/options.py +0 -0
  702. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/text/xml_parse.py +0 -0
  703. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/__init__.py +0 -0
  704. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/__init__.py +0 -0
  705. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/adapters/__init__.py +0 -0
  706. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/adapters/claude.py +0 -0
  707. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/adapters/cursor.py +0 -0
  708. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/adapters/openai.py +0 -0
  709. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/agent.py +0 -0
  710. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/bundle.py +0 -0
  711. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/chunks.py +0 -0
  712. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/cli.py +0 -0
  713. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/references/example.md +0 -0
  714. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +0 -0
  715. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/references/example.md +0 -0
  716. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/references/example.md +0 -0
  717. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/references/example.md +0 -0
  718. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/references/example.md +0 -0
  719. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/SKILL.md +0 -0
  720. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/references/example.md +0 -0
  721. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/references/example.md +0 -0
  722. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/references/example.md +0 -0
  723. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/references/example.md +0 -0
  724. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/references/example.md +0 -0
  725. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/references/example.md +0 -0
  726. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/references/example.md +0 -0
  727. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/references/example.md +0 -0
  728. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/references/example.md +0 -0
  729. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/references/example.md +0 -0
  730. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/example.md +0 -0
  731. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/codeflow.md +0 -0
  732. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/db.md +0 -0
  733. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/graph.md +0 -0
  734. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/image.md +0 -0
  735. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/media.md +0 -0
  736. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/openapi.md +0 -0
  737. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/pdf.md +0 -0
  738. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/playwright.md +0 -0
  739. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/ppt.md +0 -0
  740. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/text.md +0 -0
  741. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/url.md +0 -0
  742. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/word.md +0 -0
  743. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +0 -0
  744. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/rag.py +0 -0
  745. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/assistant/registry.py +0 -0
  746. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/__init__.py +0 -0
  747. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/__main__.py +0 -0
  748. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/dependency_graph.py +0 -0
  749. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/tools/skill_builder/pyproject_util.py +0 -0
  750. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/__init__.py +0 -0
  751. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/api/__init__.py +0 -0
  752. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/api/convert_runner.py +0 -0
  753. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/api/jobs.py +0 -0
  754. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/api/main.py +0 -0
  755. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/api/mcp_server.py +0 -0
  756. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/api/mcp_setup.py +0 -0
  757. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/api/query_options.py +0 -0
  758. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/api/settings.py +0 -0
  759. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/assets.py +0 -0
  760. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/convert_impl.py +0 -0
  761. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/converter.py +0 -0
  762. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/crawl.py +0 -0
  763. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/extract.py +0 -0
  764. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/fetch.py +0 -0
  765. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/html_to_md.py +0 -0
  766. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/options.py +0 -0
  767. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/page_convert.py +0 -0
  768. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/post_convert_assets.py +0 -0
  769. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/url/robots_util.py +0 -0
  770. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/word/__init__.py +0 -0
  771. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/word/api/__init__.py +0 -0
  772. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/word/api/convert_util.py +0 -0
  773. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/word/api/jobs.py +0 -0
  774. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/word/api/main.py +0 -0
  775. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/word/api/mcp_server.py +0 -0
  776. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/word/artifact.py +0 -0
  777. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/word/converter.py +0 -0
  778. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/word/settings.py +0 -0
  779. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/xlsx/__init__.py +0 -0
  780. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/xlsx/api/__init__.py +0 -0
  781. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/xlsx/api/app.py +0 -0
  782. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/xlsx/convert_config.py +0 -0
  783. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/xlsx/converter.py +0 -0
  784. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/xlsx/converter_core.py +0 -0
  785. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/xlsx/excel_reader.py +0 -0
  786. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/xlsx/markdown_emitter.py +0 -0
  787. {mdengine-0.11.1 → mdengine-0.12.0}/src/md_generator/xlsx/mcp_server.py +0 -0
  788. {mdengine-0.11.1 → mdengine-0.12.0}/src/mdengine.egg-info/dependency_links.txt +0 -0
  789. {mdengine-0.11.1 → mdengine-0.12.0}/src/mdengine.egg-info/entry_points.txt +0 -0
  790. {mdengine-0.11.1 → 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.1
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"
@@ -235,7 +236,7 @@ Dynamic: license-file
235
236
 
236
237
  # mdengine
237
238
 
238
- 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.
239
240
 
240
241
  - **PyPI name:** `mdengine` (import package: `md_generator`)
241
242
  - **Source:** [github.com/vishal7090/md-generator](https://github.com/vishal7090/md-generator)
@@ -324,6 +325,8 @@ pip install "mdengine[all]"
324
325
  | `log-cluster` | Log pipeline **clustering** (scikit-learn) |
325
326
  | `log-semantic` | Log pipeline **semantic** helpers (SentenceTransformers + scikit-learn; large) |
326
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 |
327
330
  | `api` | FastAPI, uvicorn, httpx, pydantic-settings |
328
331
  | `mcp` | MCP servers (`mcp`, `fastmcp` where used) |
329
332
  | `graph` | **Graph → Markdown** (Neo4j Bolt + NetworkX GraphML/GML): `networkx`, `neo4j`, `pyyaml` |
@@ -398,7 +401,11 @@ If the shell reports “command not found”, ensure the Python **Scripts** dire
398
401
  | `md-log` | `md_generator.log.cli.main:main` | `pip install "mdengine[log]"` then `md-log --config log.yaml` (or `mdengine log-to-md …`) |
399
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** |
400
403
  | `md-log-mcp` | `md_generator.log.api.mcp_server:main` | Standalone MCP (`stdio` \| `sse` \| `streamable-http`) |
401
- | `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 …` |
402
409
 
403
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.
404
411
 
@@ -418,6 +425,14 @@ If the shell reports “command not found”, ensure the Python **Scripts** dire
418
425
 
419
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.
420
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
+
421
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).
422
437
 
423
438
  Every command accepts **`-h` / `--help`** for full flags (artifact layout, OCR, ZIP options, etc.).
@@ -442,6 +457,8 @@ pip install "mdengine[graph]" && md-graph --source neo4j --uri neo4j://localhost
442
457
  pip install "mdengine[playwright]" && playwright install chromium && md-playwright https://example.com/app ./spa-out
443
458
  pip install "mdengine[openapi]" && md-openapi generate --file openapi.yaml --output ./openapi-md
444
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
445
462
  md-codeflow scan ./src --output ./cf-out --lang python
446
463
  ```
447
464
 
@@ -718,6 +735,44 @@ cfg = load_log_run_config(Path("log-export.yaml"))
718
735
  extract_to_markdown(cfg)
719
736
  ```
720
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
+
721
776
  ### Codeflow (static call graphs)
722
777
 
723
778
  ```python
@@ -848,7 +903,7 @@ Equivalent modules: `python -m md_generator.media.audio.api.mcp_server`, `python
848
903
 
849
904
  ### Thin shims (repo clone)
850
905
 
851
- [`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).
852
907
 
853
908
  ---
854
909
 
@@ -886,6 +941,7 @@ Install `mdengine[api]` plus the format extra(s), then run the **`app`** object
886
941
  | YouTube | `md_generator.media.youtube.api.main:create_app` (use **`--factory`**) or `…main:app` | `youtube`, `api`, `mcp` |
887
942
  | Codeflow (workspace scans) | `md_generator.codeflow.api.main:app` | `codeflow`, `api`, `mcp` |
888
943
  | Log files → Markdown | `md_generator.log.api.main:app` | `log`, `api`, `mcp` |
944
+ | SAP artifacts | `md_generator.sap.api.main:app` | `sap`, `api` |
889
945
 
890
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):
891
947
 
@@ -897,6 +953,7 @@ uvicorn md_generator.url.api.main:app --host 127.0.0.1 --port 8017
897
953
  uvicorn md_generator.db.api.main:app --host 127.0.0.1 --port 8010
898
954
  uvicorn md_generator.playwright.api.main:app --host 127.0.0.1 --port 8014
899
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
900
957
  uvicorn md_generator.openapi.api.main:app --host 127.0.0.1 --port 8015
901
958
  uvicorn md_generator.codeflow.api.main:app --host 127.0.0.1 --port 8016
902
959
  uvicorn md_generator.log.api.main:app --host 127.0.0.1 --port 8018
@@ -905,7 +962,7 @@ uvicorn md_generator.media.video.api.main:create_app --factory --host 127.0.0.1
905
962
  uvicorn md_generator.media.youtube.api.main:create_app --factory --host 127.0.0.1 --port 8013
906
963
  ```
907
964
 
908
- **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).
909
966
 
910
967
  ### MCP over HTTP on the same server
911
968
 
@@ -930,6 +987,7 @@ Prefixes differ per service (often read from a `.env` file next to the process):
930
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**) |
931
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` |
932
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` |
933
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` |
934
992
  | Video API | `MD_VIDEO_` | Same pattern as audio with `MD_VIDEO_*` (defaults: larger upload/sync caps, port **8012**) |
935
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 |
@@ -965,6 +1023,7 @@ Two usage patterns:
965
1023
  | OpenAPI → Markdown | `md-openapi-mcp` or `python -m md_generator.openapi.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
966
1024
  | Codeflow | `md-codeflow-mcp` or `python -m md_generator.codeflow.api.mcp_server` — **stdio** MCP (see module for details) |
967
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) |
968
1027
 
969
1028
  **Word** and **XLSX** also ship a small runner script in the repo:
970
1029
 
@@ -1093,7 +1152,7 @@ pip install -e ".[dev,all]" # or a smaller subset of extras
1093
1152
  python -m pytest
1094
1153
  ```
1095
1154
 
1096
- 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.
1097
1156
 
1098
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/)).
1099
1158
 
@@ -1130,7 +1189,7 @@ python -m md_generator.codeflow.cli.main scan path/to/src --output ./codeflow-ou
1130
1189
  | `docs/` | **MkDocs** source (module guides, `index.md`); build with **`mdengine[docs]`** |
1131
1190
  | `mkdocs.yml` | MkDocs configuration |
1132
1191
  | `CODE_OF_CONDUCT.md` | [Contributor Covenant](https://www.contributor-covenant.org/) 2.1 |
1133
- | `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/) |
1134
1193
  | `pyproject.toml` | Packaging, extras, CLI entry points, pytest |
1135
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 .`) |
1136
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)
@@ -89,6 +89,8 @@ pip install "mdengine[all]"
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.1"
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 = [
@@ -1,5 +1,5 @@
1
1
  """md_generator: PDF, Office, image, text, and ZIP to Markdown conversion."""
2
2
 
3
- __version__ = "0.11.1"
3
+ __version__ = "0.12.0"
4
4
 
5
5
  __all__ = ["__version__"]