mdengine 0.6.0__tar.gz → 0.8.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 (411) hide show
  1. {mdengine-0.6.0 → mdengine-0.8.0}/PKG-INFO +132 -6
  2. {mdengine-0.6.0 → mdengine-0.8.0}/README.md +114 -4
  3. {mdengine-0.6.0 → mdengine-0.8.0}/pyproject.toml +28 -2
  4. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/__init__.py +1 -1
  5. mdengine-0.8.0/src/md_generator/codeflow/__init__.py +7 -0
  6. mdengine-0.8.0/src/md_generator/codeflow/analyzers/__init__.py +9 -0
  7. mdengine-0.8.0/src/md_generator/codeflow/analyzers/flow_analyzer.py +68 -0
  8. mdengine-0.8.0/src/md_generator/codeflow/api/job_manager.py +249 -0
  9. mdengine-0.8.0/src/md_generator/codeflow/api/main.py +185 -0
  10. mdengine-0.8.0/src/md_generator/codeflow/api/mcp_server.py +16 -0
  11. mdengine-0.8.0/src/md_generator/codeflow/api/run.py +15 -0
  12. mdengine-0.8.0/src/md_generator/codeflow/api/schemas.py +96 -0
  13. mdengine-0.8.0/src/md_generator/codeflow/api/settings.py +28 -0
  14. mdengine-0.8.0/src/md_generator/codeflow/cli/main.py +132 -0
  15. mdengine-0.8.0/src/md_generator/codeflow/core/__init__.py +6 -0
  16. mdengine-0.8.0/src/md_generator/codeflow/core/extractor.py +193 -0
  17. mdengine-0.8.0/src/md_generator/codeflow/core/run_config.py +31 -0
  18. mdengine-0.8.0/src/md_generator/codeflow/detectors/__init__.py +7 -0
  19. mdengine-0.8.0/src/md_generator/codeflow/detectors/api_detector.py +222 -0
  20. mdengine-0.8.0/src/md_generator/codeflow/detectors/entry_detector.py +46 -0
  21. mdengine-0.8.0/src/md_generator/codeflow/detectors/entry_rank.py +51 -0
  22. mdengine-0.8.0/src/md_generator/codeflow/detectors/kafka_detector.py +47 -0
  23. mdengine-0.8.0/src/md_generator/codeflow/generators/business_rules_markdown.py +68 -0
  24. mdengine-0.8.0/src/md_generator/codeflow/generators/cytoscape_enrich.py +97 -0
  25. mdengine-0.8.0/src/md_generator/codeflow/generators/entry_markdown.py +198 -0
  26. mdengine-0.8.0/src/md_generator/codeflow/generators/flow_summary.py +262 -0
  27. mdengine-0.8.0/src/md_generator/codeflow/generators/html.py +361 -0
  28. mdengine-0.8.0/src/md_generator/codeflow/generators/markdown.py +35 -0
  29. mdengine-0.8.0/src/md_generator/codeflow/generators/mermaid.py +45 -0
  30. mdengine-0.8.0/src/md_generator/codeflow/generators/sequence.py +33 -0
  31. mdengine-0.8.0/src/md_generator/codeflow/graph/__init__.py +5 -0
  32. mdengine-0.8.0/src/md_generator/codeflow/graph/builder.py +181 -0
  33. mdengine-0.8.0/src/md_generator/codeflow/ingestion/__init__.py +10 -0
  34. mdengine-0.8.0/src/md_generator/codeflow/ingestion/loader.py +66 -0
  35. mdengine-0.8.0/src/md_generator/codeflow/lang_dispatch.py +64 -0
  36. mdengine-0.8.0/src/md_generator/codeflow/mcp/server.py +42 -0
  37. mdengine-0.8.0/src/md_generator/codeflow/models/__init__.py +21 -0
  38. mdengine-0.8.0/src/md_generator/codeflow/models/ir.py +97 -0
  39. mdengine-0.8.0/src/md_generator/codeflow/parsers/__init__.py +18 -0
  40. mdengine-0.8.0/src/md_generator/codeflow/parsers/base.py +57 -0
  41. mdengine-0.8.0/src/md_generator/codeflow/parsers/cpp_parser.py +155 -0
  42. mdengine-0.8.0/src/md_generator/codeflow/parsers/go_parser.py +82 -0
  43. mdengine-0.8.0/src/md_generator/codeflow/parsers/java_parser.py +116 -0
  44. mdengine-0.8.0/src/md_generator/codeflow/parsers/php_parser.py +79 -0
  45. mdengine-0.8.0/src/md_generator/codeflow/parsers/python_parser.py +295 -0
  46. mdengine-0.8.0/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +119 -0
  47. mdengine-0.8.0/src/md_generator/codeflow/rules/__init__.py +5 -0
  48. mdengine-0.8.0/src/md_generator/codeflow/rules/collector.py +284 -0
  49. mdengine-0.8.0/src/md_generator/codeflow/runtime/tracer.py +14 -0
  50. mdengine-0.8.0/src/md_generator/codeflow/utils/__init__.py +1 -0
  51. mdengine-0.8.0/src/md_generator/codeflow/utils/tools_root.py +13 -0
  52. mdengine-0.8.0/src/md_generator/engine_cli.py +65 -0
  53. mdengine-0.8.0/src/md_generator/graph/mcp/sse.py +8 -0
  54. mdengine-0.8.0/src/md_generator/openapi/api/__init__.py +1 -0
  55. mdengine-0.8.0/src/md_generator/openapi/cli/__init__.py +1 -0
  56. mdengine-0.8.0/src/md_generator/openapi/config/__init__.py +1 -0
  57. mdengine-0.8.0/src/md_generator/openapi/core/__init__.py +1 -0
  58. mdengine-0.8.0/src/md_generator/openapi/mcp/__init__.py +1 -0
  59. mdengine-0.8.0/src/md_generator/tools/__init__.py +1 -0
  60. mdengine-0.8.0/src/md_generator/tools/assistant/__init__.py +6 -0
  61. mdengine-0.8.0/src/md_generator/tools/assistant/adapters/__init__.py +5 -0
  62. mdengine-0.8.0/src/md_generator/tools/assistant/adapters/claude.py +30 -0
  63. mdengine-0.8.0/src/md_generator/tools/assistant/adapters/cursor.py +20 -0
  64. mdengine-0.8.0/src/md_generator/tools/assistant/adapters/openai.py +27 -0
  65. mdengine-0.8.0/src/md_generator/tools/assistant/agent.py +152 -0
  66. mdengine-0.8.0/src/md_generator/tools/assistant/bundle.py +12 -0
  67. mdengine-0.8.0/src/md_generator/tools/assistant/chunks.py +54 -0
  68. mdengine-0.8.0/src/md_generator/tools/assistant/cli.py +73 -0
  69. mdengine-0.8.0/src/md_generator/tools/assistant/data/dependency-graph.json +110 -0
  70. mdengine-0.8.0/src/md_generator/tools/assistant/data/registry.json +672 -0
  71. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/global-skill.md +66 -0
  72. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +71 -0
  73. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/references/example.md +8 -0
  74. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +74 -0
  75. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +8 -0
  76. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +73 -0
  77. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/references/example.md +11 -0
  78. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +78 -0
  79. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/references/example.md +21 -0
  80. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +73 -0
  81. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/references/example.md +6 -0
  82. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +73 -0
  83. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/references/example.md +6 -0
  84. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +80 -0
  85. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/references/example.md +11 -0
  86. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +73 -0
  87. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/references/example.md +6 -0
  88. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +71 -0
  89. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/references/example.md +6 -0
  90. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +74 -0
  91. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/references/example.md +7 -0
  92. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +71 -0
  93. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/references/example.md +6 -0
  94. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +71 -0
  95. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/references/example.md +6 -0
  96. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +71 -0
  97. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/references/example.md +11 -0
  98. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +71 -0
  99. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/references/example.md +6 -0
  100. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +71 -0
  101. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/references/example.md +6 -0
  102. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +46 -0
  103. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +46 -0
  104. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/example.md +24 -0
  105. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +156 -0
  106. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/archive.md +67 -0
  107. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/codeflow.md +70 -0
  108. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/db.md +69 -0
  109. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/graph.md +69 -0
  110. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/image.md +69 -0
  111. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/media.md +76 -0
  112. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/openapi.md +69 -0
  113. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/pdf.md +67 -0
  114. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/playwright.md +70 -0
  115. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/ppt.md +67 -0
  116. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/text.md +67 -0
  117. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/url.md +67 -0
  118. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/word.md +67 -0
  119. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +67 -0
  120. mdengine-0.8.0/src/md_generator/tools/assistant/rag.py +69 -0
  121. mdengine-0.8.0/src/md_generator/tools/assistant/registry.py +85 -0
  122. mdengine-0.8.0/src/md_generator/tools/skill_builder/__init__.py +6 -0
  123. mdengine-0.8.0/src/md_generator/tools/skill_builder/__main__.py +44 -0
  124. mdengine-0.8.0/src/md_generator/tools/skill_builder/dependency_graph.py +109 -0
  125. mdengine-0.8.0/src/md_generator/tools/skill_builder/generate.py +501 -0
  126. mdengine-0.8.0/src/md_generator/tools/skill_builder/pyproject_util.py +50 -0
  127. mdengine-0.8.0/src/md_generator/tools/skill_builder/routing.py +98 -0
  128. {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/PKG-INFO +132 -6
  129. {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/SOURCES.txt +122 -0
  130. {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/entry_points.txt +4 -0
  131. {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/requires.txt +21 -0
  132. mdengine-0.6.0/src/md_generator/engine_cli.py +0 -34
  133. {mdengine-0.6.0 → mdengine-0.8.0}/LICENSE +0 -0
  134. {mdengine-0.6.0 → mdengine-0.8.0}/setup.cfg +0 -0
  135. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/__init__.py +0 -0
  136. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/__init__.py +0 -0
  137. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/convert_runner.py +0 -0
  138. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/jobs.py +0 -0
  139. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/main.py +0 -0
  140. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/mcp_server.py +0 -0
  141. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/mcp_setup.py +0 -0
  142. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/query_options.py +0 -0
  143. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/settings.py +0 -0
  144. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/convert_impl.py +0 -0
  145. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/converter.py +0 -0
  146. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/options.py +0 -0
  147. {mdengine-0.6.0/src/md_generator/openapi → mdengine-0.8.0/src/md_generator/codeflow}/api/__init__.py +0 -0
  148. {mdengine-0.6.0/src/md_generator/graph/mcp → mdengine-0.8.0/src/md_generator/codeflow/api}/sse.py +0 -0
  149. {mdengine-0.6.0/src/md_generator/openapi → mdengine-0.8.0/src/md_generator/codeflow}/cli/__init__.py +0 -0
  150. {mdengine-0.6.0/src/md_generator/openapi/config → mdengine-0.8.0/src/md_generator/codeflow/generators}/__init__.py +0 -0
  151. {mdengine-0.6.0/src/md_generator/openapi/core → mdengine-0.8.0/src/md_generator/codeflow/mcp}/__init__.py +0 -0
  152. {mdengine-0.6.0/src/md_generator/openapi/mcp → mdengine-0.8.0/src/md_generator/codeflow/runtime}/__init__.py +0 -0
  153. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/__init__.py +0 -0
  154. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/__init__.py +0 -0
  155. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/factory.py +0 -0
  156. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
  157. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
  158. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
  159. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
  160. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/sql_common.py +0 -0
  161. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
  162. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/__init__.py +0 -0
  163. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/main.py +0 -0
  164. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/mcp_server.py +0 -0
  165. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/run.py +0 -0
  166. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/schemas.py +0 -0
  167. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/settings.py +0 -0
  168. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/sqlite_upload.py +0 -0
  169. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/cli/__init__.py +0 -0
  170. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/cli/main.py +0 -0
  171. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/config/__init__.py +0 -0
  172. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/config/default.yaml +0 -0
  173. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/__init__.py +0 -0
  174. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/base_adapter.py +0 -0
  175. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/__init__.py +0 -0
  176. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
  177. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/filter.py +0 -0
  178. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
  179. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
  180. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/model.py +0 -0
  181. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/pipeline.py +0 -0
  182. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/render.py +0 -0
  183. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/extractor.py +0 -0
  184. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/job_manager.py +0 -0
  185. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/markdown_writer.py +0 -0
  186. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/models.py +0 -0
  187. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/run_config.py +0 -0
  188. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/util.py +0 -0
  189. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/zip_export.py +0 -0
  190. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/mcp/__init__.py +0 -0
  191. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/mcp/server.py +0 -0
  192. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/mcp/sse.py +0 -0
  193. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/mcp/stream.py +0 -0
  194. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/__init__.py +0 -0
  195. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/__init__.py +0 -0
  196. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/factory.py +0 -0
  197. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
  198. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
  199. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/__init__.py +0 -0
  200. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/main.py +0 -0
  201. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/mcp_server.py +0 -0
  202. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/run.py +0 -0
  203. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/schemas.py +0 -0
  204. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/settings.py +0 -0
  205. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/cli/__init__.py +0 -0
  206. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/cli/main.py +0 -0
  207. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/config/__init__.py +0 -0
  208. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/config/default.yaml +0 -0
  209. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/__init__.py +0 -0
  210. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/base_adapter.py +0 -0
  211. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/extractor.py +0 -0
  212. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/graph_builder.py +0 -0
  213. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/job_manager.py +0 -0
  214. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/markdown_writer.py +0 -0
  215. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/models.py +0 -0
  216. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/run_config.py +0 -0
  217. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/viz.py +0 -0
  218. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/zip_export.py +0 -0
  219. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/__init__.py +0 -0
  220. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/server.py +0 -0
  221. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/stream.py +0 -0
  222. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/__init__.py +0 -0
  223. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/__init__.py +0 -0
  224. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/main.py +0 -0
  225. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/mcp_server.py +0 -0
  226. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/query_options.py +0 -0
  227. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/settings.py +0 -0
  228. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/staging.py +0 -0
  229. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/zip_bundle.py +0 -0
  230. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/__init__.py +0 -0
  231. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/base.py +0 -0
  232. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/easy.py +0 -0
  233. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/paddle.py +0 -0
  234. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/tesseract.py +0 -0
  235. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/convert_impl.py +0 -0
  236. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/converter.py +0 -0
  237. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/emit.py +0 -0
  238. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/io_util.py +0 -0
  239. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/utils.py +0 -0
  240. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/__init__.py +0 -0
  241. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/__init__.py +0 -0
  242. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/__init__.py +0 -0
  243. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/main.py +0 -0
  244. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/mcp_server.py +0 -0
  245. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/mcp_setup.py +0 -0
  246. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/run.py +0 -0
  247. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/settings.py +0 -0
  248. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/converter.py +0 -0
  249. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/formatter.py +0 -0
  250. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/service.py +0 -0
  251. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/document_converter.py +0 -0
  252. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/job_store.py +0 -0
  253. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/__init__.py +0 -0
  254. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/__init__.py +0 -0
  255. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/main.py +0 -0
  256. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/mcp_server.py +0 -0
  257. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/mcp_setup.py +0 -0
  258. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/run.py +0 -0
  259. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/settings.py +0 -0
  260. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/converter.py +0 -0
  261. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/formatter.py +0 -0
  262. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/service.py +0 -0
  263. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/whisper_language.py +0 -0
  264. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/__init__.py +0 -0
  265. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/__init__.py +0 -0
  266. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/main.py +0 -0
  267. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
  268. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/mcp_setup.py +0 -0
  269. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/run.py +0 -0
  270. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/settings.py +0 -0
  271. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/converter.py +0 -0
  272. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/formatter.py +0 -0
  273. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/metadata.py +0 -0
  274. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/service.py +0 -0
  275. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/transcript.py +0 -0
  276. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/__init__.py +0 -0
  277. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/main.py +0 -0
  278. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/mcp_server.py +0 -0
  279. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/run.py +0 -0
  280. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/schemas.py +0 -0
  281. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/settings.py +0 -0
  282. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/cli/main.py +0 -0
  283. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/config/default.yaml +0 -0
  284. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/converters/__init__.py +0 -0
  285. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
  286. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/core/extractor.py +0 -0
  287. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/core/run_config.py +0 -0
  288. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/core/zip_export.py +0 -0
  289. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/__init__.py +0 -0
  290. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/rules.py +0 -0
  291. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
  292. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/generators/__init__.py +0 -0
  293. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
  294. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/loaders/__init__.py +0 -0
  295. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
  296. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/mcp/server.py +0 -0
  297. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/models/__init__.py +0 -0
  298. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/models/domain.py +0 -0
  299. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/__init__.py +0 -0
  300. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/operations.py +0 -0
  301. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
  302. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/parsers/__init__.py +0 -0
  303. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
  304. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/resolvers/__init__.py +0 -0
  305. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
  306. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/writers/__init__.py +0 -0
  307. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
  308. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/__init__.py +0 -0
  309. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/__init__.py +0 -0
  310. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/main.py +0 -0
  311. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/mcp_server.py +0 -0
  312. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/settings.py +0 -0
  313. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/zip_bundle.py +0 -0
  314. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/converter.py +0 -0
  315. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/md_emit.py +0 -0
  316. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/pdf_extract.py +0 -0
  317. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/utils.py +0 -0
  318. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/__init__.py +0 -0
  319. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/__init__.py +0 -0
  320. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/convert_runner.py +0 -0
  321. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/jobs.py +0 -0
  322. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/main.py +0 -0
  323. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/mcp_server.py +0 -0
  324. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/mcp_setup.py +0 -0
  325. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/run.py +0 -0
  326. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/settings.py +0 -0
  327. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/assets.py +0 -0
  328. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/chunker.py +0 -0
  329. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/cli.py +0 -0
  330. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/extractor.py +0 -0
  331. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/html_to_md.py +0 -0
  332. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/options.py +0 -0
  333. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/pipeline.py +0 -0
  334. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/playwright_fetcher.py +0 -0
  335. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/__init__.py +0 -0
  336. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/__init__.py +0 -0
  337. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/convert_runner.py +0 -0
  338. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/jobs.py +0 -0
  339. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/main.py +0 -0
  340. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/mcp_server.py +0 -0
  341. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/mcp_setup.py +0 -0
  342. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/query_options.py +0 -0
  343. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/settings.py +0 -0
  344. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/convert_impl.py +0 -0
  345. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/converter.py +0 -0
  346. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/embedded_extract.py +0 -0
  347. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/ooxml_media.py +0 -0
  348. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/options.py +0 -0
  349. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/post_assets.py +0 -0
  350. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/text_formatting.py +0 -0
  351. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
  352. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
  353. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
  354. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
  355. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/zip_deep.py +0 -0
  356. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/__init__.py +0 -0
  357. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/__init__.py +0 -0
  358. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/convert_runner.py +0 -0
  359. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/jobs.py +0 -0
  360. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/main.py +0 -0
  361. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/mcp_server.py +0 -0
  362. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/mcp_setup.py +0 -0
  363. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/query_options.py +0 -0
  364. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/settings.py +0 -0
  365. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/convert_impl.py +0 -0
  366. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/converter.py +0 -0
  367. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/format_detect.py +0 -0
  368. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_json.py +0 -0
  369. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_txt.py +0 -0
  370. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_xml.py +0 -0
  371. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/options.py +0 -0
  372. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/__init__.py +0 -0
  373. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/__init__.py +0 -0
  374. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/convert_runner.py +0 -0
  375. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/jobs.py +0 -0
  376. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/main.py +0 -0
  377. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/mcp_server.py +0 -0
  378. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/mcp_setup.py +0 -0
  379. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/query_options.py +0 -0
  380. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/settings.py +0 -0
  381. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/assets.py +0 -0
  382. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/convert_impl.py +0 -0
  383. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/converter.py +0 -0
  384. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/crawl.py +0 -0
  385. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/extract.py +0 -0
  386. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/fetch.py +0 -0
  387. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/html_to_md.py +0 -0
  388. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/options.py +0 -0
  389. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/page_convert.py +0 -0
  390. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/post_convert_assets.py +0 -0
  391. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/robots_util.py +0 -0
  392. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/__init__.py +0 -0
  393. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/__init__.py +0 -0
  394. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/convert_util.py +0 -0
  395. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/jobs.py +0 -0
  396. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/main.py +0 -0
  397. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/mcp_server.py +0 -0
  398. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/artifact.py +0 -0
  399. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/converter.py +0 -0
  400. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/settings.py +0 -0
  401. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/__init__.py +0 -0
  402. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/api/__init__.py +0 -0
  403. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/api/app.py +0 -0
  404. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/convert_config.py +0 -0
  405. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/converter.py +0 -0
  406. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/converter_core.py +0 -0
  407. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/excel_reader.py +0 -0
  408. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/markdown_emitter.py +0 -0
  409. {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/mcp_server.py +0 -0
  410. {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/dependency_links.txt +0 -0
  411. {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/top_level.txt +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mdengine
3
- Version: 0.6.0
3
+ Version: 0.8.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
7
7
  Project-URL: Homepage, https://github.com/vishal7090/md-generator
8
8
  Project-URL: Repository, https://github.com/vishal7090/md-generator
9
9
  Project-URL: Issues, https://github.com/vishal7090/md-generator/issues
10
- Keywords: markdown,pdf,docx,pptx,xlsx,ocr,zip,url,html,youtube,playwright,database,openapi
10
+ Keywords: markdown,pdf,docx,pptx,xlsx,ocr,zip,url,html,youtube,playwright,database,openapi,codeflow
11
11
  Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3 :: Only
13
13
  Classifier: Topic :: Text Processing :: Markup :: Markdown
@@ -103,6 +103,16 @@ Provides-Extra: openapi
103
103
  Requires-Dist: pyyaml>=6.0.0; extra == "openapi"
104
104
  Requires-Dist: prance>=23.6.0; extra == "openapi"
105
105
  Requires-Dist: openapi-spec-validator>=0.7.0; extra == "openapi"
106
+ Provides-Extra: codeflow
107
+ Requires-Dist: networkx>=3.2.0; extra == "codeflow"
108
+ Requires-Dist: javalang>=0.13.0; extra == "codeflow"
109
+ Provides-Extra: codeflow-treesitter
110
+ Requires-Dist: tree-sitter>=0.21.0; extra == "codeflow-treesitter"
111
+ Requires-Dist: tree-sitter-javascript>=0.21.0; extra == "codeflow-treesitter"
112
+ Requires-Dist: tree-sitter-typescript>=0.23.0; extra == "codeflow-treesitter"
113
+ Requires-Dist: tree-sitter-cpp>=0.23.0; extra == "codeflow-treesitter"
114
+ Provides-Extra: codeflow-clang
115
+ Requires-Dist: clang>=16.0.0; extra == "codeflow-clang"
106
116
  Provides-Extra: api
107
117
  Requires-Dist: fastapi>=0.115.0; extra == "api"
108
118
  Requires-Dist: uvicorn[standard]>=0.32.0; extra == "api"
@@ -112,6 +122,10 @@ Requires-Dist: pydantic-settings>=2.0.0; extra == "api"
112
122
  Provides-Extra: mcp
113
123
  Requires-Dist: mcp>=1.2.0; extra == "mcp"
114
124
  Requires-Dist: fastmcp>=2.3.0; extra == "mcp"
125
+ Provides-Extra: skill-openai
126
+ Requires-Dist: openai>=1.30.0; extra == "skill-openai"
127
+ Provides-Extra: skill-rag-chroma
128
+ Requires-Dist: chromadb>=0.4.22; extra == "skill-rag-chroma"
115
129
  Provides-Extra: dev
116
130
  Requires-Dist: pytest>=8.0.0; extra == "dev"
117
131
  Requires-Dist: httpx>=0.27.0; extra == "dev"
@@ -125,6 +139,8 @@ Requires-Dist: mdengine[playwright]; extra == "dev"
125
139
  Requires-Dist: mdengine[db]; extra == "dev"
126
140
  Requires-Dist: mdengine[graph]; extra == "dev"
127
141
  Requires-Dist: mdengine[openapi]; extra == "dev"
142
+ Requires-Dist: mdengine[codeflow]; extra == "dev"
143
+ Requires-Dist: mdengine[codeflow-treesitter]; extra == "dev"
128
144
  Provides-Extra: all
129
145
  Requires-Dist: pymupdf>=1.24.0; extra == "all"
130
146
  Requires-Dist: pdfplumber>=0.11.0; extra == "all"
@@ -155,14 +171,14 @@ Dynamic: license-file
155
171
 
156
172
  # mdengine
157
173
 
158
- Single Python distribution for converting **PDF**, **Word (.docx)**, **PowerPoint (.pptx)**, **Excel (.xlsx/.xlsm)**, **images** (OCR), **plain text / JSON / XML**, **ZIP archives**, **audio / video** (Whisper transcription → Markdown), **database metadata** (SQL + Mongo), and **graphs** (Neo4j / NetworkX → Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
174
+ Single Python distribution for converting **PDF**, **Word (.docx)**, **PowerPoint (.pptx)**, **Excel (.xlsx/.xlsm)**, **images** (OCR), **plain text / JSON / XML**, **ZIP archives**, **audio / video** (Whisper transcription → Markdown), **database metadata** (SQL + Mongo), **graphs** (Neo4j / NetworkX → Markdown), **OpenAPI** specs, **Playwright**-captured web pages (including SPAs), and **source code** (codeflow → architecture Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
159
175
 
160
176
  - **PyPI name:** `mdengine` (import package: `md_generator`)
161
177
  - **Source:** [github.com/vishal7090/md-generator](https://github.com/vishal7090/md-generator)
162
178
  - **Python:** 3.10+
163
179
  - **License:** [MIT](LICENSE)
164
180
 
165
- **Quick links:** [On a new computer](#on-a-new-computer) · [Command-line execution](#command-line-execution) · [Python library](#python-library) · [Audio and video](#audio-and-video-to-markdown) · [HTTP API](#http-api-fastapi) · [MCP](#mcp-model-context-protocol) · [Development](#development) · [Code of Conduct](CODE_OF_CONDUCT.md)
181
+ **Quick links:** [On a new computer](#on-a-new-computer) · [Command-line execution](#command-line-execution) · [Python library](#python-library) · [Audio and video](#audio-and-video-to-markdown) · [HTTP API](#http-api-fastapi) · [MCP](#mcp-model-context-protocol) · [AI assistant CLI](#ai-assistant-cli) · [Development](#development) · [Code of Conduct](CODE_OF_CONDUCT.md)
166
182
 
167
183
  ---
168
184
 
@@ -236,6 +252,8 @@ pip install "mdengine[all]"
236
252
  | `graph` | **Graph → Markdown** (Neo4j Bolt + NetworkX GraphML/GML): `networkx`, `neo4j`, `pyyaml` |
237
253
  | `dev` | pytest + API/MCP test helpers |
238
254
  | `all` | Large superset of dependencies (use only if you need everything) |
255
+ | `skill-openai` | Optional helpers for OpenAI-style calls with assembled skill context (`md_generator.tools.assistant`) |
256
+ | `skill-rag-chroma` | Optional Chroma-based RAG over skill markdown (`MasterAgent.ask(..., use_rag=True)`) |
239
257
 
240
258
  Nested ZIP and office files inside archives require the corresponding extras (e.g. `archive` plus `pdf` for PDFs inside a ZIP).
241
259
 
@@ -292,7 +310,7 @@ If the shell reports “command not found”, ensure the Python **Scripts** dire
292
310
  | `md-openapi` | `md_generator.openapi.cli.main:main` | `pip install "mdengine[openapi]"` then `md-openapi generate --file openapi.yaml --output ./docs` (or `mdengine openapi-to-md generate …`) |
293
311
  | `md-openapi-api` | `md_generator.openapi.api.run:main` | FastAPI on port **8015** (`OPENAPI_TO_MD_PORT`): `POST /openapi-to-md/generate` (OpenAPI upload → ZIP), `/health`, MCP at **`/mcp`** |
294
312
  | `md-openapi-mcp` | `md_generator.openapi.api.mcp_server:main` | Standalone MCP: `api_validate_openapi_yaml`, `api_generate_readme_markdown`, `api_run_sync_zip_base64` |
295
- | `mdengine` | `md_generator.engine_cli:main` | `mdengine db-to-md …` / `mdengine graph-to-md …` / `mdengine openapi-to-md generate …` |
313
+ | `mdengine` | `md_generator.engine_cli:main` | `mdengine ai assist …`, `mdengine ai export …`, `mdengine skill build …`, `mdengine db-to-md …`, `mdengine graph-to-md …`, `mdengine openapi-to-md generate …` |
296
314
 
297
315
  **openapi-to-md (`md-openapi`):** OpenAPI **3.x** is parsed directly; **Swagger 2.0** (`swagger: "2.0"`) documents are **converted in-process** to OpenAPI 3.0.3 (deterministic, in-repo converter) before `$ref` resolution. Edge-heavy specs (unusual OAuth2 flows, vendor extensions) may still need fixes after conversion.
298
316
 
@@ -745,6 +763,110 @@ Install **`mdengine[mcp]`** (and usually **`[api]`** when using HTTP) for MCP-re
745
763
 
746
764
  ---
747
765
 
766
+ ## AI assistant CLI
767
+
768
+ The repo ships **distributable AI skills** under [`ai/`](ai/) (Markdown skills, [`ai/registry.json`](ai/registry.json), routing, and [`ai/dependency-graph.json`](ai/dependency-graph.json)). A small SDK in [`src/md_generator/tools/assistant/`](src/md_generator/tools/assistant/) assembles **grounded context** from a natural-language query for Cursor, Claude, OpenAI-style hosts, or your own LLM pipeline.
769
+
770
+ **Further detail:** [ai/README.md](ai/README.md) (layout, registry schema, master agent).
771
+
772
+ **PyPI installs:** `mdengine ai assist` and `mdengine ai export` read the **bundled** skill data shipped with **`md_generator.tools.assistant`** unless **`MDENGINE_SKILL_AI_ROOT`** points at another directory (for example the repo’s [`ai/`](ai/) while developing). You do **not** need **`mdengine skill build`** unless you maintain this repository and want to regenerate that bundle.
773
+
774
+ Script index (all `project.scripts`): [`ai/skills/mdengine-reference/references/entrypoints.md`](ai/skills/mdengine-reference/references/entrypoints.md).
775
+
776
+ ### Regenerate skills, graph, and bundled data
777
+
778
+ **Maintainers / repo clones.** From the **repository root**, refresh generated files under [`ai/`](ai/) and copy the bundle into **`src/md_generator/tools/assistant/data/`** for packaging:
779
+
780
+ ```bash
781
+ # Windows PowerShell
782
+ $env:PYTHONPATH = "src"
783
+ python -m md_generator.tools.skill_builder
784
+ ```
785
+
786
+ ```bash
787
+ # macOS / Linux
788
+ PYTHONPATH=src python -m md_generator.tools.skill_builder
789
+ ```
790
+
791
+ After `pip install -e .`, you can run **`mdengine skill build`** from the repo root without setting `PYTHONPATH` (same as `python -m md_generator.tools.skill_builder` when `PYTHONPATH=src`).
792
+
793
+ - Refreshes `ai/skills/**/SKILL.md`, `ai/skills/global-skill.md`, `ai/skills/modules/*.md`, `ai/registry.json` (routing), and `ai/dependency-graph.json`.
794
+ - Copies the same bundle into **`src/md_generator/tools/assistant/data/`** for the installed wheel.
795
+
796
+ **Incremental** (only area skills touched under `src/md_generator/` since a git ref; global/graph/registry still refresh):
797
+
798
+ ```bash
799
+ mdengine skill build --since HEAD~1
800
+ ```
801
+
802
+ ```bash
803
+ PYTHONPATH=src python -m md_generator.tools.skill_builder --since HEAD~1
804
+ ```
805
+
806
+ **Custom repo root** (CI or non-default cwd):
807
+
808
+ ```bash
809
+ mdengine skill build --root /path/to/md-generator
810
+ ```
811
+
812
+ ### Use the live `ai/` tree from a clone (optional)
813
+
814
+ When developing skills, point the SDK at the repo’s `ai/` directory instead of the copy under `src/md_generator/tools/assistant/data/`:
815
+
816
+ ```powershell
817
+ # PowerShell
818
+ $env:MDENGINE_SKILL_AI_ROOT = (Resolve-Path ".\ai").Path
819
+ ```
820
+
821
+ ```bash
822
+ export MDENGINE_SKILL_AI_ROOT="$(pwd)/ai"
823
+ ```
824
+
825
+ ### Console: `mdengine ai assist` and `mdengine ai export`
826
+
827
+ After `pip install mdengine` (or `pip install -e .` from a clone), use the **`mdengine`** entry point (no separate AI script is installed).
828
+
829
+ - **`mdengine ai assist`** — prints a single **Markdown** context (selected skills + global architecture) to **stdout**, meant to paste into an LLM or pipe to a file.
830
+ - **`mdengine ai export`** — prints **host-shaped** output to stdout, or writes with **`-o` / `--output`**: OpenAI **`messages`** JSON (`--format openai`), a Claude-style project prompt (`claude`), or Cursor-style rules Markdown (`cursor`).
831
+
832
+ **Flags (both subcommands):** **`--rag`** — use optional Chroma RAG when **`mdengine[skill-rag-chroma]`** is installed (falls back to full skills if Chroma is unavailable). **`--ai-root PATH`** — same effect as **`MDENGINE_SKILL_AI_ROOT`** for that run only.
833
+
834
+ **Discover flags:** `mdengine ai assist --help` · `mdengine ai export --help`
835
+
836
+ **`ai export` arguments:** **`--format`** `openai` \| `claude` \| `cursor` (required) · **`--query`** `…` (required) · **`-o` / `--output`** `file` (optional; default stdout).
837
+
838
+ ```bash
839
+ mdengine ai assist "How do I run md-pdf on a file?"
840
+ mdengine ai assist "openapi mcp" --rag
841
+ mdengine ai export --format openai --query "md-db ERD" -o bundle.json
842
+ mdengine ai export --format claude --query "playwright"
843
+ mdengine ai export --format cursor --query "xlsx excel"
844
+ ```
845
+
846
+ One-off override without env var: `mdengine ai assist "…" --ai-root /path/to/ai`.
847
+
848
+ ### Python API
849
+
850
+ ```python
851
+ from md_generator.tools.assistant import MasterAgent, Registry
852
+
853
+ reg = Registry.load_default()
854
+ agent = MasterAgent(reg)
855
+ result = agent.ask("openapi mcp", use_rag=False)
856
+ print(result.resolved_skill_ids)
857
+ print(result.context_markdown[:2000])
858
+ ```
859
+
860
+ Optional RAG: install **`mdengine[skill-rag-chroma]`**, then `agent.ask(..., use_rag=True)` (falls back to full skills if Chroma is unavailable). The same optional stack is used by **`mdengine ai assist --rag`** and **`mdengine ai export … --rag`**.
861
+
862
+ ### Tests (skill SDK)
863
+
864
+ ```bash
865
+ PYTHONPATH=src python -m pytest tool-assistant/tests -q
866
+ ```
867
+
868
+ ---
869
+
748
870
  ## Development
749
871
 
750
872
  ```bash
@@ -752,7 +874,7 @@ pip install -e ".[dev,all]" # or a smaller subset of extras
752
874
  python -m pytest
753
875
  ```
754
876
 
755
- Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/tests/`), **`graph-to-md/tests/`**, and **`openapi-to-md/tests/`**; `pyproject.toml` configures `pythonpath = ["src"]` so `md_generator` resolves without a separate `PYTHONPATH`.
877
+ 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.
756
878
 
757
879
  ---
758
880
 
@@ -764,6 +886,10 @@ Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/test
764
886
  | `CODE_OF_CONDUCT.md` | [Contributor Covenant](https://www.contributor-covenant.org/) 2.1 |
765
887
  | `src/md_generator/` | **Library source** (all formats + `api` subpackages); **audio/video** under [`media/audio/`](src/md_generator/media/audio/) and [`media/video/`](src/md_generator/media/video/); **graph-to-md** under [`graph/`](src/md_generator/graph/) |
766
888
  | `pyproject.toml` | Packaging, extras, CLI entry points, pytest |
889
+ | `ai/` | **Distributable AI skills** (`SKILL.md` trees, `registry.json`, `dependency-graph.json`); regenerate with `PYTHONPATH=src python -m md_generator.tools.skill_builder` or **`mdengine skill build`** (after `pip install -e .`) |
890
+ | `src/md_generator/tools/skill_builder/` | **Skill generator** — scans `src/md_generator` and `pyproject.toml` |
891
+ | `src/md_generator/tools/assistant/` | **Skill SDK** (`md_generator.tools.assistant`): `MasterAgent`, `Registry`, bundled `data/` copy of `ai/` |
892
+ | `tool-assistant/tests/` | **Pytests** for the assistant SDK (`md_generator.tools.assistant`) |
767
893
  | `*-to-md/` | **Docs, tests, fixtures**, thin `converter.py` shims, some `run.py` helpers |
768
894
  | `README.md` | This document |
769
895
 
@@ -1,13 +1,13 @@
1
1
  # mdengine
2
2
 
3
- Single Python distribution for converting **PDF**, **Word (.docx)**, **PowerPoint (.pptx)**, **Excel (.xlsx/.xlsm)**, **images** (OCR), **plain text / JSON / XML**, **ZIP archives**, **audio / video** (Whisper transcription → Markdown), **database metadata** (SQL + Mongo), and **graphs** (Neo4j / NetworkX → Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
3
+ Single Python distribution for converting **PDF**, **Word (.docx)**, **PowerPoint (.pptx)**, **Excel (.xlsx/.xlsm)**, **images** (OCR), **plain text / JSON / XML**, **ZIP archives**, **audio / video** (Whisper transcription → Markdown), **database metadata** (SQL + Mongo), **graphs** (Neo4j / NetworkX → Markdown), **OpenAPI** specs, **Playwright**-captured web pages (including SPAs), and **source code** (codeflow → architecture Markdown) into **Markdown** (and related assets). Install only the extras you need; everything imports under the **`md_generator`** package.
4
4
 
5
5
  - **PyPI name:** `mdengine` (import package: `md_generator`)
6
6
  - **Source:** [github.com/vishal7090/md-generator](https://github.com/vishal7090/md-generator)
7
7
  - **Python:** 3.10+
8
8
  - **License:** [MIT](LICENSE)
9
9
 
10
- **Quick links:** [On a new computer](#on-a-new-computer) · [Command-line execution](#command-line-execution) · [Python library](#python-library) · [Audio and video](#audio-and-video-to-markdown) · [HTTP API](#http-api-fastapi) · [MCP](#mcp-model-context-protocol) · [Development](#development) · [Code of Conduct](CODE_OF_CONDUCT.md)
10
+ **Quick links:** [On a new computer](#on-a-new-computer) · [Command-line execution](#command-line-execution) · [Python library](#python-library) · [Audio and video](#audio-and-video-to-markdown) · [HTTP API](#http-api-fastapi) · [MCP](#mcp-model-context-protocol) · [AI assistant CLI](#ai-assistant-cli) · [Development](#development) · [Code of Conduct](CODE_OF_CONDUCT.md)
11
11
 
12
12
  ---
13
13
 
@@ -81,6 +81,8 @@ pip install "mdengine[all]"
81
81
  | `graph` | **Graph → Markdown** (Neo4j Bolt + NetworkX GraphML/GML): `networkx`, `neo4j`, `pyyaml` |
82
82
  | `dev` | pytest + API/MCP test helpers |
83
83
  | `all` | Large superset of dependencies (use only if you need everything) |
84
+ | `skill-openai` | Optional helpers for OpenAI-style calls with assembled skill context (`md_generator.tools.assistant`) |
85
+ | `skill-rag-chroma` | Optional Chroma-based RAG over skill markdown (`MasterAgent.ask(..., use_rag=True)`) |
84
86
 
85
87
  Nested ZIP and office files inside archives require the corresponding extras (e.g. `archive` plus `pdf` for PDFs inside a ZIP).
86
88
 
@@ -137,7 +139,7 @@ If the shell reports “command not found”, ensure the Python **Scripts** dire
137
139
  | `md-openapi` | `md_generator.openapi.cli.main:main` | `pip install "mdengine[openapi]"` then `md-openapi generate --file openapi.yaml --output ./docs` (or `mdengine openapi-to-md generate …`) |
138
140
  | `md-openapi-api` | `md_generator.openapi.api.run:main` | FastAPI on port **8015** (`OPENAPI_TO_MD_PORT`): `POST /openapi-to-md/generate` (OpenAPI upload → ZIP), `/health`, MCP at **`/mcp`** |
139
141
  | `md-openapi-mcp` | `md_generator.openapi.api.mcp_server:main` | Standalone MCP: `api_validate_openapi_yaml`, `api_generate_readme_markdown`, `api_run_sync_zip_base64` |
140
- | `mdengine` | `md_generator.engine_cli:main` | `mdengine db-to-md …` / `mdengine graph-to-md …` / `mdengine openapi-to-md generate …` |
142
+ | `mdengine` | `md_generator.engine_cli:main` | `mdengine ai assist …`, `mdengine ai export …`, `mdengine skill build …`, `mdengine db-to-md …`, `mdengine graph-to-md …`, `mdengine openapi-to-md generate …` |
141
143
 
142
144
  **openapi-to-md (`md-openapi`):** OpenAPI **3.x** is parsed directly; **Swagger 2.0** (`swagger: "2.0"`) documents are **converted in-process** to OpenAPI 3.0.3 (deterministic, in-repo converter) before `$ref` resolution. Edge-heavy specs (unusual OAuth2 flows, vendor extensions) may still need fixes after conversion.
143
145
 
@@ -590,6 +592,110 @@ Install **`mdengine[mcp]`** (and usually **`[api]`** when using HTTP) for MCP-re
590
592
 
591
593
  ---
592
594
 
595
+ ## AI assistant CLI
596
+
597
+ The repo ships **distributable AI skills** under [`ai/`](ai/) (Markdown skills, [`ai/registry.json`](ai/registry.json), routing, and [`ai/dependency-graph.json`](ai/dependency-graph.json)). A small SDK in [`src/md_generator/tools/assistant/`](src/md_generator/tools/assistant/) assembles **grounded context** from a natural-language query for Cursor, Claude, OpenAI-style hosts, or your own LLM pipeline.
598
+
599
+ **Further detail:** [ai/README.md](ai/README.md) (layout, registry schema, master agent).
600
+
601
+ **PyPI installs:** `mdengine ai assist` and `mdengine ai export` read the **bundled** skill data shipped with **`md_generator.tools.assistant`** unless **`MDENGINE_SKILL_AI_ROOT`** points at another directory (for example the repo’s [`ai/`](ai/) while developing). You do **not** need **`mdengine skill build`** unless you maintain this repository and want to regenerate that bundle.
602
+
603
+ Script index (all `project.scripts`): [`ai/skills/mdengine-reference/references/entrypoints.md`](ai/skills/mdengine-reference/references/entrypoints.md).
604
+
605
+ ### Regenerate skills, graph, and bundled data
606
+
607
+ **Maintainers / repo clones.** From the **repository root**, refresh generated files under [`ai/`](ai/) and copy the bundle into **`src/md_generator/tools/assistant/data/`** for packaging:
608
+
609
+ ```bash
610
+ # Windows PowerShell
611
+ $env:PYTHONPATH = "src"
612
+ python -m md_generator.tools.skill_builder
613
+ ```
614
+
615
+ ```bash
616
+ # macOS / Linux
617
+ PYTHONPATH=src python -m md_generator.tools.skill_builder
618
+ ```
619
+
620
+ After `pip install -e .`, you can run **`mdengine skill build`** from the repo root without setting `PYTHONPATH` (same as `python -m md_generator.tools.skill_builder` when `PYTHONPATH=src`).
621
+
622
+ - Refreshes `ai/skills/**/SKILL.md`, `ai/skills/global-skill.md`, `ai/skills/modules/*.md`, `ai/registry.json` (routing), and `ai/dependency-graph.json`.
623
+ - Copies the same bundle into **`src/md_generator/tools/assistant/data/`** for the installed wheel.
624
+
625
+ **Incremental** (only area skills touched under `src/md_generator/` since a git ref; global/graph/registry still refresh):
626
+
627
+ ```bash
628
+ mdengine skill build --since HEAD~1
629
+ ```
630
+
631
+ ```bash
632
+ PYTHONPATH=src python -m md_generator.tools.skill_builder --since HEAD~1
633
+ ```
634
+
635
+ **Custom repo root** (CI or non-default cwd):
636
+
637
+ ```bash
638
+ mdengine skill build --root /path/to/md-generator
639
+ ```
640
+
641
+ ### Use the live `ai/` tree from a clone (optional)
642
+
643
+ When developing skills, point the SDK at the repo’s `ai/` directory instead of the copy under `src/md_generator/tools/assistant/data/`:
644
+
645
+ ```powershell
646
+ # PowerShell
647
+ $env:MDENGINE_SKILL_AI_ROOT = (Resolve-Path ".\ai").Path
648
+ ```
649
+
650
+ ```bash
651
+ export MDENGINE_SKILL_AI_ROOT="$(pwd)/ai"
652
+ ```
653
+
654
+ ### Console: `mdengine ai assist` and `mdengine ai export`
655
+
656
+ After `pip install mdengine` (or `pip install -e .` from a clone), use the **`mdengine`** entry point (no separate AI script is installed).
657
+
658
+ - **`mdengine ai assist`** — prints a single **Markdown** context (selected skills + global architecture) to **stdout**, meant to paste into an LLM or pipe to a file.
659
+ - **`mdengine ai export`** — prints **host-shaped** output to stdout, or writes with **`-o` / `--output`**: OpenAI **`messages`** JSON (`--format openai`), a Claude-style project prompt (`claude`), or Cursor-style rules Markdown (`cursor`).
660
+
661
+ **Flags (both subcommands):** **`--rag`** — use optional Chroma RAG when **`mdengine[skill-rag-chroma]`** is installed (falls back to full skills if Chroma is unavailable). **`--ai-root PATH`** — same effect as **`MDENGINE_SKILL_AI_ROOT`** for that run only.
662
+
663
+ **Discover flags:** `mdengine ai assist --help` · `mdengine ai export --help`
664
+
665
+ **`ai export` arguments:** **`--format`** `openai` \| `claude` \| `cursor` (required) · **`--query`** `…` (required) · **`-o` / `--output`** `file` (optional; default stdout).
666
+
667
+ ```bash
668
+ mdengine ai assist "How do I run md-pdf on a file?"
669
+ mdengine ai assist "openapi mcp" --rag
670
+ mdengine ai export --format openai --query "md-db ERD" -o bundle.json
671
+ mdengine ai export --format claude --query "playwright"
672
+ mdengine ai export --format cursor --query "xlsx excel"
673
+ ```
674
+
675
+ One-off override without env var: `mdengine ai assist "…" --ai-root /path/to/ai`.
676
+
677
+ ### Python API
678
+
679
+ ```python
680
+ from md_generator.tools.assistant import MasterAgent, Registry
681
+
682
+ reg = Registry.load_default()
683
+ agent = MasterAgent(reg)
684
+ result = agent.ask("openapi mcp", use_rag=False)
685
+ print(result.resolved_skill_ids)
686
+ print(result.context_markdown[:2000])
687
+ ```
688
+
689
+ Optional RAG: install **`mdengine[skill-rag-chroma]`**, then `agent.ask(..., use_rag=True)` (falls back to full skills if Chroma is unavailable). The same optional stack is used by **`mdengine ai assist --rag`** and **`mdengine ai export … --rag`**.
690
+
691
+ ### Tests (skill SDK)
692
+
693
+ ```bash
694
+ PYTHONPATH=src python -m pytest tool-assistant/tests -q
695
+ ```
696
+
697
+ ---
698
+
593
699
  ## Development
594
700
 
595
701
  ```bash
@@ -597,7 +703,7 @@ pip install -e ".[dev,all]" # or a smaller subset of extras
597
703
  python -m pytest
598
704
  ```
599
705
 
600
- Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/tests/`), **`graph-to-md/tests/`**, and **`openapi-to-md/tests/`**; `pyproject.toml` configures `pythonpath = ["src"]` so `md_generator` resolves without a separate `PYTHONPATH`.
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.
601
707
 
602
708
  ---
603
709
 
@@ -609,6 +715,10 @@ Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/test
609
715
  | `CODE_OF_CONDUCT.md` | [Contributor Covenant](https://www.contributor-covenant.org/) 2.1 |
610
716
  | `src/md_generator/` | **Library source** (all formats + `api` subpackages); **audio/video** under [`media/audio/`](src/md_generator/media/audio/) and [`media/video/`](src/md_generator/media/video/); **graph-to-md** under [`graph/`](src/md_generator/graph/) |
611
717
  | `pyproject.toml` | Packaging, extras, CLI entry points, pytest |
718
+ | `ai/` | **Distributable AI skills** (`SKILL.md` trees, `registry.json`, `dependency-graph.json`); regenerate with `PYTHONPATH=src python -m md_generator.tools.skill_builder` or **`mdengine skill build`** (after `pip install -e .`) |
719
+ | `src/md_generator/tools/skill_builder/` | **Skill generator** — scans `src/md_generator` and `pyproject.toml` |
720
+ | `src/md_generator/tools/assistant/` | **Skill SDK** (`md_generator.tools.assistant`): `MasterAgent`, `Registry`, bundled `data/` copy of `ai/` |
721
+ | `tool-assistant/tests/` | **Pytests** for the assistant SDK (`md_generator.tools.assistant`) |
612
722
  | `*-to-md/` | **Docs, tests, fixtures**, thin `converter.py` shims, some `run.py` helpers |
613
723
  | `README.md` | This document |
614
724
 
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mdengine"
7
- version = "0.6.0"
7
+ version = "0.8.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"
11
11
  license = "MIT"
12
12
  license-files = ["LICENSE"]
13
13
  authors = [{ name = "mdengine contributors" }]
14
- keywords = ["markdown", "pdf", "docx", "pptx", "xlsx", "ocr", "zip", "url", "html", "youtube", "playwright", "database", "openapi"]
14
+ keywords = ["markdown", "pdf", "docx", "pptx", "xlsx", "ocr", "zip", "url", "html", "youtube", "playwright", "database", "openapi", "codeflow"]
15
15
  classifiers = [
16
16
  "Programming Language :: Python :: 3",
17
17
  "Programming Language :: Python :: 3 :: Only",
@@ -111,6 +111,19 @@ openapi = [
111
111
  "prance>=23.6.0",
112
112
  "openapi-spec-validator>=0.7.0",
113
113
  ]
114
+ codeflow = [
115
+ "networkx>=3.2.0",
116
+ "javalang>=0.13.0",
117
+ ]
118
+ codeflow-treesitter = [
119
+ "tree-sitter>=0.21.0",
120
+ "tree-sitter-javascript>=0.21.0",
121
+ "tree-sitter-typescript>=0.23.0",
122
+ "tree-sitter-cpp>=0.23.0",
123
+ ]
124
+ codeflow-clang = [
125
+ "clang>=16.0.0",
126
+ ]
114
127
  api = [
115
128
  "fastapi>=0.115.0",
116
129
  "uvicorn[standard]>=0.32.0",
@@ -119,6 +132,9 @@ api = [
119
132
  "pydantic-settings>=2.0.0",
120
133
  ]
121
134
  mcp = ["mcp>=1.2.0", "fastmcp>=2.3.0"]
135
+ # Optional: AI skill bundle helpers (md_generator.tools.assistant)
136
+ skill-openai = ["openai>=1.30.0"]
137
+ skill-rag-chroma = ["chromadb>=0.4.22"]
122
138
  dev = [
123
139
  "pytest>=8.0.0",
124
140
  "httpx>=0.27.0",
@@ -132,6 +148,8 @@ dev = [
132
148
  "mdengine[db]",
133
149
  "mdengine[graph]",
134
150
  "mdengine[openapi]",
151
+ "mdengine[codeflow]",
152
+ "mdengine[codeflow-treesitter]",
135
153
  ]
136
154
  all = [
137
155
  "pymupdf>=1.24.0",
@@ -196,19 +214,26 @@ md-graph-mcp = "md_generator.graph.api.mcp_server:main"
196
214
  md-openapi = "md_generator.openapi.cli.main:main"
197
215
  md-openapi-api = "md_generator.openapi.api.run:main"
198
216
  md-openapi-mcp = "md_generator.openapi.api.mcp_server:main"
217
+ md-codeflow = "md_generator.codeflow.cli.main:main"
218
+ codeflow = "md_generator.codeflow.cli.main:main"
219
+ md-codeflow-api = "md_generator.codeflow.api.run:main"
220
+ md-codeflow-mcp = "md_generator.codeflow.api.mcp_server:main"
199
221
  mdengine = "md_generator.engine_cli:main"
200
222
 
201
223
  [tool.setuptools.packages.find]
202
224
  where = ["src"]
225
+ include = ["md_generator*"]
203
226
 
204
227
  [tool.setuptools.package-data]
205
228
  "md_generator.db.config" = ["*.yaml"]
206
229
  "md_generator.graph.config" = ["*.yaml"]
207
230
  "md_generator.openapi.config" = ["*.yaml"]
231
+ "md_generator.tools.assistant" = ["data/**/*"]
208
232
 
209
233
  [tool.pytest.ini_options]
210
234
  pythonpath = ["src"]
211
235
  testpaths = [
236
+ "tool-assistant/tests",
212
237
  "pdf-to-md/tests",
213
238
  "word-to-md/tests",
214
239
  "ppt-to-md/tests",
@@ -224,5 +249,6 @@ testpaths = [
224
249
  "db-to-md/tests",
225
250
  "graph-to-md/tests",
226
251
  "openapi-to-md/tests",
252
+ "codeflow-to-md/tests",
227
253
  ]
228
254
  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.6.0"
3
+ __version__ = "0.8.0"
4
4
 
5
5
  __all__ = ["__version__"]
@@ -0,0 +1,7 @@
1
+ """Multi-language execution flow extraction → Markdown, Mermaid, graph JSON, HTML."""
2
+
3
+ from __future__ import annotations
4
+
5
+ __all__ = ["__version__"]
6
+
7
+ __version__ = "0.1.0"
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from md_generator.codeflow.analyzers.flow_analyzer import (
4
+ FlowSlice,
5
+ slice_from_entry,
6
+ walk_with_depth,
7
+ )
8
+
9
+ __all__ = ["FlowSlice", "slice_from_entry", "walk_with_depth"]
@@ -0,0 +1,68 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass, field
4
+
5
+ import networkx as nx
6
+
7
+
8
+ @dataclass(slots=True)
9
+ class FlowSlice:
10
+ entry_id: str
11
+ nodes: set[str]
12
+ edges: list[tuple[str, str, dict]]
13
+ depth: int
14
+ cycle_nodes: set[str] = field(default_factory=set)
15
+ truncated: bool = False
16
+
17
+
18
+ def walk_with_depth(
19
+ g: nx.DiGraph,
20
+ start: str,
21
+ max_depth: int,
22
+ ) -> tuple[set[str], list[tuple[str, str, dict]], set[str], bool]:
23
+ """Reachability from start within ``max_depth`` hops (shortest-path layering)."""
24
+ if start not in g:
25
+ return {start}, [], set(), False
26
+ try:
27
+ plen = nx.single_source_shortest_path_length(g, start, cutoff=max_depth)
28
+ except nx.NetworkXError:
29
+ plen = {start: 0}
30
+
31
+ nodes = set(plen.keys())
32
+ edges_out: list[tuple[str, str, dict]] = []
33
+ cycle_guess: set[str] = set()
34
+ truncated = False
35
+
36
+ for u in nodes:
37
+ du = plen[u]
38
+ if du >= max_depth:
39
+ succ = list(g.successors(u))
40
+ if succ:
41
+ truncated = True
42
+ continue
43
+ for v in g.successors(u):
44
+ ed = dict(g.edges[u, v])
45
+ edges_out.append((u, v, ed))
46
+ dv = plen.get(v)
47
+ if dv is not None and dv <= du:
48
+ cycle_guess.add(v)
49
+ if v not in plen and du + 1 > max_depth:
50
+ truncated = True
51
+
52
+ return nodes, edges_out, cycle_guess, truncated
53
+
54
+
55
+ def slice_from_entry(
56
+ g: nx.DiGraph,
57
+ entry_id: str,
58
+ max_depth: int,
59
+ ) -> FlowSlice:
60
+ nodes, edges, cycles, truncated = walk_with_depth(g, entry_id, max_depth)
61
+ return FlowSlice(
62
+ entry_id=entry_id,
63
+ nodes=nodes,
64
+ edges=edges,
65
+ depth=max_depth,
66
+ cycle_nodes=cycles,
67
+ truncated=truncated,
68
+ )