mdengine 0.8.1__tar.gz → 0.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (550) hide show
  1. {mdengine-0.8.1 → mdengine-0.9.0}/PKG-INFO +21 -5
  2. {mdengine-0.8.1 → mdengine-0.9.0}/README.md +4 -4
  3. {mdengine-0.8.1 → mdengine-0.9.0}/pyproject.toml +25 -2
  4. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/__init__.py +1 -1
  5. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/api/job_manager.py +5 -0
  6. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/api/schemas.py +162 -0
  7. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/cli/main.py +191 -1
  8. mdengine-0.9.0/src/md_generator/codeflow/core/cache_manager.py +110 -0
  9. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/core/extractor.py +433 -76
  10. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/core/run_config.py +41 -0
  11. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/cytoscape_enrich.py +22 -1
  12. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/entry_markdown.py +222 -16
  13. mdengine-0.9.0/src/md_generator/codeflow/generators/html_unified.py +487 -0
  14. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/markdown.py +24 -5
  15. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/analysis.py +32 -9
  16. mdengine-0.9.0/src/md_generator/codeflow/graph/anomaly.py +109 -0
  17. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/builder.py +4 -0
  18. mdengine-0.9.0/src/md_generator/codeflow/graph/cluster_labeling.py +271 -0
  19. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/clustering.py +3 -1
  20. mdengine-0.9.0/src/md_generator/codeflow/graph/cross_repo_resolver.py +200 -0
  21. mdengine-0.9.0/src/md_generator/codeflow/graph/dependency_builder.py +166 -0
  22. mdengine-0.9.0/src/md_generator/codeflow/graph/diff_analysis.py +149 -0
  23. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/embeddings.py +24 -1
  24. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/enricher.py +26 -8
  25. mdengine-0.9.0/src/md_generator/codeflow/graph/hotpath.py +94 -0
  26. mdengine-0.9.0/src/md_generator/codeflow/graph/maven_hints.py +37 -0
  27. mdengine-0.9.0/src/md_generator/codeflow/graph/multi_repo.py +157 -0
  28. mdengine-0.9.0/src/md_generator/codeflow/graph/nl_query.py +267 -0
  29. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/relations.py +3 -0
  30. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/runtime_integration.py +10 -1
  31. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/semantic_enricher.py +17 -0
  32. mdengine-0.9.0/src/md_generator/codeflow/graph/sqlite_export.py +183 -0
  33. mdengine-0.9.0/src/md_generator/codeflow/graph/tsconfig_cross_repo.py +127 -0
  34. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/ingestion/git_loader.py +77 -0
  35. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/cpp_parser.py +14 -0
  36. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/python_parser.py +53 -1
  37. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +67 -0
  38. mdengine-0.9.0/src/md_generator/codeflow/parsers/unified_parser.py +31 -0
  39. mdengine-0.9.0/src/md_generator/codeflow/runtime/python_edge_counter.py +44 -0
  40. mdengine-0.9.0/src/md_generator/codeflow/runtime/trace_runner.py +110 -0
  41. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/engine_cli.py +6 -2
  42. mdengine-0.9.0/src/md_generator/log/__init__.py +6 -0
  43. mdengine-0.9.0/src/md_generator/log/aggregation/__init__.py +1 -0
  44. mdengine-0.9.0/src/md_generator/log/aggregation/aggregators.py +20 -0
  45. mdengine-0.9.0/src/md_generator/log/aggregation/dataframe_builder.py +39 -0
  46. mdengine-0.9.0/src/md_generator/log/aggregation/metrics.py +34 -0
  47. mdengine-0.9.0/src/md_generator/log/aggregation/timeline.py +15 -0
  48. mdengine-0.9.0/src/md_generator/log/api/__init__.py +1 -0
  49. mdengine-0.9.0/src/md_generator/log/api/main.py +257 -0
  50. mdengine-0.9.0/src/md_generator/log/api/mcp_server.py +29 -0
  51. mdengine-0.9.0/src/md_generator/log/api/run.py +15 -0
  52. mdengine-0.9.0/src/md_generator/log/api/schemas.py +141 -0
  53. mdengine-0.9.0/src/md_generator/log/api/settings.py +32 -0
  54. mdengine-0.9.0/src/md_generator/log/cli/__init__.py +1 -0
  55. mdengine-0.9.0/src/md_generator/log/cli/main.py +69 -0
  56. mdengine-0.9.0/src/md_generator/log/clustering/__init__.py +1 -0
  57. mdengine-0.9.0/src/md_generator/log/clustering/embeddings.py +3 -0
  58. mdengine-0.9.0/src/md_generator/log/clustering/kmeans_cluster.py +12 -0
  59. mdengine-0.9.0/src/md_generator/log/clustering/semantic_grouping.py +7 -0
  60. mdengine-0.9.0/src/md_generator/log/clustering/vectorizer.py +13 -0
  61. mdengine-0.9.0/src/md_generator/log/config/__init__.py +1 -0
  62. mdengine-0.9.0/src/md_generator/log/config/default.yaml +48 -0
  63. mdengine-0.9.0/src/md_generator/log/config/presets/__init__.py +1 -0
  64. mdengine-0.9.0/src/md_generator/log/config/presets/generic.yaml +3 -0
  65. mdengine-0.9.0/src/md_generator/log/config/presets/springboot.yaml +3 -0
  66. mdengine-0.9.0/src/md_generator/log/config/schemas.py +117 -0
  67. mdengine-0.9.0/src/md_generator/log/core/__init__.py +1 -0
  68. mdengine-0.9.0/src/md_generator/log/core/errors.py +25 -0
  69. mdengine-0.9.0/src/md_generator/log/core/execution_context.py +10 -0
  70. mdengine-0.9.0/src/md_generator/log/core/extractor.py +20 -0
  71. mdengine-0.9.0/src/md_generator/log/core/job_manager.py +274 -0
  72. mdengine-0.9.0/src/md_generator/log/core/lifecycle.py +15 -0
  73. mdengine-0.9.0/src/md_generator/log/core/pipeline.py +180 -0
  74. mdengine-0.9.0/src/md_generator/log/core/plugins.py +34 -0
  75. mdengine-0.9.0/src/md_generator/log/core/run_config.py +160 -0
  76. mdengine-0.9.0/src/md_generator/log/core/zip_export.py +31 -0
  77. mdengine-0.9.0/src/md_generator/log/enrichment/__init__.py +1 -0
  78. mdengine-0.9.0/src/md_generator/log/enrichment/correlation.py +7 -0
  79. mdengine-0.9.0/src/md_generator/log/enrichment/fingerprinting.py +11 -0
  80. mdengine-0.9.0/src/md_generator/log/enrichment/hash_generator.py +8 -0
  81. mdengine-0.9.0/src/md_generator/log/enrichment/pattern_matcher.py +24 -0
  82. mdengine-0.9.0/src/md_generator/log/enrichment/severity_ranker.py +14 -0
  83. mdengine-0.9.0/src/md_generator/log/ingestion/__init__.py +1 -0
  84. mdengine-0.9.0/src/md_generator/log/ingestion/archive_loader.py +25 -0
  85. mdengine-0.9.0/src/md_generator/log/ingestion/encoding_detector.py +15 -0
  86. mdengine-0.9.0/src/md_generator/log/ingestion/file_loader.py +23 -0
  87. mdengine-0.9.0/src/md_generator/log/ingestion/stream_reader.py +36 -0
  88. mdengine-0.9.0/src/md_generator/log/mcp/__init__.py +1 -0
  89. mdengine-0.9.0/src/md_generator/log/mcp/server.py +52 -0
  90. mdengine-0.9.0/src/md_generator/log/mcp/sse.py +8 -0
  91. mdengine-0.9.0/src/md_generator/log/normalization/__init__.py +1 -0
  92. mdengine-0.9.0/src/md_generator/log/normalization/number_normalizer.py +9 -0
  93. mdengine-0.9.0/src/md_generator/log/normalization/path_normalizer.py +12 -0
  94. mdengine-0.9.0/src/md_generator/log/normalization/pii_redactor.py +16 -0
  95. mdengine-0.9.0/src/md_generator/log/normalization/token_normalizer.py +44 -0
  96. mdengine-0.9.0/src/md_generator/log/normalization/uuid_normalizer.py +11 -0
  97. mdengine-0.9.0/src/md_generator/log/parser/__init__.py +3 -0
  98. mdengine-0.9.0/src/md_generator/log/parser/level_detector.py +25 -0
  99. mdengine-0.9.0/src/md_generator/log/parser/logger_detector.py +10 -0
  100. mdengine-0.9.0/src/md_generator/log/parser/models.py +49 -0
  101. mdengine-0.9.0/src/md_generator/log/parser/multiline_parser.py +161 -0
  102. mdengine-0.9.0/src/md_generator/log/parser/parser_registry.py +27 -0
  103. mdengine-0.9.0/src/md_generator/log/parser/regex_parser.py +28 -0
  104. mdengine-0.9.0/src/md_generator/log/parser/stacktrace_parser.py +29 -0
  105. mdengine-0.9.0/src/md_generator/log/parser/timestamp_parser.py +9 -0
  106. mdengine-0.9.0/src/md_generator/log/service/__init__.py +1 -0
  107. mdengine-0.9.0/src/md_generator/log/service/service.py +18 -0
  108. mdengine-0.9.0/src/md_generator/log/utils/__init__.py +1 -0
  109. mdengine-0.9.0/src/md_generator/log/utils/concurrency.py +23 -0
  110. mdengine-0.9.0/src/md_generator/log/utils/io.py +12 -0
  111. mdengine-0.9.0/src/md_generator/log/utils/regex.py +9 -0
  112. mdengine-0.9.0/src/md_generator/log/utils/time.py +18 -0
  113. mdengine-0.9.0/src/md_generator/log/writers/__init__.py +1 -0
  114. mdengine-0.9.0/src/md_generator/log/writers/assets_writer.py +11 -0
  115. mdengine-0.9.0/src/md_generator/log/writers/chunk_writer.py +48 -0
  116. mdengine-0.9.0/src/md_generator/log/writers/cluster_markdown.py +17 -0
  117. mdengine-0.9.0/src/md_generator/log/writers/incident_writer.py +42 -0
  118. mdengine-0.9.0/src/md_generator/log/writers/markdown_writer.py +84 -0
  119. mdengine-0.9.0/src/md_generator/log/writers/summary_writer.py +46 -0
  120. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/api/main.py +9 -0
  121. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/api/mcp_setup.py +10 -4
  122. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/api/query_options.py +5 -1
  123. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/convert_impl.py +41 -17
  124. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/converter.py +15 -0
  125. mdengine-0.9.0/src/md_generator/text/md_flatten.py +167 -0
  126. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/options.py +4 -0
  127. mdengine-0.9.0/src/md_generator/text/xml_parse.py +31 -0
  128. {mdengine-0.8.1 → mdengine-0.9.0}/src/mdengine.egg-info/PKG-INFO +21 -5
  129. {mdengine-0.8.1 → mdengine-0.9.0}/src/mdengine.egg-info/SOURCES.txt +94 -0
  130. {mdengine-0.8.1 → mdengine-0.9.0}/src/mdengine.egg-info/entry_points.txt +3 -0
  131. {mdengine-0.8.1 → mdengine-0.9.0}/src/mdengine.egg-info/requires.txt +20 -0
  132. mdengine-0.8.1/src/md_generator/codeflow/generators/html_unified.py +0 -285
  133. mdengine-0.8.1/src/md_generator/codeflow/graph/sqlite_export.py +0 -56
  134. {mdengine-0.8.1 → mdengine-0.9.0}/LICENSE +0 -0
  135. {mdengine-0.8.1 → mdengine-0.9.0}/setup.cfg +0 -0
  136. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/__init__.py +0 -0
  137. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/api/__init__.py +0 -0
  138. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/api/convert_runner.py +0 -0
  139. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/api/jobs.py +0 -0
  140. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/api/main.py +0 -0
  141. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/api/mcp_server.py +0 -0
  142. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/api/mcp_setup.py +0 -0
  143. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/api/query_options.py +0 -0
  144. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/api/settings.py +0 -0
  145. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/convert_impl.py +0 -0
  146. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/converter.py +0 -0
  147. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/archive/options.py +0 -0
  148. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/__init__.py +0 -0
  149. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/analyzers/__init__.py +0 -0
  150. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/analyzers/flow_analyzer.py +0 -0
  151. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/api/__init__.py +0 -0
  152. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/api/main.py +0 -0
  153. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/api/mcp_server.py +0 -0
  154. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/api/run.py +0 -0
  155. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/api/semantic_api.py +0 -0
  156. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/api/settings.py +0 -0
  157. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/api/sse.py +0 -0
  158. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/cli/__init__.py +0 -0
  159. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/config/__init__.py +0 -0
  160. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/config/codeflow_yaml.py +0 -0
  161. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/core/__init__.py +0 -0
  162. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/__init__.py +0 -0
  163. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/api_detector.py +0 -0
  164. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/entry_detector.py +0 -0
  165. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/entry_rank.py +0 -0
  166. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/event_detector.py +0 -0
  167. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/kafka_detector.py +0 -0
  168. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/liferay_portlet_detector.py +0 -0
  169. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/__init__.py +0 -0
  170. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/business_rules_markdown.py +0 -0
  171. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/cfg_paths_markdown.py +0 -0
  172. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/cfg_paths_mermaid.py +0 -0
  173. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/cfg_render.py +0 -0
  174. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/flow_summary.py +0 -0
  175. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/flow_tree.py +0 -0
  176. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/html.py +0 -0
  177. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/mermaid.py +0 -0
  178. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/generators/sequence.py +0 -0
  179. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/__init__.py +0 -0
  180. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/call_expander.py +0 -0
  181. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/cfg_builder.py +0 -0
  182. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/cfg_copy.py +0 -0
  183. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/cfg_model.py +0 -0
  184. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/event_graph.py +0 -0
  185. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/export_schema.py +0 -0
  186. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/multigraph_utils.py +0 -0
  187. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/path_enumerator.py +0 -0
  188. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/path_probability.py +0 -0
  189. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/query_engine.py +0 -0
  190. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/graph/semantic_index.py +0 -0
  191. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/ingestion/__init__.py +0 -0
  192. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/ingestion/loader.py +0 -0
  193. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/lang_dispatch.py +0 -0
  194. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/mcp/__init__.py +0 -0
  195. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/mcp/server.py +0 -0
  196. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/models/__init__.py +0 -0
  197. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/models/ir.py +0 -0
  198. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/models/ir_cfg.py +0 -0
  199. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/__init__.py +0 -0
  200. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/adapters/__init__.py +0 -0
  201. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/adapters/cpp_adapter.py +0 -0
  202. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/adapters/go_adapter.py +0 -0
  203. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/adapters/ir_from_dump.py +0 -0
  204. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/adapters/java_adapter.py +0 -0
  205. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/adapters/php_adapter.py +0 -0
  206. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/adapters/python_adapter.py +0 -0
  207. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/adapters/treesitter_adapter.py +0 -0
  208. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/base.py +0 -0
  209. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/go_parser.py +0 -0
  210. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/ir_enrich.py +0 -0
  211. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/java_parser.py +0 -0
  212. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/php_parser.py +0 -0
  213. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/rules/__init__.py +0 -0
  214. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/rules/collector.py +0 -0
  215. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/rules/cpp_rules.py +0 -0
  216. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/rules/java_rules.py +0 -0
  217. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/runtime/__init__.py +0 -0
  218. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/runtime/tracer.py +0 -0
  219. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/utils/__init__.py +0 -0
  220. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/utils/tools_root.py +0 -0
  221. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/worker/__init__.py +0 -0
  222. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/codeflow/worker/celery_optional.py +0 -0
  223. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/__init__.py +0 -0
  224. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/adapters/__init__.py +0 -0
  225. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/adapters/factory.py +0 -0
  226. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
  227. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
  228. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
  229. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
  230. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/adapters/sql_common.py +0 -0
  231. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
  232. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/api/__init__.py +0 -0
  233. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/api/main.py +0 -0
  234. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/api/mcp_server.py +0 -0
  235. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/api/run.py +0 -0
  236. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/api/schemas.py +0 -0
  237. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/api/settings.py +0 -0
  238. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/api/sqlite_upload.py +0 -0
  239. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/cli/__init__.py +0 -0
  240. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/cli/main.py +0 -0
  241. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/config/__init__.py +0 -0
  242. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/config/default.yaml +0 -0
  243. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/__init__.py +0 -0
  244. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/base_adapter.py +0 -0
  245. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/erd/__init__.py +0 -0
  246. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
  247. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/erd/filter.py +0 -0
  248. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
  249. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
  250. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/erd/model.py +0 -0
  251. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/erd/pipeline.py +0 -0
  252. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/erd/render.py +0 -0
  253. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/extractor.py +0 -0
  254. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/job_manager.py +0 -0
  255. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/markdown_writer.py +0 -0
  256. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/models.py +0 -0
  257. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/run_config.py +0 -0
  258. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/util.py +0 -0
  259. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/core/zip_export.py +0 -0
  260. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/mcp/__init__.py +0 -0
  261. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/mcp/server.py +0 -0
  262. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/mcp/sse.py +0 -0
  263. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/db/mcp/stream.py +0 -0
  264. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/__init__.py +0 -0
  265. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/adapters/__init__.py +0 -0
  266. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/adapters/factory.py +0 -0
  267. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
  268. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
  269. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/api/__init__.py +0 -0
  270. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/api/main.py +0 -0
  271. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/api/mcp_server.py +0 -0
  272. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/api/run.py +0 -0
  273. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/api/schemas.py +0 -0
  274. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/api/settings.py +0 -0
  275. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/cli/__init__.py +0 -0
  276. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/cli/main.py +0 -0
  277. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/config/__init__.py +0 -0
  278. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/config/default.yaml +0 -0
  279. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/__init__.py +0 -0
  280. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/base_adapter.py +0 -0
  281. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/extractor.py +0 -0
  282. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/graph_builder.py +0 -0
  283. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/job_manager.py +0 -0
  284. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/markdown_writer.py +0 -0
  285. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/models.py +0 -0
  286. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/run_config.py +0 -0
  287. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/viz.py +0 -0
  288. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/core/zip_export.py +0 -0
  289. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/mcp/__init__.py +0 -0
  290. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/mcp/server.py +0 -0
  291. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/mcp/sse.py +0 -0
  292. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/graph/mcp/stream.py +0 -0
  293. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/__init__.py +0 -0
  294. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/api/__init__.py +0 -0
  295. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/api/main.py +0 -0
  296. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/api/mcp_server.py +0 -0
  297. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/api/query_options.py +0 -0
  298. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/api/settings.py +0 -0
  299. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/api/staging.py +0 -0
  300. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/api/zip_bundle.py +0 -0
  301. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/backends/__init__.py +0 -0
  302. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/backends/base.py +0 -0
  303. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/backends/easy.py +0 -0
  304. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/backends/paddle.py +0 -0
  305. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/backends/tesseract.py +0 -0
  306. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/convert_impl.py +0 -0
  307. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/converter.py +0 -0
  308. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/emit.py +0 -0
  309. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/io_util.py +0 -0
  310. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/image/utils.py +0 -0
  311. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/__init__.py +0 -0
  312. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/__init__.py +0 -0
  313. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/api/__init__.py +0 -0
  314. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/api/main.py +0 -0
  315. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/api/mcp_server.py +0 -0
  316. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/api/mcp_setup.py +0 -0
  317. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/api/run.py +0 -0
  318. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/api/settings.py +0 -0
  319. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/converter.py +0 -0
  320. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/formatter.py +0 -0
  321. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/audio/service.py +0 -0
  322. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/document_converter.py +0 -0
  323. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/job_store.py +0 -0
  324. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/__init__.py +0 -0
  325. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/api/__init__.py +0 -0
  326. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/api/main.py +0 -0
  327. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/api/mcp_server.py +0 -0
  328. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/api/mcp_setup.py +0 -0
  329. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/api/run.py +0 -0
  330. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/api/settings.py +0 -0
  331. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/converter.py +0 -0
  332. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/formatter.py +0 -0
  333. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/video/service.py +0 -0
  334. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/whisper_language.py +0 -0
  335. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/__init__.py +0 -0
  336. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/api/__init__.py +0 -0
  337. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/api/main.py +0 -0
  338. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
  339. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/api/mcp_setup.py +0 -0
  340. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/api/run.py +0 -0
  341. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/api/settings.py +0 -0
  342. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/converter.py +0 -0
  343. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/formatter.py +0 -0
  344. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/metadata.py +0 -0
  345. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/service.py +0 -0
  346. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/media/youtube/transcript.py +0 -0
  347. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/__init__.py +0 -0
  348. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/api/__init__.py +0 -0
  349. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/api/main.py +0 -0
  350. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/api/mcp_server.py +0 -0
  351. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/api/run.py +0 -0
  352. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/api/schemas.py +0 -0
  353. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/api/settings.py +0 -0
  354. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/cli/__init__.py +0 -0
  355. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/cli/main.py +0 -0
  356. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/config/__init__.py +0 -0
  357. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/config/default.yaml +0 -0
  358. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/converters/__init__.py +0 -0
  359. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
  360. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/core/__init__.py +0 -0
  361. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/core/extractor.py +0 -0
  362. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/core/run_config.py +0 -0
  363. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/core/zip_export.py +0 -0
  364. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/enrichers/__init__.py +0 -0
  365. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/enrichers/rules.py +0 -0
  366. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
  367. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/generators/__init__.py +0 -0
  368. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
  369. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/loaders/__init__.py +0 -0
  370. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
  371. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/mcp/__init__.py +0 -0
  372. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/mcp/server.py +0 -0
  373. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/models/__init__.py +0 -0
  374. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/models/domain.py +0 -0
  375. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/normalizers/__init__.py +0 -0
  376. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/normalizers/operations.py +0 -0
  377. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
  378. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/parsers/__init__.py +0 -0
  379. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
  380. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/resolvers/__init__.py +0 -0
  381. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
  382. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/writers/__init__.py +0 -0
  383. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
  384. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/__init__.py +0 -0
  385. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/api/__init__.py +0 -0
  386. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/api/main.py +0 -0
  387. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/api/mcp_server.py +0 -0
  388. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/api/settings.py +0 -0
  389. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/api/zip_bundle.py +0 -0
  390. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/converter.py +0 -0
  391. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/md_emit.py +0 -0
  392. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/pdf_extract.py +0 -0
  393. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/pdf/utils.py +0 -0
  394. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/__init__.py +0 -0
  395. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/api/__init__.py +0 -0
  396. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/api/convert_runner.py +0 -0
  397. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/api/jobs.py +0 -0
  398. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/api/main.py +0 -0
  399. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/api/mcp_server.py +0 -0
  400. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/api/mcp_setup.py +0 -0
  401. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/api/run.py +0 -0
  402. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/api/settings.py +0 -0
  403. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/assets.py +0 -0
  404. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/chunker.py +0 -0
  405. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/cli.py +0 -0
  406. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/extractor.py +0 -0
  407. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/html_to_md.py +0 -0
  408. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/options.py +0 -0
  409. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/pipeline.py +0 -0
  410. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/playwright/playwright_fetcher.py +0 -0
  411. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/__init__.py +0 -0
  412. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/api/__init__.py +0 -0
  413. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/api/convert_runner.py +0 -0
  414. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/api/jobs.py +0 -0
  415. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/api/main.py +0 -0
  416. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/api/mcp_server.py +0 -0
  417. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/api/mcp_setup.py +0 -0
  418. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/api/query_options.py +0 -0
  419. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/api/settings.py +0 -0
  420. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/convert_impl.py +0 -0
  421. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/converter.py +0 -0
  422. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/embedded_extract.py +0 -0
  423. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/ooxml_media.py +0 -0
  424. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/options.py +0 -0
  425. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/post_assets.py +0 -0
  426. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/text_formatting.py +0 -0
  427. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
  428. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
  429. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
  430. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
  431. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/ppt/zip_deep.py +0 -0
  432. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/__init__.py +0 -0
  433. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/api/__init__.py +0 -0
  434. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/api/convert_runner.py +0 -0
  435. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/api/jobs.py +0 -0
  436. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/api/mcp_server.py +0 -0
  437. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/api/settings.py +0 -0
  438. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/format_detect.py +0 -0
  439. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/md_emit_json.py +0 -0
  440. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/md_emit_txt.py +0 -0
  441. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/text/md_emit_xml.py +0 -0
  442. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/__init__.py +0 -0
  443. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/__init__.py +0 -0
  444. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/adapters/__init__.py +0 -0
  445. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/adapters/claude.py +0 -0
  446. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/adapters/cursor.py +0 -0
  447. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/adapters/openai.py +0 -0
  448. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/agent.py +0 -0
  449. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/bundle.py +0 -0
  450. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/chunks.py +0 -0
  451. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/cli.py +0 -0
  452. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/dependency-graph.json +0 -0
  453. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/registry.json +0 -0
  454. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/global-skill.md +0 -0
  455. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +0 -0
  456. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/references/example.md +0 -0
  457. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +0 -0
  458. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +0 -0
  459. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +0 -0
  460. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/references/example.md +0 -0
  461. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +0 -0
  462. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/references/example.md +0 -0
  463. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +0 -0
  464. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/references/example.md +0 -0
  465. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +0 -0
  466. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/references/example.md +0 -0
  467. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +0 -0
  468. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/references/example.md +0 -0
  469. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +0 -0
  470. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/references/example.md +0 -0
  471. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +0 -0
  472. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/references/example.md +0 -0
  473. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +0 -0
  474. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/references/example.md +0 -0
  475. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +0 -0
  476. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/references/example.md +0 -0
  477. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +0 -0
  478. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/references/example.md +0 -0
  479. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +0 -0
  480. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/references/example.md +0 -0
  481. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +0 -0
  482. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/references/example.md +0 -0
  483. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +0 -0
  484. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/references/example.md +0 -0
  485. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +0 -0
  486. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +0 -0
  487. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/example.md +0 -0
  488. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +0 -0
  489. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/archive.md +0 -0
  490. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/codeflow.md +0 -0
  491. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/db.md +0 -0
  492. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/graph.md +0 -0
  493. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/image.md +0 -0
  494. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/media.md +0 -0
  495. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/openapi.md +0 -0
  496. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/pdf.md +0 -0
  497. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/playwright.md +0 -0
  498. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/ppt.md +0 -0
  499. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/text.md +0 -0
  500. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/url.md +0 -0
  501. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/word.md +0 -0
  502. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +0 -0
  503. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/rag.py +0 -0
  504. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/assistant/registry.py +0 -0
  505. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/__init__.py +0 -0
  506. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/__main__.py +0 -0
  507. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/dependency_graph.py +0 -0
  508. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/generate.py +0 -0
  509. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/pyproject_util.py +0 -0
  510. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/routing.py +0 -0
  511. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/__init__.py +0 -0
  512. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/api/__init__.py +0 -0
  513. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/api/convert_runner.py +0 -0
  514. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/api/jobs.py +0 -0
  515. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/api/main.py +0 -0
  516. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/api/mcp_server.py +0 -0
  517. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/api/mcp_setup.py +0 -0
  518. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/api/query_options.py +0 -0
  519. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/api/settings.py +0 -0
  520. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/assets.py +0 -0
  521. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/convert_impl.py +0 -0
  522. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/converter.py +0 -0
  523. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/crawl.py +0 -0
  524. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/extract.py +0 -0
  525. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/fetch.py +0 -0
  526. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/html_to_md.py +0 -0
  527. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/options.py +0 -0
  528. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/page_convert.py +0 -0
  529. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/post_convert_assets.py +0 -0
  530. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/url/robots_util.py +0 -0
  531. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/word/__init__.py +0 -0
  532. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/word/api/__init__.py +0 -0
  533. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/word/api/convert_util.py +0 -0
  534. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/word/api/jobs.py +0 -0
  535. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/word/api/main.py +0 -0
  536. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/word/api/mcp_server.py +0 -0
  537. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/word/artifact.py +0 -0
  538. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/word/converter.py +0 -0
  539. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/word/settings.py +0 -0
  540. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/xlsx/__init__.py +0 -0
  541. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/xlsx/api/__init__.py +0 -0
  542. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/xlsx/api/app.py +0 -0
  543. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/xlsx/convert_config.py +0 -0
  544. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/xlsx/converter.py +0 -0
  545. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/xlsx/converter_core.py +0 -0
  546. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/xlsx/excel_reader.py +0 -0
  547. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/xlsx/markdown_emitter.py +0 -0
  548. {mdengine-0.8.1 → mdengine-0.9.0}/src/md_generator/xlsx/mcp_server.py +0 -0
  549. {mdengine-0.8.1 → mdengine-0.9.0}/src/mdengine.egg-info/dependency_links.txt +0 -0
  550. {mdengine-0.8.1 → mdengine-0.9.0}/src/mdengine.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mdengine
