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.
- {mdengine-0.6.0 → mdengine-0.8.0}/PKG-INFO +132 -6
- {mdengine-0.6.0 → mdengine-0.8.0}/README.md +114 -4
- {mdengine-0.6.0 → mdengine-0.8.0}/pyproject.toml +28 -2
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/__init__.py +1 -1
- mdengine-0.8.0/src/md_generator/codeflow/__init__.py +7 -0
- mdengine-0.8.0/src/md_generator/codeflow/analyzers/__init__.py +9 -0
- mdengine-0.8.0/src/md_generator/codeflow/analyzers/flow_analyzer.py +68 -0
- mdengine-0.8.0/src/md_generator/codeflow/api/job_manager.py +249 -0
- mdengine-0.8.0/src/md_generator/codeflow/api/main.py +185 -0
- mdengine-0.8.0/src/md_generator/codeflow/api/mcp_server.py +16 -0
- mdengine-0.8.0/src/md_generator/codeflow/api/run.py +15 -0
- mdengine-0.8.0/src/md_generator/codeflow/api/schemas.py +96 -0
- mdengine-0.8.0/src/md_generator/codeflow/api/settings.py +28 -0
- mdengine-0.8.0/src/md_generator/codeflow/cli/main.py +132 -0
- mdengine-0.8.0/src/md_generator/codeflow/core/__init__.py +6 -0
- mdengine-0.8.0/src/md_generator/codeflow/core/extractor.py +193 -0
- mdengine-0.8.0/src/md_generator/codeflow/core/run_config.py +31 -0
- mdengine-0.8.0/src/md_generator/codeflow/detectors/__init__.py +7 -0
- mdengine-0.8.0/src/md_generator/codeflow/detectors/api_detector.py +222 -0
- mdengine-0.8.0/src/md_generator/codeflow/detectors/entry_detector.py +46 -0
- mdengine-0.8.0/src/md_generator/codeflow/detectors/entry_rank.py +51 -0
- mdengine-0.8.0/src/md_generator/codeflow/detectors/kafka_detector.py +47 -0
- mdengine-0.8.0/src/md_generator/codeflow/generators/business_rules_markdown.py +68 -0
- mdengine-0.8.0/src/md_generator/codeflow/generators/cytoscape_enrich.py +97 -0
- mdengine-0.8.0/src/md_generator/codeflow/generators/entry_markdown.py +198 -0
- mdengine-0.8.0/src/md_generator/codeflow/generators/flow_summary.py +262 -0
- mdengine-0.8.0/src/md_generator/codeflow/generators/html.py +361 -0
- mdengine-0.8.0/src/md_generator/codeflow/generators/markdown.py +35 -0
- mdengine-0.8.0/src/md_generator/codeflow/generators/mermaid.py +45 -0
- mdengine-0.8.0/src/md_generator/codeflow/generators/sequence.py +33 -0
- mdengine-0.8.0/src/md_generator/codeflow/graph/__init__.py +5 -0
- mdengine-0.8.0/src/md_generator/codeflow/graph/builder.py +181 -0
- mdengine-0.8.0/src/md_generator/codeflow/ingestion/__init__.py +10 -0
- mdengine-0.8.0/src/md_generator/codeflow/ingestion/loader.py +66 -0
- mdengine-0.8.0/src/md_generator/codeflow/lang_dispatch.py +64 -0
- mdengine-0.8.0/src/md_generator/codeflow/mcp/server.py +42 -0
- mdengine-0.8.0/src/md_generator/codeflow/models/__init__.py +21 -0
- mdengine-0.8.0/src/md_generator/codeflow/models/ir.py +97 -0
- mdengine-0.8.0/src/md_generator/codeflow/parsers/__init__.py +18 -0
- mdengine-0.8.0/src/md_generator/codeflow/parsers/base.py +57 -0
- mdengine-0.8.0/src/md_generator/codeflow/parsers/cpp_parser.py +155 -0
- mdengine-0.8.0/src/md_generator/codeflow/parsers/go_parser.py +82 -0
- mdengine-0.8.0/src/md_generator/codeflow/parsers/java_parser.py +116 -0
- mdengine-0.8.0/src/md_generator/codeflow/parsers/php_parser.py +79 -0
- mdengine-0.8.0/src/md_generator/codeflow/parsers/python_parser.py +295 -0
- mdengine-0.8.0/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +119 -0
- mdengine-0.8.0/src/md_generator/codeflow/rules/__init__.py +5 -0
- mdengine-0.8.0/src/md_generator/codeflow/rules/collector.py +284 -0
- mdengine-0.8.0/src/md_generator/codeflow/runtime/tracer.py +14 -0
- mdengine-0.8.0/src/md_generator/codeflow/utils/__init__.py +1 -0
- mdengine-0.8.0/src/md_generator/codeflow/utils/tools_root.py +13 -0
- mdengine-0.8.0/src/md_generator/engine_cli.py +65 -0
- mdengine-0.8.0/src/md_generator/graph/mcp/sse.py +8 -0
- mdengine-0.8.0/src/md_generator/openapi/api/__init__.py +1 -0
- mdengine-0.8.0/src/md_generator/openapi/cli/__init__.py +1 -0
- mdengine-0.8.0/src/md_generator/openapi/config/__init__.py +1 -0
- mdengine-0.8.0/src/md_generator/openapi/core/__init__.py +1 -0
- mdengine-0.8.0/src/md_generator/openapi/mcp/__init__.py +1 -0
- mdengine-0.8.0/src/md_generator/tools/__init__.py +1 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/__init__.py +6 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/adapters/__init__.py +5 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/adapters/claude.py +30 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/adapters/cursor.py +20 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/adapters/openai.py +27 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/agent.py +152 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/bundle.py +12 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/chunks.py +54 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/cli.py +73 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/dependency-graph.json +110 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/registry.json +672 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/global-skill.md +66 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/SKILL.md +71 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-archive/references/example.md +8 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/SKILL.md +74 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-codeflow/references/example.md +8 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/SKILL.md +73 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-db/references/example.md +11 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/SKILL.md +78 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-global/references/example.md +21 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/SKILL.md +73 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-graph/references/example.md +6 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/SKILL.md +73 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-image/references/example.md +6 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/SKILL.md +80 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-media/references/example.md +11 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/SKILL.md +73 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-openapi/references/example.md +6 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/SKILL.md +71 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-pdf/references/example.md +6 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/SKILL.md +74 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-playwright/references/example.md +7 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/SKILL.md +71 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-ppt/references/example.md +6 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/SKILL.md +71 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-text/references/example.md +6 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/SKILL.md +71 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-url/references/example.md +11 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/SKILL.md +71 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-word/references/example.md +6 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/SKILL.md +71 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-ai-xlsx/references/example.md +6 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/SKILL.md +46 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/entrypoints.md +46 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/example.md +24 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/mdengine-reference/references/http-api-mcp.md +156 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/archive.md +67 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/codeflow.md +70 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/db.md +69 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/graph.md +69 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/image.md +69 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/media.md +76 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/openapi.md +69 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/pdf.md +67 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/playwright.md +70 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/ppt.md +67 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/text.md +67 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/url.md +67 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/word.md +67 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/data/skills/modules/xlsx.md +67 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/rag.py +69 -0
- mdengine-0.8.0/src/md_generator/tools/assistant/registry.py +85 -0
- mdengine-0.8.0/src/md_generator/tools/skill_builder/__init__.py +6 -0
- mdengine-0.8.0/src/md_generator/tools/skill_builder/__main__.py +44 -0
- mdengine-0.8.0/src/md_generator/tools/skill_builder/dependency_graph.py +109 -0
- mdengine-0.8.0/src/md_generator/tools/skill_builder/generate.py +501 -0
- mdengine-0.8.0/src/md_generator/tools/skill_builder/pyproject_util.py +50 -0
- mdengine-0.8.0/src/md_generator/tools/skill_builder/routing.py +98 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/PKG-INFO +132 -6
- {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/SOURCES.txt +122 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/entry_points.txt +4 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/requires.txt +21 -0
- mdengine-0.6.0/src/md_generator/engine_cli.py +0 -34
- {mdengine-0.6.0 → mdengine-0.8.0}/LICENSE +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/setup.cfg +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/convert_runner.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/jobs.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/mcp_setup.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/query_options.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/convert_impl.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/archive/options.py +0 -0
- {mdengine-0.6.0/src/md_generator/openapi → mdengine-0.8.0/src/md_generator/codeflow}/api/__init__.py +0 -0
- {mdengine-0.6.0/src/md_generator/graph/mcp → mdengine-0.8.0/src/md_generator/codeflow/api}/sse.py +0 -0
- {mdengine-0.6.0/src/md_generator/openapi → mdengine-0.8.0/src/md_generator/codeflow}/cli/__init__.py +0 -0
- {mdengine-0.6.0/src/md_generator/openapi/config → mdengine-0.8.0/src/md_generator/codeflow/generators}/__init__.py +0 -0
- {mdengine-0.6.0/src/md_generator/openapi/core → mdengine-0.8.0/src/md_generator/codeflow/mcp}/__init__.py +0 -0
- {mdengine-0.6.0/src/md_generator/openapi/mcp → mdengine-0.8.0/src/md_generator/codeflow/runtime}/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/factory.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/sql_common.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/run.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/schemas.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/api/sqlite_upload.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/cli/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/cli/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/config/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/config/default.yaml +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/base_adapter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/filter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/model.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/pipeline.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/render.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/extractor.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/job_manager.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/markdown_writer.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/models.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/run_config.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/util.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/core/zip_export.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/mcp/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/mcp/server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/mcp/sse.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/db/mcp/stream.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/factory.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/run.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/schemas.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/cli/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/cli/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/config/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/config/default.yaml +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/base_adapter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/extractor.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/graph_builder.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/job_manager.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/markdown_writer.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/models.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/run_config.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/viz.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/core/zip_export.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/stream.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/query_options.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/staging.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/api/zip_bundle.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/base.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/easy.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/paddle.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/backends/tesseract.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/convert_impl.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/emit.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/io_util.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/image/utils.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/mcp_setup.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/run.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/formatter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/audio/service.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/document_converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/job_store.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/mcp_setup.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/run.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/formatter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/video/service.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/whisper_language.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/mcp_setup.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/run.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/formatter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/metadata.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/service.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/media/youtube/transcript.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/run.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/schemas.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/cli/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/config/default.yaml +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/converters/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/core/extractor.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/core/run_config.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/core/zip_export.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/rules.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/generators/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/loaders/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/mcp/server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/models/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/models/domain.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/operations.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/parsers/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/resolvers/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/writers/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/api/zip_bundle.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/md_emit.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/pdf_extract.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/pdf/utils.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/convert_runner.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/jobs.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/mcp_setup.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/run.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/assets.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/chunker.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/cli.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/extractor.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/html_to_md.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/options.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/pipeline.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/playwright/playwright_fetcher.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/convert_runner.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/jobs.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/mcp_setup.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/query_options.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/convert_impl.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/embedded_extract.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/ooxml_media.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/options.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/post_assets.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/text_formatting.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/ppt/zip_deep.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/convert_runner.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/jobs.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/mcp_setup.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/query_options.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/convert_impl.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/format_detect.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_json.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_txt.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_xml.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/text/options.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/convert_runner.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/jobs.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/mcp_setup.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/query_options.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/api/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/assets.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/convert_impl.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/crawl.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/extract.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/fetch.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/html_to_md.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/options.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/page_convert.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/post_convert_assets.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/url/robots_util.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/convert_util.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/jobs.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/main.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/api/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/artifact.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/word/settings.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/api/__init__.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/api/app.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/convert_config.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/converter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/converter_core.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/excel_reader.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/markdown_emitter.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/md_generator/xlsx/mcp_server.py +0 -0
- {mdengine-0.6.0 → mdengine-0.8.0}/src/mdengine.egg-info/dependency_links.txt +0 -0
- {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.
|
|
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),
|
|
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
|
|
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/`**,
|
|
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),
|
|
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
|
|
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/`**,
|
|
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.
|
|
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"]
|
|
@@ -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
|
+
)
|