mdengine 0.7.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.7.0 → mdengine-0.8.0}/PKG-INFO +119 -5
  2. {mdengine-0.7.0 → mdengine-0.8.0}/README.md +114 -4
  3. {mdengine-0.7.0 → mdengine-0.8.0}/pyproject.toml +7 -1
  4. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/__init__.py +1 -1
  5. mdengine-0.8.0/src/md_generator/engine_cli.py +65 -0
  6. mdengine-0.8.0/src/md_generator/tools/__init__.py +1 -0
  7. mdengine-0.8.0/src/md_generator/tools/assistant/__init__.py +6 -0
  8. mdengine-0.8.0/src/md_generator/tools/assistant/adapters/__init__.py +5 -0
  9. mdengine-0.8.0/src/md_generator/tools/assistant/adapters/claude.py +30 -0
  10. mdengine-0.8.0/src/md_generator/tools/assistant/adapters/cursor.py +20 -0
  11. mdengine-0.8.0/src/md_generator/tools/assistant/adapters/openai.py +27 -0
  12. mdengine-0.8.0/src/md_generator/tools/assistant/agent.py +152 -0
  13. mdengine-0.8.0/src/md_generator/tools/assistant/bundle.py +12 -0
  14. mdengine-0.8.0/src/md_generator/tools/assistant/chunks.py +54 -0
  15. mdengine-0.8.0/src/md_generator/tools/assistant/cli.py +73 -0
  16. mdengine-0.8.0/src/md_generator/tools/assistant/data/dependency-graph.json +110 -0
  17. mdengine-0.8.0/src/md_generator/tools/assistant/data/registry.json +672 -0
  18. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/global-skill.md +66 -0
  19. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +71 -0
  20. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/references/example.md +8 -0
  21. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +74 -0
  22. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +8 -0
  23. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +73 -0
  24. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/references/example.md +11 -0
  25. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +78 -0
  26. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/references/example.md +21 -0
  27. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +73 -0
  28. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/references/example.md +6 -0
  29. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +73 -0
  30. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/references/example.md +6 -0
  31. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +80 -0
  32. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/references/example.md +11 -0
  33. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +73 -0
  34. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/references/example.md +6 -0
  35. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +71 -0
  36. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/references/example.md +6 -0
  37. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +74 -0
  38. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/references/example.md +7 -0
  39. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +71 -0
  40. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/references/example.md +6 -0
  41. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +71 -0
  42. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/references/example.md +6 -0
  43. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +71 -0
  44. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/references/example.md +11 -0
  45. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +71 -0
  46. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/references/example.md +6 -0
  47. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +71 -0
  48. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/references/example.md +6 -0
  49. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +46 -0
  50. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +46 -0
  51. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/example.md +24 -0
  52. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +156 -0
  53. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/archive.md +67 -0
  54. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/codeflow.md +70 -0
  55. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/db.md +69 -0
  56. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/graph.md +69 -0
  57. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/image.md +69 -0
  58. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/media.md +76 -0
  59. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/openapi.md +69 -0
  60. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/pdf.md +67 -0
  61. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/playwright.md +70 -0
  62. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/ppt.md +67 -0
  63. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/text.md +67 -0
  64. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/url.md +67 -0
  65. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/word.md +67 -0
  66. mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +67 -0
  67. mdengine-0.8.0/src/md_generator/tools/assistant/rag.py +69 -0
  68. mdengine-0.8.0/src/md_generator/tools/assistant/registry.py +85 -0
  69. mdengine-0.8.0/src/md_generator/tools/skill_builder/__init__.py +6 -0
  70. mdengine-0.8.0/src/md_generator/tools/skill_builder/__main__.py +44 -0
  71. mdengine-0.8.0/src/md_generator/tools/skill_builder/dependency_graph.py +109 -0
  72. mdengine-0.8.0/src/md_generator/tools/skill_builder/generate.py +501 -0
  73. mdengine-0.8.0/src/md_generator/tools/skill_builder/pyproject_util.py +50 -0
  74. mdengine-0.8.0/src/md_generator/tools/skill_builder/routing.py +98 -0
  75. {mdengine-0.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/PKG-INFO +119 -5
  76. {mdengine-0.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/SOURCES.txt +69 -0
  77. {mdengine-0.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/requires.txt +6 -0
  78. mdengine-0.7.0/src/md_generator/engine_cli.py +0 -38
  79. {mdengine-0.7.0 → mdengine-0.8.0}/LICENSE +0 -0
  80. {mdengine-0.7.0 → mdengine-0.8.0}/setup.cfg +0 -0
  81. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/__init__.py +0 -0
  82. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/__init__.py +0 -0
  83. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/convert_runner.py +0 -0
  84. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/jobs.py +0 -0
  85. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/main.py +0 -0
  86. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/mcp_server.py +0 -0
  87. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/mcp_setup.py +0 -0
  88. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/query_options.py +0 -0
  89. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/settings.py +0 -0
  90. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/convert_impl.py +0 -0
  91. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/converter.py +0 -0
  92. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/options.py +0 -0
  93. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/__init__.py +0 -0
  94. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/analyzers/__init__.py +0 -0
  95. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/analyzers/flow_analyzer.py +0 -0
  96. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/__init__.py +0 -0
  97. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/job_manager.py +0 -0
  98. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/main.py +0 -0
  99. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/mcp_server.py +0 -0
  100. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/run.py +0 -0
  101. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/schemas.py +0 -0
  102. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/settings.py +0 -0
  103. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/sse.py +0 -0
  104. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/cli/__init__.py +0 -0
  105. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/cli/main.py +0 -0
  106. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/core/__init__.py +0 -0
  107. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/core/extractor.py +0 -0
  108. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/core/run_config.py +0 -0
  109. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/__init__.py +0 -0
  110. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/api_detector.py +0 -0
  111. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/entry_detector.py +0 -0
  112. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/entry_rank.py +0 -0
  113. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/kafka_detector.py +0 -0
  114. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/__init__.py +0 -0
  115. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/business_rules_markdown.py +0 -0
  116. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/cytoscape_enrich.py +0 -0
  117. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/entry_markdown.py +0 -0
  118. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/flow_summary.py +0 -0
  119. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/html.py +0 -0
  120. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/markdown.py +0 -0
  121. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/mermaid.py +0 -0
  122. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/sequence.py +0 -0
  123. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/graph/__init__.py +0 -0
  124. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/graph/builder.py +0 -0
  125. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/ingestion/__init__.py +0 -0
  126. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/ingestion/loader.py +0 -0
  127. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/lang_dispatch.py +0 -0
  128. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/mcp/__init__.py +0 -0
  129. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/mcp/server.py +0 -0
  130. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/models/__init__.py +0 -0
  131. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/models/ir.py +0 -0
  132. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/__init__.py +0 -0
  133. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/base.py +0 -0
  134. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/cpp_parser.py +0 -0
  135. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/go_parser.py +0 -0
  136. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/java_parser.py +0 -0
  137. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/php_parser.py +0 -0
  138. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/python_parser.py +0 -0
  139. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +0 -0
  140. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/rules/__init__.py +0 -0
  141. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/rules/collector.py +0 -0
  142. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/runtime/__init__.py +0 -0
  143. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/runtime/tracer.py +0 -0
  144. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/utils/__init__.py +0 -0
  145. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/utils/tools_root.py +0 -0
  146. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/__init__.py +0 -0
  147. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/__init__.py +0 -0
  148. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/factory.py +0 -0
  149. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
  150. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
  151. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
  152. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
  153. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/sql_common.py +0 -0
  154. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
  155. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/__init__.py +0 -0
  156. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/main.py +0 -0
  157. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/mcp_server.py +0 -0
  158. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/run.py +0 -0
  159. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/schemas.py +0 -0
  160. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/settings.py +0 -0
  161. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/sqlite_upload.py +0 -0
  162. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/cli/__init__.py +0 -0
  163. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/cli/main.py +0 -0
  164. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/config/__init__.py +0 -0
  165. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/config/default.yaml +0 -0
  166. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/__init__.py +0 -0
  167. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/base_adapter.py +0 -0
  168. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/__init__.py +0 -0
  169. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
  170. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/filter.py +0 -0
  171. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
  172. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
  173. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/model.py +0 -0
  174. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/pipeline.py +0 -0
  175. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/render.py +0 -0
  176. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/extractor.py +0 -0
  177. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/job_manager.py +0 -0
  178. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/markdown_writer.py +0 -0
  179. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/models.py +0 -0
  180. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/run_config.py +0 -0
  181. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/util.py +0 -0
  182. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/zip_export.py +0 -0
  183. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/mcp/__init__.py +0 -0
  184. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/mcp/server.py +0 -0
  185. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/mcp/sse.py +0 -0
  186. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/mcp/stream.py +0 -0
  187. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/__init__.py +0 -0
  188. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/__init__.py +0 -0
  189. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/factory.py +0 -0
  190. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
  191. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
  192. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/__init__.py +0 -0
  193. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/main.py +0 -0
  194. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/mcp_server.py +0 -0
  195. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/run.py +0 -0
  196. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/schemas.py +0 -0
  197. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/settings.py +0 -0
  198. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/cli/__init__.py +0 -0
  199. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/cli/main.py +0 -0
  200. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/config/__init__.py +0 -0
  201. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/config/default.yaml +0 -0
  202. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/__init__.py +0 -0
  203. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/base_adapter.py +0 -0
  204. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/extractor.py +0 -0
  205. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/graph_builder.py +0 -0
  206. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/job_manager.py +0 -0
  207. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/markdown_writer.py +0 -0
  208. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/models.py +0 -0
  209. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/run_config.py +0 -0
  210. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/viz.py +0 -0
  211. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/zip_export.py +0 -0
  212. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/__init__.py +0 -0
  213. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/server.py +0 -0
  214. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/sse.py +0 -0
  215. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/stream.py +0 -0
  216. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/__init__.py +0 -0
  217. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/__init__.py +0 -0
  218. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/main.py +0 -0
  219. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/mcp_server.py +0 -0
  220. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/query_options.py +0 -0
  221. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/settings.py +0 -0
  222. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/staging.py +0 -0
  223. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/zip_bundle.py +0 -0
  224. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/__init__.py +0 -0
  225. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/base.py +0 -0
  226. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/easy.py +0 -0
  227. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/paddle.py +0 -0
  228. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/tesseract.py +0 -0
  229. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/convert_impl.py +0 -0
  230. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/converter.py +0 -0
  231. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/emit.py +0 -0
  232. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/io_util.py +0 -0
  233. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/utils.py +0 -0
  234. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/__init__.py +0 -0
  235. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/__init__.py +0 -0
  236. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/__init__.py +0 -0
  237. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/main.py +0 -0
  238. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/mcp_server.py +0 -0
  239. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/mcp_setup.py +0 -0
  240. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/run.py +0 -0
  241. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/settings.py +0 -0
  242. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/converter.py +0 -0
  243. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/formatter.py +0 -0
  244. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/service.py +0 -0
  245. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/document_converter.py +0 -0
  246. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/job_store.py +0 -0
  247. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/__init__.py +0 -0
  248. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/__init__.py +0 -0
  249. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/main.py +0 -0
  250. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/mcp_server.py +0 -0
  251. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/mcp_setup.py +0 -0
  252. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/run.py +0 -0
  253. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/settings.py +0 -0
  254. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/converter.py +0 -0
  255. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/formatter.py +0 -0
  256. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/service.py +0 -0
  257. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/whisper_language.py +0 -0
  258. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/__init__.py +0 -0
  259. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/__init__.py +0 -0
  260. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/main.py +0 -0
  261. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
  262. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/mcp_setup.py +0 -0
  263. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/run.py +0 -0
  264. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/settings.py +0 -0
  265. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/converter.py +0 -0
  266. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/formatter.py +0 -0
  267. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/metadata.py +0 -0
  268. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/service.py +0 -0
  269. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/transcript.py +0 -0
  270. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/__init__.py +0 -0
  271. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/__init__.py +0 -0
  272. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/main.py +0 -0
  273. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/mcp_server.py +0 -0
  274. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/run.py +0 -0
  275. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/schemas.py +0 -0
  276. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/settings.py +0 -0
  277. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/cli/__init__.py +0 -0
  278. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/cli/main.py +0 -0
  279. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/config/__init__.py +0 -0
  280. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/config/default.yaml +0 -0
  281. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/converters/__init__.py +0 -0
  282. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
  283. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/core/__init__.py +0 -0
  284. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/core/extractor.py +0 -0
  285. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/core/run_config.py +0 -0
  286. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/core/zip_export.py +0 -0
  287. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/__init__.py +0 -0
  288. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/rules.py +0 -0
  289. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
  290. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/generators/__init__.py +0 -0
  291. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
  292. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/loaders/__init__.py +0 -0
  293. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
  294. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/mcp/__init__.py +0 -0
  295. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/mcp/server.py +0 -0
  296. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/models/__init__.py +0 -0
  297. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/models/domain.py +0 -0
  298. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/__init__.py +0 -0
  299. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/operations.py +0 -0
  300. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
  301. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/parsers/__init__.py +0 -0
  302. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
  303. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/resolvers/__init__.py +0 -0
  304. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
  305. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/writers/__init__.py +0 -0
  306. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
  307. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/__init__.py +0 -0
  308. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/__init__.py +0 -0
  309. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/main.py +0 -0
  310. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/mcp_server.py +0 -0
  311. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/settings.py +0 -0
  312. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/zip_bundle.py +0 -0
  313. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/converter.py +0 -0
  314. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/md_emit.py +0 -0
  315. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/pdf_extract.py +0 -0
  316. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/utils.py +0 -0
  317. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/__init__.py +0 -0
  318. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/__init__.py +0 -0
  319. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/convert_runner.py +0 -0
  320. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/jobs.py +0 -0
  321. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/main.py +0 -0
  322. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/mcp_server.py +0 -0
  323. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/mcp_setup.py +0 -0
  324. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/run.py +0 -0
  325. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/settings.py +0 -0
  326. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/assets.py +0 -0
  327. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/chunker.py +0 -0
  328. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/cli.py +0 -0
  329. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/extractor.py +0 -0
  330. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/html_to_md.py +0 -0
  331. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/options.py +0 -0
  332. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/pipeline.py +0 -0
  333. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/playwright_fetcher.py +0 -0
  334. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/__init__.py +0 -0
  335. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/__init__.py +0 -0
  336. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/convert_runner.py +0 -0
  337. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/jobs.py +0 -0
  338. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/main.py +0 -0
  339. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/mcp_server.py +0 -0
  340. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/mcp_setup.py +0 -0
  341. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/query_options.py +0 -0
  342. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/settings.py +0 -0
  343. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/convert_impl.py +0 -0
  344. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/converter.py +0 -0
  345. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/embedded_extract.py +0 -0
  346. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/ooxml_media.py +0 -0
  347. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/options.py +0 -0
  348. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/post_assets.py +0 -0
  349. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/text_formatting.py +0 -0
  350. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
  351. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
  352. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
  353. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
  354. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/zip_deep.py +0 -0
  355. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/__init__.py +0 -0
  356. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/__init__.py +0 -0
  357. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/convert_runner.py +0 -0
  358. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/jobs.py +0 -0
  359. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/main.py +0 -0
  360. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/mcp_server.py +0 -0
  361. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/mcp_setup.py +0 -0
  362. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/query_options.py +0 -0
  363. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/settings.py +0 -0
  364. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/convert_impl.py +0 -0
  365. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/converter.py +0 -0
  366. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/format_detect.py +0 -0
  367. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_json.py +0 -0
  368. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_txt.py +0 -0
  369. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_xml.py +0 -0
  370. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/options.py +0 -0
  371. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/__init__.py +0 -0
  372. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/__init__.py +0 -0
  373. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/convert_runner.py +0 -0
  374. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/jobs.py +0 -0
  375. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/main.py +0 -0
  376. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/mcp_server.py +0 -0
  377. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/mcp_setup.py +0 -0
  378. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/query_options.py +0 -0
  379. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/settings.py +0 -0
  380. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/assets.py +0 -0
  381. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/convert_impl.py +0 -0
  382. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/converter.py +0 -0
  383. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/crawl.py +0 -0
  384. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/extract.py +0 -0
  385. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/fetch.py +0 -0
  386. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/html_to_md.py +0 -0
  387. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/options.py +0 -0
  388. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/page_convert.py +0 -0
  389. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/post_convert_assets.py +0 -0
  390. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/robots_util.py +0 -0
  391. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/__init__.py +0 -0
  392. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/__init__.py +0 -0
  393. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/convert_util.py +0 -0
  394. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/jobs.py +0 -0
  395. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/main.py +0 -0
  396. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/mcp_server.py +0 -0
  397. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/artifact.py +0 -0
  398. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/converter.py +0 -0
  399. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/settings.py +0 -0
  400. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/__init__.py +0 -0
  401. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/api/__init__.py +0 -0
  402. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/api/app.py +0 -0
  403. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/convert_config.py +0 -0
  404. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/converter.py +0 -0
  405. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/converter_core.py +0 -0
  406. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/excel_reader.py +0 -0
  407. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/markdown_emitter.py +0 -0
  408. {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/mcp_server.py +0 -0
  409. {mdengine-0.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/dependency_links.txt +0 -0
  410. {mdengine-0.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/entry_points.txt +0 -0
  411. {mdengine-0.7.0 → mdengine-0.8.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.7.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
@@ -122,6 +122,10 @@ Requires-Dist: pydantic-settings>=2.0.0; extra == "api"
122
122
  Provides-Extra: mcp
123
123
  Requires-Dist: mcp>=1.2.0; extra == "mcp"
124
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"
125
129
  Provides-Extra: dev
126
130
  Requires-Dist: pytest>=8.0.0; extra == "dev"
127
131
  Requires-Dist: httpx>=0.27.0; extra == "dev"
@@ -167,14 +171,14 @@ Dynamic: license-file
167
171
 
168
172
  # mdengine
169
173
 
170
- 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.
171
175
 
172
176
  - **PyPI name:** `mdengine` (import package: `md_generator`)
173
177
  - **Source:** [github.com/vishal7090/md-generator](https://github.com/vishal7090/md-generator)
174
178
  - **Python:** 3.10+
175
179
  - **License:** [MIT](LICENSE)
176
180
 
177
- **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)
178
182
 
179
183
  ---
180
184
 
@@ -248,6 +252,8 @@ pip install "mdengine[all]"
248
252
  | `graph` | **Graph → Markdown** (Neo4j Bolt + NetworkX GraphML/GML): `networkx`, `neo4j`, `pyyaml` |
249
253
  | `dev` | pytest + API/MCP test helpers |
250
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)`) |
251
257
 
252
258
  Nested ZIP and office files inside archives require the corresponding extras (e.g. `archive` plus `pdf` for PDFs inside a ZIP).
253
259
 
@@ -304,7 +310,7 @@ If the shell reports “command not found”, ensure the Python **Scripts** dire
304
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 …`) |
305
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`** |
306
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` |
307
- | `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 …` |
308
314
 
309
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.
310
316
 
@@ -757,6 +763,110 @@ Install **`mdengine[mcp]`** (and usually **`[api]`** when using HTTP) for MCP-re
757
763
 
758
764
  ---
759
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
+
760
870
  ## Development
761
871
 
762
872
  ```bash
@@ -764,7 +874,7 @@ pip install -e ".[dev,all]" # or a smaller subset of extras
764
874
  python -m pytest
765
875
  ```
766
876
 
767
- 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.
768
878
 
769
879
  ---
770
880
 
@@ -776,6 +886,10 @@ Tests live under each legacy folder’s `tests/` directory (e.g. `pdf-to-md/test
776
886
  | `CODE_OF_CONDUCT.md` | [Contributor Covenant](https://www.contributor-covenant.org/) 2.1 |
777
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/) |
778
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`) |
779
893
  | `*-to-md/` | **Docs, tests, fixtures**, thin `converter.py` shims, some `run.py` helpers |
780
894
  | `README.md` | This document |
781
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,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mdengine"
7
- version = "0.7.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"
@@ -132,6 +132,9 @@ api = [
132
132
  "pydantic-settings>=2.0.0",
133
133
  ]
134
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"]
135
138
  dev = [
136
139
  "pytest>=8.0.0",
137
140
  "httpx>=0.27.0",
@@ -219,15 +222,18 @@ mdengine = "md_generator.engine_cli:main"
219
222
 
220
223
  [tool.setuptools.packages.find]
221
224
  where = ["src"]
225
+ include = ["md_generator*"]
222
226
 
223
227
  [tool.setuptools.package-data]
224
228
  "md_generator.db.config" = ["*.yaml"]
225
229
  "md_generator.graph.config" = ["*.yaml"]
226
230
  "md_generator.openapi.config" = ["*.yaml"]
231
+ "md_generator.tools.assistant" = ["data/**/*"]
227
232
 
228
233
  [tool.pytest.ini_options]
229
234
  pythonpath = ["src"]
230
235
  testpaths = [
236
+ "tool-assistant/tests",
231
237
  "pdf-to-md/tests",
232
238
  "word-to-md/tests",
233
239
  "ppt-to-md/tests",
@@ -1,5 +1,5 @@
1
1
  """md_generator: PDF, Office, image, text, and ZIP to Markdown conversion."""
2
2
 
3
- __version__ = "0.7.0"
3
+ __version__ = "0.8.0"
4
4
 
5
5
  __all__ = ["__version__"]
@@ -0,0 +1,65 @@
1
+ from __future__ import annotations
2
+
3
+ import sys
4
+
5
+
6
+ def main(argv: list[str] | None = None) -> int:
7
+ argv = list(sys.argv[1:] if argv is None else argv)
8
+ if len(argv) < 1:
9
+ print(
10
+ "Usage: mdengine ai assist … | mdengine ai export … | mdengine skill build … | mdengine db-to-md … | "
11
+ "mdengine graph-to-md … | mdengine openapi-to-md generate … | mdengine codeflow-to-md scan …",
12
+ file=sys.stderr,
13
+ )
14
+ return 2
15
+ if argv[0] == "skill":
16
+ if len(argv) >= 2 and argv[1] == "build":
17
+ from md_generator.tools.skill_builder.__main__ import main as skill_build_main
18
+
19
+ return skill_build_main(argv[2:])
20
+ print(
21
+ "Usage: mdengine skill build … [--since GIT_REF] [--root PATH]",
22
+ file=sys.stderr,
23
+ )
24
+ return 2
25
+ if argv[0] == "ai" and len(argv) >= 2:
26
+ sub, rest = argv[1], argv[2:]
27
+ if sub == "assist":
28
+ from md_generator.tools.assistant.cli import run_assist
29
+
30
+ return run_assist(rest)
31
+ if sub == "export":
32
+ from md_generator.tools.assistant.cli import run_export
33
+
34
+ return run_export(rest)
35
+ print(
36
+ "Usage: mdengine ai assist … | mdengine ai export …",
37
+ file=sys.stderr,
38
+ )
39
+ return 2
40
+ if argv[0] == "db-to-md":
41
+ from md_generator.db.cli.main import main as db_main
42
+
43
+ return db_main(argv[1:])
44
+ if argv[0] == "graph-to-md":
45
+ from md_generator.graph.cli.main import main as graph_main
46
+
47
+ return graph_main(argv[1:])
48
+ if argv[0] == "openapi-to-md":
49
+ from md_generator.openapi.cli.main import main as openapi_main
50
+
51
+ return openapi_main(argv[1:])
52
+ if argv[0] == "codeflow-to-md":
53
+ from md_generator.codeflow.cli.main import main as cf_main
54
+
55
+ return cf_main(argv[1:])
56
+ print(
57
+ "Usage: mdengine ai assist … | mdengine ai export … | mdengine skill build … | mdengine db-to-md … | "
58
+ "mdengine graph-to-md … | mdengine openapi-to-md generate … | mdengine codeflow-to-md scan …",
59
+ file=sys.stderr,
60
+ )
61
+ return 2
62
+
63
+
64
+ if __name__ == "__main__":
65
+ raise SystemExit(main())
@@ -0,0 +1 @@
1
+ """Development and AI skill helpers shipped with mdengine (skill_builder, assistant SDK)."""
@@ -0,0 +1,6 @@
1
+ from .agent import AskResult, MasterAgent
2
+ from .registry import Registry
3
+
4
+ __all__ = ["AskResult", "MasterAgent", "Registry", "__version__"]
5
+
6
+ __version__ = "0.7.0"
@@ -0,0 +1,5 @@
1
+ from .claude import to_claude_project_prompt
2
+ from .cursor import to_cursor_rules_markdown
3
+ from .openai import to_openai_messages
4
+
5
+ __all__ = ["to_claude_project_prompt", "to_cursor_rules_markdown", "to_openai_messages"]
@@ -0,0 +1,30 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ from typing import Any
5
+
6
+ from ..agent import AskResult
7
+
8
+
9
+ def to_claude_project_prompt(result: AskResult) -> str:
10
+ """Single project/system prompt string suitable for Claude project instructions."""
11
+ header = (
12
+ "# mdengine — grounded system prompt\n\n"
13
+ "Use only the following context for mdengine / md_generator facts. "
14
+ "For behavior not listed, defer to upstream README and installed CLI `--help`.\n\n"
15
+ f"**Resolved skill ids:** {', '.join(result.resolved_skill_ids)}\n\n"
16
+ f"**Routing scores (areas):** {json.dumps(result.scores, sort_keys=True)}\n\n"
17
+ "---\n\n"
18
+ )
19
+ return header + result.context_markdown
20
+
21
+
22
+ def to_claude_metadata_blob(result: AskResult) -> dict[str, Any]:
23
+ """Sidecar JSON-friendly metadata (optional attachment in toolchains)."""
24
+ return {
25
+ "resolved_skill_ids": result.resolved_skill_ids,
26
+ "resolved_areas": result.resolved_areas,
27
+ "scores": result.scores,
28
+ "rag_used": result.rag_used,
29
+ "user_query": result.query,
30
+ }
@@ -0,0 +1,20 @@
1
+ from __future__ import annotations
2
+
3
+ from ..agent import AskResult
4
+
5
+
6
+ def to_cursor_rules_markdown(result: AskResult, *, title: str = "mdengine — grounded context") -> str:
7
+ """Markdown suitable for `.cursor/rules/` or pasting as a workspace rule."""
8
+ lines = [
9
+ "---",
10
+ f"description: {title} (resolved skills: {', '.join(result.resolved_skill_ids)})",
11
+ "alwaysApply: false",
12
+ "---",
13
+ "",
14
+ f"User query: {result.query}",
15
+ "",
16
+ "## Grounded context",
17
+ "",
18
+ result.context_markdown,
19
+ ]
20
+ return "\n".join(lines).rstrip() + "\n"
@@ -0,0 +1,27 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ from typing import Any
5
+
6
+ from ..agent import AskResult
7
+
8
+
9
+ def to_openai_messages(result: AskResult, *, system_extra: str | None = None) -> list[dict[str, Any]]:
10
+ """Chat Completions-style message list (plain JSON-serializable dicts)."""
11
+ system = (
12
+ "You are an assistant helping with the mdengine (md_generator) Python distribution. "
13
+ "Answer only using the following grounded context from generated skills. "
14
+ "If something is not covered, say so and suggest `pip show mdengine` / CLI `--help`.\n\n"
15
+ f"Resolved skills: {', '.join(result.resolved_skill_ids)}\n\n"
16
+ f"{result.context_markdown}"
17
+ )
18
+ if system_extra:
19
+ system = system + "\n\n" + system_extra.strip()
20
+ return [
21
+ {"role": "system", "content": system},
22
+ {"role": "user", "content": result.query},
23
+ ]
24
+
25
+
26
+ def openai_messages_json(result: AskResult, *, indent: int | None = 2) -> str:
27
+ return json.dumps(to_openai_messages(result), indent=indent, ensure_ascii=False)