3
- Version: 0.8.1
3
+ Version: 0.9.0
4
4
  Summary: Convert PDF, Office, images, audio, video, text/JSON/XML, ZIP archives, web URLs, databases, graphs, and OpenAPI specs to Markdown.
5
5
  Author: mdengine contributors
6
6
  License-Expression: MIT
@@ -43,6 +43,8 @@ Requires-Dist: paddlepaddle>=2.5.0; extra == "image-ocr"
43
43
  Requires-Dist: paddleocr>=2.7.0.3; extra == "image-ocr"
44
44
  Requires-Dist: easyocr>=1.7.0; extra == "image-ocr"
45
45
  Provides-Extra: text
46
+ Requires-Dist: xmltodict>=0.13.0; extra == "text"
47
+ Requires-Dist: lxml>=5.0.0; extra == "text"
46
48
  Provides-Extra: archive
47
49
  Requires-Dist: Pillow>=10.0.0; extra == "archive"
48
50
  Requires-Dist: pytesseract>=0.3.10; extra == "archive"
@@ -120,6 +122,18 @@ Provides-Extra: codeflow-semantic
120
122
  Requires-Dist: numpy>=1.24.0; extra == "codeflow-semantic"
121
123
  Requires-Dist: scikit-learn>=1.3.0; extra == "codeflow-semantic"
