mdengine 0.8.0__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 (560) hide show
  1. {mdengine-0.8.0/src/mdengine.egg-info → mdengine-0.9.0}/PKG-INFO +51 -5
  2. {mdengine-0.8.0 → mdengine-0.9.0}/README.md +27 -4
  3. {mdengine-0.8.0 → mdengine-0.9.0}/pyproject.toml +36 -2
  4. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/__init__.py +1 -1
  5. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/analyzers/flow_analyzer.py +28 -9
  6. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/api/job_manager.py +7 -19
  7. mdengine-0.9.0/src/md_generator/codeflow/api/schemas.py +526 -0
  8. mdengine-0.9.0/src/md_generator/codeflow/api/semantic_api.py +69 -0
  9. mdengine-0.9.0/src/md_generator/codeflow/cli/main.py +738 -0
  10. mdengine-0.9.0/src/md_generator/codeflow/config/__init__.py +13 -0
  11. mdengine-0.9.0/src/md_generator/codeflow/config/codeflow_yaml.py +45 -0
  12. mdengine-0.9.0/src/md_generator/codeflow/core/__init__.py +13 -0
  13. mdengine-0.9.0/src/md_generator/codeflow/core/cache_manager.py +110 -0
  14. mdengine-0.9.0/src/md_generator/codeflow/core/extractor.py +1040 -0
  15. mdengine-0.9.0/src/md_generator/codeflow/core/run_config.py +150 -0
  16. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/entry_detector.py +28 -1
  17. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/entry_rank.py +4 -4
  18. mdengine-0.9.0/src/md_generator/codeflow/detectors/event_detector.py +126 -0
  19. mdengine-0.9.0/src/md_generator/codeflow/detectors/liferay_portlet_detector.py +196 -0
  20. mdengine-0.9.0/src/md_generator/codeflow/generators/cfg_paths_markdown.py +114 -0
  21. mdengine-0.9.0/src/md_generator/codeflow/generators/cfg_paths_mermaid.py +30 -0
  22. mdengine-0.9.0/src/md_generator/codeflow/generators/cfg_render.py +121 -0
  23. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/generators/cytoscape_enrich.py +28 -4
  24. mdengine-0.9.0/src/md_generator/codeflow/generators/entry_markdown.py +765 -0
  25. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/generators/flow_summary.py +7 -8
  26. mdengine-0.9.0/src/md_generator/codeflow/generators/flow_tree.py +56 -0
  27. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/generators/html.py +1 -0
  28. mdengine-0.9.0/src/md_generator/codeflow/generators/html_unified.py +487 -0
  29. mdengine-0.9.0/src/md_generator/codeflow/generators/markdown.py +152 -0
  30. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/generators/mermaid.py +14 -2
  31. mdengine-0.9.0/src/md_generator/codeflow/graph/__init__.py +6 -0
  32. mdengine-0.9.0/src/md_generator/codeflow/graph/analysis.py +116 -0
  33. mdengine-0.9.0/src/md_generator/codeflow/graph/anomaly.py +109 -0
  34. mdengine-0.9.0/src/md_generator/codeflow/graph/builder.py +482 -0
  35. mdengine-0.9.0/src/md_generator/codeflow/graph/call_expander.py +160 -0
  36. mdengine-0.9.0/src/md_generator/codeflow/graph/cfg_builder.py +435 -0
  37. mdengine-0.9.0/src/md_generator/codeflow/graph/cfg_copy.py +41 -0
  38. mdengine-0.9.0/src/md_generator/codeflow/graph/cfg_model.py +49 -0
  39. mdengine-0.9.0/src/md_generator/codeflow/graph/cluster_labeling.py +271 -0
  40. mdengine-0.9.0/src/md_generator/codeflow/graph/clustering.py +180 -0
  41. mdengine-0.9.0/src/md_generator/codeflow/graph/cross_repo_resolver.py +200 -0
  42. mdengine-0.9.0/src/md_generator/codeflow/graph/dependency_builder.py +166 -0
  43. mdengine-0.9.0/src/md_generator/codeflow/graph/diff_analysis.py +149 -0
  44. mdengine-0.9.0/src/md_generator/codeflow/graph/embeddings.py +216 -0
  45. mdengine-0.9.0/src/md_generator/codeflow/graph/enricher.py +92 -0
  46. mdengine-0.9.0/src/md_generator/codeflow/graph/event_graph.py +55 -0
  47. mdengine-0.9.0/src/md_generator/codeflow/graph/export_schema.py +278 -0
  48. mdengine-0.9.0/src/md_generator/codeflow/graph/hotpath.py +94 -0
  49. mdengine-0.9.0/src/md_generator/codeflow/graph/maven_hints.py +37 -0
  50. mdengine-0.9.0/src/md_generator/codeflow/graph/multi_repo.py +157 -0
  51. mdengine-0.9.0/src/md_generator/codeflow/graph/multigraph_utils.py +106 -0
  52. mdengine-0.9.0/src/md_generator/codeflow/graph/nl_query.py +267 -0
  53. mdengine-0.9.0/src/md_generator/codeflow/graph/path_enumerator.py +92 -0
  54. mdengine-0.9.0/src/md_generator/codeflow/graph/path_probability.py +64 -0
  55. mdengine-0.9.0/src/md_generator/codeflow/graph/query_engine.py +81 -0
  56. mdengine-0.9.0/src/md_generator/codeflow/graph/relations.py +38 -0
  57. mdengine-0.9.0/src/md_generator/codeflow/graph/runtime_integration.py +41 -0
  58. mdengine-0.9.0/src/md_generator/codeflow/graph/semantic_enricher.py +93 -0
  59. mdengine-0.9.0/src/md_generator/codeflow/graph/semantic_index.py +84 -0
  60. mdengine-0.9.0/src/md_generator/codeflow/graph/sqlite_export.py +183 -0
  61. mdengine-0.9.0/src/md_generator/codeflow/graph/tsconfig_cross_repo.py +127 -0
  62. mdengine-0.9.0/src/md_generator/codeflow/ingestion/git_loader.py +286 -0
  63. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/mcp/server.py +22 -5
  64. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/models/ir.py +30 -0
  65. mdengine-0.9.0/src/md_generator/codeflow/models/ir_cfg.py +42 -0
  66. mdengine-0.9.0/src/md_generator/codeflow/parsers/adapters/__init__.py +16 -0
  67. mdengine-0.9.0/src/md_generator/codeflow/parsers/adapters/cpp_adapter.py +229 -0
  68. mdengine-0.9.0/src/md_generator/codeflow/parsers/adapters/go_adapter.py +15 -0
  69. mdengine-0.9.0/src/md_generator/codeflow/parsers/adapters/ir_from_dump.py +75 -0
  70. mdengine-0.9.0/src/md_generator/codeflow/parsers/adapters/java_adapter.py +186 -0
  71. mdengine-0.9.0/src/md_generator/codeflow/parsers/adapters/php_adapter.py +15 -0
  72. mdengine-0.9.0/src/md_generator/codeflow/parsers/adapters/python_adapter.py +185 -0
  73. mdengine-0.9.0/src/md_generator/codeflow/parsers/adapters/treesitter_adapter.py +218 -0
  74. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/cpp_parser.py +98 -3
  75. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/go_parser.py +26 -4
  76. mdengine-0.9.0/src/md_generator/codeflow/parsers/ir_enrich.py +41 -0
  77. mdengine-0.9.0/src/md_generator/codeflow/parsers/java_parser.py +371 -0
  78. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/php_parser.py +40 -4
  79. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/python_parser.py +83 -1
  80. mdengine-0.9.0/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +406 -0
  81. mdengine-0.9.0/src/md_generator/codeflow/parsers/unified_parser.py +31 -0
  82. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/rules/collector.py +17 -8
  83. mdengine-0.9.0/src/md_generator/codeflow/rules/cpp_rules.py +113 -0
  84. mdengine-0.9.0/src/md_generator/codeflow/rules/java_rules.py +188 -0
  85. mdengine-0.9.0/src/md_generator/codeflow/runtime/python_edge_counter.py +44 -0
  86. mdengine-0.9.0/src/md_generator/codeflow/runtime/trace_runner.py +110 -0
  87. mdengine-0.9.0/src/md_generator/codeflow/utils/tools_root.py +16 -0
  88. mdengine-0.9.0/src/md_generator/codeflow/worker/__init__.py +1 -0
  89. mdengine-0.9.0/src/md_generator/codeflow/worker/celery_optional.py +22 -0
  90. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/engine_cli.py +6 -2
  91. mdengine-0.9.0/src/md_generator/log/__init__.py +6 -0
  92. mdengine-0.9.0/src/md_generator/log/aggregation/__init__.py +1 -0
  93. mdengine-0.9.0/src/md_generator/log/aggregation/aggregators.py +20 -0
  94. mdengine-0.9.0/src/md_generator/log/aggregation/dataframe_builder.py +39 -0
  95. mdengine-0.9.0/src/md_generator/log/aggregation/metrics.py +34 -0
  96. mdengine-0.9.0/src/md_generator/log/aggregation/timeline.py +15 -0
  97. mdengine-0.9.0/src/md_generator/log/api/__init__.py +1 -0
  98. mdengine-0.9.0/src/md_generator/log/api/main.py +257 -0
  99. mdengine-0.9.0/src/md_generator/log/api/mcp_server.py +29 -0
  100. mdengine-0.9.0/src/md_generator/log/api/run.py +15 -0
  101. mdengine-0.9.0/src/md_generator/log/api/schemas.py +141 -0
  102. mdengine-0.9.0/src/md_generator/log/api/settings.py +32 -0
  103. mdengine-0.9.0/src/md_generator/log/cli/__init__.py +1 -0
  104. mdengine-0.9.0/src/md_generator/log/cli/main.py +69 -0
  105. mdengine-0.9.0/src/md_generator/log/clustering/__init__.py +1 -0
  106. mdengine-0.9.0/src/md_generator/log/clustering/embeddings.py +3 -0
  107. mdengine-0.9.0/src/md_generator/log/clustering/kmeans_cluster.py +12 -0
  108. mdengine-0.9.0/src/md_generator/log/clustering/semantic_grouping.py +7 -0
  109. mdengine-0.9.0/src/md_generator/log/clustering/vectorizer.py +13 -0
  110. mdengine-0.9.0/src/md_generator/log/config/__init__.py +1 -0
  111. mdengine-0.9.0/src/md_generator/log/config/default.yaml +48 -0
  112. mdengine-0.9.0/src/md_generator/log/config/presets/__init__.py +1 -0
  113. mdengine-0.9.0/src/md_generator/log/config/presets/generic.yaml +3 -0
  114. mdengine-0.9.0/src/md_generator/log/config/presets/springboot.yaml +3 -0
  115. mdengine-0.9.0/src/md_generator/log/config/schemas.py +117 -0
  116. mdengine-0.9.0/src/md_generator/log/core/__init__.py +1 -0
  117. mdengine-0.9.0/src/md_generator/log/core/errors.py +25 -0
  118. mdengine-0.9.0/src/md_generator/log/core/execution_context.py +10 -0
  119. mdengine-0.9.0/src/md_generator/log/core/extractor.py +20 -0
  120. mdengine-0.9.0/src/md_generator/log/core/job_manager.py +274 -0
  121. mdengine-0.9.0/src/md_generator/log/core/lifecycle.py +15 -0
  122. mdengine-0.9.0/src/md_generator/log/core/pipeline.py +180 -0
  123. mdengine-0.9.0/src/md_generator/log/core/plugins.py +34 -0
  124. mdengine-0.9.0/src/md_generator/log/core/run_config.py +160 -0
  125. mdengine-0.9.0/src/md_generator/log/core/zip_export.py +31 -0
  126. mdengine-0.9.0/src/md_generator/log/enrichment/__init__.py +1 -0
  127. mdengine-0.9.0/src/md_generator/log/enrichment/correlation.py +7 -0
  128. mdengine-0.9.0/src/md_generator/log/enrichment/fingerprinting.py +11 -0
  129. mdengine-0.9.0/src/md_generator/log/enrichment/hash_generator.py +8 -0
  130. mdengine-0.9.0/src/md_generator/log/enrichment/pattern_matcher.py +24 -0
  131. mdengine-0.9.0/src/md_generator/log/enrichment/severity_ranker.py +14 -0
  132. mdengine-0.9.0/src/md_generator/log/ingestion/__init__.py +1 -0
  133. mdengine-0.9.0/src/md_generator/log/ingestion/archive_loader.py +25 -0
  134. mdengine-0.9.0/src/md_generator/log/ingestion/encoding_detector.py +15 -0
  135. mdengine-0.9.0/src/md_generator/log/ingestion/file_loader.py +23 -0
  136. mdengine-0.9.0/src/md_generator/log/ingestion/stream_reader.py +36 -0
  137. mdengine-0.9.0/src/md_generator/log/mcp/__init__.py +1 -0
  138. mdengine-0.9.0/src/md_generator/log/mcp/server.py +52 -0
  139. mdengine-0.9.0/src/md_generator/log/mcp/sse.py +8 -0
  140. mdengine-0.9.0/src/md_generator/log/normalization/__init__.py +1 -0
  141. mdengine-0.9.0/src/md_generator/log/normalization/number_normalizer.py +9 -0
  142. mdengine-0.9.0/src/md_generator/log/normalization/path_normalizer.py +12 -0
  143. mdengine-0.9.0/src/md_generator/log/normalization/pii_redactor.py +16 -0
  144. mdengine-0.9.0/src/md_generator/log/normalization/token_normalizer.py +44 -0
  145. mdengine-0.9.0/src/md_generator/log/normalization/uuid_normalizer.py +11 -0
  146. mdengine-0.9.0/src/md_generator/log/parser/__init__.py +3 -0
  147. mdengine-0.9.0/src/md_generator/log/parser/level_detector.py +25 -0
  148. mdengine-0.9.0/src/md_generator/log/parser/logger_detector.py +10 -0
  149. mdengine-0.9.0/src/md_generator/log/parser/models.py +49 -0
  150. mdengine-0.9.0/src/md_generator/log/parser/multiline_parser.py +161 -0
  151. mdengine-0.9.0/src/md_generator/log/parser/parser_registry.py +27 -0
  152. mdengine-0.9.0/src/md_generator/log/parser/regex_parser.py +28 -0
  153. mdengine-0.9.0/src/md_generator/log/parser/stacktrace_parser.py +29 -0
  154. mdengine-0.9.0/src/md_generator/log/parser/timestamp_parser.py +9 -0
  155. mdengine-0.9.0/src/md_generator/log/service/__init__.py +1 -0
  156. mdengine-0.9.0/src/md_generator/log/service/service.py +18 -0
  157. mdengine-0.9.0/src/md_generator/log/utils/__init__.py +1 -0
  158. mdengine-0.9.0/src/md_generator/log/utils/concurrency.py +23 -0
  159. mdengine-0.9.0/src/md_generator/log/utils/io.py +12 -0
  160. mdengine-0.9.0/src/md_generator/log/utils/regex.py +9 -0
  161. mdengine-0.9.0/src/md_generator/log/utils/time.py +18 -0
  162. mdengine-0.9.0/src/md_generator/log/writers/__init__.py +1 -0
  163. mdengine-0.9.0/src/md_generator/log/writers/assets_writer.py +11 -0
  164. mdengine-0.9.0/src/md_generator/log/writers/chunk_writer.py +48 -0
  165. mdengine-0.9.0/src/md_generator/log/writers/cluster_markdown.py +17 -0
  166. mdengine-0.9.0/src/md_generator/log/writers/incident_writer.py +42 -0
  167. mdengine-0.9.0/src/md_generator/log/writers/markdown_writer.py +84 -0
  168. mdengine-0.9.0/src/md_generator/log/writers/summary_writer.py +46 -0
  169. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/api/main.py +9 -0
  170. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/api/mcp_setup.py +10 -4
  171. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/api/query_options.py +5 -1
  172. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/convert_impl.py +41 -17
  173. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/converter.py +15 -0
  174. mdengine-0.9.0/src/md_generator/text/md_flatten.py +167 -0
  175. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/options.py +4 -0
  176. mdengine-0.9.0/src/md_generator/text/xml_parse.py +31 -0
  177. {mdengine-0.8.0 → mdengine-0.9.0/src/mdengine.egg-info}/PKG-INFO +51 -5
  178. {mdengine-0.8.0 → mdengine-0.9.0}/src/mdengine.egg-info/SOURCES.txt +138 -0
  179. {mdengine-0.8.0 → mdengine-0.9.0}/src/mdengine.egg-info/entry_points.txt +3 -0
  180. {mdengine-0.8.0 → mdengine-0.9.0}/src/mdengine.egg-info/requires.txt +29 -0
  181. mdengine-0.8.0/src/md_generator/codeflow/api/schemas.py +0 -96
  182. mdengine-0.8.0/src/md_generator/codeflow/cli/main.py +0 -132
  183. mdengine-0.8.0/src/md_generator/codeflow/core/__init__.py +0 -6
  184. mdengine-0.8.0/src/md_generator/codeflow/core/extractor.py +0 -193
  185. mdengine-0.8.0/src/md_generator/codeflow/core/run_config.py +0 -31
  186. mdengine-0.8.0/src/md_generator/codeflow/generators/entry_markdown.py +0 -198
  187. mdengine-0.8.0/src/md_generator/codeflow/generators/markdown.py +0 -35
  188. mdengine-0.8.0/src/md_generator/codeflow/graph/__init__.py +0 -5
  189. mdengine-0.8.0/src/md_generator/codeflow/graph/builder.py +0 -181
  190. mdengine-0.8.0/src/md_generator/codeflow/parsers/java_parser.py +0 -116
  191. mdengine-0.8.0/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +0 -119
  192. mdengine-0.8.0/src/md_generator/codeflow/utils/tools_root.py +0 -13
  193. {mdengine-0.8.0 → mdengine-0.9.0}/LICENSE +0 -0
  194. {mdengine-0.8.0 → mdengine-0.9.0}/setup.cfg +0 -0
  195. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/__init__.py +0 -0
  196. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/api/__init__.py +0 -0
  197. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/api/convert_runner.py +0 -0
  198. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/api/jobs.py +0 -0
  199. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/api/main.py +0 -0
  200. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/api/mcp_server.py +0 -0
  201. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/api/mcp_setup.py +0 -0
  202. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/api/query_options.py +0 -0
  203. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/api/settings.py +0 -0
  204. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/convert_impl.py +0 -0
  205. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/converter.py +0 -0
  206. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/archive/options.py +0 -0
  207. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/__init__.py +0 -0
  208. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/analyzers/__init__.py +0 -0
  209. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/api/__init__.py +0 -0
  210. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/api/main.py +0 -0
  211. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/api/mcp_server.py +0 -0
  212. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/api/run.py +0 -0
  213. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/api/settings.py +0 -0
  214. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/api/sse.py +0 -0
  215. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/cli/__init__.py +0 -0
  216. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/__init__.py +0 -0
  217. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/api_detector.py +0 -0
  218. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/detectors/kafka_detector.py +0 -0
  219. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/generators/__init__.py +0 -0
  220. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/generators/business_rules_markdown.py +0 -0
  221. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/generators/sequence.py +0 -0
  222. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/ingestion/__init__.py +0 -0
  223. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/ingestion/loader.py +0 -0
  224. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/lang_dispatch.py +0 -0
  225. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/mcp/__init__.py +0 -0
  226. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/models/__init__.py +0 -0
  227. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/__init__.py +0 -0
  228. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/parsers/base.py +0 -0
  229. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/rules/__init__.py +0 -0
  230. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/runtime/__init__.py +0 -0
  231. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/runtime/tracer.py +0 -0
  232. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/codeflow/utils/__init__.py +0 -0
  233. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/__init__.py +0 -0
  234. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/adapters/__init__.py +0 -0
  235. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/adapters/factory.py +0 -0
  236. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
  237. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
  238. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
  239. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
  240. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/adapters/sql_common.py +0 -0
  241. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
  242. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/api/__init__.py +0 -0
  243. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/api/main.py +0 -0
  244. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/api/mcp_server.py +0 -0
  245. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/api/run.py +0 -0
  246. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/api/schemas.py +0 -0
  247. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/api/settings.py +0 -0
  248. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/api/sqlite_upload.py +0 -0
  249. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/cli/__init__.py +0 -0
  250. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/cli/main.py +0 -0
  251. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/config/__init__.py +0 -0
  252. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/config/default.yaml +0 -0
  253. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/__init__.py +0 -0
  254. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/base_adapter.py +0 -0
  255. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/erd/__init__.py +0 -0
  256. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
  257. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/erd/filter.py +0 -0
  258. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
  259. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
  260. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/erd/model.py +0 -0
  261. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/erd/pipeline.py +0 -0
  262. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/erd/render.py +0 -0
  263. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/extractor.py +0 -0
  264. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/job_manager.py +0 -0
  265. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/markdown_writer.py +0 -0
  266. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/models.py +0 -0
  267. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/run_config.py +0 -0
  268. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/util.py +0 -0
  269. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/core/zip_export.py +0 -0
  270. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/mcp/__init__.py +0 -0
  271. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/mcp/server.py +0 -0
  272. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/mcp/sse.py +0 -0
  273. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/db/mcp/stream.py +0 -0
  274. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/__init__.py +0 -0
  275. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/adapters/__init__.py +0 -0
  276. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/adapters/factory.py +0 -0
  277. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
  278. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
  279. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/api/__init__.py +0 -0
  280. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/api/main.py +0 -0
  281. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/api/mcp_server.py +0 -0
  282. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/api/run.py +0 -0
  283. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/api/schemas.py +0 -0
  284. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/api/settings.py +0 -0
  285. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/cli/__init__.py +0 -0
  286. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/cli/main.py +0 -0
  287. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/config/__init__.py +0 -0
  288. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/config/default.yaml +0 -0
  289. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/__init__.py +0 -0
  290. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/base_adapter.py +0 -0
  291. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/extractor.py +0 -0
  292. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/graph_builder.py +0 -0
  293. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/job_manager.py +0 -0
  294. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/markdown_writer.py +0 -0
  295. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/models.py +0 -0
  296. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/run_config.py +0 -0
  297. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/viz.py +0 -0
  298. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/core/zip_export.py +0 -0
  299. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/mcp/__init__.py +0 -0
  300. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/mcp/server.py +0 -0
  301. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/mcp/sse.py +0 -0
  302. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/graph/mcp/stream.py +0 -0
  303. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/__init__.py +0 -0
  304. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/api/__init__.py +0 -0
  305. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/api/main.py +0 -0
  306. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/api/mcp_server.py +0 -0
  307. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/api/query_options.py +0 -0
  308. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/api/settings.py +0 -0
  309. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/api/staging.py +0 -0
  310. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/api/zip_bundle.py +0 -0
  311. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/backends/__init__.py +0 -0
  312. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/backends/base.py +0 -0
  313. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/backends/easy.py +0 -0
  314. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/backends/paddle.py +0 -0
  315. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/backends/tesseract.py +0 -0
  316. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/convert_impl.py +0 -0
  317. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/converter.py +0 -0
  318. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/emit.py +0 -0
  319. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/io_util.py +0 -0
  320. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/image/utils.py +0 -0
  321. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/__init__.py +0 -0
  322. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/__init__.py +0 -0
  323. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/api/__init__.py +0 -0
  324. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/api/main.py +0 -0
  325. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/api/mcp_server.py +0 -0
  326. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/api/mcp_setup.py +0 -0
  327. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/api/run.py +0 -0
  328. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/api/settings.py +0 -0
  329. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/converter.py +0 -0
  330. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/formatter.py +0 -0
  331. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/audio/service.py +0 -0
  332. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/document_converter.py +0 -0
  333. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/job_store.py +0 -0
  334. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/__init__.py +0 -0
  335. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/api/__init__.py +0 -0
  336. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/api/main.py +0 -0
  337. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/api/mcp_server.py +0 -0
  338. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/api/mcp_setup.py +0 -0
  339. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/api/run.py +0 -0
  340. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/api/settings.py +0 -0
  341. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/converter.py +0 -0
  342. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/formatter.py +0 -0
  343. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/video/service.py +0 -0
  344. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/whisper_language.py +0 -0
  345. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/__init__.py +0 -0
  346. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/api/__init__.py +0 -0
  347. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/api/main.py +0 -0
  348. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
  349. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/api/mcp_setup.py +0 -0
  350. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/api/run.py +0 -0
  351. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/api/settings.py +0 -0
  352. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/converter.py +0 -0
  353. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/formatter.py +0 -0
  354. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/metadata.py +0 -0
  355. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/service.py +0 -0
  356. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/media/youtube/transcript.py +0 -0
  357. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/__init__.py +0 -0
  358. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/api/__init__.py +0 -0
  359. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/api/main.py +0 -0
  360. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/api/mcp_server.py +0 -0
  361. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/api/run.py +0 -0
  362. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/api/schemas.py +0 -0
  363. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/api/settings.py +0 -0
  364. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/cli/__init__.py +0 -0
  365. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/cli/main.py +0 -0
  366. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/config/__init__.py +0 -0
  367. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/config/default.yaml +0 -0
  368. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/converters/__init__.py +0 -0
  369. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
  370. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/core/__init__.py +0 -0
  371. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/core/extractor.py +0 -0
  372. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/core/run_config.py +0 -0
  373. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/core/zip_export.py +0 -0
  374. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/enrichers/__init__.py +0 -0
  375. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/enrichers/rules.py +0 -0
  376. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
  377. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/generators/__init__.py +0 -0
  378. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
  379. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/loaders/__init__.py +0 -0
  380. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
  381. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/mcp/__init__.py +0 -0
  382. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/mcp/server.py +0 -0
  383. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/models/__init__.py +0 -0
  384. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/models/domain.py +0 -0
  385. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/normalizers/__init__.py +0 -0
  386. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/normalizers/operations.py +0 -0
  387. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
  388. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/parsers/__init__.py +0 -0
  389. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
  390. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/resolvers/__init__.py +0 -0
  391. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
  392. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/writers/__init__.py +0 -0
  393. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
  394. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/__init__.py +0 -0
  395. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/api/__init__.py +0 -0
  396. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/api/main.py +0 -0
  397. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/api/mcp_server.py +0 -0
  398. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/api/settings.py +0 -0
  399. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/api/zip_bundle.py +0 -0
  400. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/converter.py +0 -0
  401. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/md_emit.py +0 -0
  402. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/pdf_extract.py +0 -0
  403. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/pdf/utils.py +0 -0
  404. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/__init__.py +0 -0
  405. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/api/__init__.py +0 -0
  406. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/api/convert_runner.py +0 -0
  407. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/api/jobs.py +0 -0
  408. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/api/main.py +0 -0
  409. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/api/mcp_server.py +0 -0
  410. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/api/mcp_setup.py +0 -0
  411. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/api/run.py +0 -0
  412. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/api/settings.py +0 -0
  413. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/assets.py +0 -0
  414. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/chunker.py +0 -0
  415. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/cli.py +0 -0
  416. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/extractor.py +0 -0
  417. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/html_to_md.py +0 -0
  418. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/options.py +0 -0
  419. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/pipeline.py +0 -0
  420. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/playwright/playwright_fetcher.py +0 -0
  421. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/__init__.py +0 -0
  422. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/api/__init__.py +0 -0
  423. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/api/convert_runner.py +0 -0
  424. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/api/jobs.py +0 -0
  425. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/api/main.py +0 -0
  426. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/api/mcp_server.py +0 -0
  427. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/api/mcp_setup.py +0 -0
  428. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/api/query_options.py +0 -0
  429. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/api/settings.py +0 -0
  430. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/convert_impl.py +0 -0
  431. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/converter.py +0 -0
  432. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/embedded_extract.py +0 -0
  433. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/ooxml_media.py +0 -0
  434. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/options.py +0 -0
  435. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/post_assets.py +0 -0
  436. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/text_formatting.py +0 -0
  437. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
  438. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
  439. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
  440. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
  441. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/ppt/zip_deep.py +0 -0
  442. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/__init__.py +0 -0
  443. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/api/__init__.py +0 -0
  444. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/api/convert_runner.py +0 -0
  445. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/api/jobs.py +0 -0
  446. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/api/mcp_server.py +0 -0
  447. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/api/settings.py +0 -0
  448. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/format_detect.py +0 -0
  449. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/md_emit_json.py +0 -0
  450. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/md_emit_txt.py +0 -0
  451. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/text/md_emit_xml.py +0 -0
  452. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/__init__.py +0 -0
  453. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/__init__.py +0 -0
  454. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/adapters/__init__.py +0 -0
  455. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/adapters/claude.py +0 -0
  456. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/adapters/cursor.py +0 -0
  457. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/adapters/openai.py +0 -0
  458. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/agent.py +0 -0
  459. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/bundle.py +0 -0
  460. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/chunks.py +0 -0
  461. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/cli.py +0 -0
  462. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/dependency-graph.json +0 -0
  463. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/registry.json +0 -0
  464. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/global-skill.md +0 -0
  465. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +0 -0
  466. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/references/example.md +0 -0
  467. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +0 -0
  468. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +0 -0
  469. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +0 -0
  470. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/references/example.md +0 -0
  471. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +0 -0
  472. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/references/example.md +0 -0
  473. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +0 -0
  474. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/references/example.md +0 -0
  475. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +0 -0
  476. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/references/example.md +0 -0
  477. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +0 -0
  478. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/references/example.md +0 -0
  479. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +0 -0
  480. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/references/example.md +0 -0
  481. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +0 -0
  482. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/references/example.md +0 -0
  483. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +0 -0
  484. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/references/example.md +0 -0
  485. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +0 -0
  486. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/references/example.md +0 -0
  487. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +0 -0
  488. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/references/example.md +0 -0
  489. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +0 -0
  490. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/references/example.md +0 -0
  491. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +0 -0
  492. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/references/example.md +0 -0
  493. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +0 -0
  494. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/references/example.md +0 -0
  495. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +0 -0
  496. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +0 -0
  497. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/example.md +0 -0
  498. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +0 -0
  499. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/archive.md +0 -0
  500. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/codeflow.md +0 -0
  501. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/db.md +0 -0
  502. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/graph.md +0 -0
  503. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/image.md +0 -0
  504. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/media.md +0 -0
  505. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/openapi.md +0 -0
  506. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/pdf.md +0 -0
  507. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/playwright.md +0 -0
  508. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/ppt.md +0 -0
  509. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/text.md +0 -0
  510. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/url.md +0 -0
  511. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/word.md +0 -0
  512. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +0 -0
  513. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/rag.py +0 -0
  514. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/assistant/registry.py +0 -0
  515. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/__init__.py +0 -0
  516. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/__main__.py +0 -0
  517. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/dependency_graph.py +0 -0
  518. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/generate.py +0 -0
  519. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/pyproject_util.py +0 -0
  520. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/tools/skill_builder/routing.py +0 -0
  521. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/__init__.py +0 -0
  522. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/api/__init__.py +0 -0
  523. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/api/convert_runner.py +0 -0
  524. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/api/jobs.py +0 -0
  525. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/api/main.py +0 -0
  526. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/api/mcp_server.py +0 -0
  527. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/api/mcp_setup.py +0 -0
  528. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/api/query_options.py +0 -0
  529. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/api/settings.py +0 -0
  530. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/assets.py +0 -0
  531. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/convert_impl.py +0 -0
  532. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/converter.py +0 -0
  533. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/crawl.py +0 -0
  534. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/extract.py +0 -0
  535. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/fetch.py +0 -0
  536. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/html_to_md.py +0 -0
  537. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/options.py +0 -0
  538. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/page_convert.py +0 -0
  539. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/post_convert_assets.py +0 -0
  540. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/url/robots_util.py +0 -0
  541. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/word/__init__.py +0 -0
  542. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/word/api/__init__.py +0 -0
  543. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/word/api/convert_util.py +0 -0
  544. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/word/api/jobs.py +0 -0
  545. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/word/api/main.py +0 -0
  546. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/word/api/mcp_server.py +0 -0
  547. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/word/artifact.py +0 -0
  548. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/word/converter.py +0 -0
  549. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/word/settings.py +0 -0
  550. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/xlsx/__init__.py +0 -0
  551. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/xlsx/api/__init__.py +0 -0
  552. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/xlsx/api/app.py +0 -0
  553. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/xlsx/convert_config.py +0 -0
  554. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/xlsx/converter.py +0 -0
  555. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/xlsx/converter_core.py +0 -0
  556. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/xlsx/excel_reader.py +0 -0
  557. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/xlsx/markdown_emitter.py +0 -0
  558. {mdengine-0.8.0 → mdengine-0.9.0}/src/md_generator/xlsx/mcp_server.py +0 -0
  559. {mdengine-0.8.0 → mdengine-0.9.0}/src/mdengine.egg-info/dependency_links.txt +0 -0
  560. {mdengine-0.8.0 → 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.0
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"
@@ -106,6 +108,9 @@ Requires-Dist: openapi-spec-validator>=0.7.0; extra == "openapi"
106
108
  Provides-Extra: codeflow
107
109
  Requires-Dist: networkx>=3.2.0; extra == "codeflow"
108
110
  Requires-Dist: javalang>=0.13.0; extra == "codeflow"
111
+ Provides-Extra: codeflow-worker
112
+ Requires-Dist: celery>=5.3.0; extra == "codeflow-worker"
113
+ Requires-Dist: redis>=5.0.0; extra == "codeflow-worker"
109
114
  Provides-Extra: codeflow-treesitter
110
115
  Requires-Dist: tree-sitter>=0.21.0; extra == "codeflow-treesitter"
111
116
  Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "codeflow-treesitter"
@@ -113,6 +118,22 @@ Requires-Dist: tree-sitter-typescript>=0.23.0; extra == "codeflow-treesitter"
113
118
  Requires-Dist: tree-sitter-cpp>=0.23.0; extra == "codeflow-treesitter"
114
119
  Provides-Extra: codeflow-clang
115
120
  Requires-Dist: clang>=16.0.0; extra == "codeflow-clang"
121
+ Provides-Extra: codeflow-semantic
122
+ Requires-Dist: numpy>=1.24.0; extra == "codeflow-semantic"
123
+ Requires-Dist: scikit-learn>=1.3.0; extra == "codeflow-semantic"
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"
116
137
  Provides-Extra: api
117
138
  Requires-Dist: fastapi>=0.115.0; extra == "api"
118
139
  Requires-Dist: uvicorn[standard]>=0.32.0; extra == "api"
@@ -141,6 +162,8 @@ Requires-Dist: mdengine[graph]; extra == "dev"
141
162
  Requires-Dist: mdengine[openapi]; extra == "dev"
142
163
  Requires-Dist: mdengine[codeflow]; extra == "dev"
143
164
  Requires-Dist: mdengine[codeflow-treesitter]; extra == "dev"
165
+ Requires-Dist: mdengine[log]; extra == "dev"
166
+ Requires-Dist: mdengine[log-cluster]; extra == "dev"
144
167
  Provides-Extra: all
145
168
  Requires-Dist: pymupdf>=1.24.0; extra == "all"
146
169
  Requires-Dist: pdfplumber>=0.11.0; extra == "all"
@@ -389,19 +412,19 @@ python pdf-to-md\converter.py input.pdf out.md
389
412
  PYTHONPATH=src python pdf-to-md/converter.py input.pdf out.md
390
413
  ```
391
414
 
392
- ### 6. Convert every file in `docs/` (strictly command-line)
415
+ ### 6. Convert every file in `example/` (strictly command-line)
393
416
 
394
- 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:
395
418
 
396
419
  | Platform | Command (run from **repository root** unless noted) |
397
420
  |----------|------------------------------------------------------|
398
421
  | Windows | `powershell -ExecutionPolicy Bypass -File scripts/run-docs-cli.ps1` |
399
- | 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\`) |
400
423
  | macOS / Linux | `bash scripts/run-docs-cli.sh` |
401
424
 
402
425
  Optional environment variables for the shell script: `DOCS_DIR`, `OUT_DIR`, `IMAGE_ENGINES` (default `tess`). PowerShell script parameters: `-DocsDir`, `-OutDir`, `-ImageEngines`.
403
426
 
404
- 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.
405
428
 
406
429
  ---
407
430
 
@@ -876,6 +899,29 @@ python -m pytest
876
899
 
877
900
  Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/tests/`), **`graph-to-md/tests/`**, **`openapi-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.
878
901
 
902
+ ### Codeflow (`md_generator.codeflow`)
903
+
904
+ 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).
905
+
906
+ 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).
907
+
908
+ - **Formats:** pass **`--formats md,mermaid,json,html`** (comma-separated). **`--output`** is the **output directory**, not the format list.
909
+ - **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.
910
+ - **Markdown intelligence:** flow and entry Markdown include **Called By** and **Impact** lists (capped with **`--intelligence-list-cap`**, default 80).
911
+ - **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).
912
+ - **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`**).
913
+ - **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`**.
914
+ - **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).
915
+ - **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.)
916
+ - **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.
917
+ - **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.
918
+ - **Kinds / filters:** `--include` accepts aliases such as **`portlet`** / **`liferay`** for portlet entries.
919
+ - **Operators:** each run writes **`scan-summary.md`** at the output root (counts, warnings, fallback mode) unless **`--no-scan-summary`** is set.
920
+
921
+ ```bash
922
+ python -m md_generator.codeflow.cli.main scan path/to/src --output ./codeflow-out --lang java
923
+ ```
924
+
879
925
  ---
880
926
 
881
927
  ## Repository layout
@@ -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
 
@@ -705,6 +705,29 @@ python -m pytest
705
705
 
706
706
  Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/tests/`), **`graph-to-md/tests/`**, **`openapi-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.
707
707
 
708
+ ### Codeflow (`md_generator.codeflow`)
709
+
710
+ 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).
711
+
712
+ 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).
713
+
714
+ - **Formats:** pass **`--formats md,mermaid,json,html`** (comma-separated). **`--output`** is the **output directory**, not the format list.
715
+ - **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.
716
+ - **Markdown intelligence:** flow and entry Markdown include **Called By** and **Impact** lists (capped with **`--intelligence-list-cap`**, default 80).
717
+ - **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).
718
+ - **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`**).
719
+ - **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`**.
720
+ - **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).
721
+ - **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.)
722
+ - **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.
723
+ - **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.
724
+ - **Kinds / filters:** `--include` accepts aliases such as **`portlet`** / **`liferay`** for portlet entries.
725
+ - **Operators:** each run writes **`scan-summary.md`** at the output root (counts, warnings, fallback mode) unless **`--no-scan-summary`** is set.
726
+
727
+ ```bash
728
+ python -m md_generator.codeflow.cli.main scan path/to/src --output ./codeflow-out --lang java
729
+ ```
730
+
708
731
  ---
709
732
 
710
733
  ## Repository layout
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mdengine"
7
- version = "0.8.0"
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",
@@ -115,6 +115,11 @@ codeflow = [
115
115
  "networkx>=3.2.0",
116
116
  "javalang>=0.13.0",
117
117
  ]
118
+ # Optional: horizontal workers for codeflow API (Celery + Redis). Default job path uses threads.
119
+ codeflow-worker = [
120
+ "celery>=5.3.0",
121
+ "redis>=5.0.0",
122
+ ]
118
123
  codeflow-treesitter = [
119
124
  "tree-sitter>=0.21.0",
120
125
  "tree-sitter-javascript>=0.21.0",
@@ -124,6 +129,28 @@ codeflow-treesitter = [
124
129
  codeflow-clang = [
125
130
  "clang>=16.0.0",
126
131
  ]
132
+ # Embeddings + semantic clustering (SentenceTransformers pulls torch; large install).
133
+ codeflow-semantic = [
134
+ "numpy>=1.24.0",
135
+ "scikit-learn>=1.3.0",
136
+ "sentence-transformers>=3.0.0",
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
+ ]
127
154
  api = [
128
155
  "fastapi>=0.115.0",
129
156
  "uvicorn[standard]>=0.32.0",
@@ -150,6 +177,8 @@ dev = [
150
177
  "mdengine[openapi]",
151
178
  "mdengine[codeflow]",
152
179
  "mdengine[codeflow-treesitter]",
180
+ "mdengine[log]",
181
+ "mdengine[log-cluster]",
153
182
  ]
154
183
  all = [
155
184
  "pymupdf>=1.24.0",
@@ -218,6 +247,9 @@ md-codeflow = "md_generator.codeflow.cli.main:main"
218
247
  codeflow = "md_generator.codeflow.cli.main:main"
219
248
  md-codeflow-api = "md_generator.codeflow.api.run:main"
220
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"
221
253
  mdengine = "md_generator.engine_cli:main"
222
254
 
223
255
  [tool.setuptools.packages.find]
@@ -228,6 +260,7 @@ include = ["md_generator*"]
228
260
  "md_generator.db.config" = ["*.yaml"]
229
261
  "md_generator.graph.config" = ["*.yaml"]
230
262
  "md_generator.openapi.config" = ["*.yaml"]
263
+ "md_generator.log.config" = ["*.yaml", "presets/*.yaml"]
231
264
  "md_generator.tools.assistant" = ["data/**/*"]
232
265
 
233
266
  [tool.pytest.ini_options]
@@ -250,5 +283,6 @@ testpaths = [
250
283
  "graph-to-md/tests",
251
284
  "openapi-to-md/tests",
252
285
  "codeflow-to-md/tests",
286
+ "log-to-md/tests",
253
287
  ]
254
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.0"
3
+ __version__ = "0.9.0"
4
4
 
5
5
  __all__ = ["__version__"]
@@ -4,6 +4,9 @@ from dataclasses import dataclass, field
4
4
 
5
5
  import networkx as nx
6
6
 
7
+ from md_generator.codeflow.graph import relations as rel
8
+ from md_generator.codeflow.graph.multigraph_utils import CodeflowGraph, collapsed_digraph_for_relations
9
+
7
10
 
8
11
  @dataclass(slots=True)
9
12
  class FlowSlice:
@@ -15,16 +18,25 @@ class FlowSlice:
15
18
  truncated: bool = False
16
19
 
17
20
 
21
+ _DEFAULT_FLOW_RELATIONS = frozenset({rel.REL_CALLS})
22
+
23
+
18
24
  def walk_with_depth(
19
- g: nx.DiGraph,
25
+ g: CodeflowGraph,
20
26
  start: str,
21
27
  max_depth: int,
28
+ *,
29
+ relations: frozenset[str] | None = None,
22
30
  ) -> tuple[set[str], list[tuple[str, str, dict]], set[str], bool]:
23
- """Reachability from start within ``max_depth`` hops (shortest-path layering)."""
31
+ """Reachability from ``start`` within ``max_depth`` hops over selected relations (default: CALLS only)."""
24
32
  if start not in g:
25
33
  return {start}, [], set(), False
34
+ rels = relations if relations is not None else _DEFAULT_FLOW_RELATIONS
35
+ cg = collapsed_digraph_for_relations(g, rels)
36
+ if start not in cg:
37
+ return {start}, [], set(), False
26
38
  try:
27
- plen = nx.single_source_shortest_path_length(g, start, cutoff=max_depth)
39
+ plen = nx.single_source_shortest_path_length(cg, start, cutoff=max_depth)
28
40
  except nx.NetworkXError:
29
41
  plen = {start: 0}
30
42
 
@@ -36,13 +48,18 @@ def walk_with_depth(
36
48
  for u in nodes:
37
49
  du = plen[u]
38
50
  if du >= max_depth:
39
- succ = list(g.successors(u))
51
+ succ = list(cg.successors(u))
40
52
  if succ:
41
53
  truncated = True
42
54
  continue
43
- for v in g.successors(u):
44
- ed = dict(g.edges[u, v])
45
- edges_out.append((u, v, ed))
55
+ for v in cg.successors(u):
56
+ if not g.has_edge(u, v):
57
+ continue
58
+ for _k, ed in g[u][v].items():
59
+ er = ed.get("relation") or ed.get("kind") or rel.REL_CALLS
60
+ if er not in rels:
61
+ continue
62
+ edges_out.append((u, v, dict(ed)))
46
63
  dv = plen.get(v)
47
64
  if dv is not None and dv <= du:
48
65
  cycle_guess.add(v)
@@ -53,11 +70,13 @@ def walk_with_depth(
53
70
 
54
71
 
55
72
  def slice_from_entry(
56
- g: nx.DiGraph,
73
+ g: CodeflowGraph,
57
74
  entry_id: str,
58
75
  max_depth: int,
76
+ *,
77
+ relations: frozenset[str] | None = None,
59
78
  ) -> FlowSlice:
60
- nodes, edges, cycles, truncated = walk_with_depth(g, entry_id, max_depth)
79
+ nodes, edges, cycles, truncated = walk_with_depth(g, entry_id, max_depth, relations=relations)
61
80
  return FlowSlice(
62
81
  entry_id=entry_id,
63
82
  nodes=nodes,
@@ -7,7 +7,7 @@ import threading
7
7
  import time
8
8
  import uuid
9
9
  import zipfile
10
- from dataclasses import dataclass
10
+ from dataclasses import dataclass, replace
11
11
  from pathlib import Path
12
12
  from typing import Any
13
13
 
@@ -101,24 +101,7 @@ class CodeflowJobManager:
101
101
  zf.extractall(src)
102
102
 
103
103
  out = ws / "out"
104
- cfg = ScanConfig(
105
- project_root=src,
106
- output_path=out,
107
- formats=cfg_template.formats,
108
- depth=cfg_template.depth,
109
- languages=cfg_template.languages,
110
- entry=cfg_template.entry,
111
- include=cfg_template.include,
112
- exclude=cfg_template.exclude,
113
- include_internal=cfg_template.include_internal,
114
- async_mode=cfg_template.async_mode,
115
- jobs=True,
116
- runtime=cfg_template.runtime,
117
- paths_override=cfg_template.paths_override,
118
- business_rules=cfg_template.business_rules,
119
- business_rules_sql=cfg_template.business_rules_sql,
120
- business_rules_combined=cfg_template.business_rules_combined,
121
- )
104
+ cfg = replace(cfg_template, project_root=src, output_path=out, jobs=True)
122
105
  now = time.time()
123
106
  cfg_dump = json.dumps(scan_config_dump(cfg), sort_keys=True)
124
107
  assert self._conn is not None
@@ -223,6 +206,11 @@ class CodeflowJobManager:
223
206
  lw = LoadedWorkspace(root=cfg.project_root, cleanup_dir=None)
224
207
 
225
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()
226
214
  run_scan(cfg, workspace=lw)
227
215
  on_prog(90, "zip")
228
216