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.
- {mdengine-0.7.0 → mdengine-0.8.0}/PKG-INFO +119 -5
- {mdengine-0.7.0 → mdengine-0.8.0}/README.md +114 -4
- {mdengine-0.7.0 → mdengine-0.8.0}/pyproject.toml +7 -1
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/__init__.py +1 -1
- mdengine-0.8.0/src/md_generator/engine_cli.py +65 -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.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/PKG-INFO +119 -5
- {mdengine-0.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/SOURCES.txt +69 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/requires.txt +6 -0
- mdengine-0.7.0/src/md_generator/engine_cli.py +0 -38
- {mdengine-0.7.0 → mdengine-0.8.0}/LICENSE +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/setup.cfg +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/convert_runner.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/jobs.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/mcp_setup.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/query_options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/convert_impl.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/archive/options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/analyzers/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/analyzers/flow_analyzer.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/job_manager.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/run.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/schemas.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/api/sse.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/cli/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/cli/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/core/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/core/extractor.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/core/run_config.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/api_detector.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/entry_detector.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/entry_rank.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/detectors/kafka_detector.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/business_rules_markdown.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/cytoscape_enrich.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/entry_markdown.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/flow_summary.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/html.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/markdown.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/mermaid.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/generators/sequence.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/graph/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/graph/builder.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/ingestion/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/ingestion/loader.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/lang_dispatch.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/mcp/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/mcp/server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/models/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/models/ir.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/base.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/cpp_parser.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/go_parser.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/java_parser.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/php_parser.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/python_parser.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/parsers/treesitter_js_ts_parser.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/rules/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/rules/collector.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/runtime/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/runtime/tracer.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/utils/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/codeflow/utils/tools_root.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/factory.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/mongo_adapter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/mysql_adapter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/oracle_adapter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/postgres_adapter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/sql_common.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/adapters/sqlite_adapter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/run.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/schemas.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/api/sqlite_upload.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/cli/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/cli/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/config/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/config/default.yaml +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/base_adapter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/dot_emitter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/filter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/mermaid_emitter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/mermaid_render.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/model.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/pipeline.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/erd/render.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/extractor.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/job_manager.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/markdown_writer.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/models.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/run_config.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/util.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/core/zip_export.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/mcp/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/mcp/server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/mcp/sse.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/db/mcp/stream.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/factory.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/neo4j_adapter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/adapters/networkx_adapter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/run.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/schemas.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/cli/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/cli/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/config/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/config/default.yaml +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/base_adapter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/extractor.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/graph_builder.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/job_manager.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/markdown_writer.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/models.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/run_config.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/viz.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/core/zip_export.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/sse.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/graph/mcp/stream.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/query_options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/staging.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/api/zip_bundle.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/base.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/easy.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/paddle.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/backends/tesseract.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/convert_impl.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/emit.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/io_util.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/image/utils.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/mcp_setup.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/run.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/formatter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/audio/service.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/document_converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/job_store.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/mcp_setup.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/run.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/formatter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/video/service.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/whisper_language.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/mcp_setup.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/run.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/formatter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/metadata.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/service.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/media/youtube/transcript.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/run.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/schemas.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/cli/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/cli/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/config/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/config/default.yaml +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/converters/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/converters/swagger2_to_openapi3.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/core/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/core/extractor.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/core/run_config.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/core/zip_export.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/rules.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/enrichers/sample_body.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/generators/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/generators/dependency_graph.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/loaders/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/loaders/spec_loader.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/mcp/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/mcp/server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/models/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/models/domain.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/operations.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/normalizers/schema_flatten.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/parsers/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/parsers/openapi_parser.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/resolvers/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/resolvers/ref_resolver.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/writers/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/openapi/writers/markdown_writer.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/api/zip_bundle.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/md_emit.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/pdf_extract.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/pdf/utils.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/convert_runner.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/jobs.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/mcp_setup.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/run.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/assets.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/chunker.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/cli.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/extractor.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/html_to_md.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/pipeline.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/playwright/playwright_fetcher.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/convert_runner.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/jobs.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/mcp_setup.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/query_options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/convert_impl.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/embedded_extract.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/ooxml_media.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/post_assets.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/text_formatting.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_pdf_md/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_pdf_md/convert.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_word_md/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/vendor_word_md/convert.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/ppt/zip_deep.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/convert_runner.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/jobs.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/mcp_setup.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/query_options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/convert_impl.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/format_detect.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_json.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_txt.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/md_emit_xml.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/text/options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/convert_runner.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/jobs.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/mcp_setup.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/query_options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/api/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/assets.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/convert_impl.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/crawl.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/extract.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/fetch.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/html_to_md.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/options.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/page_convert.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/post_convert_assets.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/url/robots_util.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/convert_util.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/jobs.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/main.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/api/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/artifact.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/word/settings.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/api/__init__.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/api/app.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/convert_config.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/converter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/converter_core.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/excel_reader.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/markdown_emitter.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/md_generator/xlsx/mcp_server.py +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/dependency_links.txt +0 -0
- {mdengine-0.7.0 → mdengine-0.8.0}/src/mdengine.egg-info/entry_points.txt +0 -0
- {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.
|
|
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),
|
|
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
|
|
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/`**,
|
|
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),
|
|
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,7 +4,7 @@ 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"
|
|
@@ -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",
|
|
@@ -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,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)
|