122
124
  Requires-Dist: sentence-transformers>=3.0.0; extra == "codeflow-semantic"
125
+ Provides-Extra: log
126
+ Requires-Dist: pandas>=2.0.0; extra == "log"
127
+ Requires-Dist: python-dateutil>=2.8.0; extra == "log"
128
+ Requires-Dist: pyyaml>=6.0.0; extra == "log"
129
+ Provides-Extra: log-cluster
130
+ Requires-Dist: scikit-learn>=1.3.0; extra == "log-cluster"
131
+ Provides-Extra: log-semantic
132
+ Requires-Dist: numpy>=1.24.0; extra == "log-semantic"
133
+ Requires-Dist: scikit-learn>=1.3.0; extra == "log-semantic"
134
+ Requires-Dist: sentence-transformers>=3.0.0; extra == "log-semantic"
135
+ Provides-Extra: log-pretty
136
+ Requires-Dist: loguru>=0.7.0; extra == "log-pretty"
123
137
  Provides-Extra: api
124
138
  Requires-Dist: fastapi>=0.115.0; extra == "api"
125
139
  Requires-Dist: uvicorn[standard]>=0.32.0; extra == "api"
@@ -148,6 +162,8 @@ Requires-Dist: mdengine[graph]; extra == "dev"
148
162
  Requires-Dist: mdengine[openapi]; extra == "dev"
