mdengine 0.12.0__tar.gz → 0.13.3__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 (1121) hide show
  1. mdengine-0.13.3/PKG-INFO +1328 -0
  2. mdengine-0.13.3/README.md +1085 -0
  3. mdengine-0.13.3/pyproject.toml +355 -0
  4. mdengine-0.13.3/src/md_generator/__init__.py +5 -0
  5. mdengine-0.13.3/src/md_generator/codeflow/adapters/__init__.py +46 -0
  6. mdengine-0.13.3/src/md_generator/codeflow/adapters/base.py +154 -0
  7. mdengine-0.13.3/src/md_generator/codeflow/adapters/frameworks.py +163 -0
  8. mdengine-0.13.3/src/md_generator/codeflow/adapters/go.py +152 -0
  9. mdengine-0.13.3/src/md_generator/codeflow/adapters/java.py +359 -0
  10. mdengine-0.13.3/src/md_generator/codeflow/adapters/js_ts.py +166 -0
  11. mdengine-0.13.3/src/md_generator/codeflow/adapters/others.py +132 -0
  12. mdengine-0.13.3/src/md_generator/codeflow/adapters/php.py +153 -0
  13. mdengine-0.13.3/src/md_generator/codeflow/adapters/python.py +377 -0
  14. mdengine-0.13.3/src/md_generator/codeflow/adapters/registry.py +36 -0
  15. mdengine-0.13.3/src/md_generator/codeflow/cli/main.py +881 -0
  16. mdengine-0.13.3/src/md_generator/codeflow/core/extractor.py +1422 -0
  17. mdengine-0.13.3/src/md_generator/codeflow/core/run_config.py +195 -0
  18. mdengine-0.13.3/src/md_generator/codeflow/detectors/api_detector.py +340 -0
  19. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/__init__.py +38 -0
  20. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/api.py +15 -0
  21. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/base.py +166 -0
  22. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/config.py +19 -0
  23. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/database.py +34 -0
  24. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/dependency.py +34 -0
  25. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/embedding.py +45 -0
  26. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/event.py +16 -0
  27. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/graph.py +42 -0
  28. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/query.py +51 -0
  29. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/queue.py +13 -0
  30. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/resource.py +92 -0
  31. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/runtime.py +23 -0
  32. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/semantic.py +40 -0
  33. mdengine-0.13.3/src/md_generator/codeflow/enterprise_ir/storage.py +12 -0
  34. mdengine-0.13.3/src/md_generator/codeflow/generators/enterprise_exporter.py +176 -0
  35. mdengine-0.13.3/src/md_generator/codeflow/generators/html_unified.py +356 -0
  36. mdengine-0.13.3/src/md_generator/codeflow/graph/builder.py +483 -0
  37. mdengine-0.13.3/src/md_generator/codeflow/graph/cross_repo_resolver.py +200 -0
  38. mdengine-0.13.3/src/md_generator/codeflow/graph/dependency_builder.py +167 -0
  39. mdengine-0.13.3/src/md_generator/codeflow/graph/enricher.py +92 -0
  40. mdengine-0.13.3/src/md_generator/codeflow/graph/enterprise_builder.py +295 -0
  41. mdengine-0.13.3/src/md_generator/codeflow/graph/export_schema.py +278 -0
  42. mdengine-0.13.3/src/md_generator/codeflow/graph/multigraph_utils.py +136 -0
  43. mdengine-0.13.3/src/md_generator/codeflow/graph/query.py +56 -0
  44. mdengine-0.13.3/src/md_generator/codeflow/graph/sqlite_export.py +202 -0
  45. mdengine-0.13.3/src/md_generator/codeflow/graph/traversal.py +113 -0
  46. mdengine-0.13.3/src/md_generator/codeflow/journey/__init__.py +59 -0
  47. mdengine-0.13.3/src/md_generator/codeflow/journey/analyzer.py +188 -0
  48. mdengine-0.13.3/src/md_generator/codeflow/journey/builder.py +239 -0
  49. mdengine-0.13.3/src/md_generator/codeflow/journey/cache.py +127 -0
  50. mdengine-0.13.3/src/md_generator/codeflow/journey/diff.py +220 -0
  51. mdengine-0.13.3/src/md_generator/codeflow/journey/filters.py +315 -0
  52. mdengine-0.13.3/src/md_generator/codeflow/journey/forest.py +44 -0
  53. mdengine-0.13.3/src/md_generator/codeflow/journey/formatter.py +167 -0
  54. mdengine-0.13.3/src/md_generator/codeflow/journey/graph_export.py +87 -0
  55. mdengine-0.13.3/src/md_generator/codeflow/journey/html.py +1123 -0
  56. mdengine-0.13.3/src/md_generator/codeflow/journey/ir.py +191 -0
  57. mdengine-0.13.3/src/md_generator/codeflow/journey/json_export.py +70 -0
  58. mdengine-0.13.3/src/md_generator/codeflow/journey/markdown.py +312 -0
  59. mdengine-0.13.3/src/md_generator/codeflow/journey/mermaid.py +153 -0
  60. mdengine-0.13.3/src/md_generator/codeflow/journey/models.py +215 -0
  61. mdengine-0.13.3/src/md_generator/codeflow/journey/paths.py +94 -0
  62. mdengine-0.13.3/src/md_generator/codeflow/journey/resolver.py +176 -0
  63. mdengine-0.13.3/src/md_generator/codeflow/journey/statistics.py +100 -0
  64. mdengine-0.13.3/src/md_generator/codeflow/journey/traversal.py +461 -0
  65. mdengine-0.13.3/src/md_generator/codeflow/journey/tree.py +229 -0
  66. mdengine-0.13.3/src/md_generator/codeflow/parsers/go_parser.py +133 -0
  67. mdengine-0.13.3/src/md_generator/codeflow/parsers/python_parser.py +387 -0
  68. mdengine-0.13.3/src/md_generator/codeflow/plugins/__init__.py +22 -0
  69. mdengine-0.13.3/src/md_generator/codeflow/plugins/annotation/__init__.py +5 -0
  70. mdengine-0.13.3/src/md_generator/codeflow/plugins/annotation/plugin.py +41 -0
  71. mdengine-0.13.3/src/md_generator/codeflow/plugins/base.py +66 -0
  72. mdengine-0.13.3/src/md_generator/codeflow/plugins/business/models.py +39 -0
  73. mdengine-0.13.3/src/md_generator/codeflow/plugins/classification/__init__.py +5 -0
  74. mdengine-0.13.3/src/md_generator/codeflow/plugins/classification/plugin.py +41 -0
  75. mdengine-0.13.3/src/md_generator/codeflow/plugins/config/plugin.py +100 -0
  76. mdengine-0.13.3/src/md_generator/codeflow/plugins/dependency/plugin.py +124 -0
  77. mdengine-0.13.3/src/md_generator/codeflow/plugins/external/plugin.py +74 -0
  78. mdengine-0.13.3/src/md_generator/codeflow/plugins/query/plugin.py +108 -0
  79. mdengine-0.13.3/src/md_generator/codeflow/plugins/registry.py +92 -0
  80. mdengine-0.13.3/src/md_generator/codeflow/plugins/semantic/__init__.py +5 -0
  81. mdengine-0.13.3/src/md_generator/codeflow/plugins/semantic/plugin.py +41 -0
  82. mdengine-0.13.3/src/md_generator/codeflow/repository/analyzer.py +103 -0
  83. mdengine-0.13.3/src/md_generator/codeflow/repository/model.py +56 -0
  84. mdengine-0.13.3/src/md_generator/codeflow/rules/collector.py +308 -0
  85. mdengine-0.13.3/src/md_generator/codeflow/rules/cpp_rules.py +121 -0
  86. mdengine-0.13.3/src/md_generator/codeflow/rules/java_rules.py +194 -0
  87. mdengine-0.13.3/src/md_generator/codeflow/runtime/correlator.py +45 -0
  88. mdengine-0.13.3/src/md_generator/codeflow/runtime/trace_parser.py +29 -0
  89. mdengine-0.13.3/src/md_generator/engine_cli.py +95 -0
  90. mdengine-0.13.3/src/md_generator/odata/__init__.py +15 -0
  91. mdengine-0.13.3/src/md_generator/odata/api/main.py +84 -0
  92. mdengine-0.13.3/src/md_generator/odata/api/mcp_server.py +29 -0
  93. mdengine-0.13.3/src/md_generator/odata/api/run.py +15 -0
  94. mdengine-0.13.3/src/md_generator/odata/api/schemas.py +41 -0
  95. mdengine-0.13.3/src/md_generator/odata/api/settings.py +21 -0
  96. mdengine-0.13.3/src/md_generator/odata/chunking/__init__.py +0 -0
  97. mdengine-0.13.3/src/md_generator/odata/chunking/strategies.py +87 -0
  98. mdengine-0.13.3/src/md_generator/odata/chunking/writer.py +46 -0
  99. mdengine-0.13.3/src/md_generator/odata/cli/__init__.py +0 -0
  100. mdengine-0.13.3/src/md_generator/odata/cli/main.py +78 -0
  101. mdengine-0.13.3/src/md_generator/odata/config/__init__.py +0 -0
  102. mdengine-0.13.3/src/md_generator/odata/config/default.yaml +27 -0
  103. mdengine-0.13.3/src/md_generator/odata/core/__init__.py +0 -0
  104. mdengine-0.13.3/src/md_generator/odata/core/extractor.py +129 -0
  105. mdengine-0.13.3/src/md_generator/odata/core/run_config.py +112 -0
  106. mdengine-0.13.3/src/md_generator/odata/core/zip_export.py +23 -0
  107. mdengine-0.13.3/src/md_generator/odata/fetch.py +33 -0
  108. mdengine-0.13.3/src/md_generator/odata/generators/__init__.py +0 -0
  109. mdengine-0.13.3/src/md_generator/odata/generators/graph_builder.py +64 -0
  110. mdengine-0.13.3/src/md_generator/odata/generators/mermaid_export.py +43 -0
  111. mdengine-0.13.3/src/md_generator/odata/generators/relations.py +6 -0
  112. mdengine-0.13.3/src/md_generator/odata/loaders/__init__.py +0 -0
  113. mdengine-0.13.3/src/md_generator/odata/loaders/discovery.py +46 -0
  114. mdengine-0.13.3/src/md_generator/odata/loaders/metadata_loader.py +75 -0
  115. mdengine-0.13.3/src/md_generator/odata/mcp/__init__.py +0 -0
  116. mdengine-0.13.3/src/md_generator/odata/mcp/server.py +64 -0
  117. mdengine-0.13.3/src/md_generator/odata/models/__init__.py +1 -0
  118. mdengine-0.13.3/src/md_generator/odata/models/domain.py +230 -0
  119. mdengine-0.13.3/src/md_generator/odata/parser/__init__.py +0 -0
  120. mdengine-0.13.3/src/md_generator/odata/parser/associations.py +68 -0
  121. mdengine-0.13.3/src/md_generator/odata/parser/capabilities.py +63 -0
  122. mdengine-0.13.3/src/md_generator/odata/parser/detector.py +48 -0
  123. mdengine-0.13.3/src/md_generator/odata/parser/fetch.py +33 -0
  124. mdengine-0.13.3/src/md_generator/odata/parser/json/__init__.py +1 -0
  125. mdengine-0.13.3/src/md_generator/odata/parser/json/v4.py +82 -0
  126. mdengine-0.13.3/src/md_generator/odata/parser/legacy.py +22 -0
  127. mdengine-0.13.3/src/md_generator/odata/parser/namespaces.py +36 -0
  128. mdengine-0.13.3/src/md_generator/odata/parser/registry.py +63 -0
  129. mdengine-0.13.3/src/md_generator/odata/parser/xml/__init__.py +1 -0
  130. mdengine-0.13.3/src/md_generator/odata/parser/xml/v1.py +61 -0
  131. mdengine-0.13.3/src/md_generator/odata/parser/xml/v2_v3.py +111 -0
  132. mdengine-0.13.3/src/md_generator/odata/parser/xml/v4.py +122 -0
  133. mdengine-0.13.3/src/md_generator/odata/writers/__init__.py +0 -0
  134. mdengine-0.13.3/src/md_generator/odata/writers/catalog_writer.py +165 -0
  135. mdengine-0.13.3/src/md_generator/otel/cli/__init__.py +0 -0
  136. mdengine-0.13.3/src/md_generator/playwright/options.py +35 -0
  137. mdengine-0.13.3/src/md_generator/sap/canonical/__init__.py +1 -0
  138. mdengine-0.13.3/src/md_generator/sap/canonical/abap/program.py +14 -0
  139. mdengine-0.13.3/src/md_generator/sap/canonical/base.py +25 -0
  140. mdengine-0.13.3/src/md_generator/sap/canonical/bw/adso.py +14 -0
  141. mdengine-0.13.3/src/md_generator/sap/canonical/bw/composite_provider.py +14 -0
  142. mdengine-0.13.3/src/md_generator/sap/canonical/bw/dtp.py +13 -0
  143. mdengine-0.13.3/src/md_generator/sap/canonical/bw/info_object.py +15 -0
  144. mdengine-0.13.3/src/md_generator/sap/canonical/bw/transformation.py +14 -0
  145. mdengine-0.13.3/src/md_generator/sap/canonical/cds/view.py +16 -0
  146. mdengine-0.13.3/src/md_generator/sap/canonical/datasphere/analytical_model.py +14 -0
  147. mdengine-0.13.3/src/md_generator/sap/canonical/datasphere/data_flow.py +14 -0
  148. mdengine-0.13.3/src/md_generator/sap/canonical/datasphere/view.py +14 -0
  149. mdengine-0.13.3/src/md_generator/sap/canonical/ddic/table.py +19 -0
  150. mdengine-0.13.3/src/md_generator/sap/canonical/hana/__init__.py +5 -0
  151. mdengine-0.13.3/src/md_generator/sap/canonical/hana/calculation_view.py +68 -0
  152. mdengine-0.13.3/src/md_generator/sap/canonical/identity.py +32 -0
  153. mdengine-0.13.3/src/md_generator/sap/canonical/loader.py +80 -0
  154. mdengine-0.13.3/src/md_generator/sap/canonical/provenance.py +20 -0
  155. mdengine-0.13.3/src/md_generator/sap/canonical/transformation/__init__.py +1 -0
  156. mdengine-0.13.3/src/md_generator/sap/canonical/transformation/graph.py +41 -0
  157. mdengine-0.13.3/src/md_generator/sap/canonical/transformation/node.py +84 -0
  158. mdengine-0.13.3/src/md_generator/sap/chunking/registry_v2.py +25 -0
  159. mdengine-0.13.3/src/md_generator/sap/chunking/spec.py +19 -0
  160. mdengine-0.13.3/src/md_generator/sap/cli/main.py +135 -0
  161. mdengine-0.13.3/src/md_generator/sap/config/default.yaml +82 -0
  162. mdengine-0.13.3/src/md_generator/sap/core/cache.py +61 -0
  163. mdengine-0.13.3/src/md_generator/sap/core/features.py +18 -0
  164. mdengine-0.13.3/src/md_generator/sap/core/link_graph.py +74 -0
  165. mdengine-0.13.3/src/md_generator/sap/core/run_config.py +188 -0
  166. mdengine-0.13.3/src/md_generator/sap/core/run_context.py +31 -0
  167. mdengine-0.13.3/src/md_generator/sap/framework/artifact.py +24 -0
  168. mdengine-0.13.3/src/md_generator/sap/framework/capabilities.py +17 -0
  169. mdengine-0.13.3/src/md_generator/sap/framework/events.py +44 -0
  170. mdengine-0.13.3/src/md_generator/sap/framework/paths.py +9 -0
  171. mdengine-0.13.3/src/md_generator/sap/framework/plugin.py +41 -0
  172. mdengine-0.13.3/src/md_generator/sap/generators/impact/from_graph.py +5 -0
  173. mdengine-0.13.3/src/md_generator/sap/generators/lineage/from_graph.py +71 -0
  174. mdengine-0.13.3/src/md_generator/sap/generators/mermaid/transformation_graph.py +28 -0
  175. mdengine-0.13.3/src/md_generator/sap/generators/registry.py +635 -0
  176. mdengine-0.13.3/src/md_generator/sap/graph/adapters/__init__.py +1 -0
  177. mdengine-0.13.3/src/md_generator/sap/graph/adapters/networkx.py +69 -0
  178. mdengine-0.13.3/src/md_generator/sap/graph/adapters/openlineage.py +72 -0
  179. mdengine-0.13.3/src/md_generator/sap/graph/backends/__init__.py +4 -0
  180. mdengine-0.13.3/src/md_generator/sap/graph/backends/arango_stub.py +11 -0
  181. mdengine-0.13.3/src/md_generator/sap/graph/backends/memory.py +88 -0
  182. mdengine-0.13.3/src/md_generator/sap/graph/backends/neo4j_stub.py +11 -0
  183. mdengine-0.13.3/src/md_generator/sap/graph/backends/protocol.py +37 -0
  184. mdengine-0.13.3/src/md_generator/sap/graph/builder.py +212 -0
  185. mdengine-0.13.3/src/md_generator/sap/graph/exporters/mermaid_export.py +55 -0
  186. mdengine-0.13.3/src/md_generator/sap/graph/model.py +47 -0
  187. mdengine-0.13.3/src/md_generator/sap/graph/relations.py +21 -0
  188. mdengine-0.13.3/src/md_generator/sap/graph/store.py +5 -0
  189. mdengine-0.13.3/src/md_generator/sap/graph/taxonomy.py +58 -0
  190. mdengine-0.13.3/src/md_generator/sap/index/metadata_index.py +32 -0
  191. mdengine-0.13.3/src/md_generator/sap/index/semantic_entity_registry.py +25 -0
  192. mdengine-0.13.3/src/md_generator/sap/lineage/cross_system.py +79 -0
  193. mdengine-0.13.3/src/md_generator/sap/lineage/semantic_match.py +17 -0
  194. mdengine-0.13.3/src/md_generator/sap/markdown/builders/abap_sections.py +118 -0
  195. mdengine-0.13.3/src/md_generator/sap/markdown/builders/ddic_adapters.py +350 -0
  196. mdengine-0.13.3/src/md_generator/sap/markdown/builders/ddic_sections.py +118 -0
  197. mdengine-0.13.3/src/md_generator/sap/markdown/builders/entity_builder.py +314 -0
  198. mdengine-0.13.3/src/md_generator/sap/markdown/builders/odata_builder.py +9 -0
  199. mdengine-0.13.3/src/md_generator/sap/markdown/builders/renderer_context.py +136 -0
  200. mdengine-0.13.3/src/md_generator/sap/markdown/builders/slug.py +11 -0
  201. mdengine-0.13.3/src/md_generator/sap/markdown/builders/structure_sections.py +84 -0
  202. mdengine-0.13.3/src/md_generator/sap/markdown/builders/writer.py +183 -0
  203. mdengine-0.13.3/src/md_generator/sap/markdown/chunking/chunk_strategy.py +168 -0
  204. mdengine-0.13.3/src/md_generator/sap/markdown/chunking/registry.py +30 -0
  205. mdengine-0.13.3/src/md_generator/sap/markdown/chunking/writer.py +52 -0
  206. mdengine-0.13.3/src/md_generator/sap/markdown/cross_link_registry.py +242 -0
  207. mdengine-0.13.3/src/md_generator/sap/markdown/relationship_weights.py +28 -0
  208. mdengine-0.13.3/src/md_generator/sap/markdown/resolved_link.py +55 -0
  209. mdengine-0.13.3/src/md_generator/sap/markdown/semantic_narrative.py +94 -0
  210. mdengine-0.13.3/src/md_generator/sap/markdown/semantic_types.py +49 -0
  211. mdengine-0.13.3/src/md_generator/sap/markdown/unified_output_registry.py +118 -0
  212. mdengine-0.13.3/src/md_generator/sap/models/entities/kinds.py +30 -0
  213. mdengine-0.13.3/src/md_generator/sap/models/entities/sap_object.py +36 -0
  214. mdengine-0.13.3/src/md_generator/sap/models/metadata/__init__.py +14 -0
  215. mdengine-0.13.3/src/md_generator/sap/models/metadata/abap.py +212 -0
  216. mdengine-0.13.3/src/md_generator/sap/models/metadata/cds.py +82 -0
  217. mdengine-0.13.3/src/md_generator/sap/models/metadata/ddic.py +239 -0
  218. mdengine-0.13.3/src/md_generator/sap/models/metadata/ddic_canonical.py +106 -0
  219. mdengine-0.13.3/src/md_generator/sap/models/metadata/ddic_canonical_io.py +225 -0
  220. mdengine-0.13.3/src/md_generator/sap/models/metadata/ddic_kinds.py +60 -0
  221. mdengine-0.13.3/src/md_generator/sap/models/metadata/odata.py +48 -0
  222. mdengine-0.13.3/src/md_generator/sap/normalizer/registry.py +584 -0
  223. mdengine-0.13.3/src/md_generator/sap/orchestration/pipeline.py +244 -0
  224. mdengine-0.13.3/src/md_generator/sap/orchestration/pipeline_v2.py +152 -0
  225. mdengine-0.13.3/src/md_generator/sap/parser/abap/lexer.py +118 -0
  226. mdengine-0.13.3/src/md_generator/sap/parser/abap/native_sql.py +150 -0
  227. mdengine-0.13.3/src/md_generator/sap/parser/abap/parser.py +162 -0
  228. mdengine-0.13.3/src/md_generator/sap/parser/abap/sql_extractor.py +174 -0
  229. mdengine-0.13.3/src/md_generator/sap/parser/abap/sql_fingerprint.py +24 -0
  230. mdengine-0.13.3/src/md_generator/sap/parser/abap/view_classifier.py +76 -0
  231. mdengine-0.13.3/src/md_generator/sap/parser/abap/view_resolver.py +114 -0
  232. mdengine-0.13.3/src/md_generator/sap/parser/bw/_common.py +123 -0
  233. mdengine-0.13.3/src/md_generator/sap/parser/bw/adso.py +64 -0
  234. mdengine-0.13.3/src/md_generator/sap/parser/bw/composite_provider.py +80 -0
  235. mdengine-0.13.3/src/md_generator/sap/parser/bw/dtp.py +84 -0
  236. mdengine-0.13.3/src/md_generator/sap/parser/bw/info_object.py +66 -0
  237. mdengine-0.13.3/src/md_generator/sap/parser/bw/registry.py +19 -0
  238. mdengine-0.13.3/src/md_generator/sap/parser/bw/stub.py +29 -0
  239. mdengine-0.13.3/src/md_generator/sap/parser/bw/transformation.py +85 -0
  240. mdengine-0.13.3/src/md_generator/sap/parser/cds/ddl_common.py +29 -0
  241. mdengine-0.13.3/src/md_generator/sap/parser/cds/parser.py +110 -0
  242. mdengine-0.13.3/src/md_generator/sap/parser/cds/table_ddl.py +16 -0
  243. mdengine-0.13.3/src/md_generator/sap/parser/cds/type_ddl.py +73 -0
  244. mdengine-0.13.3/src/md_generator/sap/parser/datasphere/_common.py +94 -0
  245. mdengine-0.13.3/src/md_generator/sap/parser/datasphere/analytical_model.py +60 -0
  246. mdengine-0.13.3/src/md_generator/sap/parser/datasphere/data_flow.py +88 -0
  247. mdengine-0.13.3/src/md_generator/sap/parser/datasphere/registry.py +15 -0
  248. mdengine-0.13.3/src/md_generator/sap/parser/datasphere/stub.py +29 -0
  249. mdengine-0.13.3/src/md_generator/sap/parser/datasphere/view.py +77 -0
  250. mdengine-0.13.3/src/md_generator/sap/parser/ddic/abapgit_tabl.py +165 -0
  251. mdengine-0.13.3/src/md_generator/sap/parser/ddic/adt_ddl_source.py +37 -0
  252. mdengine-0.13.3/src/md_generator/sap/parser/ddic/adt_parser.py +63 -0
  253. mdengine-0.13.3/src/md_generator/sap/parser/ddic/adt_xml.py +365 -0
  254. mdengine-0.13.3/src/md_generator/sap/parser/ddic/ddic_resolver.py +115 -0
  255. mdengine-0.13.3/src/md_generator/sap/parser/ddic/ddl_table_parser.py +75 -0
  256. mdengine-0.13.3/src/md_generator/sap/parser/ddic/normalize_helpers.py +64 -0
  257. mdengine-0.13.3/src/md_generator/sap/parser/discovery.py +108 -0
  258. mdengine-0.13.3/src/md_generator/sap/parser/external/_common.py +87 -0
  259. mdengine-0.13.3/src/md_generator/sap/parser/external/dbt/__init__.py +0 -0
  260. mdengine-0.13.3/src/md_generator/sap/parser/external/dbt/manifest.py +35 -0
  261. mdengine-0.13.3/src/md_generator/sap/parser/external/informatica/__init__.py +0 -0
  262. mdengine-0.13.3/src/md_generator/sap/parser/external/informatica/mapping.py +38 -0
  263. mdengine-0.13.3/src/md_generator/sap/parser/external/kafka/__init__.py +0 -0
  264. mdengine-0.13.3/src/md_generator/sap/parser/external/kafka/schema.py +30 -0
  265. mdengine-0.13.3/src/md_generator/sap/parser/external/registry.py +17 -0
  266. mdengine-0.13.3/src/md_generator/sap/parser/external/snowflake/__init__.py +0 -0
  267. mdengine-0.13.3/src/md_generator/sap/parser/external/snowflake/ddl.py +37 -0
  268. mdengine-0.13.3/src/md_generator/sap/parser/hana/__init__.py +1 -0
  269. mdengine-0.13.3/src/md_generator/sap/parser/hana/_variant_common.py +107 -0
  270. mdengine-0.13.3/src/md_generator/sap/parser/hana/analytic_view.py +15 -0
  271. mdengine-0.13.3/src/md_generator/sap/parser/hana/attribute_view.py +15 -0
  272. mdengine-0.13.3/src/md_generator/sap/parser/hana/calculation_view.py +599 -0
  273. mdengine-0.13.3/src/md_generator/sap/parser/hana/dispatch.py +80 -0
  274. mdengine-0.13.3/src/md_generator/sap/parser/hana/hdi_calculation_view.py +14 -0
  275. mdengine-0.13.3/src/md_generator/sap/parser/hana/sql_view.py +14 -0
  276. mdengine-0.13.3/src/md_generator/sap/parser/hana/xml_stream.py +40 -0
  277. mdengine-0.13.3/src/md_generator/sap/parser/odata/associations.py +4 -0
  278. mdengine-0.13.3/src/md_generator/sap/parser/odata/capabilities.py +7 -0
  279. mdengine-0.13.3/src/md_generator/sap/parser/odata/detector.py +4 -0
  280. mdengine-0.13.3/src/md_generator/sap/parser/odata/document_to_objects.py +112 -0
  281. mdengine-0.13.3/src/md_generator/sap/parser/odata/fetch.py +4 -0
  282. mdengine-0.13.3/src/md_generator/sap/parser/odata/json/__init__.py +1 -0
  283. mdengine-0.13.3/src/md_generator/sap/parser/odata/json/v4.py +3 -0
  284. mdengine-0.13.3/src/md_generator/sap/parser/odata/legacy.py +7 -0
  285. mdengine-0.13.3/src/md_generator/sap/parser/odata/namespaces.py +1 -0
  286. mdengine-0.13.3/src/md_generator/sap/parser/odata/parser.py +59 -0
  287. mdengine-0.13.3/src/md_generator/sap/parser/odata/registry.py +4 -0
  288. mdengine-0.13.3/src/md_generator/sap/parser/odata/xml/__init__.py +1 -0
  289. mdengine-0.13.3/src/md_generator/sap/parser/odata/xml/v1.py +3 -0
  290. mdengine-0.13.3/src/md_generator/sap/parser/odata/xml/v2_v3.py +3 -0
  291. mdengine-0.13.3/src/md_generator/sap/parser/odata/xml/v4.py +3 -0
  292. mdengine-0.13.3/src/md_generator/sap/parser/registry.py +103 -0
  293. mdengine-0.13.3/src/md_generator/sap/performance/parallel.py +21 -0
  294. mdengine-0.13.3/src/md_generator/sap/rules/catalog.yaml +9 -0
  295. mdengine-0.13.3/src/md_generator/sap/rules/engine.py +64 -0
  296. mdengine-0.13.3/src/md_generator/tools/assistant/data/dependency-graph.json +234 -0
  297. mdengine-0.13.3/src/md_generator/tools/assistant/data/registry.json +941 -0
  298. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/global-skill.md +92 -0
  299. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +72 -0
  300. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +58 -0
  301. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +45 -0
  302. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +73 -0
  303. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +82 -0
  304. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +73 -0
  305. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +73 -0
  306. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/SKILL.md +77 -0
  307. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/references/example.md +58 -0
  308. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +80 -0
  309. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-odata/SKILL.md +69 -0
  310. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-odata/references/example.md +49 -0
  311. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +73 -0
  312. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +71 -0
  313. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +74 -0
  314. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +71 -0
  315. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/SKILL.md +88 -0
  316. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/references/example.md +58 -0
  317. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +72 -0
  318. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +71 -0
  319. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +71 -0
  320. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +71 -0
  321. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +50 -0
  322. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +58 -0
  323. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +225 -0
  324. mdengine-0.13.3/src/md_generator/tools/assistant/data/skills/modules/db.md +69 -0
  325. mdengine-0.13.3/src/md_generator/tools/skill_builder/generate.py +521 -0
  326. mdengine-0.13.3/src/md_generator/tools/skill_builder/routing.py +132 -0
  327. mdengine-0.13.3/src/md_generator/url/options.py +66 -0
  328. mdengine-0.13.3/src/mdengine.egg-info/PKG-INFO +1328 -0
  329. mdengine-0.13.3/src/mdengine.egg-info/SOURCES.txt +1034 -0
  330. mdengine-0.13.3/src/mdengine.egg-info/entry_points.txt +45 -0
  331. mdengine-0.13.3/src/mdengine.egg-info/requires.txt +265 -0
  332. mdengine-0.12.0/PKG-INFO +0 -1207
  333. mdengine-0.12.0/README.md +0 -971
  334. mdengine-0.12.0/pyproject.toml +0 -341
  335. mdengine-0.12.0/src/md_generator/__init__.py +0 -5
  336. mdengine-0.12.0/src/md_generator/codeflow/cli/main.py +0 -740
  337. mdengine-0.12.0/src/md_generator/codeflow/core/extractor.py +0 -1068
  338. mdengine-0.12.0/src/md_generator/codeflow/core/run_config.py +0 -150
  339. mdengine-0.12.0/src/md_generator/codeflow/detectors/api_detector.py +0 -337
  340. mdengine-0.12.0/src/md_generator/codeflow/generators/html_unified.py +0 -487
  341. mdengine-0.12.0/src/md_generator/codeflow/graph/builder.py +0 -482
  342. mdengine-0.12.0/src/md_generator/codeflow/graph/cross_repo_resolver.py +0 -200
  343. mdengine-0.12.0/src/md_generator/codeflow/graph/dependency_builder.py +0 -166
  344. mdengine-0.12.0/src/md_generator/codeflow/graph/enricher.py +0 -92
  345. mdengine-0.12.0/src/md_generator/codeflow/graph/export_schema.py +0 -278
  346. mdengine-0.12.0/src/md_generator/codeflow/graph/multigraph_utils.py +0 -106
  347. mdengine-0.12.0/src/md_generator/codeflow/graph/sqlite_export.py +0 -183
  348. mdengine-0.12.0/src/md_generator/codeflow/parsers/go_parser.py +0 -109
  349. mdengine-0.12.0/src/md_generator/codeflow/parsers/python_parser.py +0 -382
  350. mdengine-0.12.0/src/md_generator/codeflow/rules/collector.py +0 -293
  351. mdengine-0.12.0/src/md_generator/codeflow/rules/cpp_rules.py +0 -113
  352. mdengine-0.12.0/src/md_generator/codeflow/rules/java_rules.py +0 -188
  353. mdengine-0.12.0/src/md_generator/engine_cli.py +0 -91
  354. mdengine-0.12.0/src/md_generator/playwright/options.py +0 -35
  355. mdengine-0.12.0/src/md_generator/sap/cli/main.py +0 -125
  356. mdengine-0.12.0/src/md_generator/sap/config/default.yaml +0 -62
  357. mdengine-0.12.0/src/md_generator/sap/core/cache.py +0 -51
  358. mdengine-0.12.0/src/md_generator/sap/core/features.py +0 -17
  359. mdengine-0.12.0/src/md_generator/sap/core/link_graph.py +0 -49
  360. mdengine-0.12.0/src/md_generator/sap/core/run_config.py +0 -151
  361. mdengine-0.12.0/src/md_generator/sap/core/run_context.py +0 -25
  362. mdengine-0.12.0/src/md_generator/sap/graph/builder.py +0 -97
  363. mdengine-0.12.0/src/md_generator/sap/graph/exporters/mermaid_export.py +0 -49
  364. mdengine-0.12.0/src/md_generator/sap/graph/relations.py +0 -15
  365. mdengine-0.12.0/src/md_generator/sap/markdown/builders/entity_builder.py +0 -170
  366. mdengine-0.12.0/src/md_generator/sap/markdown/builders/writer.py +0 -164
  367. mdengine-0.12.0/src/md_generator/sap/markdown/chunking/chunk_strategy.py +0 -98
  368. mdengine-0.12.0/src/md_generator/sap/markdown/chunking/registry.py +0 -22
  369. mdengine-0.12.0/src/md_generator/sap/markdown/chunking/writer.py +0 -51
  370. mdengine-0.12.0/src/md_generator/sap/models/entities/kinds.py +0 -19
  371. mdengine-0.12.0/src/md_generator/sap/models/entities/sap_object.py +0 -30
  372. mdengine-0.12.0/src/md_generator/sap/models/metadata/__init__.py +0 -14
  373. mdengine-0.12.0/src/md_generator/sap/models/metadata/abap.py +0 -62
  374. mdengine-0.12.0/src/md_generator/sap/models/metadata/cds.py +0 -46
  375. mdengine-0.12.0/src/md_generator/sap/models/metadata/ddic.py +0 -44
  376. mdengine-0.12.0/src/md_generator/sap/orchestration/pipeline.py +0 -195
  377. mdengine-0.12.0/src/md_generator/sap/parser/abap/lexer.py +0 -82
  378. mdengine-0.12.0/src/md_generator/sap/parser/abap/parser.py +0 -159
  379. mdengine-0.12.0/src/md_generator/sap/parser/cds/parser.py +0 -71
  380. mdengine-0.12.0/src/md_generator/sap/parser/discovery.py +0 -49
  381. mdengine-0.12.0/src/md_generator/sap/parser/odata/parser.py +0 -73
  382. mdengine-0.12.0/src/md_generator/sap/parser/registry.py +0 -79
  383. mdengine-0.12.0/src/md_generator/tools/assistant/data/dependency-graph.json +0 -223
  384. mdengine-0.12.0/src/md_generator/tools/assistant/data/registry.json +0 -821
  385. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/global-skill.md +0 -91
  386. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +0 -72
  387. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +0 -75
  388. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +0 -8
  389. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +0 -73
  390. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +0 -81
  391. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +0 -73
  392. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +0 -73
  393. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/SKILL.md +0 -76
  394. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-log/references/example.md +0 -43
  395. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +0 -80
  396. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +0 -73
  397. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +0 -71
  398. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +0 -74
  399. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +0 -71
  400. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/SKILL.md +0 -70
  401. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-sap/references/example.md +0 -42
  402. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +0 -72
  403. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +0 -71
  404. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +0 -71
  405. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +0 -71
  406. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +0 -49
  407. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +0 -53
  408. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +0 -207
  409. mdengine-0.12.0/src/md_generator/tools/assistant/data/skills/modules/db.md +0 -69
  410. mdengine-0.12.0/src/md_generator/tools/skill_builder/generate.py +0 -517
  411. mdengine-0.12.0/src/md_generator/tools/skill_builder/routing.py +0 -116
  412. mdengine-0.12.0/src/md_generator/url/options.py +0 -66
  413. mdengine-0.12.0/src/mdengine.egg-info/PKG-INFO +0 -1207
  414. mdengine-0.12.0/src/mdengine.egg-info/SOURCES.txt +0 -788
  415. mdengine-0.12.0/src/mdengine.egg-info/entry_points.txt +0 -42
  416. mdengine-0.12.0/src/mdengine.egg-info/requires.txt +0 -257
  417. {mdengine-0.12.0 → mdengine-0.13.3}/LICENSE +0 -0
  418. {mdengine-0.12.0 → mdengine-0.13.3}/setup.cfg +0 -0
  419. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/__init__.py +0 -0
  420. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/api/__init__.py +0 -0
  421. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/api/convert_runner.py +0 -0
  422. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/api/jobs.py +0 -0
  423. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/api/main.py +0 -0
  424. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/api/mcp_server.py +0 -0
  425. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/api/mcp_setup.py +0 -0
  426. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/api/query_options.py +0 -0
  427. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/api/settings.py +0 -0
  428. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/convert_impl.py +0 -0
  429. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/converter.py +0 -0
  430. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/extractors.py +0 -0
  431. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/archive/options.py +0 -0
  432. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/__init__.py +0 -0
  433. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/analyzers/__init__.py +0 -0
  434. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/analyzers/flow_analyzer.py +0 -0
  435. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/api/__init__.py +0 -0
  436. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/api/job_manager.py +0 -0
  437. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/api/main.py +0 -0
  438. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/api/mcp_server.py +0 -0
  439. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/api/run.py +0 -0
  440. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/api/schemas.py +0 -0
  441. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/api/semantic_api.py +0 -0
  442. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/api/settings.py +0 -0
  443. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/api/sse.py +0 -0
  444. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/cli/__init__.py +0 -0
  445. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/config/__init__.py +0 -0
  446. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/config/codeflow_yaml.py +0 -0
  447. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/core/__init__.py +0 -0
  448. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/core/cache_manager.py +0 -0
  449. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/detectors/__init__.py +0 -0
  450. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/detectors/entry_detector.py +0 -0
  451. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/detectors/entry_rank.py +0 -0
  452. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/detectors/event_detector.py +0 -0
  453. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/detectors/kafka_detector.py +0 -0
  454. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/detectors/liferay_portlet_detector.py +0 -0
  455. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/detectors/rails_detector.py +0 -0
  456. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/__init__.py +0 -0
  457. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/business_rules_markdown.py +0 -0
  458. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/cfg_paths_markdown.py +0 -0
  459. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/cfg_paths_mermaid.py +0 -0
  460. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/cfg_render.py +0 -0
  461. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/cytoscape_enrich.py +0 -0
  462. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/entry_markdown.py +0 -0
  463. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/flow_summary.py +0 -0
  464. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/flow_tree.py +0 -0
  465. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/html.py +0 -0
  466. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/markdown.py +0 -0
  467. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/mermaid.py +0 -0
  468. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/generators/sequence.py +0 -0
  469. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/__init__.py +0 -0
  470. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/analysis.py +0 -0
  471. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/anomaly.py +0 -0
  472. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/call_expander.py +0 -0
  473. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/cfg_builder.py +0 -0
  474. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/cfg_copy.py +0 -0
  475. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/cfg_model.py +0 -0
  476. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/cluster_labeling.py +0 -0
  477. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/clustering.py +0 -0
  478. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/diff_analysis.py +0 -0
  479. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/embeddings.py +0 -0
  480. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/event_graph.py +0 -0
  481. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/hotpath.py +0 -0
  482. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/maven_hints.py +0 -0
  483. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/multi_repo.py +0 -0
  484. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/nl_query.py +0 -0
  485. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/path_enumerator.py +0 -0
  486. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/path_probability.py +0 -0
  487. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/query_engine.py +0 -0
  488. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/relations.py +0 -0
  489. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/runtime_integration.py +0 -0
  490. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/semantic_enricher.py +0 -0
  491. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/semantic_index.py +0 -0
  492. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/graph/tsconfig_cross_repo.py +0 -0
  493. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/ingestion/__init__.py +0 -0
  494. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/ingestion/git_loader.py +0 -0
  495. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/ingestion/loader.py +0 -0
  496. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/lang_dispatch.py +0 -0
  497. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/mcp/__init__.py +0 -0
  498. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/mcp/server.py +0 -0
  499. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/models/__init__.py +0 -0
  500. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/models/ir.py +0 -0
  501. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/models/ir_cfg.py +0 -0
  502. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/__init__.py +0 -0
  503. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/__init__.py +0 -0
  504. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/cpp_adapter.py +0 -0
  505. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/go_adapter.py +0 -0
  506. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/ir_from_dump.py +0 -0
  507. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/java_adapter.py +0 -0
  508. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/php_adapter.py +0 -0
  509. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/python_adapter.py +0 -0
  510. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_adapter.py +0 -0
  511. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_csharp_adapter.py +0 -0
  512. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_go_adapter.py +0 -0
  513. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_java_adapter.py +0 -0
  514. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_kotlin_adapter.py +0 -0
  515. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_lua_adapter.py +0 -0
  516. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_php_adapter.py +0 -0
  517. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_python_adapter.py +0 -0
  518. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_ruby_adapter.py +0 -0
  519. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_rust_adapter.py +0 -0
  520. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_scala_adapter.py +0 -0
  521. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_swift_adapter.py +0 -0
  522. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/adapters/treesitter_zig_adapter.py +0 -0
  523. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/base.py +0 -0
  524. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/capability_registry.py +0 -0
  525. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/cpp_parser.py +0 -0
  526. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/ir_enrich.py +0 -0
  527. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/java_parser.py +0 -0
  528. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/php_parser.py +0 -0
  529. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_common.py +0 -0
  530. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_csharp_parser.py +0 -0
  531. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_entry_helpers.py +0 -0
  532. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_go_parser.py +0 -0
  533. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_java_parser.py +0 -0
  534. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +0 -0
  535. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_kotlin_parser.py +0 -0
  536. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_lua_parser.py +0 -0
  537. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_php_parser.py +0 -0
  538. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_python_parser.py +0 -0
  539. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_ruby_parser.py +0 -0
  540. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_rust_parser.py +0 -0
  541. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_scala_parser.py +0 -0
  542. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_swift_parser.py +0 -0
  543. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/treesitter_zig_parser.py +0 -0
  544. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/parsers/unified_parser.py +0 -0
  545. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/rules/__init__.py +0 -0
  546. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/runtime/__init__.py +0 -0
  547. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/runtime/python_edge_counter.py +0 -0
  548. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/runtime/trace_runner.py +0 -0
  549. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/runtime/tracer.py +0 -0
  550. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/utils/__init__.py +0 -0
  551. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/utils/tools_root.py +0 -0
  552. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/worker/__init__.py +0 -0
  553. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/codeflow/worker/celery_optional.py +0 -0
  554. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/__init__.py +0 -0
  555. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/artifacts/__init__.py +0 -0
  556. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/artifacts/mdaf_validate.py +0 -0
  557. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/artifacts/models.py +0 -0
  558. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/artifacts/serialize.py +0 -0
  559. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/schema/__init__.py +0 -0
  560. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/schema/adapters/__init__.py +0 -0
  561. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/schema/adapters/log_record.py +0 -0
  562. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/schema/adapters/otel.py +0 -0
  563. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/schema/telemetry_event.py +0 -0
  564. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/core/schema/validation.py +0 -0
  565. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/__init__.py +0 -0
  566. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/__init__.py +0 -0
  567. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/access_adapter.py +0 -0
  568. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/access_introspect.py +0 -0
  569. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/access_odbc.py +0 -0
  570. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/elasticsearch_adapter.py +0 -0
  571. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/elasticsearch_json_adapter.py +0 -0
  572. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/factory.py +0 -0
  573. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
  574. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
  575. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
  576. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
  577. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/sql_common.py +0 -0
  578. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
  579. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/adapters/sqlserver_adapter.py +0 -0
  580. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/api/__init__.py +0 -0
  581. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/api/access_upload.py +0 -0
  582. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/api/elasticsearch_upload.py +0 -0
  583. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/api/main.py +0 -0
  584. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/api/mcp_server.py +0 -0
  585. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/api/run.py +0 -0
  586. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/api/schemas.py +0 -0
  587. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/api/settings.py +0 -0
  588. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/api/sqlite_upload.py +0 -0
  589. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/cli/__init__.py +0 -0
  590. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/cli/main.py +0 -0
  591. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/config/__init__.py +0 -0
  592. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/config/default.yaml +0 -0
  593. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/__init__.py +0 -0
  594. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/base_adapter.py +0 -0
  595. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/cli_ops.py +0 -0
  596. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_bundle.py +0 -0
  597. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_dependency_graph.py +0 -0
  598. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_export.py +0 -0
  599. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_format.py +0 -0
  600. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_json.py +0 -0
  601. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_markdown.py +0 -0
  602. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_normalize.py +0 -0
  603. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_operational_notes.py +0 -0
  604. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_output.py +0 -0
  605. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_query_classify.py +0 -0
  606. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_redaction.py +0 -0
  607. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_synthesis.py +0 -0
  608. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/elasticsearch_warnings.py +0 -0
  609. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/erd/__init__.py +0 -0
  610. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
  611. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/erd/filter.py +0 -0
  612. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
  613. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
  614. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/erd/model.py +0 -0
  615. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/erd/pipeline.py +0 -0
  616. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/erd/render.py +0 -0
  617. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/export_manifest.py +0 -0
  618. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/extractor.py +0 -0
  619. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/job_manager.py +0 -0
  620. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/link_graph.py +0 -0
  621. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/markdown_writer.py +0 -0
  622. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/models.py +0 -0
  623. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/run_config.py +0 -0
  624. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/util.py +0 -0
  625. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/core/zip_export.py +0 -0
  626. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/mcp/__init__.py +0 -0
  627. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/mcp/server.py +0 -0
  628. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/mcp/sse.py +0 -0
  629. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/db/mcp/stream.py +0 -0
  630. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/distributed/__init__.py +0 -0
  631. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/distributed/merge.py +0 -0
  632. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/distributed/partition.py +0 -0
  633. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/distributed/worker_pool.py +0 -0
  634. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/governance/__init__.py +0 -0
  635. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/governance/audit.py +0 -0
  636. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/governance/classification.py +0 -0
  637. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/governance/lineage.py +0 -0
  638. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/governance/retention.py +0 -0
  639. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/__init__.py +0 -0
  640. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/adapters/__init__.py +0 -0
  641. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/adapters/factory.py +0 -0
  642. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
  643. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
  644. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/api/__init__.py +0 -0
  645. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/api/main.py +0 -0
  646. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/api/mcp_server.py +0 -0
  647. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/api/run.py +0 -0
  648. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/api/schemas.py +0 -0
  649. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/api/settings.py +0 -0
  650. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/cli/__init__.py +0 -0
  651. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/cli/main.py +0 -0
  652. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/config/__init__.py +0 -0
  653. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/config/default.yaml +0 -0
  654. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/__init__.py +0 -0
  655. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/base_adapter.py +0 -0
  656. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/extractor.py +0 -0
  657. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/graph_builder.py +0 -0
  658. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/job_manager.py +0 -0
  659. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/markdown_writer.py +0 -0
  660. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/models.py +0 -0
  661. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/run_config.py +0 -0
  662. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/viz.py +0 -0
  663. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/core/zip_export.py +0 -0
  664. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/mcp/__init__.py +0 -0
  665. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/mcp/server.py +0 -0
  666. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/mcp/sse.py +0 -0
  667. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/graph/mcp/stream.py +0 -0
  668. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/__init__.py +0 -0
  669. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/api/__init__.py +0 -0
  670. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/api/main.py +0 -0
  671. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/api/mcp_server.py +0 -0
  672. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/api/query_options.py +0 -0
  673. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/api/settings.py +0 -0
  674. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/api/staging.py +0 -0
  675. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/api/zip_bundle.py +0 -0
  676. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/backends/__init__.py +0 -0
  677. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/backends/base.py +0 -0
  678. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/backends/easy.py +0 -0
  679. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/backends/paddle.py +0 -0
  680. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/backends/tesseract.py +0 -0
  681. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/convert_impl.py +0 -0
  682. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/converter.py +0 -0
  683. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/emit.py +0 -0
  684. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/io_util.py +0 -0
  685. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/image/utils.py +0 -0
  686. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/__init__.py +0 -0
  687. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/aggregation/__init__.py +0 -0
  688. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/aggregation/aggregators.py +0 -0
  689. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/aggregation/dataframe_builder.py +0 -0
  690. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/aggregation/metrics.py +0 -0
  691. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/aggregation/timeline.py +0 -0
  692. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/api/__init__.py +0 -0
  693. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/api/main.py +0 -0
  694. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/api/mcp_server.py +0 -0
  695. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/api/run.py +0 -0
  696. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/api/schemas.py +0 -0
  697. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/api/settings.py +0 -0
  698. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/chunking/__init__.py +0 -0
  699. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/chunking/artifact_adapter.py +0 -0
  700. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/chunking/chunk_engine.py +0 -0
  701. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/chunking/chunk_models.py +0 -0
  702. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/chunking/chunk_registry.py +0 -0
  703. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/chunking/chunk_strategy.py +0 -0
  704. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/cli/__init__.py +0 -0
  705. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/cli/main.py +0 -0
  706. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/clustering/__init__.py +0 -0
  707. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/clustering/embeddings.py +0 -0
  708. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/clustering/kmeans_cluster.py +0 -0
  709. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/clustering/semantic_grouping.py +0 -0
  710. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/clustering/vectorizer.py +0 -0
  711. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/config/__init__.py +0 -0
  712. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/config/default.yaml +0 -0
  713. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/config/preset_loader.py +0 -0
  714. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/config/presets/__init__.py +0 -0
  715. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/config/presets/generic.yaml +0 -0
  716. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/config/presets/json.yaml +0 -0
  717. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/config/presets/logback.yaml +0 -0
  718. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/config/presets/springboot.yaml +0 -0
  719. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/config/schemas.py +0 -0
  720. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/__init__.py +0 -0
  721. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/errors.py +0 -0
  722. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/execution_context.py +0 -0
  723. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/extractor.py +0 -0
  724. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/job_manager.py +0 -0
  725. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/lifecycle.py +0 -0
  726. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/pipeline.py +0 -0
  727. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/plugins.py +0 -0
  728. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/run_config.py +0 -0
  729. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/core/zip_export.py +0 -0
  730. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/correlation/correlation_engine.py +0 -0
  731. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/correlation/correlation_models.py +0 -0
  732. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/correlation/correlation_scoring.py +0 -0
  733. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/correlation/cross_source.py +0 -0
  734. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/correlation/request_parser.py +0 -0
  735. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/correlation/session_parser.py +0 -0
  736. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/correlation/trace_parser.py +0 -0
  737. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/documentation/__init__.py +0 -0
  738. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/documentation/incident_summary.py +0 -0
  739. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/documentation/service_report.py +0 -0
  740. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/documentation/troubleshooting.py +0 -0
  741. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/embeddings/embedding_exporter.py +0 -0
  742. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/embeddings/exporters/chroma_exporter.py +0 -0
  743. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/embeddings/exporters/faiss_exporter.py +0 -0
  744. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/embeddings/exporters/jsonl_exporter.py +0 -0
  745. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/embeddings/exporters/parquet_exporter.py +0 -0
  746. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/enrichment/__init__.py +0 -0
  747. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/enrichment/correlation.py +0 -0
  748. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/enrichment/fingerprinting.py +0 -0
  749. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/enrichment/hash_generator.py +0 -0
  750. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/enrichment/pattern_matcher.py +0 -0
  751. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/enrichment/severity_ranker.py +0 -0
  752. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incidents/__init__.py +0 -0
  753. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incidents/artifact_adapter.py +0 -0
  754. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incidents/fingerprinting.py +0 -0
  755. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incidents/grouping.py +0 -0
  756. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incidents/incident_engine.py +0 -0
  757. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incidents/models.py +0 -0
  758. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incidents/severity.py +0 -0
  759. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incremental/__init__.py +0 -0
  760. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incremental/checkpoint.py +0 -0
  761. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incremental/engine.py +0 -0
  762. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/incremental/resume_reader.py +0 -0
  763. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/ingestion/__init__.py +0 -0
  764. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/ingestion/archive_bridge.py +0 -0
  765. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/ingestion/archive_loader.py +0 -0
  766. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/ingestion/batch_reader.py +0 -0
  767. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/ingestion/encoding_detector.py +0 -0
  768. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/ingestion/file_loader.py +0 -0
  769. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/ingestion/stream_reader.py +0 -0
  770. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/intelligence/anomaly_detection.py +0 -0
  771. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/intelligence/dependency_analysis.py +0 -0
  772. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/intelligence/heuristics.py +0 -0
  773. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/intelligence/root_cause_engine.py +0 -0
  774. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/knowledge_graph/graph_builder.py +0 -0
  775. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/knowledge_graph/graph_exporter.py +0 -0
  776. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/knowledge_graph/graph_models.py +0 -0
  777. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/knowledge_graph/relation_extractor.py +0 -0
  778. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/linking/__init__.py +0 -0
  779. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/linking/link_graph.py +0 -0
  780. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/markdown_intelligence/__init__.py +0 -0
  781. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/markdown_intelligence/aliases.py +0 -0
  782. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/markdown_intelligence/backlinks.py +0 -0
  783. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/markdown_intelligence/cross_refs.py +0 -0
  784. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/mcp/__init__.py +0 -0
  785. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/mcp/server.py +0 -0
  786. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/mcp/sse.py +0 -0
  787. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/noise_reduction/__init__.py +0 -0
  788. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/noise_reduction/dedupe.py +0 -0
  789. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/noise_reduction/entropy.py +0 -0
  790. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/noise_reduction/filter.py +0 -0
  791. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/normalization/__init__.py +0 -0
  792. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/normalization/number_normalizer.py +0 -0
  793. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/normalization/path_normalizer.py +0 -0
  794. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/normalization/pii_redactor.py +0 -0
  795. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/normalization/token_normalizer.py +0 -0
  796. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/normalization/uuid_normalizer.py +0 -0
  797. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/__init__.py +0 -0
  798. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/json_line_parser.py +0 -0
  799. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/level_detector.py +0 -0
  800. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/logger_detector.py +0 -0
  801. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/models.py +0 -0
  802. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/multiline_parser.py +0 -0
  803. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/parser_registry.py +0 -0
  804. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/regex_parser.py +0 -0
  805. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/stacktrace_parser.py +0 -0
  806. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/parser/timestamp_parser.py +0 -0
  807. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/search/bm25_search.py +0 -0
  808. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/search/cli.py +0 -0
  809. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/search/hybrid_search.py +0 -0
  810. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/search/search_index.py +0 -0
  811. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/search/vector_search.py +0 -0
  812. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/service/__init__.py +0 -0
  813. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/service/service.py +0 -0
  814. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/streaming/__init__.py +0 -0
  815. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/streaming/kafka_reader.py +0 -0
  816. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/streaming/redis_reader.py +0 -0
  817. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/streaming/stdin_reader.py +0 -0
  818. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/streaming/stream_coordinator.py +0 -0
  819. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/streaming/tail_reader.py +0 -0
  820. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/streaming/websocket_reader.py +0 -0
  821. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/timeline/causal_chain.py +0 -0
  822. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/timeline/ordering.py +0 -0
  823. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/timeline/timeline_engine.py +0 -0
  824. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/timeline/timeline_models.py +0 -0
  825. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/topology/__init__.py +0 -0
  826. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/topology/discovery.py +0 -0
  827. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/utils/__init__.py +0 -0
  828. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/utils/concurrency.py +0 -0
  829. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/utils/io.py +0 -0
  830. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/utils/regex.py +0 -0
  831. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/utils/time.py +0 -0
  832. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/visualization/__init__.py +0 -0
  833. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/visualization/mermaid_sequence.py +0 -0
  834. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/visualization/mermaid_timeline.py +0 -0
  835. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/visualization/mermaid_topology.py +0 -0
  836. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/writers/__init__.py +0 -0
  837. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/writers/assets_writer.py +0 -0
  838. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/writers/chunk_writer.py +0 -0
  839. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/writers/cluster_markdown.py +0 -0
  840. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/writers/correlation_writer.py +0 -0
  841. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/writers/frontmatter_writer.py +0 -0
  842. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/writers/incident_writer.py +0 -0
  843. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/writers/markdown_writer.py +0 -0
  844. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/log/writers/summary_writer.py +0 -0
  845. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/__init__.py +0 -0
  846. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/__init__.py +0 -0
  847. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/api/__init__.py +0 -0
  848. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/api/main.py +0 -0
  849. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/api/mcp_server.py +0 -0
  850. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/api/mcp_setup.py +0 -0
  851. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/api/run.py +0 -0
  852. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/api/settings.py +0 -0
  853. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/converter.py +0 -0
  854. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/formatter.py +0 -0
  855. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/audio/service.py +0 -0
  856. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/document_converter.py +0 -0
  857. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/job_store.py +0 -0
  858. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/__init__.py +0 -0
  859. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/api/__init__.py +0 -0
  860. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/api/main.py +0 -0
  861. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/api/mcp_server.py +0 -0
  862. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/api/mcp_setup.py +0 -0
  863. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/api/run.py +0 -0
  864. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/api/settings.py +0 -0
  865. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/converter.py +0 -0
  866. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/formatter.py +0 -0
  867. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/video/service.py +0 -0
  868. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/whisper_language.py +0 -0
  869. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/__init__.py +0 -0
  870. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/api/__init__.py +0 -0
  871. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/api/main.py +0 -0
  872. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
  873. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/api/mcp_setup.py +0 -0
  874. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/api/run.py +0 -0
  875. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/api/settings.py +0 -0
  876. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/converter.py +0 -0
  877. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/formatter.py +0 -0
  878. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/metadata.py +0 -0
  879. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/service.py +0 -0
  880. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/media/youtube/transcript.py +0 -0
  881. {mdengine-0.12.0/src/md_generator/otel/cli → mdengine-0.13.3/src/md_generator/odata/api}/__init__.py +0 -0
  882. {mdengine-0.12.0/src/md_generator/sap/markdown/builders → mdengine-0.13.3/src/md_generator/odata/writers}/slug.py +0 -0
  883. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/__init__.py +0 -0
  884. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/api/__init__.py +0 -0
  885. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/api/main.py +0 -0
  886. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/api/mcp_server.py +0 -0
  887. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/api/run.py +0 -0
  888. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/api/schemas.py +0 -0
  889. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/api/settings.py +0 -0
  890. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/cli/__init__.py +0 -0
  891. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/cli/main.py +0 -0
  892. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/config/__init__.py +0 -0
  893. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/config/default.yaml +0 -0
  894. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/converters/__init__.py +0 -0
  895. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
  896. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/core/__init__.py +0 -0
  897. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/core/extractor.py +0 -0
  898. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/core/run_config.py +0 -0
  899. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/core/zip_export.py +0 -0
  900. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/enrichers/__init__.py +0 -0
  901. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/enrichers/rules.py +0 -0
  902. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
  903. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/generators/__init__.py +0 -0
  904. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
  905. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/loaders/__init__.py +0 -0
  906. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
  907. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/mcp/__init__.py +0 -0
  908. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/mcp/server.py +0 -0
  909. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/models/__init__.py +0 -0
  910. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/models/domain.py +0 -0
  911. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/normalizers/__init__.py +0 -0
  912. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/normalizers/operations.py +0 -0
  913. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
  914. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/parsers/__init__.py +0 -0
  915. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
  916. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/resolvers/__init__.py +0 -0
  917. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
  918. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/writers/__init__.py +0 -0
  919. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
  920. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/otel/__init__.py +0 -0
  921. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/otel/cli/main.py +0 -0
  922. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/otel/otel_logs.py +0 -0
  923. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/otel/otel_metrics.py +0 -0
  924. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/otel/otel_models.py +0 -0
  925. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/otel/otel_parser.py +0 -0
  926. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/otel/otel_spans.py +0 -0
  927. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/__init__.py +0 -0
  928. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/api/__init__.py +0 -0
  929. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/api/main.py +0 -0
  930. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/api/mcp_server.py +0 -0
  931. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/api/settings.py +0 -0
  932. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/api/zip_bundle.py +0 -0
  933. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/converter.py +0 -0
  934. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/md_emit.py +0 -0
  935. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/pdf_extract.py +0 -0
  936. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/pdf/utils.py +0 -0
  937. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/__init__.py +0 -0
  938. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/api/__init__.py +0 -0
  939. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/api/convert_runner.py +0 -0
  940. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/api/jobs.py +0 -0
  941. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/api/main.py +0 -0
  942. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/api/mcp_server.py +0 -0
  943. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/api/mcp_setup.py +0 -0
  944. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/api/run.py +0 -0
  945. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/api/settings.py +0 -0
  946. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/assets.py +0 -0
  947. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/chunker.py +0 -0
  948. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/cli.py +0 -0
  949. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/extractor.py +0 -0
  950. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/html_to_md.py +0 -0
  951. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/pipeline.py +0 -0
  952. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/playwright/playwright_fetcher.py +0 -0
  953. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/__init__.py +0 -0
  954. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/api/__init__.py +0 -0
  955. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/api/convert_runner.py +0 -0
  956. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/api/jobs.py +0 -0
  957. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/api/main.py +0 -0
  958. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/api/mcp_server.py +0 -0
  959. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/api/mcp_setup.py +0 -0
  960. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/api/query_options.py +0 -0
  961. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/api/settings.py +0 -0
  962. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/convert_impl.py +0 -0
  963. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/converter.py +0 -0
  964. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/embedded_extract.py +0 -0
  965. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/ooxml_media.py +0 -0
  966. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/options.py +0 -0
  967. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/post_assets.py +0 -0
  968. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/text_formatting.py +0 -0
  969. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
  970. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
  971. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
  972. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
  973. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/ppt/zip_deep.py +0 -0
  974. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/runtime/__init__.py +0 -0
  975. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/runtime/execution_context.py +0 -0
  976. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/runtime/metrics.py +0 -0
  977. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/runtime/stage_engine.py +0 -0
  978. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/__init__.py +0 -0
  979. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/analyzer/authorization/extractor.py +0 -0
  980. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/analyzer/governance/classifier.py +0 -0
  981. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/analyzer/lineage/builder.py +0 -0
  982. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/analyzer/relationships/engine.py +0 -0
  983. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/analyzer/semantics/entity_mapper.py +0 -0
  984. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/analyzer/validation/extractor.py +0 -0
  985. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/api/main.py +0 -0
  986. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/api/mcp_server.py +0 -0
  987. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/api/run.py +0 -0
  988. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/api/schemas.py +0 -0
  989. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/api/settings.py +0 -0
  990. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/api/zip_export.py +0 -0
  991. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/core/__init__.py +0 -0
  992. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/core/errors.py +0 -0
  993. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/core/export_manifest.py +0 -0
  994. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/core/extractor.py +0 -0
  995. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/core/job_manager.py +0 -0
  996. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/graph/__init__.py +0 -0
  997. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/graph/exporters/__init__.py +0 -0
  998. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/graph/exporters/json_export.py +0 -0
  999. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/markdown/__init__.py +0 -0
  1000. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/markdown/builders/__init__.py +0 -0
  1001. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/models/entities/__init__.py +0 -0
  1002. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/orchestration/__init__.py +0 -0
  1003. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/parser/__init__.py +0 -0
  1004. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/parser/abap/__init__.py +0 -0
  1005. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/parser/bapi/parser.py +0 -0
  1006. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/parser/base.py +0 -0
  1007. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/parser/ddic/parser.py +0 -0
  1008. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/parser/idoc/parser.py +0 -0
  1009. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/parser/rfc/__init__.py +0 -0
  1010. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sap/parser/transport/parser.py +0 -0
  1011. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sdk/__init__.py +0 -0
  1012. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sdk/classifier_plugin.py +0 -0
  1013. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sdk/discovery.py +0 -0
  1014. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sdk/enricher_plugin.py +0 -0
  1015. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sdk/parser_plugin.py +0 -0
  1016. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sdk/plugin_protocol.py +0 -0
  1017. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sdk/stage_protocol.py +0 -0
  1018. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/sdk/writer_plugin.py +0 -0
  1019. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/__init__.py +0 -0
  1020. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/api/__init__.py +0 -0
  1021. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/api/convert_runner.py +0 -0
  1022. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/api/jobs.py +0 -0
  1023. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/api/main.py +0 -0
  1024. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/api/mcp_server.py +0 -0
  1025. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/api/mcp_setup.py +0 -0
  1026. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/api/query_options.py +0 -0
  1027. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/api/settings.py +0 -0
  1028. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/convert_impl.py +0 -0
  1029. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/converter.py +0 -0
  1030. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/format_detect.py +0 -0
  1031. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/md_emit_json.py +0 -0
  1032. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/md_emit_txt.py +0 -0
  1033. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/md_emit_xml.py +0 -0
  1034. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/md_flatten.py +0 -0
  1035. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/options.py +0 -0
  1036. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/text/xml_parse.py +0 -0
  1037. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/__init__.py +0 -0
  1038. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/__init__.py +0 -0
  1039. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/adapters/__init__.py +0 -0
  1040. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/adapters/claude.py +0 -0
  1041. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/adapters/cursor.py +0 -0
  1042. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/adapters/openai.py +0 -0
  1043. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/agent.py +0 -0
  1044. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/bundle.py +0 -0
  1045. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/chunks.py +0 -0
  1046. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/cli.py +0 -0
  1047. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/references/example.md +0 -0
  1048. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/references/example.md +0 -0
  1049. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/references/example.md +0 -0
  1050. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/references/example.md +0 -0
  1051. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/references/example.md +0 -0
  1052. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/references/example.md +0 -0
  1053. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/references/example.md +0 -0
  1054. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-otel/SKILL.md +0 -0
  1055. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-otel/references/example.md +0 -0
  1056. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/references/example.md +0 -0
  1057. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/references/example.md +0 -0
  1058. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/references/example.md +0 -0
  1059. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/references/example.md +0 -0
  1060. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/references/example.md +0 -0
  1061. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/references/example.md +0 -0
  1062. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/references/example.md +0 -0
  1063. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/example.md +0 -0
  1064. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/archive.md +0 -0
  1065. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/codeflow.md +0 -0
  1066. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/graph.md +0 -0
  1067. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/image.md +0 -0
  1068. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/media.md +0 -0
  1069. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/openapi.md +0 -0
  1070. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/pdf.md +0 -0
  1071. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/playwright.md +0 -0
  1072. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/ppt.md +0 -0
  1073. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/text.md +0 -0
  1074. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/url.md +0 -0
  1075. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/word.md +0 -0
  1076. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +0 -0
  1077. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/rag.py +0 -0
  1078. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/assistant/registry.py +0 -0
  1079. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/skill_builder/__init__.py +0 -0
  1080. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/skill_builder/__main__.py +0 -0
  1081. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/skill_builder/dependency_graph.py +0 -0
  1082. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/tools/skill_builder/pyproject_util.py +0 -0
  1083. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/__init__.py +0 -0
  1084. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/api/__init__.py +0 -0
  1085. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/api/convert_runner.py +0 -0
  1086. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/api/jobs.py +0 -0
  1087. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/api/main.py +0 -0
  1088. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/api/mcp_server.py +0 -0
  1089. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/api/mcp_setup.py +0 -0
  1090. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/api/query_options.py +0 -0
  1091. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/api/settings.py +0 -0
  1092. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/assets.py +0 -0
  1093. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/convert_impl.py +0 -0
  1094. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/converter.py +0 -0
  1095. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/crawl.py +0 -0
  1096. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/extract.py +0 -0
  1097. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/fetch.py +0 -0
  1098. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/html_to_md.py +0 -0
  1099. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/page_convert.py +0 -0
  1100. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/post_convert_assets.py +0 -0
  1101. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/url/robots_util.py +0 -0
  1102. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/word/__init__.py +0 -0
  1103. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/word/api/__init__.py +0 -0
  1104. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/word/api/convert_util.py +0 -0
  1105. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/word/api/jobs.py +0 -0
  1106. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/word/api/main.py +0 -0
  1107. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/word/api/mcp_server.py +0 -0
  1108. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/word/artifact.py +0 -0
  1109. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/word/converter.py +0 -0
  1110. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/word/settings.py +0 -0
  1111. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/xlsx/__init__.py +0 -0
  1112. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/xlsx/api/__init__.py +0 -0
  1113. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/xlsx/api/app.py +0 -0
  1114. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/xlsx/convert_config.py +0 -0
  1115. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/xlsx/converter.py +0 -0
  1116. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/xlsx/converter_core.py +0 -0
  1117. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/xlsx/excel_reader.py +0 -0
  1118. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/xlsx/markdown_emitter.py +0 -0
  1119. {mdengine-0.12.0 → mdengine-0.13.3}/src/md_generator/xlsx/mcp_server.py +0 -0
  1120. {mdengine-0.12.0 → mdengine-0.13.3}/src/mdengine.egg-info/dependency_links.txt +0 -0
  1121. {mdengine-0.12.0 → mdengine-0.13.3}/src/mdengine.egg-info/top_level.txt +0 -0