149
163
  Requires-Dist: mdengine[codeflow]; extra == "dev"
150
164
  Requires-Dist: mdengine[codeflow-treesitter]; extra == "dev"
165
+ Requires-Dist: mdengine[log]; extra == "dev"
166
+ Requires-Dist: mdengine[log-cluster]; extra == "dev"
151
167
  Provides-Extra: all
152
168
  Requires-Dist: pymupdf>=1.24.0; extra == "all"
153
169
  Requires-Dist: pdfplumber>=0.11.0; extra == "all"
@@ -396,19 +412,19 @@ python pdf-to-md\converter.py input.pdf out.md
396
412
  PYTHONPATH=src python pdf-to-md/converter.py input.pdf out.md
397
413
  ```
398
414
 
399
- ### 6. Convert every file in `docs/` (strictly command-line)
415
+ ### 6. Convert every file in `example/` (strictly command-line)
400
416
 
401
- To process **all supported files** under the [`docs/`](docs/) folder using only the installed **`md-*`** tools (no Python snippets), use the batch driver:
417
+ To process **all supported files** under the [`example/`](example/) folder using only the installed **`md-*`** tools (no Python snippets), use the batch driver:
402
418
 
403
419
  | Platform | Command (run from **repository root** unless noted) |
404
420
  |----------|------------------------------------------------------|
405
421
  | Windows | `powershell -ExecutionPolicy Bypass -File scripts/run-docs-cli.ps1` |
406
- | Windows | Or double-click / run [`docs/run-all-cli.cmd`](docs/run-all-cli.cmd) (changes to repo root, then runs the script on `docs\`) |
422
+ | 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\`) |
407
423
  | macOS / Linux | `bash scripts/run-docs-cli.sh` |
408
424
 
409
425
  Optional environment variables for the shell script: `DOCS_DIR`, `OUT_DIR`, `IMAGE_ENGINES` (default `tess`). PowerShell script parameters: `-DocsDir`, `-OutDir`, `-ImageEngines`.
410
426
 
411
- Outputs are written to **`docs/cli-output/<basename>/`** (one subfolder per input file). **`.csv`** files are converted with **`md-xlsx`** (same engine as Excel). **`.md`** files are skipped.
427
+ 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.
412
428
 
413
429
  ---
414
430
 
@@ -218,19 +218,19 @@ python pdf-to-md\converter.py input.pdf out.md
218
218
  PYTHONPATH=src python pdf-to-md/converter.py input.pdf out.md
219
219
  ```
220
220
 
221
- ### 6. Convert every file in `docs/` (strictly command-line)
221
+ ### 6. Convert every file in `example/` (strictly command-line)
222
222
 
223
- To process **all supported files** under the [`docs/`](docs/) folder using only the installed **`md-*`** tools (no Python snippets), use the batch driver:
223
+ To process **all supported files** under the [`example/`](example/) folder using only the installed **`md-*`** tools (no Python snippets), use the batch driver:
224
224
 
225
225
  | Platform | Command (run from **repository root** unless noted) |
226
226
  |----------|------------------------------------------------------|
227
227
  | Windows | `powershell -ExecutionPolicy Bypass -File scripts/run-docs-cli.ps1` |
228
- | Windows | Or double-click / run [`docs/run-all-cli.cmd`](docs/run-all-cli.cmd) (changes to repo root, then runs the script on `docs\`) |
228
+ | 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\`) |
229
229
  | macOS / Linux | `bash scripts/run-docs-cli.sh` |
230
230
 
231
231
  Optional environment variables for the shell script: `DOCS_DIR`, `OUT_DIR`, `IMAGE_ENGINES` (default `tess`). PowerShell script parameters: `-DocsDir`, `-OutDir`, `-ImageEngines`.
232
232
 
233
- Outputs are written to **`docs/cli-output/<basename>/`** (one subfolder per input file). **`.csv`** files are converted with **`md-xlsx`** (same engine as Excel). **`.md`** files are skipped.
233
+ 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.
234
234
 
235
235
  ---
236
236
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mdengine"
7
- version = "0.8.1"
7
+ version = "0.9.0"
8
8
  description = "Convert PDF, Office, images, audio, video, text/JSON/XML, ZIP archives, web URLs, databases, graphs, and OpenAPI specs to Markdown."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -45,7 +45,7 @@ image-ocr = [
45
45
  "paddleocr>=2.7.0.3",
46
46
  "easyocr>=1.7.0",
47
47
  ]
48
- text = []
48
+ text = ["xmltodict>=0.13.0", "lxml>=5.0.0"]
49
49
  archive = ["Pillow>=10.0.0", "pytesseract>=0.3.10"]
50
50
  url = [
51
51
  "httpx>=0.27.0",
@@ -135,6 +135,22 @@ codeflow-semantic = [
135
135
  "scikit-learn>=1.3.0",
136
136
  "sentence-transformers>=3.0.0",
137
137
  ]
138
+ log = [
139
+ "pandas>=2.0.0",
140
+ "python-dateutil>=2.8.0",
141
+ "pyyaml>=6.0.0",
142
+ ]
143
+ log-cluster = [
144
+ "scikit-learn>=1.3.0",
145
+ ]
146
+ log-semantic = [
147
+ "numpy>=1.24.0",
148
+ "scikit-learn>=1.3.0",
149
+ "sentence-transformers>=3.0.0",
150
+ ]
151
+ log-pretty = [
152
+ "loguru>=0.7.0",
153
+ ]
138
154
  api = [
139
155
  "fastapi>=0.115.0",
140
156
  "uvicorn[standard]>=0.32.0",
@@ -161,6 +177,8 @@ dev = [
161
177
  "mdengine[openapi]",
162
178
  "mdengine[codeflow]",
163
179
  "mdengine[codeflow-treesitter]",
180
+ "mdengine[log]",
181
+ "mdengine[log-cluster]",
164
182
  ]
165
183
  all = [
166
184
  "pymupdf>=1.24.0",
@@ -229,6 +247,9 @@ md-codeflow = "md_generator.codeflow.cli.main:main"
229
247
  codeflow = "md_generator.codeflow.cli.main:main"
230
248
  md-codeflow-api = "md_generator.codeflow.api.run:main"
231
249
  md-codeflow-mcp = "md_generator.codeflow.api.mcp_server:main"
250
+ md-log = "md_generator.log.cli.main:main"
251
+ md-log-api = "md_generator.log.api.run:main"
252
+ md-log-mcp = "md_generator.log.api.mcp_server:main"
232
253
  mdengine = "md_generator.engine_cli:main"
233
254
 
234
255
  [tool.setuptools.packages.find]
@@ -239,6 +260,7 @@ include = ["md_generator*"]
239
260
  "md_generator.db.config" = ["*.yaml"]
240
261
  "md_generator.graph.config" = ["*.yaml"]
241
262
  "md_generator.openapi.config" = ["*.yaml"]
263
+ "md_generator.log.config" = ["*.yaml", "presets/*.yaml"]
242
264
  "md_generator.tools.assistant" = ["data/**/*"]
243
265
 
244
266
  [tool.pytest.ini_options]
@@ -261,5 +283,6 @@ testpaths = [
261
283
  "graph-to-md/tests",
262
284
  "openapi-to-md/tests",
263
285
  "codeflow-to-md/tests",
286
+ "log-to-md/tests",
264
287
  ]
265
288
  markers = ["integration: optional dependency or slower checks"]
@@ -1,5 +1,5 @@
1
1
  """md_generator: PDF, Office, image, text, and ZIP to Markdown conversion."""
2
2
 
3
- __version__ = "0.8.1"
3
+ __version__ = "0.9.0"
4
4
 
5
5
  __all__ = ["__version__"]
@@ -206,6 +206,11 @@ class CodeflowJobManager:
206
206
  lw = LoadedWorkspace(root=cfg.project_root, cleanup_dir=None)
207
207
 
208
208
  self.update_progress(job_id, 10, "scan")
209
+ cm = cfg.cache_clear_mode
210
+ if cm and str(cm).strip().lower() in ("git", "all"):
211
+ from md_generator.codeflow.core.cache_manager import apply_git_cache_clear
212
+
213
+ apply_git_cache_clear()
209
214
  run_scan(cfg, workspace=lw)
210
215
  on_prog(90, "zip")
211
216
 
@@ -53,7 +53,19 @@ class AnalyzeOptions(BaseModel):
53
53
  intelligence_transitive_callers: bool | None = None
54
54
  emit_system_graph_stats: bool | None = None
55
55
  emit_graph_sqlite: bool | None = None
56
+ graph_sqlite_mode: Literal["full", "incremental"] | None = Field(
57
+ default=None,
58
+ description="full replaces graph.db; incremental upserts rows and records scans",
59
+ )
60
+ graph_sqlite_prune_missing: bool | None = Field(
61
+ default=None,
62
+ description="incremental mode: delete nodes/edges not seen in latest scan",
63
+ )
56
64
  emit_graph_communities: bool | None = None
65
+ emit_cluster_labels: bool | None = Field(
66
+ default=None,
67
+ description="Rule-based community labels in graph-communities.json and Markdown (default true)",
68
+ )
57
69
  emit_llm_entry_sidecar: bool | None = None
58
70
  include_references: bool | None = None
59
71
  include_events: bool | None = None
@@ -72,6 +84,44 @@ class AnalyzeOptions(BaseModel):
72
84
  semantic_top_k: int | None = None
73
85
  semantic_search: str | None = None
74
86
  emit_html_unified: bool | None = None
87
+ nl_query: str | None = None
88
+ emit_runtime_insights: bool | None = None
89
+ runtime_insight_frequency_threshold: float | None = None
90
+ runtime_insight_hot_paths_top: int | None = None
91
+ semantic_outlier_distance_threshold: float | None = None
92
+ multi_repo: str | None = Field(
93
+ default=None,
94
+ description="Comma-separated extra repository roots to merge with workspace (first root is workspace)",
95
+ )
96
+ diff_base: str | None = Field(default=None, description="Git ref/SHA for PR diff (with diff_head)")
97
+ diff_head: str | None = Field(default=None, description="Git ref/SHA for PR diff (with diff_base)")
98
+ cross_repo_package_hints: str | None = Field(
99
+ default=None,
100
+ description='JSON object mapping package prefix to repo label, e.g. {"com.foo":"repo_a"}',
101
+ )
102
+ resolve_cross_repo: bool | None = Field(default=None, description="Resolve external:: imports across merged repos (hints JSON)")
103
+ cross_repo_tsconfig: bool | None = Field(
104
+ default=None,
105
+ description="Use tsconfig/jsconfig paths per repo for @… cross-repo matching (with resolve_cross_repo)",
106
+ )
107
+ cross_repo_maven_hints: bool | None = Field(
108
+ default=None,
109
+ description="Add Maven groupId→repo hints from pom.xml (with resolve_cross_repo; explicit hints win)",
110
+ )
111
+ cache_enabled: bool | None = Field(default=None, description="Enable git TTL metadata and unified cache writes")
112
+ cache_ttl_seconds: int | None = Field(default=None, description="Git clone refresh skip window in seconds (0=off)")
113
+ cache_clear_mode: str | None = Field(
114
+ default=None,
115
+ description="semantic | unified | all (project cache); git/all also clears global git cache at API boundary if set",
116
+ )
117
+ graph_include_contains_reachability: bool | None = Field(
118
+ default=None,
119
+ description="Include REL_CONTAINS in dependency reachability (PR impact, Called by, Impact)",
120
+ )
121
+ enable_dependency_graph: bool | None = Field(default=None, description="Alias: enable structural IMPORTS/dependency merge")
122
+ parser_mode: Literal["auto", "treesitter", "external"] | None = None
123
+ ui_cfg_max_methods: int | None = Field(default=None, description="Max CFG Mermaid payloads embedded in unified HTML")
124
+ ui: str | None = Field(default=None, description="Set unified to enable emit_html_unified")
75
125
 
76
126
 
77
127
  def options_to_scan_config(workspace_src: Path, output_subdir: str, raw: AnalyzeOptions | None) -> ScanConfig:
@@ -129,7 +179,19 @@ def options_to_scan_config(workspace_src: Path, output_subdir: str, raw: Analyze
129
179
  itc = False if not raw or raw.intelligence_transitive_callers is None else bool(raw.intelligence_transitive_callers)
130
180
  esgs = False if not raw or raw.emit_system_graph_stats is None else bool(raw.emit_system_graph_stats)
131
181
  egsql = False if not raw or raw.emit_graph_sqlite is None else bool(raw.emit_graph_sqlite)
182
+ gsm: Literal["full", "incremental"] = (
183
+ "full" if not raw or raw.graph_sqlite_mode is None else raw.graph_sqlite_mode # type: ignore[assignment]
184
+ )
185
+ gsp = False if not raw or raw.graph_sqlite_prune_missing is None else bool(raw.graph_sqlite_prune_missing)
186
+ gicr = (
187
+ False
188
+ if not raw or raw.graph_include_contains_reachability is None
189
+ else bool(raw.graph_include_contains_reachability)
190
+ )
191
+ xc_ts = False if not raw or raw.cross_repo_tsconfig is None else bool(raw.cross_repo_tsconfig)
192
+ xmvn = False if not raw or raw.cross_repo_maven_hints is None else bool(raw.cross_repo_maven_hints)
132
193
  egc = False if not raw or raw.emit_graph_communities is None else bool(raw.emit_graph_communities)
194
+ ecl = True if not raw or raw.emit_cluster_labels is None else bool(raw.emit_cluster_labels)
133
195
  ellm = False if not raw or raw.emit_llm_entry_sidecar is None else bool(raw.emit_llm_entry_sidecar)
134
196
  iref = False if not raw or raw.include_references is None else bool(raw.include_references)
135
197
  ievt = False if not raw or raw.include_events is None else bool(raw.include_events)
@@ -148,6 +210,36 @@ def options_to_scan_config(workspace_src: Path, output_subdir: str, raw: Analyze
148
210
  stk = 10 if not raw or raw.semantic_top_k is None else int(raw.semantic_top_k)
149
211
  ssr = None if not raw or raw.semantic_search is None or not str(raw.semantic_search).strip() else str(raw.semantic_search).strip()
150
212
  ehu = False if not raw or raw.emit_html_unified is None else bool(raw.emit_html_unified)
213
+ if raw and raw.ui and str(raw.ui).strip().lower() == "unified":
214
+ ehu = True
215
+ nlq = None if not raw or raw.nl_query is None or not str(raw.nl_query).strip() else str(raw.nl_query).strip()
216
+ eri = False if not raw or raw.emit_runtime_insights is None else bool(raw.emit_runtime_insights)
217
+ rift = 0.05 if not raw or raw.runtime_insight_frequency_threshold is None else float(raw.runtime_insight_frequency_threshold)
218
+ riht = 5 if not raw or raw.runtime_insight_hot_paths_top is None else int(raw.runtime_insight_hot_paths_top)
219
+ sodt = 0.7 if not raw or raw.semantic_outlier_distance_threshold is None else float(raw.semantic_outlier_distance_threshold)
220
+ edg = False if not raw or raw.enable_dependency_graph is None else bool(raw.enable_dependency_graph)
221
+ pm: Literal["auto", "treesitter", "external"] = (
222
+ "auto" if not raw or raw.parser_mode is None else raw.parser_mode # type: ignore[assignment]
223
+ )
224
+ uic = 25 if not raw or raw.ui_cfg_max_methods is None else int(raw.ui_cfg_max_methods)
225
+ multi_roots: tuple[Path, ...] = ()
226
+ if raw and raw.multi_repo and str(raw.multi_repo).strip():
227
+ parts = [x.strip() for x in str(raw.multi_repo).split(",") if x.strip()]
228
+ multi_roots = tuple((workspace_src / p).resolve() if not Path(p).is_absolute() else Path(p).resolve() for p in parts)
229
+ db = None if not raw or raw.diff_base is None or not str(raw.diff_base).strip() else str(raw.diff_base).strip()
230
+ dh = None if not raw or raw.diff_head is None or not str(raw.diff_head).strip() else str(raw.diff_head).strip()
231
+ cr_hints: dict[str, str] | None = None
232
+ if raw and raw.cross_repo_package_hints and str(raw.cross_repo_package_hints).strip():
233
+ try:
234
+ obj = json.loads(str(raw.cross_repo_package_hints).strip())
235
+ if isinstance(obj, dict):
236
+ cr_hints = {str(k): str(v) for k, v in obj.items()}
237
+ except json.JSONDecodeError:
238
+ cr_hints = None
239
+ rcr = False if not raw or raw.resolve_cross_repo is None else bool(raw.resolve_cross_repo)
240
+ c_en = True if not raw or raw.cache_enabled is None else bool(raw.cache_enabled)
241
+ c_ttl = 0 if not raw or raw.cache_ttl_seconds is None else int(raw.cache_ttl_seconds)
242
+ c_cm = None if not raw or raw.cache_clear_mode is None else str(raw.cache_clear_mode).strip() or None
151
243
  return ScanConfig(
152
244
  project_root=workspace_src,
153
245
  output_path=workspace_src.parent / output_subdir,
@@ -202,11 +294,33 @@ def options_to_scan_config(workspace_src: Path, output_subdir: str, raw: Analyze
202
294
  semantic_top_k=stk,
203
295
  semantic_search=ssr,
204
296
  emit_html_unified=ehu,
297
+ nl_query=nlq,
298
+ emit_runtime_insights=eri,
299
+ runtime_insight_frequency_threshold=rift,
300
+ runtime_insight_hot_paths_top=riht,
301
+ semantic_outlier_distance_threshold=sodt,
205
302
  intelligence_transitive_callers=itc,
206
303
  emit_system_graph_stats=esgs,
207
304
  emit_graph_sqlite=egsql,
305
+ graph_sqlite_mode=gsm,
306
+ graph_sqlite_prune_missing=gsp,
208
307
  emit_graph_communities=egc,
308
+ emit_cluster_labels=ecl,
209
309
  emit_llm_entry_sidecar=ellm,
310
+ multi_repo_roots=multi_roots,
311
+ diff_base=db,
312
+ diff_head=dh,
313
+ cross_repo_package_hints=cr_hints,
314
+ resolve_cross_repo=rcr,
315
+ cross_repo_tsconfig=xc_ts,
316
+ cross_repo_maven_hints=xmvn,
317
+ graph_include_contains_reachability=gicr,
318
+ cache_enabled=c_en,
319
+ cache_ttl_seconds=c_ttl,
320
+ cache_clear_mode=c_cm,
321
+ enable_dependency_graph=edg,
322
+ parser_mode=pm,
323
+ ui_cfg_max_methods=uic,
210
324
  )
211
325
 
212
326
 
@@ -263,7 +377,10 @@ def scan_config_dump(cfg: ScanConfig) -> dict[str, Any]:
263
377
  "intelligence_transitive_callers": cfg.intelligence_transitive_callers,
264
378
  "emit_system_graph_stats": cfg.emit_system_graph_stats,
265
379
  "emit_graph_sqlite": cfg.emit_graph_sqlite,
380
+ "graph_sqlite_mode": cfg.graph_sqlite_mode,
381
+ "graph_sqlite_prune_missing": cfg.graph_sqlite_prune_missing,
266
382
  "emit_graph_communities": cfg.emit_graph_communities,
383
+ "emit_cluster_labels": cfg.emit_cluster_labels,
267
384
  "emit_llm_entry_sidecar": cfg.emit_llm_entry_sidecar,
268
385
  "include_references": cfg.include_references,
269
386
  "include_events": cfg.include_events,
@@ -282,6 +399,25 @@ def scan_config_dump(cfg: ScanConfig) -> dict[str, Any]:
282
399
  "semantic_top_k": cfg.semantic_top_k,
283
400
  "semantic_search": cfg.semantic_search,
284
401
  "emit_html_unified": cfg.emit_html_unified,
402
+ "nl_query": cfg.nl_query,
403
+ "emit_runtime_insights": cfg.emit_runtime_insights,
404
+ "runtime_insight_frequency_threshold": cfg.runtime_insight_frequency_threshold,
405
+ "runtime_insight_hot_paths_top": cfg.runtime_insight_hot_paths_top,
406
+ "semantic_outlier_distance_threshold": cfg.semantic_outlier_distance_threshold,
407
+ "multi_repo_roots": [str(p) for p in cfg.multi_repo_roots],
408
+ "diff_base": cfg.diff_base,
409
+ "diff_head": cfg.diff_head,
410
+ "cross_repo_package_hints": dict(cfg.cross_repo_package_hints) if cfg.cross_repo_package_hints else None,
411
+ "resolve_cross_repo": cfg.resolve_cross_repo,
412
+ "cross_repo_tsconfig": cfg.cross_repo_tsconfig,
413
+ "cross_repo_maven_hints": cfg.cross_repo_maven_hints,
414
+ "graph_include_contains_reachability": cfg.graph_include_contains_reachability,
415
+ "cache_enabled": cfg.cache_enabled,
416
+ "cache_ttl_seconds": cfg.cache_ttl_seconds,
417
+ "cache_clear_mode": cfg.cache_clear_mode,
418
+ "enable_dependency_graph": cfg.enable_dependency_graph,
419
+ "parser_mode": cfg.parser_mode,
420
+ "ui_cfg_max_methods": cfg.ui_cfg_max_methods,
285
421
  }
286
422
 
287
423
 
@@ -332,7 +468,10 @@ def scan_config_load(data: dict[str, Any]) -> ScanConfig:
332
468
  intelligence_transitive_callers=bool(data.get("intelligence_transitive_callers", False)),
333
469
  emit_system_graph_stats=bool(data.get("emit_system_graph_stats", False)),
334
470
  emit_graph_sqlite=bool(data.get("emit_graph_sqlite", False)),
471
+ graph_sqlite_mode=data.get("graph_sqlite_mode", "full"), # type: ignore[arg-type]
472
+ graph_sqlite_prune_missing=bool(data.get("graph_sqlite_prune_missing", False)),
335
473
  emit_graph_communities=bool(data.get("emit_graph_communities", False)),
474
+ emit_cluster_labels=bool(data.get("emit_cluster_labels", True)),
336
475
  emit_llm_entry_sidecar=bool(data.get("emit_llm_entry_sidecar", False)),
337
476
  include_references=bool(data.get("include_references", False)),
338
477
  include_events=bool(data.get("include_events", False)),
@@ -351,6 +490,29 @@ def scan_config_load(data: dict[str, Any]) -> ScanConfig:
351
490
  semantic_top_k=int(data.get("semantic_top_k", 10)),
352
491
  semantic_search=data.get("semantic_search"),
353
492
  emit_html_unified=bool(data.get("emit_html_unified", False)),
493
+ nl_query=data.get("nl_query"),
494
+ emit_runtime_insights=bool(data.get("emit_runtime_insights", False)),
495
+ runtime_insight_frequency_threshold=float(data.get("runtime_insight_frequency_threshold", 0.05)),
496
+ runtime_insight_hot_paths_top=int(data.get("runtime_insight_hot_paths_top", 5)),
497
+ semantic_outlier_distance_threshold=float(data.get("semantic_outlier_distance_threshold", 0.7)),
498
+ multi_repo_roots=tuple(Path(p) for p in (data.get("multi_repo_roots") or [])),
499
+ diff_base=data.get("diff_base"),
500
+ diff_head=data.get("diff_head"),
501
+ cross_repo_package_hints=(
502
+ {str(k): str(v) for k, v in data["cross_repo_package_hints"].items()}
503
+ if isinstance(data.get("cross_repo_package_hints"), dict)
504
+ else None
505
+ ),
506
+ resolve_cross_repo=bool(data.get("resolve_cross_repo", False)),
507
+ cross_repo_tsconfig=bool(data.get("cross_repo_tsconfig", False)),
508
+ cross_repo_maven_hints=bool(data.get("cross_repo_maven_hints", False)),
509
+ graph_include_contains_reachability=bool(data.get("graph_include_contains_reachability", False)),
510
+ cache_enabled=bool(data.get("cache_enabled", True)),
511
+ cache_ttl_seconds=int(data.get("cache_ttl_seconds", 0)),
512
+ cache_clear_mode=data.get("cache_clear_mode"),
513
+ enable_dependency_graph=bool(data.get("enable_dependency_graph", False)),
514
+ parser_mode=data.get("parser_mode", "auto"), # type: ignore[arg-type]
515
+ ui_cfg_max_methods=int(data.get("ui_cfg_max_methods", 25)),
354
516
  )
355
517
 
356
518