@@ -0,0 +1,1328 @@
1
+ Metadata-Version: 2.4
2
+ Name: mdengine
3
+ Version: 0.13.3
4
+ Summary: Convert PDF, Office, images, audio, video, text/JSON/XML, ZIP archives, web URLs, databases, graphs, and OpenAPI specs to Markdown.
5
+ Author: mdengine contributors
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/mdengine/md-generator
8
+ Project-URL: Repository, https://github.com/mdengine/md-generator
9
+ Project-URL: Issues, https://github.com/mdengine/md-generator/issues
10
+ Project-URL: Documentation, https://mdengine.github.io/md-generator/
11
+ Keywords: markdown,pdf,docx,pptx,xlsx,ocr,zip,url,html,youtube,playwright,database,openapi,codeflow
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3 :: Only
14
+ Classifier: Topic :: Text Processing :: Markup :: Markdown
15
+ Requires-Python: >=3.10
16
+ Description-Content-Type: text/markdown
17
+ License-File: LICENSE
18
+ Provides-Extra: pdf
19
+ Requires-Dist: pymupdf>=1.24.0; extra == "pdf"
20
+ Requires-Dist: pdfplumber>=0.11.0; extra == "pdf"
21
+ Provides-Extra: word
22
+ Requires-Dist: mammoth>=1.8.0; extra == "word"
23
+ Requires-Dist: markdownify>=0.13.0; extra == "word"
24
+ Provides-Extra: ppt
25
+ Requires-Dist: python-pptx>=1.0.0; extra == "ppt"
26
+ Requires-Dist: Pillow>=10.0.0; extra == "ppt"
27
+ Requires-Dist: lxml>=5.0.0; extra == "ppt"
28
+ Requires-Dist: olefile>=0.47; extra == "ppt"
29
+ Requires-Dist: openpyxl>=3.1.0; extra == "ppt"
30
+ Requires-Dist: mammoth>=1.8.0; extra == "ppt"
31
+ Requires-Dist: markdownify>=0.14.0; extra == "ppt"
32
+ Requires-Dist: pymupdf>=1.24.0; extra == "ppt"
33
+ Requires-Dist: pdfplumber>=0.11.0; extra == "ppt"
34
+ Requires-Dist: pytesseract>=0.3.10; extra == "ppt"
35
+ Provides-Extra: xlsx
36
+ Requires-Dist: openpyxl>=3.1.0; extra == "xlsx"
37
+ Provides-Extra: image
38
+ Requires-Dist: Pillow>=10.0.0; extra == "image"
39
+ Provides-Extra: image-ocr
40
+ Requires-Dist: Pillow>=10.0.0; extra == "image-ocr"
41
+ Requires-Dist: pytesseract>=0.3.10; extra == "image-ocr"
42
+ Requires-Dist: numpy>=1.24.0; extra == "image-ocr"
43
+ Requires-Dist: paddlepaddle>=2.5.0; extra == "image-ocr"
44
+ Requires-Dist: paddleocr>=2.7.0.3; extra == "image-ocr"
45
+ Requires-Dist: easyocr>=1.7.0; extra == "image-ocr"
46
+ Provides-Extra: text
47
+ Requires-Dist: xmltodict>=0.13.0; extra == "text"
48
+ Requires-Dist: lxml>=5.0.0; extra == "text"
49
+ Provides-Extra: archive
50
+ Requires-Dist: Pillow>=10.0.0; extra == "archive"
51
+ Requires-Dist: pytesseract>=0.3.10; extra == "archive"
52
+ Provides-Extra: archive-formats
53
+ Requires-Dist: py7zr>=0.21.0; extra == "archive-formats"
54
+ Requires-Dist: patoolib>=2.0.0; extra == "archive-formats"
55
+ Provides-Extra: url
56
+ Requires-Dist: httpx>=0.27.0; extra == "url"
57
+ Requires-Dist: beautifulsoup4>=4.12.0; extra == "url"
58
+ Requires-Dist: lxml>=5.0.0; extra == "url"
59
+ Requires-Dist: lxml_html_clean>=0.4.0; extra == "url"
60
+ Requires-Dist: markdownify>=0.14.0; extra == "url"
61
+ Requires-Dist: readability-lxml>=0.8.1; extra == "url"
62
+ Provides-Extra: url-full
63
+ Requires-Dist: httpx>=0.27.0; extra == "url-full"
64
+ Requires-Dist: beautifulsoup4>=4.12.0; extra == "url-full"
65
+ Requires-Dist: lxml>=5.0.0; extra == "url-full"
66
+ Requires-Dist: lxml_html_clean>=0.4.0; extra == "url-full"
67
+ Requires-Dist: markdownify>=0.14.0; extra == "url-full"
68
+ Requires-Dist: readability-lxml>=0.8.1; extra == "url-full"
69
+ Requires-Dist: pymupdf>=1.24.0; extra == "url-full"
70
+ Requires-Dist: pdfplumber>=0.11.0; extra == "url-full"
71
+ Requires-Dist: mammoth>=1.8.0; extra == "url-full"
72
+ Requires-Dist: python-pptx>=1.0.0; extra == "url-full"
73
+ Requires-Dist: Pillow>=10.0.0; extra == "url-full"
74
+ Requires-Dist: olefile>=0.47; extra == "url-full"
75
+ Requires-Dist: openpyxl>=3.1.0; extra == "url-full"
76
+ Requires-Dist: pytesseract>=0.3.10; extra == "url-full"
77
+ Provides-Extra: audio
78
+ Requires-Dist: openai-whisper>=20231117; extra == "audio"
79
+ Requires-Dist: imageio-ffmpeg>=0.5.1; extra == "audio"
80
+ Provides-Extra: video
81
+ Requires-Dist: openai-whisper>=20231117; extra == "video"
82
+ Requires-Dist: imageio-ffmpeg>=0.5.1; extra == "video"
83
+ Provides-Extra: youtube
84
+ Requires-Dist: youtube-transcript-api>=0.6.0; extra == "youtube"
85
+ Requires-Dist: httpx>=0.27.0; extra == "youtube"
86
+ Requires-Dist: beautifulsoup4>=4.12.0; extra == "youtube"
87
+ Requires-Dist: lxml>=5.0.0; extra == "youtube"
88
+ Provides-Extra: playwright
89
+ Requires-Dist: playwright>=1.49.0; extra == "playwright"
90
+ Requires-Dist: httpx>=0.27.0; extra == "playwright"
91
+ Requires-Dist: beautifulsoup4>=4.12.0; extra == "playwright"
92
+ Requires-Dist: lxml>=5.0.0; extra == "playwright"
93
+ Requires-Dist: markdownify>=0.14.0; extra == "playwright"
94
+ Requires-Dist: readability-lxml>=0.8.1; extra == "playwright"
95
+ Requires-Dist: Pillow>=10.0.0; extra == "playwright"
96
+ Provides-Extra: db
97
+ Requires-Dist: sqlalchemy>=2.0.0; extra == "db"
98
+ Requires-Dist: pyyaml>=6.0.0; extra == "db"
99
+ Requires-Dist: psycopg2-binary>=2.9.9; extra == "db"
100
+ Requires-Dist: pymysql>=1.1.0; extra == "db"
101
+ Requires-Dist: pyodbc>=5.0.0; extra == "db"
102
+ Requires-Dist: oracledb>=2.0.0; extra == "db"
103
+ Requires-Dist: pymongo>=4.6.0; extra == "db"
104
+ Requires-Dist: elasticsearch>=8.0.0; extra == "db"
105
+ Requires-Dist: mermaid-py>=0.8.0; extra == "db"
106
+ Provides-Extra: graph
107
+ Requires-Dist: networkx>=3.2.0; extra == "graph"
108
+ Requires-Dist: neo4j>=5.14.0; extra == "graph"
109
+ Requires-Dist: pyyaml>=6.0.0; extra == "graph"
110
+ Provides-Extra: openapi
111
+ Requires-Dist: pyyaml>=6.0.0; extra == "openapi"
112
+ Requires-Dist: prance>=23.6.0; extra == "openapi"
113
+ Requires-Dist: openapi-spec-validator>=0.7.0; extra == "openapi"
114
+ Provides-Extra: odata
115
+ Requires-Dist: pyyaml>=6.0.0; extra == "odata"
116
+ Requires-Dist: httpx>=0.27.0; extra == "odata"
117
+ Requires-Dist: networkx>=3.2.0; extra == "odata"
118
+ Requires-Dist: pydantic-settings>=2.0.0; extra == "odata"
119
+ Provides-Extra: codeflow
120
+ Requires-Dist: networkx>=3.2.0; extra == "codeflow"
121
+ Requires-Dist: javalang>=0.13.0; extra == "codeflow"
122
+ Provides-Extra: sap
123
+ Requires-Dist: pyyaml>=6.0.0; extra == "sap"
124
+ Requires-Dist: networkx>=3.2.0; extra == "sap"
125
+ Requires-Dist: pydantic>=2.0.0; extra == "sap"
126
+ Requires-Dist: pydantic-settings>=2.0.0; extra == "sap"
127
+ Requires-Dist: httpx>=0.27.0; extra == "sap"
128
+ Requires-Dist: lxml>=5.0.0; extra == "sap"
129
+ Provides-Extra: codeflow-worker
130
+ Requires-Dist: celery>=5.3.0; extra == "codeflow-worker"
131
+ Requires-Dist: redis>=5.0.0; extra == "codeflow-worker"
132
+ Provides-Extra: codeflow-treesitter
133
+ Requires-Dist: tree-sitter>=0.21.0; extra == "codeflow-treesitter"
134
+ Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "codeflow-treesitter"
135
+ Requires-Dist: tree-sitter-typescript>=0.23.0; extra == "codeflow-treesitter"
136
+ Requires-Dist: tree-sitter-cpp>=0.23.0; extra == "codeflow-treesitter"
137
+ Requires-Dist: tree-sitter-java>=0.23.0; extra == "codeflow-treesitter"
138
+ Requires-Dist: tree-sitter-python>=0.23.0; extra == "codeflow-treesitter"
139
+ Requires-Dist: tree-sitter-go>=0.23.0; extra == "codeflow-treesitter"
140
+ Requires-Dist: tree-sitter-php>=0.23.0; extra == "codeflow-treesitter"
141
+ Requires-Dist: tree-sitter-rust>=0.23.0; extra == "codeflow-treesitter"
142
+ Requires-Dist: tree-sitter-kotlin>=0.23.0; extra == "codeflow-treesitter"
143
+ Requires-Dist: tree-sitter-c-sharp>=0.23.0; extra == "codeflow-treesitter"
144
+ Requires-Dist: tree-sitter-swift>=0.7.2; extra == "codeflow-treesitter"
145
+ Requires-Dist: tree-sitter-ruby>=0.23.0; extra == "codeflow-treesitter"
146
+ Requires-Dist: tree-sitter-lua>=0.2.0; extra == "codeflow-treesitter"
147
+ Requires-Dist: tree-sitter-scala>=0.6.0; extra == "codeflow-treesitter"
148
+ Requires-Dist: tree-sitter-zig>=0.2.0; extra == "codeflow-treesitter"
149
+ Provides-Extra: codeflow-clang
150
+ Requires-Dist: clang>=16.0.0; extra == "codeflow-clang"
151
+ Provides-Extra: codeflow-semantic
152
+ Requires-Dist: numpy>=1.24.0; extra == "codeflow-semantic"
153
+ Requires-Dist: scikit-learn>=1.3.0; extra == "codeflow-semantic"
154
+ Requires-Dist: sentence-transformers>=3.0.0; extra == "codeflow-semantic"
155
+ Provides-Extra: log
156
+ Requires-Dist: pandas>=2.0.0; extra == "log"
157
+ Requires-Dist: python-dateutil>=2.8.0; extra == "log"
158
+ Requires-Dist: pyyaml>=6.0.0; extra == "log"
159
+ Provides-Extra: log-cluster
160
+ Requires-Dist: scikit-learn>=1.3.0; extra == "log-cluster"
161
+ Provides-Extra: log-semantic
162
+ Requires-Dist: numpy>=1.24.0; extra == "log-semantic"
163
+ Requires-Dist: scikit-learn>=1.3.0; extra == "log-semantic"
164
+ Requires-Dist: sentence-transformers>=3.0.0; extra == "log-semantic"
165
+ Provides-Extra: log-pretty
166
+ Requires-Dist: loguru>=0.7.0; extra == "log-pretty"
167
+ Provides-Extra: log-otel-proto
168
+ Requires-Dist: opentelemetry-proto>=1.27.0; extra == "log-otel-proto"
169
+ Requires-Dist: protobuf>=4.25.0; extra == "log-otel-proto"
170
+ Provides-Extra: log-export-parquet
171
+ Requires-Dist: pyarrow>=14.0.0; extra == "log-export-parquet"
172
+ Provides-Extra: log-stream-kafka
173
+ Requires-Dist: kafka-python>=2.0.2; extra == "log-stream-kafka"
174
+ Provides-Extra: log-stream-redis
175
+ Requires-Dist: redis>=5.0.0; extra == "log-stream-redis"
176
+ Provides-Extra: log-stream-ws
177
+ Requires-Dist: websockets>=12.0; extra == "log-stream-ws"
178
+ Provides-Extra: api
179
+ Requires-Dist: fastapi>=0.115.0; extra == "api"
180
+ Requires-Dist: uvicorn[standard]>=0.32.0; extra == "api"
181
+ Requires-Dist: python-multipart>=0.0.12; extra == "api"
182
+ Requires-Dist: httpx>=0.27.0; extra == "api"
183
+ Requires-Dist: pydantic-settings>=2.0.0; extra == "api"
184
+ Provides-Extra: mcp
185
+ Requires-Dist: mcp>=1.2.0; extra == "mcp"
186
+ Requires-Dist: fastmcp>=2.3.0; extra == "mcp"
187
+ Provides-Extra: docs
188
+ Requires-Dist: mkdocs-material; extra == "docs"
189
+ Requires-Dist: mkdocstrings; extra == "docs"
190
+ Requires-Dist: mkdocstrings-python; extra == "docs"
191
+ Requires-Dist: pymdown-extensions; extra == "docs"
192
+ Requires-Dist: mkdocs-mermaid2-plugin; extra == "docs"
193
+ Requires-Dist: mkdocs-git-revision-date-localized-plugin; extra == "docs"
194
+ Requires-Dist: mike; extra == "docs"
195
+ Provides-Extra: skill-openai
196
+ Requires-Dist: openai>=1.30.0; extra == "skill-openai"
197
+ Provides-Extra: skill-rag-chroma
198
+ Requires-Dist: chromadb>=0.4.22; extra == "skill-rag-chroma"
199
+ Provides-Extra: dev
200
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
201
+ Requires-Dist: httpx>=0.27.0; extra == "dev"
202
+ Requires-Dist: beautifulsoup4>=4.12.0; extra == "dev"
203
+ Requires-Dist: lxml>=5.0.0; extra == "dev"
204
+ Requires-Dist: youtube-transcript-api>=0.6.0; extra == "dev"
205
+ Requires-Dist: mdengine[api]; extra == "dev"
206
+ Requires-Dist: mdengine[mcp]; extra == "dev"
207
+ Requires-Dist: mdengine[url]; extra == "dev"
208
+ Requires-Dist: mdengine[playwright]; extra == "dev"
209
+ Requires-Dist: mdengine[db]; extra == "dev"
210
+ Requires-Dist: mdengine[graph]; extra == "dev"
211
+ Requires-Dist: mdengine[openapi]; extra == "dev"
212
+ Requires-Dist: mdengine[codeflow]; extra == "dev"
213
+ Requires-Dist: mdengine[codeflow-treesitter]; extra == "dev"
214
+ Requires-Dist: mdengine[log]; extra == "dev"
215
+ Requires-Dist: mdengine[log-cluster]; extra == "dev"
216
+ Provides-Extra: all
217
+ Requires-Dist: pymupdf>=1.24.0; extra == "all"
218
+ Requires-Dist: pdfplumber>=0.11.0; extra == "all"
219
+ Requires-Dist: mammoth>=1.8.0; extra == "all"
220
+ Requires-Dist: markdownify>=0.14.0; extra == "all"
221
+ Requires-Dist: python-pptx>=1.0.0; extra == "all"
222
+ Requires-Dist: Pillow>=10.0.0; extra == "all"
223
+ Requires-Dist: lxml>=5.0.0; extra == "all"
224
+ Requires-Dist: olefile>=0.47; extra == "all"
225
+ Requires-Dist: openpyxl>=3.1.0; extra == "all"
226
+ Requires-Dist: pytesseract>=0.3.10; extra == "all"
227
+ Requires-Dist: numpy>=1.24.0; extra == "all"
228
+ Requires-Dist: paddlepaddle>=2.5.0; extra == "all"
229
+ Requires-Dist: paddleocr>=2.7.0.3; extra == "all"
230
+ Requires-Dist: easyocr>=1.7.0; extra == "all"
231
+ Requires-Dist: fastapi>=0.115.0; extra == "all"
232
+ Requires-Dist: uvicorn[standard]>=0.32.0; extra == "all"
233
+ Requires-Dist: python-multipart>=0.0.12; extra == "all"
234
+ Requires-Dist: httpx>=0.27.0; extra == "all"
235
+ Requires-Dist: pydantic-settings>=2.0.0; extra == "all"
236
+ Requires-Dist: mcp>=1.2.0; extra == "all"
237
+ Requires-Dist: fastmcp>=2.3.0; extra == "all"
238
+ Requires-Dist: beautifulsoup4>=4.12.0; extra == "all"
239
+ Requires-Dist: lxml_html_clean>=0.4.0; extra == "all"
240
+ Requires-Dist: readability-lxml>=0.8.1; extra == "all"
241
+ Requires-Dist: youtube-transcript-api>=0.6.0; extra == "all"
242
+ Dynamic: license-file
243
+
244
+ # mdengine
245
+
246
+ 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`), **OData CSDL metadata** (V1–V4, XML/JSON → Markdown catalogs via **`md-odata`**), **SAP artifacts** (ABAP, CDS, ADT DDIC XML, HANA views, BW, Datasphere, BAPI, IDoc, transport → AI-ready Markdown; OData catalogs via **`md-sap`**, standalone **`md-odata`**, or shared **`md_generator.odata`**), and **source code** (codeflow → architecture Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
247
+
248
+ - **PyPI name:** `mdengine` (import package: `md_generator`)
249
+ - **Source:** [github.com/mdengine/md-generator](https://github.com/mdengine/md-generator)
250
+ - **Python:** 3.10+
251
+ - **License:** [MIT](LICENSE)
252
+
253
+ **Quick links:** [On a new computer](#on-a-new-computer) · [Command-line execution](#command-line-execution) · [Python library](#python-library) · [SAP metadata](#sap-metadata-md_generatorsap) · [Audio and video](#audio-and-video-to-markdown) · [HTTP API](#http-api-fastapi) · [MCP](#mcp-model-context-protocol) · [AI assistant CLI](#ai-assistant-cli) · [Development](#development) · [Published documentation](https://mdengine.github.io/md-generator/) · [Code of Conduct](CODE_OF_CONDUCT.md)
254
+
255
+ ---
256
+
257
+ ## On a new computer
258
+
259
+ Use this checklist the first time you run the tools on a machine that does not have the project yet.
260
+
261
+ 1. **Install Python 3.10 or newer** from [python.org](https://www.python.org/downloads/) (Windows: enable **Add python.exe to PATH** in the installer). Confirm in a new terminal: `python --version`.
262
+ 2. **(Recommended)** Create an isolated environment so dependencies do not clash with other projects:
263
+ ```bash
264
+ python -m venv .venv
265
+ ```
266
+ Then activate it: **Windows (PowerShell)** `.\.venv\Scripts\Activate.ps1` · **Windows (CMD)** `.venv\Scripts\activate.bat` · **macOS / Linux** `source .venv/bin/activate`.
267
+ 3. **Install this package with the extras you need** (see [Optional dependency extras](#optional-dependency-extras) for what each extra does):
268
+ ```bash
269
+ pip install "mdengine[pdf,word]"
270
+ ```
271
+ If the package is not on PyPI yet, clone [the repository](https://github.com/mdengine/md-generator), `cd` into the repo root, then:
272
+ ```bash
273
+ pip install -e ".[pdf,word]"
274
+ ```
275
+ 4. **Confirm the CLI is on your PATH:** `md-pdf --help` (or `md-word --help`, etc.). If you see “command not found”, the folder where `pip` puts scripts (often `.venv\Scripts` on Windows or `.venv/bin` on Unix) must be on your `PATH`, or you must run commands from an **activated** virtual environment.
276
+ 5. **Run one conversion** with a real file path, for example:
277
+ ```bash
278
+ md-pdf path\to\report.pdf out.md
279
+ ```
280
+ Full flags and every `md-*` command are in [Command-line execution](#command-line-execution).
281
+
282
+ ---
283
+
284
+ ## Installation
285
+
286
+ From the repository root (editable install for development):
287
+
288
+ ```bash
289
+ pip install -e .
290
+ ```
291
+
292
+ With format-specific and HTTP extras:
293
+
294
+ ```bash
295
+ pip install -e ".[pdf,word,api]"
296
+ pip install -e ".[ppt,xlsx,image,archive,api,mcp]"
297
+ ```
298
+
299
+ From PyPI (once published):
300
+
301
+ ```bash
302
+ pip install "mdengine[pdf,word]"
303
+ pip install "mdengine[all]"
304
+ ```
305
+
306
+ ### Optional dependency extras
307
+
308
+ | Extra | Purpose |
309
+ |--------|---------|
310
+ | `pdf` | PDF extraction (PyMuPDF, pdfplumber) |
311
+ | `word` | DOCX → Markdown (mammoth, markdownify) |
312
+ | `ppt` | PPTX and embedded content (python-pptx, Pillow, lxml, mammoth, PyMuPDF, …) |
313
+ | `xlsx` | Excel → Markdown (openpyxl) |
314
+ | `image` | Image I/O for OCR pipelines (Pillow) |
315
+ | `image-ocr` | Heavy OCR backends (pytesseract, paddle, easyocr, …) |
316
+ | `text` | TXT / JSON / XML converter (stdlib-oriented; marker extra) |
317
+ | `archive` | ZIP → Markdown layout (Pillow; optional tesseract for inline image OCR) |
318
+ | `url` | HTTP(S) HTML → Markdown (httpx, readability-lxml, markdownify, BeautifulSoup, lxml) |
319
+ | `url-full` | `url` plus PDF/Word/PPTX/XLSX/archive stack for **post-converting** downloaded linked files to Markdown |
320
+ | `audio` | **Audio → Markdown** via Whisper (`openai-whisper`); ships `imageio-ffmpeg` for a bundled **ffmpeg** when none is on `PATH` |
321
+ | `video` | **Video → Markdown** (ffmpeg extracts mono 16 kHz WAV, then same Whisper stack as `audio`) |
322
+ | `youtube` | **YouTube → Markdown** (captions + page metadata; `youtube-transcript-api`, httpx, BeautifulSoup, lxml) |
323
+ | `playwright` | **Playwright-rendered SPA → Markdown** (`playwright` + same HTML stack as `url`; run `playwright install chromium` after install) |
324
+ | `db` | **Database metadata → Markdown** (SQLAlchemy, drivers, `mermaid-py` for ERD helpers) |
325
+ | `openapi` | **OpenAPI / Swagger → Markdown** (`prance`, `openapi-spec-validator`, PyYAML) |
326
+ | `odata` | **OData CSDL → Markdown** (V1–V4 metadata catalogs; `httpx`, PyYAML, NetworkX, Pydantic settings) |
327
+ | `codeflow` | **Static codeflow / call graphs → Markdown** (`networkx`, `javalang`; core scanners) |
328
+ | `codeflow-worker` | Optional **Celery + Redis** workers for the codeflow API async path |
329
+ | `codeflow-treesitter` | **Tree-sitter** parsers (JS/TS/TSX, C++, Java, Python, Go, PHP); use `--parser-mode treesitter` — see [codeflow-to-md/docs/parser-backends.md](codeflow-to-md/docs/parser-backends.md) |
330
+ | `codeflow-clang` | **libclang** bindings for C/C++ parsing when used by the codeflow pipeline |
331
+ | `codeflow-semantic` | **Semantic clustering** (SentenceTransformers, scikit-learn, numpy; large install) |
332
+ | `log` | **Log files → Markdown** (`pandas`, PyYAML, date parsing) |
333
+ | `log-cluster` | Log pipeline **clustering** (scikit-learn) |
334
+ | `log-semantic` | Log pipeline **semantic** helpers (SentenceTransformers + scikit-learn; large) |
335
+ | `log-pretty` | Optional **loguru** for pretty console diagnostics during log conversion |
336
+ | `log-otel-proto` | **OTLP protobuf** ingest for **`md-otel`** and log/OTEL tooling (`opentelemetry-proto`, `protobuf`) |
337
+ | `sap` | **SAP artifacts → Markdown** (ABAP, CDS, ADT DDIC XML, HANA, BW, Datasphere, OData, BAPI, IDoc, transport, optional external lineage): PyYAML, NetworkX, Pydantic, lxml |
338
+ | `api` | FastAPI, uvicorn, httpx, pydantic-settings |
339
+ | `mcp` | MCP servers (`mcp`, `fastmcp` where used) |
340
+ | `graph` | **Graph → Markdown** (Neo4j Bolt + NetworkX GraphML/GML): `networkx`, `neo4j`, `pyyaml` |
341
+ | `docs` | **MkDocs** site tooling (Material, mkdocstrings, Mermaid plugin, mike) for maintainers publishing reference docs |
342
+ | `dev` | pytest + API/MCP test helpers |
343
+ | `all` | Large superset of dependencies (use only if you need everything) |
344
+ | `skill-openai` | Optional helpers for OpenAI-style calls with assembled skill context (`md_generator.tools.assistant`) |
345
+ | `skill-rag-chroma` | Optional Chroma-based RAG over skill markdown (`MasterAgent.ask(..., use_rag=True)`) |
346
+
347
+ Nested ZIP and office files inside archives require the corresponding extras (e.g. `archive` plus `pdf` for PDFs inside a ZIP).
348
+
349
+ ---
350
+
351
+ ## Command-line execution
352
+
353
+ All converters can be run from a terminal after you install the package (with the right **extras** for that format). Each tool is a normal executable on your `PATH` (no need to open Python yourself unless you choose the shim workflow below).
354
+
355
+ ### 1. Install (once)
356
+
357
+ ```bash
358
+ pip install "mdengine[pdf,word]" # adjust extras: ppt, xlsx, image, archive, text, db, graph, …
359
+ # or from a clone:
360
+ pip install -e ".[pdf,word,archive]"
361
+ ```
362
+
363
+ ### 2. Check that the command is available
364
+
365
+ ```bash
366
+ md-pdf --help
367
+ md-zip --help
368
+ ```
369
+
370
+ If the shell reports “command not found”, ensure the Python **Scripts** directory is on your `PATH` (same place `pip` installs console scripts).
371
+
372
+ ### 3. Commands (command-line entry points)
373
+
374
+ | Command | Implements | One-line example |
375
+ |---------|------------|------------------|
376
+ | `md-pdf` | `md_generator.pdf.converter:main` | `md-pdf report.pdf out.md` |
377
+ | `md-word` | `md_generator.word.converter:main` | `md-word notes.docx body.md` |
378
+ | `md-ppt` | `md_generator.ppt.converter:main` | `md-ppt deck.pptx ./ppt-out` |
379
+ | `md-xlsx` | `md_generator.xlsx.converter:main` | `md-xlsx -i data.xlsx -o ./excel-out` (also **`.csv`**) |
380
+ | `md-image` | `md_generator.image.converter:main` | `md-image ./scans page.md` |
381
+ | `md-text` | `md_generator.text.converter:main` | `md-text config.xml out.md` |
382
+ | `md-zip` | `md_generator.archive.converter:main` | `md-zip bundle.zip ./zip-out` |
383
+ | `md-url` | `md_generator.url.converter:main` | `md-url https://example.com/doc ./web-out --artifact-layout` |
384
+ | `md-audio` | `md_generator.media.audio.converter:main` | `md-audio clip.mp3 transcript.md --model base` |
385
+ | `md-video` | `md_generator.media.video.converter:main` | `md-video clip.mp4 transcript.md --model base` |
386
+ | `md-youtube` | `md_generator.media.youtube.converter:main` | `md-youtube "https://youtu.be/…" out.md --transcript-lang en` |
387
+ | `md-audio-api` | `md_generator.media.audio.api.run:main` | REST + MCP on port **8011** (see [Audio and video to Markdown](#audio-and-video-to-markdown)) |
388
+ | `md-video-api` | `md_generator.media.video.api.run:main` | REST + MCP on port **8012** |
389
+ | `md-youtube-api` | `md_generator.media.youtube.api.run:main` | REST + MCP on port **8013** (JSON `url` body; see same section) |
390
+ | `md-audio-mcp` | `md_generator.media.audio.api.mcp_server:main` | Standalone MCP (`--transport stdio` \| `sse` \| `streamable-http`) |
391
+ | `md-video-mcp` | `md_generator.media.video.api.mcp_server:main` | Same for video |
392
+ | `md-youtube-mcp` | `md_generator.media.youtube.api.mcp_server:main` | Same for YouTube (`youtube_url_to_markdown`) |
393
+ | `md-db` | `md_generator.db.cli.main:main` | `pip install "mdengine[db]"` then `md-db --config db.yaml` (or `mdengine db-to-md …`) |
394
+ | `md-db-api` | `md_generator.db.api.run:main` | FastAPI on port **8010** (`DB_TO_MD_PORT`): `POST /db-to-md/run`, `POST /db-to-md/run/sqlite` (upload + ZIP), `POST /db-to-md/job`, `POST /db-to-md/job/sqlite` (upload + async job), SSE `/db-to-md/job/{id}/events` |
395
+ | `md-db-mcp` | `md_generator.db.api.mcp_server:main` | Standalone MCP for metadata export tools |
396
+ | `md-graph` | `md_generator.graph.cli.main:main` | `pip install "mdengine[graph]"` then `md-graph --source neo4j --uri bolt://…` (or `mdengine graph-to-md …`) |
397
+ | `md-graph-api` | `md_generator.graph.api.run:main` | FastAPI on port **8012** (`GRAPH_TO_MD_PORT`): `POST /graph-to-md/run`, `/graph-to-md/job`, SSE `/graph-to-md/job/{id}/events` |
398
+ | `md-graph-mcp` | `md_generator.graph.api.mcp_server:main` | Standalone MCP for graph export tools |
399
+ | `md-openapi` | `md_generator.openapi.cli.main:main` | `pip install "mdengine[openapi]"` then `md-openapi generate --file openapi.yaml --output ./docs` (or `mdengine openapi-to-md generate …`) |
400
+ | `md-openapi-api` | `md_generator.openapi.api.run:main` | FastAPI on port **8015** (`OPENAPI_TO_MD_PORT`): `POST /openapi-to-md/generate` (OpenAPI upload → ZIP), `/health`, MCP at **`/mcp`** |
401
+ | `md-openapi-mcp` | `md_generator.openapi.api.mcp_server:main` | Standalone MCP: `api_validate_openapi_yaml`, `api_generate_readme_markdown`, `api_run_sync_zip_base64` |
402
+ | `md-odata` | `md_generator.odata.cli.main:main` | `pip install "mdengine[odata]"` then `md-odata generate --folder ./odata --output ./out` (or `mdengine odata-to-md generate …`) |
403
+ | `md-odata-api` | `md_generator.odata.api.run:main` | FastAPI on port **8017** (`ODATA_TO_MD_PORT`): `POST /odata-to-md/generate` (metadata upload → ZIP), `/health`, MCP at **`/mcp`** |
404
+ | `md-odata-mcp` | `md_generator.odata.api.mcp_server:main` | Standalone MCP: `odata_validate_metadata`, `odata_generate_readme_markdown`, `odata_run_sync_zip_base64` |
405
+ | `md-playwright` | `md_generator.playwright.cli:main` | `pip install "mdengine[playwright]"` then `md-playwright https://spa.example/app ./spa-out` (after `playwright install chromium`) |
406
+ | `md-playwright-api` | `md_generator.playwright.api.run:main` | FastAPI + MCP on port **8014** (`PLAYWRIGHT_TO_MD_API_PORT` / settings); see [HTTP API](#http-api-fastapi) |
407
+ | `md-playwright-mcp` | `md_generator.playwright.api.mcp_server:main` | Standalone MCP for Playwright capture tools |
408
+ | `md-codeflow` | `md_generator.codeflow.cli.main:main` | Same as `codeflow` — `md-codeflow scan …` (alias of packaged `codeflow` script) |
409
+ | `codeflow` | `md_generator.codeflow.cli.main:main` | `pip install "mdengine[codeflow]"` then `codeflow scan path/to/src --output ./out --lang java` |
410
+ | `md-codeflow-api` | `md_generator.codeflow.api.run:main` | FastAPI on port **8016** (`CODEFLOW_TO_MD_PORT`); upload/workspace job flow + MCP at **`/mcp`** when MCP extras resolve |
411
+ | `md-codeflow-mcp` | `md_generator.codeflow.api.mcp_server:main` | Standalone **stdio** MCP for codeflow tools |
412
+ | `md-log` | `md_generator.log.cli.main:main` | `pip install "mdengine[log]"` then `md-log --config log.yaml` (or `mdengine log-to-md …`) |
413
+ | `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** |
414
+ | `md-log-mcp` | `md_generator.log.api.mcp_server:main` | Standalone MCP (`stdio` \| `sse` \| `streamable-http`) |
415
+ | `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) |
416
+ | `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 …`) |
417
+ | `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` |
418
+ | `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) |
419
+ | `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 odata-to-md generate …`, `mdengine graph-to-md …`, `mdengine openapi-to-md generate …`, `mdengine codeflow-to-md scan …` |
420
+
421
+ **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.
422
+
423
+ **db-to-md ER diagrams:** add **`erd`** to the export feature list (YAML `features.include`, API body, or CLI `--include …,erd`). **Preferred:** **Graphviz** (`dot` on `PATH`, or **`GRAPHVIZ_DOT`**) produces `erd/*.dot`, `erd/*.png`, and `erd/*.svg`. **If Graphviz is missing,** the exporter falls back to **Mermaid** (`erDiagram`): it writes `erd/*.mermaid` plus a fenced **`erd/*.md`** for GitHub-style preview. With **`mermaid-py`** (included in `mdengine[db]`), it also requests **PNG/SVG** via mermaid.ink (requires network unless you self-host mermaid.ink and set **`MERMAID_INK_SERVER`** per [mermaid-py](https://pypi.org/project/mermaid-py/)). Tune **`erd.max_tables`** (default 100) and **`erd.scope`** (`full` \| `per_schema` \| `per_table`) under `erd:` in YAML; CLI: `--erd-max-tables`, `--erd-scope`. Async job SSE uses `progress_update` with `current` starting with `erd:`.
424
+
425
+ **db-to-md split exports and README merge:** with **`output.split_files: true`**, set **`output.write_combined_feature_markdown: true`** to also write root-level combined Markdown (for example `tables.md`, `functions.md`, `indexes.md`, and feature-specific paths such as `oracle/packages.md` or `mongodb/collections.md` when those features run). Set **`output.readme_feature_merge`** to **`inline`** (append full bundle bodies into `README.md`) or **`toc`** (append a linked list to those files). If merge is not **`none`** and split files are on, combined bundle writes are turned on automatically when loading config. CLI: `--write-combined-feature-markdown`, `--readme-feature-merge none|inline|toc`.
426
+
427
+ **db-to-md SQLite:** set **`database.type: sqlite`** and **`database.uri`** to a SQLAlchemy URL such as **`sqlite:///my.db`** or **`sqlite:////C:/data/my.db`**. The default SQLite catalog is **`main`**; packaged YAML that still has **`schema: public`** is normalized to **`main`** when the type is SQLite. CLI: **`--type sqlite`**. Stored routines, sequences, and partitions are not used by SQLite and stay empty; tables, indexes, views, triggers, and ERD (via FK introspection) follow the same export path as other SQL engines.
428
+
429
+ **db-to-md SQL Server:** set **`database.type: mssql`** (aliases: `sqlserver`) and a **`mssql+pyodbc://`** URI with an ODBC driver query (for example `?driver=ODBC+Driver+18+for+SQL+Server`). Set **`database.schema`** to the SQL Server schema (default **`dbo`**). Optional features: **`synonyms`**, **`dependencies`** (lineage from `sys.sql_expression_dependencies`). Table/column/routine **MS_Description** extended properties are exported when present. Requires **`pyodbc`** (`mdengine[db]`).
430
+
431
+ **db-to-md Microsoft Access:** set **`database.type: access`** with a file path via **`mssql+pyodbc:///?odbc_connect=...`** (built automatically from uploads) or use **`POST /db-to-md/run/access`** / **`POST /db-to-md/job/access`** to upload **`.mdb` / `.accdb`** files (Windows + Microsoft Access ODBC driver). Saved **Query** objects are exported as views (SELECT) or query procedures (action queries). Requires **`pyodbc`** and an Access-compatible ODBC driver.
432
+
433
+ **db-to-md CLI validation:** **`md-db --test-connection`** (or **`mdengine db-to-md --test-connection`**) checks connectivity without exporting. **`--list-schemas`** prints schema/catalog names (`--output-format json` optional).
434
+
435
+ **db-to-md export manifest:** every run can write **`export_manifest.json`** at the output root (counts, file list, ERD paths). Control with **`output.write_manifest`** (default true). **`output.markdown_cross_links`** adds **Related** links between tables via foreign keys when using split files (default true).
436
+
437
+ **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.
438
+
439
+ **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).
440
+
441
+ **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**).
442
+
443
+ **odata-to-md (`md-odata`):** parses **OData CSDL** metadata (**V1–V4**, XML or JSON) from **`--file`**, **`--folder`**, **`--zip`**, or **`--url`** (`$metadata`) into catalog Markdown under **`odata/`** (services, entity sets, types, actions, functions). Optional **`--graph`** (relationship JSON/Mermaid) and **`--chunk`** (semantic chunks for RAG). Works **standalone** with **`md-odata`**; when OData files sit beside ABAP/CDS in a SAP tree, use **`md-sap`** instead — see [odata-to-md/docs/dual-mode.md](odata-to-md/docs/dual-mode.md). Library: [`md_generator/odata/`](src/md_generator/odata/). Module README: [`odata-to-md/README.md`](odata-to-md/README.md); catalog layout: [odata-to-md/docs/output-layout.md](odata-to-md/docs/output-layout.md); SAP-integrated catalog notes: [sap-to-md/docs/odata-catalog.md](sap-to-md/docs/odata-catalog.md).
444
+
445
+ **sap-to-md (`md-sap`):** parses **ABAP**, **CDS** (views, **`define table`**, **`define type`** structures), **DDIC** (ADT dictionary XML, abapGit **`TABL`**, DD02/DD03 CSV), **OData** metadata (via shared **`md_generator.odata`** when **`odata_catalog`** is enabled), **BAPI**, **IDoc**, and transport artifacts into chunked Markdown knowledge packs. Also supports **SAP HANA** (calculation, analytic, attribute, SQL, and HDI views), **SAP BW/4HANA** (ADSO, composite providers, DTP, InfoObjects, transformations), **SAP Datasphere** (`.dsview`, `.dataflow`, analytical model JSON exports), and optional **external lineage** parsers (dbt `manifest.json`, Snowflake DDL, Kafka `.avsc`, Informatica mapping XML) when **`parser.include_external: true`** in YAML.
446
+
447
+ **DDIC / ADT:** Eclipse ADT exports under `wbobj/dictionary/` (data elements, domains, tables, structures, table types, range types, reference types) are parsed by **`ddic.adt`**. Modern **`TABL/DT`** objects with DDL references accept sidecar DDL source when present. Normalized **`ddic_canonical`** metadata powers v2 generators; legacy entity keys remain for v1 **`entities/`** output. Output layout: **`ddic/data-elements/`**, **`ddic/domains/`**, **`ddic/tables/`**, … and shared **`structures/{name}.md`** for ADT structures and CDS **`define type`**. See [sap-to-md/docs/ddic-adt.md](sap-to-md/docs/ddic-adt.md).
448
+
449
+ **Pipeline v1 (default):** discover inputs → plugin registry → **`SapObject`** IR → NetworkX knowledge graph → analyzers (relationships, governance, validation, authorization, lineage, semantics) → split Markdown (12-section entity docs per [markdown-generation.md](sap-to-md/docs/markdown-generation.md)), optional chunks, graphs, and manifest.
450
+
451
+ **Pipeline v2** (`--pipeline-version 2` or `pipeline.version: 2`): runs v1 first, then adds **`json/canonical/`**, **`graph/artifacts.json`**, typed v2 Markdown via **`generators/`** (DDIC, HANA, CDS, BW, Datasphere), optional **`pipeline.semantic_narrative`** (relationship summaries and DDIC resolution chains), **`navigation/index.json`** ([navigation-index.md](sap-to-md/docs/navigation-index.md)), cross-link refresh on v1 entity pages, deterministic rule findings, and HANA/BW/Datasphere sidecars (for example **`hana/calculation-views/`**, **`hana/lineage/`**, **`datasphere/`**). Optional: **`pipeline.openlineage_export`**, **`pipeline.cross_lineage`**, **`pipeline.semantic_chunks_jsonl`**. See [architecture.md](sap-to-md/docs/architecture.md), [canonical-model.md](sap-to-md/docs/canonical-model.md), [graph-model.md](sap-to-md/docs/graph-model.md).
452
+
453
+ **Feature flags** (YAML `features.include` or **`--include`** comma list): `entities`, `technical`, `functional`, `relationships`, `lineage`, `governance`, `authorization`, `validations`, `graphs`, `chunks`, `json_output`, `odata_catalog`. Convenience CLI flags: **`--include-cds`**, **`--include-ddic`**, **`--include-lineage`**, **`--include-governance`**, **`--graph`**, **`--chunk`**, **`--json-output`**, **`--workers`**, **`--async`**. Fetch live OData: **`--odata-url`** (repeatable) or `input.odata_urls` in YAML. For **OData-only** metadata trees, prefer standalone **`md-odata`** — [odata-to-md/docs/dual-mode.md](odata-to-md/docs/dual-mode.md). SAP-integrated catalog layout: [sap-to-md/docs/odata-catalog.md](sap-to-md/docs/odata-catalog.md).
454
+
455
+ **Further reading:** [sap-to-md/README.md](sap-to-md/README.md) · [parser-design](sap-to-md/docs/parser-design.md) · [ddic-adt](sap-to-md/docs/ddic-adt.md) · [markdown-generation](sap-to-md/docs/markdown-generation.md) · [navigation-index](sap-to-md/docs/navigation-index.md) · [hana-calculation-views](sap-to-md/docs/hana-calculation-views.md) · [datasphere](sap-to-md/docs/datasphere.md) · [external-plugins](sap-to-md/docs/external-plugins.md) · [chunking-strategy](sap-to-md/docs/chunking-strategy.md) · [governance-design](sap-to-md/docs/governance-design.md) · [relationship-engine](sap-to-md/docs/relationship-engine.md). Library: [`md_generator/sap/`](src/md_generator/sap/).
456
+
457
+ **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/).
458
+
459
+ **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).
460
+
461
+ Every command accepts **`-h` / `--help`** for full flags (artifact layout, OCR, ZIP options, etc.).
462
+
463
+ ### 4. Copy-paste examples (terminal)
464
+
465
+ **bash / macOS / Linux**
466
+
467
+ ```bash
468
+ md-pdf manual.pdf ./artifact --artifact-layout
469
+ md-word letter.docx letter.md --images-dir ./letter-images
470
+ md-ppt slides.pptx ./ppt-artifact --artifact-layout
471
+ md-xlsx -i sales.xlsx -o ./md-sheets --split
472
+ md-xlsx -i export.csv -o ./csv-out
473
+ md-image ./photos ocr.md --engines tess --strategy best
474
+ md-text data.json data.md
475
+ md-zip archive.zip ./unzipped-md
476
+ md-url https://example.com/page ./page-bundle --artifact-layout
477
+ md-audio ./voice.mp3 ./voice.md --model tiny
478
+ md-video ./screen.mp4 ./screen.md --model base
479
+ pip install "mdengine[graph]" && md-graph --source neo4j --uri neo4j://localhost:7687 --user neo4j --password secret --database neo4j --output ./graph-out --viz
480
+ pip install "mdengine[playwright]" && playwright install chromium && md-playwright https://example.com/app ./spa-out
481
+ pip install "mdengine[openapi]" && md-openapi generate --file openapi.yaml --output ./openapi-md
482
+ pip install "mdengine[odata]" && md-odata generate --folder ./odata --output ./odata-md
483
+ pip install "mdengine[log]" && md-log --config log.yaml
484
+ pip install "mdengine[log-otel-proto]" && md-otel --input otlp-traces.json --output ./otel-docs
485
+ pip install "mdengine[sap]" && md-sap ./sap-source --output ./sap-out --graph --chunk
486
+ pip install "mdengine[sap]" && md-sap --pipeline-version 2 ./hana-fixtures --output ./sap-v2-out --graph --chunk
487
+ pip install "mdengine[sap]" && md-sap ./sap-to-md/tests/fixtures/ddic --output ./ddic-out --pipeline-version 2
488
+ pip install "mdengine[sap]" && md-sap ./sap-source --odata-url "https://host/sap/opu/odata/sap/API_PRODUCT/$metadata" --output ./sap-out
489
+ md-codeflow scan ./src --output ./cf-out --lang python
490
+ ```
491
+
492
+ **Windows PowerShell** (same commands; use backslashes for paths if you prefer)
493
+
494
+ ```powershell
495
+ md-pdf .\manual.pdf .\out\doc.md
496
+ md-zip .\archive.zip .\zip-out
497
+ md-url https://example.com/page .\page-bundle --artifact-layout
498
+ md-audio .\voice.mp3 .\voice.md --model tiny
499
+ md-video .\screen.mp4 .\screen.md --model base
500
+ pip install "mdengine[graph]"
501
+ md-graph --source neo4j --uri neo4j://localhost:7687 --user neo4j --password secret --database neo4j --output .\graph-out --viz
502
+ pip install "mdengine[playwright]"
503
+ playwright install chromium
504
+ md-playwright https://example.com/app .\spa-out
505
+ ```
506
+
507
+ **Windows CMD**
508
+
509
+ ```cmd
510
+ md-pdf manual.pdf out\doc.md
511
+ md-zip archive.zip zip-out
512
+ md-url https://example.com/page page-bundle --artifact-layout
513
+ ```
514
+
515
+ ### 5. Run without `pip install` (repo clone + `PYTHONPATH`)
516
+
517
+ The folders `pdf-to-md/`, `word-to-md/`, `url-to-md/`, … contain a thin `converter.py` that calls the same code as `md-pdf`, `md-word`, etc. From the **repository root**, point Python at `src` so `md_generator` imports, then run the shim:
518
+
519
+ **PowerShell**
520
+
521
+ ```powershell
522
+ $env:PYTHONPATH = "$PWD\src"
523
+ python pdf-to-md\converter.py input.pdf out.md
524
+ ```
525
+
526
+ **CMD**
527
+
528
+ ```cmd
529
+ set PYTHONPATH=src
530
+ python pdf-to-md\converter.py input.pdf out.md
531
+ ```
532
+
533
+ **bash**
534
+
535
+ ```bash
536
+ PYTHONPATH=src python pdf-to-md/converter.py input.pdf out.md
537
+ ```
538
+
539
+ ### 6. Convert every file in `example/` (strictly command-line)
540
+
541
+ To process **all supported files** under the [`example/`](example/) folder using only the installed **`md-*`** tools (no Python snippets), use the batch driver:
542
+
543
+ | Platform | Command (run from **repository root** unless noted) |
544
+ |----------|------------------------------------------------------|
545
+ | Windows | `powershell -ExecutionPolicy Bypass -File scripts/run-docs-cli.ps1` |
546
+ | Windows | Or double-click / run [`example/run-all-cli.cmd`](example/run-all-cli.cmd) (changes to repo root, then runs the script on `example\`) |
547
+ | macOS / Linux | `bash scripts/run-docs-cli.sh` |
548
+
549
+ Optional environment variables for the shell script: `DOCS_DIR`, `OUT_DIR`, `IMAGE_ENGINES` (default `tess`). PowerShell script parameters: `-DocsDir`, `-OutDir`, `-ImageEngines`.
550
+
551
+ Outputs are written to **`example/cli-output/<basename>/`** (one subfolder per input file). **`.csv`** files are converted with **`md-xlsx`** (same engine as Excel). **`.md`** files are skipped.
552
+
553
+ ---
554
+
555
+
556
+ ## Python library
557
+
558
+ Import from `md_generator.<format>` after installing the matching extras.
559
+
560
+ ### PDF
561
+
562
+ ```python
563
+ from pathlib import Path
564
+ from md_generator.pdf.pdf_extract import ConvertOptions, convert_pdf
565
+ from md_generator.pdf.utils import resolve_output
566
+
567
+ pdf = Path("input.pdf")
568
+ out = resolve_output(Path("out-dir"), artifact_layout=True, images_dir=None)
569
+ convert_pdf(pdf, out, ConvertOptions(verbose=True))
570
+ ```
571
+
572
+ ### Word (DOCX)
573
+
574
+ ```python
575
+ from pathlib import Path
576
+ from md_generator.word.converter import convert_docx_to_markdown
577
+
578
+ convert_docx_to_markdown(
579
+ Path("input.docx"),
580
+ Path("out/body.md"),
581
+ images_dir=Path("out/images"),
582
+ verbose=False,
583
+ )
584
+ ```
585
+
586
+ ### PowerPoint
587
+
588
+ ```python
589
+ from pathlib import Path
590
+ from md_generator.ppt.convert_impl import convert_pptx
591
+ from md_generator.ppt.options import ConvertOptions
592
+
593
+ convert_pptx(
594
+ Path("slides.pptx"),
595
+ Path("artifact-dir"),
596
+ ConvertOptions(artifact_layout=True, extract_embedded_deep=False),
597
+ )
598
+ ```
599
+
600
+ ### Excel
601
+
602
+ ```python
603
+ from pathlib import Path
604
+ from md_generator.xlsx.convert_config import ConvertConfig
605
+ from md_generator.xlsx.converter_core import convert_excel_to_markdown
606
+
607
+ result = convert_excel_to_markdown(
608
+ Path("book.xlsx"),
609
+ Path("out-dir"),
610
+ config=ConvertConfig(),
611
+ )
612
+ print(result.paths_written)
613
+ ```
614
+
615
+ ### Images (OCR)
616
+
617
+ ```python
618
+ from pathlib import Path
619
+ from md_generator.image.convert_impl import ConvertOptions, convert_images
620
+
621
+ convert_images(
622
+ Path("scan.png"),
623
+ Path("out.md"),
624
+ ConvertOptions(
625
+ engines=("tess",),
626
+ strategy="best",
627
+ title="OCR",
628
+ tess_lang="eng",
629
+ tesseract_cmd=None,
630
+ paddle_lang="en",
631
+ paddle_use_angle_cls=True,
632
+ easy_langs=("en",),
633
+ verbose=False,
634
+ ),
635
+ )
636
+ ```
637
+
638
+ ### Text / JSON / XML
639
+
640
+ ```python
641
+ from pathlib import Path
642
+ from md_generator.text.convert_impl import convert_text_file
643
+ from md_generator.text.options import ConvertOptions
644
+
645
+ convert_text_file(
646
+ Path("data.json"),
647
+ Path("out.md"),
648
+ ConvertOptions(artifact_layout=False, verbose=False),
649
+ )
650
+ ```
651
+
652
+ ### ZIP archive
653
+
654
+ ```python
655
+ from pathlib import Path
656
+ from md_generator.archive.convert_impl import convert_zip
657
+ from md_generator.archive.options import ConvertOptions
658
+
659
+ convert_zip(
660
+ Path("upload.zip"),
661
+ Path("artifact-out"),
662
+ ConvertOptions(
663
+ enable_office=True,
664
+ use_image_to_md=True,
665
+ verbose=False,
666
+ ),
667
+ )
668
+ ```
669
+
670
+ `repo_root` on `ConvertOptions` is **deprecated and ignored**; converters are loaded in-process from `md_generator`.
671
+
672
+ ### URL (HTML)
673
+
674
+ ```python
675
+ from pathlib import Path
676
+
677
+ import httpx
678
+ from md_generator.url.convert_impl import run_single
679
+ from md_generator.url.options import ConvertOptions
680
+
681
+ with httpx.Client(follow_redirects=True, timeout=30.0) as client:
682
+ run_single(
683
+ "https://example.com/",
684
+ Path("web-out"),
685
+ ConvertOptions(artifact_layout=True, verbose=False),
686
+ client,
687
+ )
688
+ ```
689
+
690
+ See [url-to-md/README.md](url-to-md/README.md) for crawl modes, post-convert assets, and API bodies.
691
+
692
+ ### Playwright (SPA)
693
+
694
+ ```python
695
+ import asyncio
696
+ from pathlib import Path
697
+
698
+ from md_generator.playwright.options import PlaywrightOptions
699
+ from md_generator.playwright.pipeline import convert_url_to_md
700
+
701
+ async def main() -> None:
702
+ await convert_url_to_md(
703
+ "https://example.com/app",
704
+ Path("spa-out"),
705
+ PlaywrightOptions(),
706
+ )
707
+
708
+ asyncio.run(main())
709
+ ```
710
+
711
+ Install browsers once: `playwright install chromium`.
712
+
713
+ ### Database metadata (db-to-md)
714
+
715
+ ```python
716
+ from pathlib import Path
717
+
718
+ from md_generator.db.core.extractor import extract_to_markdown
719
+ from md_generator.db.core.run_config import load_run_config
720
+
721
+ cfg = load_run_config(Path("db-export.yaml"))
722
+ extract_to_markdown(cfg)
723
+ ```
724
+
725
+ YAML shape and ERD options are covered above under **db-to-md** CLI notes.
726
+
727
+ ### Graph (Neo4j / NetworkX)
728
+
729
+ ```python
730
+ from pathlib import Path
731
+
732
+ from md_generator.graph.core.extractor import extract_to_markdown
733
+ from md_generator.graph.core.run_config import load_graph_run_config
734
+
735
+ cfg = load_graph_run_config(Path("graph-export.yaml"))
736
+ extract_to_markdown(cfg)
737
+ ```
738
+
739
+ ### OpenAPI → Markdown
740
+
741
+ ```python
742
+ from pathlib import Path
743
+
744
+ from md_generator.openapi.core.extractor import extract_to_markdown
745
+ from md_generator.openapi.core.run_config import ApiRunConfig
746
+
747
+ cfg = ApiRunConfig(file=Path("openapi.yaml"), output_path=Path("api-md"))
748
+ extract_to_markdown(cfg)
749
+ ```
750
+
751
+ Use `load_api_run_config(Path("openapi-md.yaml"))` when you prefer a single YAML file for input/output/format defaults.
752
+
753
+ ### Log files (log-to-md)
754
+
755
+ ```python
756
+ from pathlib import Path
757
+
758
+ from md_generator.log.core.extractor import extract_to_markdown
759
+ from md_generator.log.core.run_config import load_run_config as load_log_run_config
760
+
761
+ cfg = load_log_run_config(Path("log-export.yaml"))
762
+ extract_to_markdown(cfg)
763
+ ```
764
+
765
+ 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`**.
766
+
767
+ ### OpenTelemetry (otel-to-md)
768
+
769
+ ```python
770
+ from pathlib import Path
771
+
772
+ from md_generator.otel.otel_parser import load_otlp_json
773
+ from md_generator.otel.otel_spans import parse_otlp_spans
774
+
775
+ doc = load_otlp_json(Path("otlp-traces.json"))
776
+ spans = parse_otlp_spans(doc)
777
+ ```
778
+
779
+ CLI (writes **`trace.md`** under **`--output`**):
780
+
781
+ ```bash
782
+ pip install "mdengine[log-otel-proto]"
783
+ md-otel --input otlp-traces.json --output ./otel-docs
784
+ md-otel --input export.pb --output ./otel-docs --protobuf
785
+ ```
786
+
787
+ Shim: [`otel-to-md/converter.py`](otel-to-md/converter.py) delegates to **`md-otel`**.
788
+
789
+ ### OData metadata (odata-to-md)
790
+
791
+ ```python
792
+ from pathlib import Path
793
+
794
+ from md_generator.odata.core.extractor import extract_to_markdown
795
+ from md_generator.odata.core.run_config import load_odata_run_config
796
+
797
+ cfg = load_odata_run_config(None, {"input": {"folder": "metadata-exports"}, "output": {"path": "odata-out"}})
798
+ extract_to_markdown(cfg)
799
+ ```
800
+
801
+ Or use the CLI:
802
+
803
+ ```bash
804
+ pip install "mdengine[odata]"
805
+ md-odata generate --file metadata.xml --output ./odata-out
806
+ md-odata generate --url "https://host/service/$metadata" --output ./odata-out --graph --chunk
807
+ mdengine odata-to-md generate --folder ./metadata-exports --output ./out
808
+ ```
809
+
810
+ Shim: [`odata-to-md/converter.py`](odata-to-md/converter.py) delegates to **`md-odata`**. See [`odata-to-md/README.md`](odata-to-md/README.md) for HTTP API, MCP, and dual-mode with **`md-sap`**.
811
+
812
+ ### SAP artifacts (sap-to-md)
813
+
814
+ ```python
815
+ from pathlib import Path
816
+
817
+ from md_generator.sap.core.extractor import extract_to_markdown
818
+ from md_generator.sap.core.run_config import load_run_config
819
+
820
+ cfg = load_run_config(Path("sap-export.yaml"))
821
+ extract_to_markdown(cfg)
822
+ ```
823
+
824
+ Or pass paths on the CLI:
825
+
826
+ ```bash
827
+ pip install "mdengine[sap]"
828
+ md-sap ./abap ./cds ./ddic-xml --output ./sap-out --include-lineage --include-governance --graph --chunk
829
+ md-sap --pipeline-version 2 ./fixtures/hana --output ./sap-v2-out --workers 4
830
+ md-sap ./sap-to-md/tests/fixtures/ddic --output ./ddic-out --pipeline-version 2
831
+ md-sap ./exports --odata-url "https://host/sap/opu/odata/sap/API_PRODUCT/$metadata" --output ./sap-out
832
+ mdengine sap-to-md ./sap-source --include entities,lineage,odata_catalog --json-output
833
+ ```
834
+
835
+ Example YAML (pipeline v2 + ADT DDIC + Datasphere + semantic narrative):
836
+
837
+ ```yaml
838
+ input:
839
+ paths: ["./sap-exports", "./wbobj/dictionary", "./datasphere-exports"]
840
+ odata_urls:
841
+ - https://example.com/sap/opu/odata/sap/API_PRODUCT/$metadata
842
+ output:
843
+ path: ./sap-out
844
+ split_files: true
845
+ markdown_cross_links: true
846
+ pipeline:
847
+ version: 2
848
+ semantic_narrative: true
849
+ canonical_json: true
850
+ artifact_graph: true
851
+ rule_engine: true
852
+ parser:
853
+ include_hana: true
854
+ include_bw: true
855
+ include_datasphere: true
856
+ include_external: false
857
+ features:
858
+ include: [entities, lineage, governance, odata_catalog, graphs, chunks]
859
+ performance:
860
+ workers: 4
861
+ ```
862
+
863
+ For **OData-only** metadata exports, prefer **`md-odata`** (above). Design and output layouts: [`sap-to-md/README.md`](sap-to-md/README.md), [architecture](sap-to-md/docs/architecture.md), [ddic-adt](sap-to-md/docs/ddic-adt.md), [markdown-generation](sap-to-md/docs/markdown-generation.md), [navigation-index](sap-to-md/docs/navigation-index.md), [hana-calculation-views](sap-to-md/docs/hana-calculation-views.md), [datasphere](sap-to-md/docs/datasphere.md).
864
+
865
+ ### Codeflow (static call graphs)
866
+
867
+ ```python
868
+ from pathlib import Path
869
+
870
+ from md_generator.codeflow.core.extractor import run_scan
871
+ from md_generator.codeflow.core.run_config import ScanConfig
872
+
873
+ cfg = ScanConfig(project_root=Path("my-service/src"), output_path=Path("codeflow-out"), languages="java")
874
+ run_scan(cfg)
875
+ ```
876
+
877
+ More flags and language notes: [Development](#development) (section **Codeflow**) and [`codeflow-to-md/docs/graph-and-outputs.md`](codeflow-to-md/docs/graph-and-outputs.md).
878
+
879
+ ---
880
+
881
+ ## SAP metadata (`md_generator.sap`)
882
+
883
+ Library code lives under [`src/md_generator/sap/`](src/md_generator/sap/). The pipeline discovers file-based SAP inputs (ABAP, CDS DDL, ADT DDIC XML, OData EDMX/JSON, BAPI, IDoc, transport, HANA view XML, BW artifacts, Datasphere exports) and optionally fetches live **`$metadata`** URLs.
884
+
885
+ | Package area | Role |
886
+ |--------------|------|
887
+ | `parser/` | Plugin registry — ABAP, CDS (view / **`define table`** / **`define type`**), DDIC (ADT XML, abapGit TABL, CSV), OData, BAPI, IDoc, transport, HANA, BW, Datasphere, external lineage |
888
+ | `normalizer/` + `canonical/` | **`SapObject` → `CanonicalArtifact`**, typed **`ddic_canonical`** metadata, transformation graphs |
889
+ | `analyzer/` | Relationships, governance, validation, authorization, lineage, semantics |
890
+ | `generators/` + `markdown/` | v1 entity docs (12 sections) and v2 typed Markdown (DDIC, HANA, CDS, BW, Datasphere); optional **semantic narrative** blocks |
891
+ | `graph/` + `orchestration/` | NetworkX v1 graph, v2 **`ArtifactGraph`**, **`pipeline_v2`** orchestration |
892
+ | `chunking/` + `rules/` | Semantic chunks (JSONL) and deterministic rule findings |
893
+ | `core/` + `api/` | **`extract_to_markdown`**, YAML config, CLI, FastAPI jobs |
894
+
895
+ - **Pipeline v1:** `SapObject` IR → NetworkX graph → split Markdown under **`entities/`**, **`technical/`**, **`functional/`**, plus feature folders; optional chunks and Mermaid/JSON graphs.
896
+ - **Pipeline v2:** v1 output preserved, then canonical JSON, artifact graph export, typed generators, **`navigation/index.json`**, and cross-link refresh on DDIC entity pages. Enable with **`--pipeline-version 2`** or `pipeline.version: 2`; tune with `pipeline.semantic_narrative`, `pipeline.openlineage_export`, `pipeline.cross_lineage`.
897
+ - **OData:** catalog rendering delegates to shared [`md_generator.odata`](src/md_generator/odata/); use **`md-odata`** for standalone CSDL exports ([dual-mode](odata-to-md/docs/dual-mode.md)).
898
+ - **Docs:** [`sap-to-md/docs/`](sap-to-md/docs/) — start with [architecture](sap-to-md/docs/architecture.md), [ddic-adt](sap-to-md/docs/ddic-adt.md), [markdown-generation](sap-to-md/docs/markdown-generation.md), [navigation-index](sap-to-md/docs/navigation-index.md). Tests and fixtures: [`sap-to-md/tests/`](sap-to-md/tests/) (including `fixtures/ddic/`, `fixtures/hana/`, `fixtures/cds/`).
899
+
900
+ ```bash
901
+ pip install "mdengine[sap]"
902
+ md-sap ./sap-source --output ./sap-out --graph --chunk
903
+ md-sap --pipeline-version 2 ./sap-to-md/tests/fixtures/ddic --output ./ddic-out
904
+ md-sap-api # POST /sap-to-md/run, /sap-to-md/job, GET /sap-to-md/job/{id}/download
905
+ ```
906
+
907
+ ---
908
+
909
+ ## Audio and video to Markdown
910
+
911
+ Library code lives under **`md_generator.media`**: shared probing in [`document_converter.py`](src/md_generator/media/document_converter.py), **audio** in [`media/audio/`](src/md_generator/media/audio/) (Whisper + ffprobe / ffmpeg metadata), **video** in [`media/video/`](src/md_generator/media/video/) (ffmpeg extracts audio only; transcription always goes through the audio service—no duplicate Whisper path in video).
912
+
913
+ ### System requirements
914
+
915
+ - **ffmpeg** (and **ffprobe** when available) on `PATH` for metadata and for **video** demux. If `ffprobe` is missing or misbehaving, metadata falls back to parsing `ffmpeg -i` stderr.
916
+ - Optional **`FFMPEG`** environment variable: absolute path to an `ffmpeg` executable (see [`resolve_ffmpeg_executable()`](src/md_generator/media/document_converter.py)).
917
+ - **GPU** is optional; Whisper runs on CPU if needed (may log FP16→FP32 on CPU).
918
+
919
+ ### Install
920
+
921
+ ```bash
922
+ pip install "mdengine[audio,api,mcp]" # audio CLI + HTTP + MCP
923
+ pip install "mdengine[video,api,mcp]" # video CLI + HTTP + MCP (same ML stack as audio)
924
+ pip install "mdengine[youtube,api,mcp]" # YouTube URL → Markdown (captions + metadata; optional Whisper fallback)
925
+ ```
926
+
927
+ ### Python library
928
+
929
+ **Audio** — structured result + Markdown:
930
+
931
+ ```python
932
+ from pathlib import Path
933
+ from md_generator.media.audio import AudioToMarkdownService, AudioConverter
934
+
935
+ svc = AudioToMarkdownService(whisper_model="base") # language omitted → Whisper auto-detect; pass e.g. language="en" to force
936
+ text = svc.to_markdown(Path("input.mp3"), title="My title")
937
+ svc.write_markdown(Path("input.mp3"), Path("out/transcript.md"))
938
+
939
+ result = svc.transcribe(Path("input.wav")) # metadata + segments + plain_text
940
+ ```
941
+
942
+ **Video** — extract → transcribe (via audio) → Markdown:
943
+
944
+ ```python
945
+ from pathlib import Path
946
+ from md_generator.media.video import VideoToMarkdownService
947
+
948
+ svc = VideoToMarkdownService(whisper_model="base") # transcription language omitted → auto-detect
949
+ md = svc.to_markdown(Path("input.mp4"), title=None)
950
+ svc.write_markdown(Path("input.mp4"), Path("out/transcript.md"))
951
+ ```
952
+
953
+ **YouTube** — captions API + page metadata (BeautifulSoup / oEmbed); optional **yt-dlp + Whisper** when captions are missing (`mdengine[audio]` and `yt-dlp` on `PATH`, or `MD_YOUTUBE_YTDLP`):
954
+
955
+ ```python
956
+ from md_generator.media.youtube import YouTubeToMarkdownService
957
+
958
+ svc = YouTubeToMarkdownService(whisper_model="base")
959
+ md = svc.to_markdown("https://www.youtube.com/watch?v=VIDEO_ID", transcript_languages=["en"])
960
+ svc.write_markdown("https://youtu.be/VIDEO_ID", Path("out/youtube.md"))
961
+ ```
962
+
963
+ For file-based pipelines, [`YouTubeConverter`](src/md_generator/media/youtube/converter.py) reads a `.url` / `.yturl` / `.youtube` file (or a `.txt` whose first non-comment line is a YouTube URL) and implements [`DocumentConverter`](src/md_generator/media/document_converter.py).
964
+
965
+ Public symbols are also re-exported from [`md_generator.media`](src/md_generator/media/__init__.py) for ffprobe helpers (`ffprobe_json`, `VideoProbeResult`, …).
966
+
967
+ ### REST API (FastAPI)
968
+
969
+ Each service exposes the same job pattern as other converters:
970
+
971
+ | Endpoint | Description |
972
+ |----------|-------------|
973
+ | `POST /convert/sync` | Multipart field **`file`**; returns **Markdown** body. Query: `whisper_model`, `language` (omit or `auto` for detection; pass a code to force), `title`. |
974
+ | `POST /convert/jobs` | Async upload; returns `{ "job_id", "status" }`. |
975
+ | `GET /convert/jobs/{job_id}` | Status JSON. |
976
+ | `GET /convert/jobs/{job_id}/download` | Markdown when `done`; workspace removed after download. |
977
+
978
+ **Audio** defaults: `MD_AUDIO_MAX_UPLOAD_MB=200`, `MD_AUDIO_MAX_SYNC_UPLOAD_MB=40`, `MD_AUDIO_API_PORT=8011`.
979
+ **Video** defaults: `MD_VIDEO_MAX_UPLOAD_MB=500`, `MD_VIDEO_MAX_SYNC_UPLOAD_MB=80`, `MD_VIDEO_API_PORT=8012`.
980
+ **YouTube** uses **JSON** (not multipart): `POST /convert/sync` and `POST /convert/jobs` accept `{"url":"https://www.youtube.com/watch?v=…","title":null,"transcript_languages":["en"],"enable_audio_fallback":true,"whisper_model":"base","language":null}`. Defaults: `MD_YOUTUBE_API_PORT=8013`, `MD_YOUTUBE_JOB_TTL_SECONDS`, `MD_YOUTUBE_CORS_ORIGINS`, `MD_YOUTUBE_TEMP_DIR`.
981
+
982
+ Run with the bundled runners (each call builds the app with **`factory=True`** for a clean MCP session manager):
983
+
984
+ ```bash
985
+ md-audio-api --host 127.0.0.1 --port 8011
986
+ md-video-api --host 127.0.0.1 --port 8012
987
+ md-youtube-api --host 127.0.0.1 --port 8013
988
+ ```
989
+
990
+ Or with Uvicorn directly (the ASGI app is built by **`create_app()`** so each worker gets its own MCP session manager):
991
+
992
+ ```bash
993
+ uvicorn md_generator.media.audio.api.main:create_app --factory --host 127.0.0.1 --port 8011
994
+ uvicorn md_generator.media.video.api.main:create_app --factory --host 127.0.0.1 --port 8012
995
+ uvicorn md_generator.media.youtube.api.main:create_app --factory --host 127.0.0.1 --port 8013
996
+ ```
997
+
998
+ The module also defines **`app = create_app()`** for a single-process target: `uvicorn md_generator.media.audio.api.main:app` (no `--factory`).
999
+
1000
+ Swagger is at **`/docs`** when the app is running.
1001
+
1002
+ ### MCP (stdio, SSE, streamable HTTP)
1003
+
1004
+ 1. **With FastAPI** — start `md-audio-api`, `md-video-api`, or `md-youtube-api`; mount Streamable HTTP MCP at **`http://<host>:<port>/mcp`** (same host as REST).
1005
+ 2. **Standalone** — process speaks MCP only:
1006
+
1007
+ ```bash
1008
+ md-audio-mcp --transport stdio
1009
+ md-audio-mcp --transport sse
1010
+ md-audio-mcp --transport streamable-http
1011
+ md-video-mcp --transport stdio
1012
+ md-youtube-mcp --transport stdio
1013
+ ```
1014
+
1015
+ **Audio MCP tools:** `transcribe_audio_path`, `transcribe_audio_base64`.
1016
+ **Video MCP tools:** `transcribe_video_path`, `transcribe_video_base64`.
1017
+ **YouTube MCP tool:** `youtube_url_to_markdown`.
1018
+
1019
+ Equivalent modules: `python -m md_generator.media.audio.api.mcp_server`, `python -m md_generator.media.video.api.mcp_server`, `python -m md_generator.media.youtube.api.mcp_server`.
1020
+
1021
+ ### Thin shims (repo clone)
1022
+
1023
+ [`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`. [`odata-to-md/converter.py`](odata-to-md/converter.py) delegates to `md-odata`; tests under [`odata-to-md/tests/`](odata-to-md/tests/); module README: [`odata-to-md/README.md`](odata-to-md/README.md). [`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).
1024
+
1025
+ ---
1026
+
1027
+ ## HTTP API (FastAPI)
1028
+
1029
+ All format APIs follow a similar pattern:
1030
+
1031
+ - **`POST /convert/sync`** — upload a file (most converters) **or** send JSON (`url-to-md`); response is often a **ZIP** (artifact bundle) for larger formats.
1032
+ - **`POST /convert/jobs`** — async job; returns `job_id`.
1033
+ - **`GET /convert/jobs/{job_id}`** — status.
1034
+ - **`GET /convert/jobs/{job_id}/download`** — download result when ready.
1035
+
1036
+ Upload field name is **`file`** (multipart form) for file-based converters. Use `httpx` or `curl -F "file=@path/to/file"`. **URL** conversion uses a **JSON** body (`url` or `urls`); see [url-to-md/README.md](url-to-md/README.md).
1037
+
1038
+ ### Run with Uvicorn
1039
+
1040
+ Install `mdengine[api]` plus the format extra(s), then run the **`app`** object from the table below.
1041
+
1042
+ | Service | Uvicorn target | Required extras (typical) |
1043
+ |---------|----------------|---------------------------|
1044
+ | PDF | `md_generator.pdf.api.main:app` | `pdf`, `api` |
1045
+ | Word | `md_generator.word.api.main:app` | `word`, `api`, `mcp` (Word mounts FastMCP) |
1046
+ | PPTX | `md_generator.ppt.api.main:app` | `ppt`, `api`, `mcp` |
1047
+ | XLSX | `md_generator.xlsx.api.app:app` | `xlsx`, `api` |
1048
+ | Image | `md_generator.image.api.main:app` | `image`, `api`, `mcp` |
1049
+ | Text/JSON/XML | `md_generator.text.api.main:app` | `text`, `api`, `mcp` |
1050
+ | ZIP | `md_generator.archive.api.main:app` | `archive`, `api`, `mcp` (+ extras for nested office/PDF) |
1051
+ | URL / HTML | `md_generator.url.api.main:app` | `url`, `api`, `mcp` |
1052
+ | Playwright / SPA | `md_generator.playwright.api.main:app` | `playwright`, `api`, `mcp` |
1053
+ | Database metadata | `md_generator.db.api.main:app` | `db`, `api`, `mcp` |
1054
+ | Graph metadata (Neo4j / NetworkX) | `md_generator.graph.api.main:app` | `graph`, `api`, `mcp` |
1055
+ | OpenAPI → Markdown | `md_generator.openapi.api.main:app` | `openapi`, `api`, `mcp` |
1056
+ | OData CSDL metadata | `md_generator.odata.api.main:app` | `odata`, `api`, `mcp` |
1057
+ | Audio (Whisper) | `md_generator.media.audio.api.main:create_app` (use **`--factory`**) or `…main:app` | `audio`, `api`, `mcp` |
1058
+ | Video (Whisper) | `md_generator.media.video.api.main:create_app` (use **`--factory`**) or `…main:app` | `video`, `api`, `mcp` |
1059
+ | YouTube | `md_generator.media.youtube.api.main:create_app` (use **`--factory`**) or `…main:app` | `youtube`, `api`, `mcp` |
1060
+ | Codeflow (workspace scans) | `md_generator.codeflow.api.main:app` | `codeflow`, `api`, `mcp` |
1061
+ | Log files → Markdown | `md_generator.log.api.main:app` | `log`, `api`, `mcp` |
1062
+ | SAP artifacts | `md_generator.sap.api.main:app` | `sap`, `api` |
1063
+
1064
+ 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):
1065
+
1066
+ ```bash
1067
+ uvicorn md_generator.pdf.api.main:app --host 127.0.0.1 --port 8001
1068
+ uvicorn md_generator.word.api.main:app --host 127.0.0.1 --port 8002
1069
+ uvicorn md_generator.archive.api.main:app --host 127.0.0.1 --port 8008
1070
+ uvicorn md_generator.url.api.main:app --host 127.0.0.1 --port 8017
1071
+ uvicorn md_generator.odata.api.main:app --host 127.0.0.1 --port 8019
1072
+ uvicorn md_generator.db.api.main:app --host 127.0.0.1 --port 8010
1073
+ uvicorn md_generator.playwright.api.main:app --host 127.0.0.1 --port 8014
1074
+ uvicorn md_generator.graph.api.main:app --host 127.0.0.1 --port 8020
1075
+ uvicorn md_generator.sap.api.main:app --host 127.0.0.1 --port 8021
1076
+ uvicorn md_generator.openapi.api.main:app --host 127.0.0.1 --port 8015
1077
+ uvicorn md_generator.codeflow.api.main:app --host 127.0.0.1 --port 8016
1078
+ uvicorn md_generator.log.api.main:app --host 127.0.0.1 --port 8018
1079
+ uvicorn md_generator.media.audio.api.main:create_app --factory --host 127.0.0.1 --port 8011
1080
+ uvicorn md_generator.media.video.api.main:create_app --factory --host 127.0.0.1 --port 8012
1081
+ uvicorn md_generator.media.youtube.api.main:create_app --factory --host 127.0.0.1 --port 8013
1082
+ ```
1083
+
1084
+ **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-odata-api`** defaults to **8017** (`ODATA_TO_MD_PORT`) — the URL Uvicorn example above also uses **8017** as an illustration; run only one service on that port or assign **`ODATA_TO_MD_PORT`** / a custom **`--port`** for the other. **`md-sap-api`** defaults to **8020** (`SAP_TO_MD_PORT`). **`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).
1085
+
1086
+ ### MCP over HTTP on the same server
1087
+
1088
+ These apps mount an MCP HTTP app at **`/mcp`** (Streamable HTTP / framework-specific). Start the API as above, then point an MCP client at `http://<host>:<port>/mcp` where supported.
1089
+
1090
+ ### Environment variables (limits & CORS)
1091
+
1092
+ Prefixes differ per service (often read from a `.env` file next to the process):
1093
+
1094
+ | Service | Prefix | Examples |
1095
+ |---------|--------|----------|
1096
+ | PDF | `PDF_TO_MD_` | `PDF_TO_MD_MAX_UPLOAD_MB`, `PDF_TO_MD_MAX_SYNC_UPLOAD_MB`, `PDF_TO_MD_TEMP_DIR`, `PDF_TO_MD_CORS_ORIGINS` |
1097
+ | Word | `WORD_TO_MD_` | `WORD_TO_MD_MAX_UPLOAD_MB`, `WORD_TO_MD_MAX_SYNC_UPLOAD_MB`, `WORD_TO_MD_JOB_TTL_SECONDS`, `WORD_TO_MD_TEMP_DIR`, `WORD_TO_MD_CORS_ORIGINS` |
1098
+ | ZIP | `ZIP_TO_MD_` | `ZIP_TO_MD_MAX_UPLOAD_MB`, `ZIP_TO_MD_MAX_SYNC_UPLOAD_MB`, `ZIP_TO_MD_JOB_TTL_SECONDS`, `ZIP_TO_MD_TEMP_DIR`, `ZIP_TO_MD_CORS_ORIGINS`, optional image post-pass defaults |
1099
+ | PPTX | `PPT_TO_MD_` | `PPT_TO_MD_MAX_UPLOAD_MB`, … |
1100
+ | Text | `TXT_JSON_XML_TO_MD_` | same pattern |
1101
+ | XLSX | `XLSX_TO_MD_` | `XLSX_TO_MD_TEMP_DIR`, `XLSX_TO_MD_CORS_ORIGINS`, etc. (see `md_generator.xlsx.api.app`) |
1102
+ | URL | `URL_TO_MD_` | `URL_TO_MD_MAX_SYNC_URLS`, `URL_TO_MD_MAX_SYNC_CRAWL_PAGES`, `URL_TO_MD_MAX_JOB_URLS`, `URL_TO_MD_JOB_TTL_SECONDS`, `URL_TO_MD_TEMP_DIR`, `URL_TO_MD_CORS_ORIGINS` |
1103
+ | Playwright / SPA | `PLAYWRIGHT_TO_MD_` | `PLAYWRIGHT_TO_MD_MAX_SYNC_URLS`, `PLAYWRIGHT_TO_MD_MAX_JOB_URLS`, `PLAYWRIGHT_TO_MD_JOB_TTL_SECONDS`, `PLAYWRIGHT_TO_MD_TEMP_DIR`, `PLAYWRIGHT_TO_MD_CORS_ORIGINS`, `PLAYWRIGHT_TO_MD_API_HOST`, `PLAYWRIGHT_TO_MD_API_PORT` (default **8014**) |
1104
+ | Database metadata | `DB_TO_MD_` | `DB_TO_MD_JOB_SQLITE_PATH`, `DB_TO_MD_JOB_WORKSPACE_ROOT`, `DB_TO_MD_CORS_ORIGINS`, `DB_TO_MD_MAX_SYNC_ZIP_MB`, `DB_TO_MD_HOST`, `DB_TO_MD_PORT` (default **8010**) |
1105
+ | Graph metadata | `GRAPH_TO_MD_` | `GRAPH_TO_MD_JOB_SQLITE_PATH`, `GRAPH_TO_MD_JOB_WORKSPACE_ROOT`, `GRAPH_TO_MD_CORS_ORIGINS`, `GRAPH_TO_MD_MAX_SYNC_ZIP_MB`, `GRAPH_TO_MD_HOST`, `GRAPH_TO_MD_PORT` (default **8012**) |
1106
+ | 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**) |
1107
+ | OData CSDL metadata | `ODATA_TO_MD_` | `ODATA_TO_MD_HOST`, `ODATA_TO_MD_PORT` (default **8017**), `ODATA_TO_MD_CORS_ORIGINS`, `ODATA_TO_MD_MAX_SYNC_ZIP_MB` |
1108
+ | 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` |
1109
+ | 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 |
1110
+ | 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` |
1111
+ | 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` |
1112
+ | Video API | `MD_VIDEO_` | Same pattern as audio with `MD_VIDEO_*` (defaults: larger upload/sync caps, port **8012**) |
1113
+ | 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 |
1114
+
1115
+ Exact variable names match the `ApiSettings` / helper functions in each `api/settings` or `api/app` module.
1116
+
1117
+ ---
1118
+
1119
+ ## MCP (Model Context Protocol)
1120
+
1121
+ Two usage patterns:
1122
+
1123
+ 1. **Bundled with FastAPI** — run Uvicorn as in the previous section; use path **`/mcp`** on the same host/port.
1124
+ 2. **Standalone process** — run a small `__main__` module (stdio, SSE, or streamable-http) for use with Cursor, Claude Desktop, or other MCP hosts.
1125
+
1126
+ ### Standalone MCP processes
1127
+
1128
+ | Converter | Command (examples) |
1129
+ |-----------|---------------------|
1130
+ | ZIP | `python -m md_generator.archive.api.mcp_server` / `--transport sse` / `--transport streamable-http` |
1131
+ | Text/JSON/XML | `python -m md_generator.text.api.mcp_server` |
1132
+ | Word (FastMCP) | `python -m md_generator.word.api.mcp_server` / `--transport stdio` (default) or `streamable-http`, plus `--host` / `--port` when needed |
1133
+ | PDF (FastMCP) | `python -m md_generator.pdf.api.mcp_server` / `--transport stdio` / `sse` / `streamable-http` |
1134
+ | PPTX | `python -m md_generator.ppt.api.mcp_server` (see module docstring for flags) |
1135
+ | Image | `python -m md_generator.image.api.mcp_server` (see module for CLI) |
1136
+ | URL / HTML | `python -m md_generator.url.api.mcp_server` / `--transport sse` / `--transport streamable-http` |
1137
+ | Playwright / SPA | `md-playwright`, `md-playwright-api`, `md-playwright-mcp`, or `python -m md_generator.playwright.api.mcp_server` / `--transport sse` / `--transport streamable-http` |
1138
+ | Audio | `md-audio-mcp` or `python -m md_generator.media.audio.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
1139
+ | Video | `md-video-mcp` or `python -m md_generator.media.video.api.mcp_server` — same transports |
1140
+ | YouTube | `md-youtube-mcp` or `python -m md_generator.media.youtube.api.mcp_server` — same transports |
1141
+ | Database metadata | `md-db-mcp` or `python -m md_generator.db.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
1142
+ | Graph (Neo4j / NetworkX) | `md-graph-mcp` or `python -m md_generator.graph.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
1143
+ | OpenAPI → Markdown | `md-openapi-mcp` or `python -m md_generator.openapi.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
1144
+ | OData CSDL metadata | `md-odata-mcp` or `python -m md_generator.odata.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
1145
+ | Codeflow | `md-codeflow-mcp` or `python -m md_generator.codeflow.api.mcp_server` — **stdio** MCP (see module for details) |
1146
+ | Log files | `md-log-mcp` or `python -m md_generator.log.api.mcp_server` — `--transport stdio` (default), `sse`, `streamable-http` |
1147
+ | SAP | `md-sap-mcp` or `md-sap-api` — FastAPI app (same as HTTP API; dedicated MCP tools when mounted in app) |
1148
+
1149
+ **Word** and **XLSX** also ship a small runner script in the repo:
1150
+
1151
+ ```bash
1152
+ python word-to-md/run.py api --host 127.0.0.1 --port 8002
1153
+ python word-to-md/run.py mcp --transport stdio
1154
+
1155
+ python xlsx-to-md/run.py api --port 8003
1156
+ python xlsx-to-md/run.py mcp --transport stdio
1157
+ ```
1158
+
1159
+ The XLSX MCP server is built in code (`build_mcp_server()` in `md_generator.xlsx.mcp_server`) and is mounted on the XLSX FastAPI app when MCP dependencies are installed.
1160
+
1161
+ Install **`mdengine[mcp]`** (and usually **`[api]`** when using HTTP) for MCP-related imports to resolve.
1162
+
1163
+ ---
1164
+
1165
+ ## AI assistant CLI
1166
+
1167
+ The repo ships **distributable AI skills** under [`ai/`](ai/) (Markdown skills, [`ai/registry.json`](ai/registry.json), routing, and [`ai/dependency-graph.json`](ai/dependency-graph.json)). A small SDK in [`src/md_generator/tools/assistant/`](src/md_generator/tools/assistant/) assembles **grounded context** from a natural-language query for Cursor, Claude, OpenAI-style hosts, or your own LLM pipeline.
1168
+
1169
+ **Further detail:** [ai/README.md](ai/README.md) (layout, registry schema, master agent).
1170
+
1171
+ **PyPI installs:** `mdengine ai assist` and `mdengine ai export` read the **bundled** skill data shipped with **`md_generator.tools.assistant`** unless **`MDENGINE_SKILL_AI_ROOT`** points at another directory (for example the repo’s [`ai/`](ai/) while developing). You do **not** need **`mdengine skill build`** unless you maintain this repository and want to regenerate that bundle.
1172
+
1173
+ Script index (all `project.scripts`): [`ai/skills/mdengine-reference/references/entrypoints.md`](ai/skills/mdengine-reference/references/entrypoints.md).
1174
+
1175
+ ### Regenerate skills, graph, and bundled data
1176
+
1177
+ **Maintainers / repo clones.** From the **repository root**, refresh generated files under [`ai/`](ai/) and copy the bundle into **`src/md_generator/tools/assistant/data/`** for packaging:
1178
+
1179
+ ```bash
1180
+ # Windows PowerShell
1181
+ $env:PYTHONPATH = "src"
1182
+ python -m md_generator.tools.skill_builder
1183
+ ```
1184
+
1185
+ ```bash
1186
+ # macOS / Linux
1187
+ PYTHONPATH=src python -m md_generator.tools.skill_builder
1188
+ ```
1189
+
1190
+ After `pip install -e .`, you can run **`mdengine skill build`** from the repo root without setting `PYTHONPATH` (same as `python -m md_generator.tools.skill_builder` when `PYTHONPATH=src`).
1191
+
1192
+ - Refreshes `ai/skills/**/SKILL.md`, `ai/skills/global-skill.md`, `ai/skills/modules/*.md`, `ai/registry.json` (routing), and `ai/dependency-graph.json`.
1193
+ - Copies the same bundle into **`src/md_generator/tools/assistant/data/`** for the installed wheel.
1194
+
1195
+ **Incremental** (only area skills touched under `src/md_generator/` since a git ref; global/graph/registry still refresh):
1196
+
1197
+ ```bash
1198
+ mdengine skill build --since HEAD~1
1199
+ ```
1200
+
1201
+ ```bash
1202
+ PYTHONPATH=src python -m md_generator.tools.skill_builder --since HEAD~1
1203
+ ```
1204
+
1205
+ **Custom repo root** (CI or non-default cwd):
1206
+
1207
+ ```bash
1208
+ mdengine skill build --root /path/to/md-generator
1209
+ ```
1210
+
1211
+ ### Use the live `ai/` tree from a clone (optional)
1212
+
1213
+ When developing skills, point the SDK at the repo’s `ai/` directory instead of the copy under `src/md_generator/tools/assistant/data/`:
1214
+
1215
+ ```powershell
1216
+ # PowerShell
1217
+ $env:MDENGINE_SKILL_AI_ROOT = (Resolve-Path ".\ai").Path
1218
+ ```
1219
+
1220
+ ```bash
1221
+ export MDENGINE_SKILL_AI_ROOT="$(pwd)/ai"
1222
+ ```
1223
+
1224
+ ### Console: `mdengine ai assist` and `mdengine ai export`
1225
+
1226
+ After `pip install mdengine` (or `pip install -e .` from a clone), use the **`mdengine`** entry point (no separate AI script is installed).
1227
+
1228
+ - **`mdengine ai assist`** — prints a single **Markdown** context (selected skills + global architecture) to **stdout**, meant to paste into an LLM or pipe to a file.
1229
+ - **`mdengine ai export`** — prints **host-shaped** output to stdout, or writes with **`-o` / `--output`**: OpenAI **`messages`** JSON (`--format openai`), a Claude-style project prompt (`claude`), or Cursor-style rules Markdown (`cursor`).
1230
+
1231
+ **Flags (both subcommands):** **`--rag`** — use optional Chroma RAG when **`mdengine[skill-rag-chroma]`** is installed (falls back to full skills if Chroma is unavailable). **`--ai-root PATH`** — same effect as **`MDENGINE_SKILL_AI_ROOT`** for that run only.
1232
+
1233
+ **Discover flags:** `mdengine ai assist --help` · `mdengine ai export --help`
1234
+
1235
+ **`ai export` arguments:** **`--format`** `openai` \| `claude` \| `cursor` (required) · **`--query`** `…` (required) · **`-o` / `--output`** `file` (optional; default stdout).
1236
+
1237
+ ```bash
1238
+ mdengine ai assist "How do I run md-pdf on a file?"
1239
+ mdengine ai assist "openapi mcp" --rag
1240
+ mdengine ai export --format openai --query "md-db ERD" -o bundle.json
1241
+ mdengine ai export --format claude --query "playwright"
1242
+ mdengine ai export --format cursor --query "xlsx excel"
1243
+ ```
1244
+
1245
+ One-off override without env var: `mdengine ai assist "…" --ai-root /path/to/ai`.
1246
+
1247
+ ### Python API
1248
+
1249
+ ```python
1250
+ from md_generator.tools.assistant import MasterAgent, Registry
1251
+
1252
+ reg = Registry.load_default()
1253
+ agent = MasterAgent(reg)
1254
+ result = agent.ask("openapi mcp", use_rag=False)
1255
+ print(result.resolved_skill_ids)
1256
+ print(result.context_markdown[:2000])
1257
+ ```
1258
+
1259
+ Optional RAG: install **`mdengine[skill-rag-chroma]`**, then `agent.ask(..., use_rag=True)` (falls back to full skills if Chroma is unavailable). The same optional stack is used by **`mdengine ai assist --rag`** and **`mdengine ai export … --rag`**.
1260
+
1261
+ ### Tests (skill SDK)
1262
+
1263
+ ```bash
1264
+ PYTHONPATH=src python -m pytest tool-assistant/tests -q
1265
+ ```
1266
+
1267
+ ---
1268
+
1269
+ ## Development
1270
+
1271
+ ```bash
1272
+ pip install -e ".[dev,all]" # or a smaller subset of extras
1273
+ python -m pytest
1274
+ ```
1275
+
1276
+ 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/`**, **`odata-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.
1277
+
1278
+ **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://mdengine.github.io/md-generator/)).
1279
+
1280
+ ### Codeflow (`md_generator.codeflow`)
1281
+
1282
+ Static call graphs and per-entry Markdown/Mermaid/JSON for **Python**, **Java** (Spring REST, Kafka listeners, **Liferay / JSR-286 portlets**), and other parsers. Output is **static only** (`graph-full.json` can include unresolved `unknown::*` callees).
1283
+
1284
+ More detail: **[`codeflow-to-md/docs/graph-and-outputs.md`](codeflow-to-md/docs/graph-and-outputs.md)** (node/edge model, `graph-schema.json`, `methods/` layout).
1285
+
1286
+ - **Formats:** pass **`--formats md,mermaid,json,html`** (comma-separated). **`--output`** is the **output directory**, not the format list.
1287
+ - **Graph schema export:** optional **`--emit-graph-schema`** (with `json` in formats) writes **`graph-schema.json`** — stable Node/Edge view with derived File/Class nodes and `CONTAINS` edges. **`graph-full.json`** stays unchanged for existing consumers.
1288
+ - **Markdown intelligence:** flow and entry Markdown include **Called By** and **Impact** lists (capped with **`--intelligence-list-cap`**, default 80).
1289
+ - **IR / CFG (optional):** **`--emit-cfg`** builds a language-agnostic IR and writes **`cfg.json`**, **`cfg.mmd`**, and appends a CFG Mermaid block to **`flow.md`** (when `md` is in formats). Cap with **`--cfg-max-nodes`** (default 500).
1290
+ - **Entries:** use `--entry` (comma-separated symbol ids), **`--entries-file`** (one id per line, `#` comments allowed), or rely on detectors. **`--emit-entry-per-method`** emits one output directory per method/entry symbol under **`methods/<slug>/`**; cap volume with **`--emit-entry-max`** (default cap **10000** when the flag is set and max is omitted). **`--entry-fallback`** `none` \| `roots` \| `first_n` controls behavior when nothing is detected (default **`roots`**, in-degree 0 symbols, limited by **`--entry-fallback-max`**).
1291
+ - **Java flow:** edges can record **branch context** from enclosing `if`, `switch`, or ternary expressions (`condition` / `labels` on edges). **Business rules** Markdown picks up validation-style **`@NotNull`** / **`@Size`** / **`@Valid`** (name heuristics) and throws such as **`IllegalArgumentException`**.
1292
+ - **JavaScript / TypeScript / TSX:** Tree-sitter adds **`condition_label`** from enclosing control flow, **`fr.branches`** for `if` / `switch`, and **`fr.rules`** for **`throw`** and common **`assert` / `console.assert`** calls (slice-scoped in the collector).
1293
+ - **C++ (tree-sitter path):** **`condition_label`** on calls, **`fr.branches`** for `if` / `switch`, plus **`rules/cpp_rules.py`** for **`throw`** / **`assert`** when methods appear in the slice. (Clang-only parses still get throw/assert via the same extractor when tree-sitter is installed.)
1294
+ - **Go:** the **`codeflow_go_dump`** helper emits **`condition`** on calls inside `if` / `switch` / `for` / `range`, and **`rules`** for **`panic`** / **`log.Fatal` / `Fatalf`**; **`fr.rules`** are merged slice-scoped.
1295
+ - **PHP:** the **`codeflow_php_dump`** helper adds **`condition`** on calls (from enclosing **`if` / `case`**), **`rules`** for **`throw`**, and **`branches`** for documentation. Install PHP + Composer deps under `codeflow-to-md/examples/codeflow_php_dump` (or mirror under `tools/codeflow_php_dump`) for PHP scans.
1296
+ - **Kinds / filters:** `--include` accepts aliases such as **`portlet`** / **`liferay`** for portlet entries.
1297
+ - **Operators:** each run writes **`scan-summary.md`** at the output root (counts, warnings, fallback mode) unless **`--no-scan-summary`** is set.
1298
+
1299
+ ```bash
1300
+ python -m md_generator.codeflow.cli.main scan path/to/src --output ./codeflow-out --lang java
1301
+ ```
1302
+
1303
+ ---
1304
+
1305
+ ## Repository layout
1306
+
1307
+ | Path | Role |
1308
+ |------|------|
1309
+ | `LICENSE` | MIT license text |
1310
+ | `docs/` | **MkDocs** source (module guides, `index.md`); build with **`mdengine[docs]`** |
1311
+ | `mkdocs.yml` | MkDocs configuration |
1312
+ | `CODE_OF_CONDUCT.md` | [Contributor Covenant](https://www.contributor-covenant.org/) 2.1 |
1313
+ | `src/md_generator/` | **Library source** (all formats + `api` subpackages); **audio/video** [`media/`](src/md_generator/media/); **logs** [`log/`](src/md_generator/log/), **OTEL** [`otel/`](src/md_generator/otel/), **OData** [`odata/`](src/md_generator/odata/), **SAP** [`sap/`](src/md_generator/sap/), **graphs** [`graph/`](src/md_generator/graph/) |
1314
+ | `pyproject.toml` | Packaging, extras, CLI entry points, pytest |
1315
+ | `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 .`) |
1316
+ | `src/md_generator/tools/skill_builder/` | **Skill generator** — scans `src/md_generator` and `pyproject.toml` |
1317
+ | `src/md_generator/tools/assistant/` | **Skill SDK** (`md_generator.tools.assistant`): `MasterAgent`, `Registry`, bundled `data/` copy of `ai/` |
1318
+ | `tool-assistant/tests/` | **Pytests** for the assistant SDK (`md_generator.tools.assistant`) |
1319
+ | `*-to-md/` | **Docs, tests, fixtures**, thin `converter.py` shims, some `run.py` helpers; SAP deep docs under [`sap-to-md/docs/`](sap-to-md/docs/) |
1320
+ | `README.md` | This document |
1321
+
1322
+ For deeper behavior per format, see the original README files under each `*-to-md/` folder where they still exist.
1323
+
1324
+ ---
1325
+
1326
+ ## Legal
1327
+
1328
+ This project is released under the [MIT License](LICENSE). A copy of the license text is included in the repository root.